AliAnalysisTask *task;
// Call CreateOutputObjects for all tasks
Bool_t getsysInfo = ((fNSysInfo>0) && (fMode==kLocalAnalysis))?kTRUE:kFALSE;
+ if (getsysInfo) AliSysInfo::SetVerbose(kTRUE);
Bool_t dirStatus = TH1::AddDirectoryStatus();
Int_t itask = 0;
while ((task=(AliAnalysisTask*)next())) {
TIter next(fTasks);
TStopwatch timer;
Bool_t getsysInfo = ((fNSysInfo>0) && (fMode==kLocalAnalysis))?kTRUE:kFALSE;
+ if (getsysInfo) AliSysInfo::SetVerbose(kTRUE);
// Call Terminate() for tasks
Int_t itask = 0;
while (!IsSkipTerminate() && (task=(AliAnalysisTask*)next())) {
return;
}
Bool_t getsysInfo = ((fNSysInfo>0) && (fMode==kLocalAnalysis))?kTRUE:kFALSE;
- if (getsysInfo)
+ if (getsysInfo) {
+ AliSysInfo::SetVerbose(kTRUE);
Info("PrintStatus", "System information will be collected each %lld events", fNSysInfo);
+ }
AliAnalysisDataContainer *cont = fCommonInput;
if (!cont) cont = (AliAnalysisDataContainer*)fInputs->At(0);
printf("=== TOP CONTAINER:\n");
}
Bool_t getsysInfo = ((fNSysInfo>0) && (fMode==kLocalAnalysis))?kTRUE:kFALSE;
- if (getsysInfo) AliSysInfo::AddStamp("Start", 0);
+ if (getsysInfo) {
+ AliSysInfo::SetVerbose(kTRUE);
+ AliSysInfo::AddStamp("Start", 0);
+ }
// Initialize locally all tasks (happens for all modes)
TIter next(fTasks);
AliAnalysisTask *task;
// Check that the decay chain ends at a primary particle
AliMCParticle* mother = mcpart;
Int_t imo = mcpart->GetMother();
- while((imo >= nprim) && (mother->GetUniqueID() == kPDecay)) {
+ while((imo >= nprim) && (mother->Particle()->GetUniqueID() == kPDecay)) {
mother = (AliMCParticle*) mcE->GetTrack(imo);
imo = mother->GetMother();
}
// Check if the gamma comes from the decay chain of a primary particle
AliMCParticle* mother = (AliMCParticle*) mcE->GetTrack(imo);
imo = mother->GetMother();
- while((imo >= nprim) && (mother->GetUniqueID() == kPDecay)) {
+ while((imo >= nprim) && (mother->Particle()->GetUniqueID() == kPDecay)) {
mother = (AliMCParticle*) mcE->GetTrack(imo);
imo = mother->GetMother();
}
AliAODTracklets &SPDTracklets = *(AODEvent()->GetTracklets());
const AliMultiplicity *mult = esd.GetMultiplicity();
if (mult) {
- if (mult->GetNumberOfTracklets()>0) {
+ if (mult->GetNumberOfTracklets()>0) {
SPDTracklets.CreateContainer(mult->GetNumberOfTracklets());
+ SPDTracklets.SetScaleDThetaBySin2T(mult->GetScaleDThetaBySin2T());
for (Int_t n=0; n<mult->GetNumberOfTracklets(); n++) {
if(fMChandler){
fMChandler->SelectParticle(mult->GetLabel(n, 0));
AliCodeTimerAuto("",0);
- if (fRefitVertexTracks) AliESDUtils::RefitESDVertexTracks(esd,fRefitVertexTracks,
- fRefitVertexTracksNCuts ? fRefitVertexTracksCuts:0);
+ if (fRefitVertexTracks>=0) AliESDUtils::RefitESDVertexTracks(esd,fRefitVertexTracks,
+ fRefitVertexTracksNCuts ? fRefitVertexTracksCuts:0);
fOldESDformat = ( esd->GetAliESDOld() != 0x0 );
AliESDCaloCluster *clu = esd->GetCaloCluster(i);
if ( !clu->IsPHOS()) continue;
+
+ //Apply re-Calibreation
+ AliPHOSEsdCluster cluPHOS(*clu);
+ cluPHOS.Recalibrate(fPHOSCalibData,cells); // modify the cell energies
+ cluPHOS.EvalAll(logWeight,vertex); // recalculate the cluster parameters
+ cluPHOS.SetE(CorrectNonlinearity(cluPHOS.E()));// Users's nonlinearity
+
Float_t position[3];
- clu->GetPosition(position);
+ cluPHOS.GetPosition(position);
+ clu->SetPosition(position); //rec.point position in MARS
+
TVector3 global(position) ;
Int_t relId[4] ;
fPHOSGeo->GlobalPos2RelId(global,relId) ;
clu->SetE(0.) ;
continue ;
}
-
- //Apply re-Calibreation
- AliPHOSEsdCluster cluPHOS(*clu);
- cluPHOS.Recalibrate(fPHOSCalibData,cells); // modify the cell energies
- cluPHOS.EvalAll(logWeight,vertex); // recalculate the cluster parameters
- cluPHOS.SetE(CorrectNonlinearity(cluPHOS.E()));// Users's nonlinearity
-
+
Double_t ecore=CoreEnergy(&cluPHOS) ;
ecore=CorrectNonlinearity(ecore) ;
EvalLambdas(&cluPHOS,m02, m20);
clu->SetDispersion(TestLambda(clu->E(),m20,m02)) ;
- Float_t xyz[3];
- cluPHOS.GetPosition(xyz);
- clu->SetPosition(xyz); //rec.point position in MARS
clu->SetE(cluPHOS.E()); //total particle energy
clu->SetMCEnergyFraction(ecore); //core particle energy
clu->SetEmcCpvDistance(r);
clu->SetChi2(TestLambda(clu->E(),clu->GetM20(),clu->GetM02())); //not yet implemented
Double_t tof=EvalTOF(&cluPHOS,cells);
- if(TMath::Abs(tof-clu->GetTOF())>100.e-9) //something wrong in cell TOF!
- tof=clu->GetTOF() ;
+// if(TMath::Abs(tof-clu->GetTOF())>100.e-9) //something wrong in cell TOF!
+// tof=clu->GetTOF() ;
clu->SetTOF(tof);
Double_t minDist=clu->GetDistanceToBadChannel() ;//Already calculated
DistanceToBadChannel(mod,&locPos,minDist);
AliAODCaloCluster *clu = aod->GetCaloCluster(i);
if ( !clu->IsPHOS()) continue;
+
+ //Apply re-Calibreation
+ AliPHOSAodCluster cluPHOS(*clu);
+ cluPHOS.Recalibrate(fPHOSCalibData,cells); // modify the cell energies
+ cluPHOS.EvalAll(logWeight,vertex); // recalculate the cluster parameters
+ cluPHOS.SetE(CorrectNonlinearity(cluPHOS.E()));// Users's nonlinearity
+
Float_t position[3];
- clu->GetPosition(position);
+ cluPHOS.GetPosition(position);
+ clu->SetPosition(position); //rec.point position in MARS
TVector3 global(position) ;
Int_t relId[4] ;
fPHOSGeo->GlobalPos2RelId(global,relId) ;
}
TVector3 locPosOld; //Use it to re-calculate distance to track
fPHOSGeo->Global2Local(locPosOld,global,mod) ;
-
- //Apply re-Calibreation
- AliPHOSAodCluster cluPHOS(*clu);
- cluPHOS.Recalibrate(fPHOSCalibData,cells); // modify the cell energies
- cluPHOS.EvalAll(logWeight,vertex); // recalculate the cluster parameters
- cluPHOS.SetE(CorrectNonlinearity(cluPHOS.E()));// Users's nonlinearity
-
+
Double_t ecore=CoreEnergy(&cluPHOS) ;
ecore=CorrectNonlinearity(ecore) ;
// position[1]=global.Y() ;
// position[2]=global.Z() ;
- clu->SetPosition(position); //rec.point position in MARS
clu->SetE(cluPHOS.E()); //total particle energy
clu->SetCoreEnergy(ecore); //core particle energy
clu->SetDispersion(cluPHOS.GetDispersion()); //cluster dispersion
clu->SetChi2(TestLambda(clu->E(),clu->GetM20(),clu->GetM02())); //not yet implemented
Double_t tof=EvalTOF(&cluPHOS,cells);
- if(TMath::Abs(tof-clu->GetTOF())>100.e-9) //something wrong in cell TOF!
- tof=clu->GetTOF() ;
+// if(TMath::Abs(tof-clu->GetTOF())>100.e-9) //something wrong in cell TOF!
+// tof=clu->GetTOF() ;
clu->SetTOF(tof);
Double_t minDist=clu->GetDistanceToBadChannel() ;//Already calculated
DistanceToBadChannel(mod,&locPos,minDist);
if(magF<0)magSign = -1.0;
if (!TGeoGlobalMagField::Instance()->GetField()) {
+ AliError("Margnetic filed was not initialized, use default") ;
AliMagF* field = new AliMagF("Maps","Maps", magSign, magSign, AliMagF::k5kG);
TGeoGlobalMagField::Instance()->SetField(field);
}
//TOF here is weighted average of digits
// -within 50ns from the most energetic cell
// -not too soft.
-
-
+
Double32_t * elist = clu->GetCellsAmplitudeFraction() ;
Int_t mulDigit=clu->GetNCells() ;
for(Int_t iDigit=0; iDigit<mulDigit; iDigit++) {
Int_t absId=clu->GetCellAbsId(iDigit) ;
Bool_t isHG=kTRUE ;
- if(cells->GetCellMCLabel(absId)==-2) //This is LG digit. No statistics to calibrate LG timing, remove them from TOF calculation
- isHG=kFALSE ;
+ if(cells->GetCellMCLabel(absId)==-2){ //This is LG digit.
+ isHG=kFALSE ;
+ }
if( elist[iDigit]>eMax){
tMax=CalibrateTOF(cells->GetCellTime(absId),absId,isHG) ;
eMax=elist[iDigit] ;
for(Int_t iDigit=0; iDigit<mulDigit; iDigit++) {
Int_t absId=clu->GetCellAbsId(iDigit) ;
Bool_t isHG=kTRUE ;
- if(cells->GetCellMCLabel(absId)==-2) //This is LG digit. No statistics to calibrate LG timing, remove them from TOF calculation
+ if(cells->GetCellMCLabel(absId)==-2){ //This is LG digit.
isHG=kFALSE ;
-
+ }
+
Double_t ti=CalibrateTOF(cells->GetCellTime(absId),absId,isHG) ;
if(TMath::Abs(ti-tMax)>50.e-9) //remove soft cells with wrong time
continue ;
//Sigma is parameterization of TOF resolution 16.05.2013
Double_t wi2=0.;
if(isHG)
- wi2=1./(2.4e-9 + 3.9e-9/elist[iDigit]) ;
+ wi2=1./(2.4 + 3.9/elist[iDigit]) ;
else
- wi2=1./(2.4e-9 + 3.9e-9/(0.1*elist[iDigit])) ; //E of LG digit is 1/16 of correcponding HG
+ wi2=1./(2.4 + 3.9/(0.1*elist[iDigit])) ; //E of LG digit is 1/16 of correcponding HG
t+=ti*wi2 ;
wtot+=wi2 ;
}
}
if(wtot>0){
t=t/wtot ;
+ }
+ else{
+ t=tMax ;
}
return t ;
Int_t row = relId[2];
if(isHG)
tof-=fPHOSCalibData->GetTimeShiftEmc(module, column, row);
- else
+ else{
tof-=fPHOSCalibData->GetLGTimeShiftEmc(module, column, row);
-
+ }
return tof ;
}
Bool_t doCDBconnect =1;
Bool_t usePhysicsSelection = kTRUE; // use physics selection
Bool_t useTender = kFALSE; // use tender wagon
-Bool_t useCentrality = kTRUE; // centrality
+Bool_t useCentrality = kFALSE; // centrality
Bool_t useV0tender = kFALSE; // use V0 correction in tender
Bool_t useDBG = kTRUE; // activate debugging
Bool_t useMC = kFALSE; // use MC info
//==============================================================================
Int_t iAODhandler = 1; // Analysis produces an AOD or dAOD's
Int_t iESDfilter = 1; // ESD to AOD filter (barrel + muon tracks)
+Int_t iESDfilterReVtx = -1; // Request revertexing in ESD filtering
Int_t iMUONcopyAOD = 1; // Task that copies only muon events in a separate AOD (PWG3)
Int_t iJETAN = 0; // Jet analysis (PWG4)
Int_t iJETANdelta = 0; // Jet delta AODs
//==============================================================================
TString configPWGHFd2h = (iCollision==0)?"$ALICE_ROOT/PWGHF/vertexingHF/ConfigVertexingHF.C"
:"$ALICE_ROOT/PWGHF/vertexingHF/ConfigVertexingHF_highmult.C";
-
+
+Double_t cutsESDfilterReVtx[21] =
+{1.00e-01,1.00e-01,5.00e-01,3.00e+00,1.00e+00,
+3.00e+00,1.00e+02,1.00e+03,3.00e+00,3.00e+01,
+6.00e+00,4.00e+00,7.00e+00,1.00e+03,5.00e+00,
+5.00e-02,1.00e-03,2.00e+00,1.00e+01,1.00e+00,
+-5.00e+01};
+
+
+
// Temporaries.
void AODmerge();
void AddAnalysisTasks();
if (iESDfilter) {
// ESD filter task configuration.
gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/ESDfilter/macros/AddTaskESDFilter.C");
- if (iMUONcopyAOD) {
- printf("Registering delta AOD file\n");
- mgr->RegisterExtraFile("AliAOD.Muons.root");
- mgr->RegisterExtraFile("AliAOD.Dimuons.root");
- }
- AliAnalysisTaskESDfilter *taskesdfilter =
- AddTaskESDFilter(useKFILTER,
- iMUONcopyAOD, // write Muon AOD
- kFALSE, // write dimuon AOD
- kFALSE, // usePhysicsSelection
- kFALSE, // centrality OBSOLETE
- kTRUE, // enable TPS only tracks
- kFALSE, // disable cascades
- kFALSE, // disable kinks
- run_flag); // run flag (YY00)
- mgr->RegisterExtraFile("AliAOD.Dimuons.root");
- }
+ AliAnalysisTaskESDfilter *taskesdfilter = 0;
+ if (iMUONcopyAOD) {
+ printf("Registering delta AOD file\n");
+ mgr->RegisterExtraFile("AliAOD.Muons.root");
+ mgr->RegisterExtraFile("AliAOD.Dimuons.root");
+ taskesdfilter = AddTaskESDFilter(useKFILTER, kTRUE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,kTRUE,kFALSE,kFALSE,run_flag);
+ } else {
+ taskesdfilter = AddTaskESDFilter(useKFILTER, kFALSE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,kTRUE,kFALSE,kFALSE,run_flag); // others
+ }
+ if (iESDfilterReVtx>=0 && taskesdfilter) taskesdfilter->SetRefitVertexTracks(iESDfilterReVtx, cutsESDfilterReVtx);
+ taskesdfilter->Dump();
+ return;
+ }
+
+// if (iMUONcopyAOD) {
+// printf("Registering delta AOD file\n");
+// mgr->RegisterExtraFile("AliAOD.Muons.root");
+// mgr->RegisterExtraFile("AliAOD.Dimuons.root");
+// }
+// AliAnalysisTaskESDfilter *taskesdfilter =
+// AddTaskESDFilter(useKFILTER,
+// iMUONcopyAOD, // write Muon AOD
+// kFALSE, // write dimuon AOD
+// kFALSE, // usePhysicsSelection
+// kFALSE, // centrality OBSOLETE
+// kTRUE, // enable TPS only tracks
+// kFALSE, // disable cascades
+// kFALSE, // disable kinks
+// run_flag); // run flag (YY00)
+// mgr->RegisterExtraFile("AliAOD.Dimuons.root");
+// }
// ********** PWG3 wagons ******************************************************
// PWGHF vertexing
AliEMCALGeometry::~AliEMCALGeometry(void)
{
// dtor
- if (this==fgGeom) {
+ if (this==fgGeom)
+ {
AliError("Do not call delete on me");
return;
}
- if (fEMCGeometry){
- for(Int_t smod = 0 ; smod < fEMCGeometry->GetNumberOfSuperModules(); smod++){
+
+ if (fEMCGeometry)
+ {
+ for(Int_t smod = 0 ; smod < fEMCGeometry->GetNumberOfSuperModules(); smod++)
+ {
if(fkSModuleMatrix[smod])
delete fkSModuleMatrix[smod] ;
- fkSModuleMatrix[smod]=0 ;
+
+ fkSModuleMatrix[smod]=0 ;
}
+
delete fEMCGeometry; // fEMCGeometry = 0 ;
}
}
if (iSM < 0 || iphi < 0 || ieta < 0 ) {
AliFatal(Form("Negative value for super module: %d, or cell ieta: %d, or cell iphi: %d, check EMCAL geometry name\n",
iSM,ieta,iphi));
+ return kFALSE; // trick coverity
}
//Check rows/phi
if (fAODTPCOnlyTracks) { // Match with TPC only tracks, default from May 2013, before filter bit 32
//printf("Match with TPC only tracks, accept? %d, test bit 128 <%d> \n", aodTrack->IsTPCOnly(), aodTrack->TestFilterMask(128));
- if (!aodTrack->IsTPCOnly()) continue ;
+ if (!aodTrack->IsTPCConstrained()) continue ;
} else if (fAODHybridTracks) { // Match with hybrid tracks
//printf("Match with Hybrid tracks, accept? %d \n", aodTrack->IsHybridGlobalConstrainedGlobal());
if (!aodTrack->IsHybridGlobalConstrainedGlobal()) continue ;
clusters->Delete();
delete clusters;
- AliInfo(Form("Collected %d RecPoints from Tree", fClusters->GetEntries()));
+ AliDebug(1,Form("Collected %d RecPoints from Tree", fClusters->GetEntries()));
return 0;
}
fClusters->AddLast(matchCluster);
}
- AliInfo(Form("Collected %d clusters from ESD", fClusters->GetEntries()));
+ AliDebug(1,Form("Collected %d clusters from ESD", fClusters->GetEntries()));
return 0;
}
//
Int_t iphi = 0 ;//x direction
Int_t ieta = 0 ;//z direstion
- for(iDigit = 0; iDigit < nDigits; iDigit++){
+ for(iDigit = 0; iDigit < nDigits; iDigit++)
+ {
digit = maxAt[iDigit];
- if(digit==0) AliError("energy of digit = 0!");
- fGeom->GetCellIndex(digit->GetId(),iSupMod,iTower,iIphi,iIeta);
+ if(!digit)
+ {
+ AliError("Null digit pointer");
+ continue;
+ }
+
+ fGeom->GetCellIndex(digit->GetId(),iSupMod,iTower,iIphi,iIeta);
fGeom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,
iIphi, iIeta,iphi,ieta);
set ( EINCLUDE RAW ITS TPC TPC/Base TPC/Sim EVE/EveBase STEER/STEER STEER/AOD STEER/CDB STEER/ESD STEER/STEERBase)
+if(ZEROMQ_FOUND)
+ set ( ELIBS ${ELIBS} MONITOR MONITORzmq ${ZEROMQ_LIBRARY} )
+ set ( CXXFLAGS "-DZMQ ${CXXFLAGS}")
+endif(ZEROMQ_FOUND)
+
set ( EXPORT
EveBase/AliEveUtil.h
EveBase/AliEveFileDialog.h
-// $Id: AliEveEventManager.cxx 59994 2012-12-14 10:03:06Z quark $
+// $Id: AliEveEventManager.cxx 64557 2013-10-16 20:03:08Z hristov $
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
/**************************************************************************
#include <TString.h>
#include <TMap.h>
+#ifdef ZMQ
+#include <AliNetMessage.h>
+#include <AliSocket.h>
+#endif
+
//==============================================================================
//==============================================================================
// AliEveEventManager
AliEveEventManager* AliEveEventManager::fgMaster = 0;
AliEveEventManager* AliEveEventManager::fgCurrent = 0;
-//zmq::context_t* AliEveEventManager::fgSubContext=0;
-//zmq::socket_t* AliEveEventManager::fgSubSock=0;
+zmq::context_t* AliEveEventManager::fgSubContext=0;
+AliSocket* AliEveEventManager::fgSubSock=0;
-bool AliEveEventManager::ConnectToServer()
+bool AliEveEventManager::ConnectToServer(const char* host, int port)
{
-/*
- // make a zeromq socket
- fgSubContext = new zmq::context_t(1);
- fgSubSock = new zmq::socket_t(*fgSubContext, ZMQ_SUB);
- fgSubSock->setsockopt(ZMQ_SUBSCRIBE, "", 0); //filter, strlen (filter));
- fgSubSock->connect("tcp://*:5024");
- return true;
- */
-}
-/*
-zmq::socket_t* AliEveEventManager::AssertSubscriber()
-{
- return fgCurrent->fgSubSock;
+#ifdef ZMQ
+ // make a zeromq socket
+ fgSubContext = new zmq::context_t;
+ fgSubSock = new AliSocket(&*fgSubContext, ZMQ_SUB);
+ fgSubSock->Subscribe("");
+ fgSubSock->Connect(Form("%s:%d", host, port) );
+#else
+ fgSubContext=0;
+ fgSubSock =0;
+#endif
+
+ return true;
}
-*/
void AliEveEventManager::InitInternals()
{
if (aod.EndsWith(".zip")) fgAODFileName.Form("%s#AliAOD.root",aod.Data());
-
}
void AliEveEventManager::AddAODfriend(const TString& friendFileName)
}
else
{
- throw (kEH + "unknown run number.");
+ fExternalCtrl = kTRUE;
+ fEventId = 0;
+ return;
}
}
// Initialize OCDB ... only in master event-manager
+ InitOCDB(runNo);
- if (this == fgMaster)
+ fIsOpen = kTRUE;
+}
+
+void AliEveEventManager::InitOCDB(int runNo)
+{
+ static const TEveException kEH("AliEveEventManager::InitOCDB ");
+ //if (this == fgMaster)
{
AliCDBManager* cdb = AliCDBManager::Instance();
if (cdb->IsDefaultStorageSet() == kTRUE)
}
}
}
-
- fIsOpen = kTRUE;
}
void AliEveEventManager::SetEvent(AliRunLoader *runLoader, AliRawReader *rawReader, AliESDEvent *esd, AliESDfriend *esdf)
Close();
}
+ Info(kEH,"setting it!!! ============================");
+
fRunLoader = runLoader;
fRawReader = rawReader;
fESD = esd;
AfterNewEventLoaded();
if (fAutoLoad) StartAutoLoadTimer();
+
}
Int_t AliEveEventManager::GetMaxEventId(Bool_t refreshESD) const
{
// !!! This should really go somewhere else. It is done in GotoEvent(),
// so here we should do it in SetEvent().
- DestroyElements();
- gSystem->ExitLoop();
-
+ DestroyElements();
+
+ #ifdef ZMQ
+ AliNetMessage *mess;
+ fgSubSock->Recv(mess);
+
+
+ AliESDEvent* data = (AliESDEvent*)(mess->ReadObjectAny(AliESDEvent::Class()));
+
+ if (data){
+ printf("Got DATA:\n");
+
+ printf("Event Number in File:%d Run:%d ObjectsInList:%d\n", data->GetEventNumberInFile(), data->GetRunNumber(), data->GetList()->GetEntries());
+
+ TTree* tree= new TTree("esdTree", "esdTree");
+ data->WriteToTree(tree);
+ tree-> Fill();
+ //tree->Write();
+
+ printf("======================= Tree has %d entries\n", tree->GetEntries());
+
+ AliESDEvent* event= new AliESDEvent();
+ event->ReadFromTree(tree);
+
+ tree->GetEntry(0);
+
+ InitOCDB(event->GetRunNumber());
+
+ printf("======================= setting event to %d\n", fEventId);
+ SetEvent(0,0,event,0);
+
+ delete event;
+ delete tree;
+
+ }
+ else
+ printf("NO DATA!!!\n");
+
+ delete data; data=0;
+ delete mess; mess=0;
+ #endif
+
}
else if ((fESDTree!=0) || (fHLTESDTree!=0))
{
{
GotoEvent(fEventId + 1);
}
+
+ gSystem->ProcessEvents();
}
void AliEveEventManager::PrevEvent()
return fgRecoParam;
}
+AliSocket* AliEveEventManager::AssertSubscriber()
+{
+ return fgSubSock;
+}
+
Bool_t AliEveEventManager::InitRecoParam()
{
// This is mostly a reap-off from reconstruction
// the available reco-param objects from there.
fgRecoParam = new AliRecoParam;
- const Int_t kNDetectors = 15;
+ const Int_t kNDetectors = 14;
static const TEveException kEH("AliEveEventManager::InitRecoParam");
}
}
- const char* fgkDetectorName[kNDetectors] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE", "AD" };
+ const char* fgkDetectorName[kNDetectors] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE" };
for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
// Called from auto-load timer, so it has to be public.
// Do NOT call it directly.
- static const TEveException kEH("AliEveEventManager::AutoLoadNextEvent ");
+ static const TEveException kEH("AliEveEventManager::AutoLoadNextEvent ");
+
+ Info(kEH, "called!");
if ( ! fAutoLoadTimerRunning || ! fAutoLoadTimer->HasTimedOut())
{
StopAutoLoadTimer();
NextEvent();
- if (fAutoLoad && !fExternalCtrl)
+ if (fAutoLoad)
StartAutoLoadTimer();
}
static const TEveException kEH("AliEveEventManager::AfterNewEventLoaded ");
+ Info(kEH, "------------------!!!------------");
+
NewEventDataLoaded();
if (fExecutor)
Error(kEH, "Getting event %d for sub-event-manager '%s' failed: '%s'.",
fEventId, fgCurrent->GetName(), exc.Data());
}
+ Info(kEH, "------------------!!! while() gEve->SetCurrentEvent() ------------");
}
fgCurrent = fgMaster;
+ Info(kEH, "------------------!!! while() gEve->SetCurrentEvent(MASTER) ------------");
gEve->SetCurrentEvent(fgMaster);
}
+
}
void AliEveEventManager::NewEventDataLoaded()
-// $Id: AliEveEventManager.h 59763 2012-11-27 12:42:41Z hristov $
+// $Id: AliEveEventManager.h 64557 2013-10-16 20:03:08Z hristov $
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
/**************************************************************************
#include <AliESDEvent.h>
-//#include <zmq.hpp>
+#ifdef ZMQ
+#include <zmq.hpp>
+#else
+namespace zmq{
+ class context_t;
+}
+#endif
class AliEveMacroExecutor;
class AliEveEventSelector;
+class AliSocket;
class AliRunLoader;
class AliESDEvent;
TString GetEventInfoVertical() const;
const AliEventInfo* GetEventInfo();
- static bool ConnectToServer(); // connect to the events server
- //static zmq::socket_t* AssertSubscriber();
+ static bool ConnectToServer(const char* host, int port); // connect to the events server
static Int_t CurrentEventId();
static AliMagF* AssertMagField();
static TGeoManager* AssertGeometry();
static AliRecoParam* AssertRecoParams();
+
+ static AliSocket* AssertSubscriber();
static AliEveEventManager* AddDependentManager(const TString& name, const TString& path);
static AliEveEventManager* GetDependentManager(const TString& name);
void NewEventLoaded(); // *SIGNAL*
AliEveMacroExecutor* GetExecutor() const { return fExecutor; }
-
+ void InitOCDB(int runNo=-1);
protected:
Int_t fEventId; // Id of current event.
static AliRecoParam* fgRecoParam;
static Bool_t fgUniformField; // Track with uniform field.
- //static zmq::context_t* fgSubContext;
- //static zmq::socket_t* fgSubSock;
+ static zmq::context_t* fgSubContext;
+ static AliSocket* fgSubSock;
private:
AliEveEventManager(const AliEveEventManager&); // Not implemented
AliEveEventManager& operator=(const AliEveEventManager&); // Not implemented
void InitInternals();
+
void StartAutoLoadTimer();
void StopAutoLoadTimer();
ClassImp(AliDecayerExodus)
+//---------------------------------------------------------------------------------------------------
+//
+// Generate electron-pair mass distributions for Dalitz decays according
+// to the Kroll-Wada parametrization: N. Kroll, W. Wada: Phys. Rev 98(1955)1355
+// and generate electron-pair mass distributions for resonances according
+// to the Gounaris-Sakurai parametrization: G.J. Gounaris, J.J. Sakurai: Phys.Rev.Lett. 21(1968)244
+//
+// For the electromagnetic form factor the parameterization from
+// Lepton-G is used: L.G. Landsberg et al.: Phys. Rep. 128(1985)301
+//
+// Ralf Averbeck (R.Averbeck@gsi.de)
+// Irem Erdemir (irem.erdemir@cern.ch)
+//
+//---------------------------------------------------------------------------------------------------
+
+
AliDecayerExodus::AliDecayerExodus():
AliDecayer(),
fEPMassPion(0),
weight_rho = (Float_t)GounarisSakurai(mass_bin,vmass_rho,vwidth_rho,emass);
weight_omega = (Float_t)GounarisSakurai(mass_bin,vmass_omega,vwidth_omega,emass);
weight_phi = (Float_t)GounarisSakurai(mass_bin,vmass_phi,vwidth_phi,emass);
- weight_jpsi = (Float_t)GounarisSakurai(mass_bin,vmass_jpsi,vwidth_jpsi,emass);
+ weight_jpsi = (Float_t)Lorentz(mass_bin,vmass_jpsi,vwidth_jpsi);
// Fill histograms of electron pair masses from resonance decays
fEPMassRho ->AddBinContent(ibin,weight_rho);
Double_t AliDecayerExodus::GounarisSakurai(Float_t mass, Double_t vmass, Double_t vwidth, Double_t emass)
{
// Invariant mass distributions of electron pairs from resonance decays
+// of rho, omega and phi
// using Gounaris-Sakurai function
Double_t corr = 0.;
Double_t weight = 0.;
Double_t pimass = 0.13956995;
+
+ if(mass>pimass){
+ corr = vwidth*(vmass/mass)*exp(1.5*log((mass*mass/4.0-pimass*pimass)
+ /(vmass*vmass/4.0-pimass*pimass)));
+ }
- corr = vwidth*(vmass/mass)
- * exp(1.5*log((mass*mass/4.0-pimass*pimass)
- /(vmass*vmass/4.0-pimass*pimass)));
epsilon = (emass/mass)*(emass/mass);
if ( 1.0-4.0*epsilon>=0.0 )
}
+Double_t AliDecayerExodus::Lorentz(Float_t mass, Double_t vmass, Double_t vwidth)
+{
+// Invariant mass distributions of electron pairs from resonance decay
+// of jpsi (and it can also be used for other particles except rho, omega and phi)
+// using Lorentz function
+
+ Double_t weight;
+
+ weight = (vwidth*vwidth/4.0)/(vwidth*vwidth/4.0+(vmass-mass)*(vmass-mass));
+
+ return weight;
+
+}
+
void AliDecayerExodus::Decay(Int_t idpart, TLorentzVector* pparent)
{
mp_jpsi = pparent->M();
}
else{
- mp_jpsi = 3.096;
+ /*Double_t x_jpsi=pparent->Px();
+ Double_t y_jpsi=pparent->Py();
+ Double_t z_jpsi=pparent->Pz();
+ Double_t t_jpsi=pparent->E();
+ Double_t p_jpsi=x_jpsi*x_jpsi+y_jpsi*y_jpsi+z_jpsi*z_jpsi;
+ Double_t Q2_jpsi= abs((t_jpsi*t_jpsi)-(p_jpsi*p_jpsi));
+ mp_jpsi = sqrt(Q2_jpsi);*/
+
+ mp_jpsi = 3.096;
}
/* $Id$ */
//---------------------------------------------------------------------------------------------------
-////
-//// Generate electron-pair mass distributions for Dalitz decays according
-//// to the Kroll-Wada parametrization: N. Kroll, W. Wada: Phys. Rev 98(1955)1355
-//// and
-//// Generate electron-pair mass distributions for resonances according
-//// to the Gounaris-Sakurai parametrization: G.J. Gounaris, J.J. Sakurai: Phys.Rev.Lett. 21(1968)244
-////
-//// For the electromagnetic form factor the parameterization from
-//// Lepton-G is used: L.G. Landsberg et al.: Phys. Rep. 128(1985)301
-////
-////-------------------------------------------------------------------------------------------------
+//
+// Generate electron-pair mass distributions for Dalitz decays according
+// to the Kroll-Wada parametrization: N. Kroll, W. Wada: Phys. Rev 98(1955)1355
+// and generate electron-pair mass distributions for resonances according
+// to the Gounaris-Sakurai parametrization: G.J. Gounaris, J.J. Sakurai: Phys.Rev.Lett. 21(1968)244
+//
+// For the electromagnetic form factor the parameterization from
+// Lepton-G is used: L.G. Landsberg et al.: Phys. Rep. 128(1985)301
+//
+// Ralf Averbeck (R.Averbeck@gsi.de)
+// Irem Erdemir (irem.erdemir@cern.ch)
+//
+//---------------------------------------------------------------------------------------------------
private:
Double_t GounarisSakurai(Float_t mass, Double_t vmass, Double_t vwidth, Double_t emass);
+ Double_t Lorentz(Float_t mass, Double_t vmass, Double_t vwidth);
virtual void Rot(Double_t pin[3], Double_t pout[3],
Double_t costheta, Double_t sintheta,
Double_t cosphi, Double_t sinphi) const;
fWeightingMode(kNonAnalog),
fNPart(1000),
fYieldArray(),
- fPtSelect(0),
- fCentrality(0),
- fV2Systematic(0),
+ fPtSelect(AliGenEMlib::kPizero7TeVpp),
+ fCentrality(AliGenEMlib::kpp),
+ fV2Systematic(AliGenEMlib::kNoV2Sys),
fForceConv(kFALSE),
- fSelectedParticles(kGenHadrons)
+ fSelectedParticles(kGenPizero)
{
// Constructor
-
+ SetHeaviestHadron(kGenPhi);
}
//_________________________________________________________________________
}
+//_________________________________________________________________________
+void AliGenEMCocktail::SetHeaviestHadron(ParticeGenerator_t part)
+{
+ Int_t val=kGenPizero;
+ while(val<part) val|=val<<1;
+
+ fSelectedParticles=val;
+}
+
//_________________________________________________________________________
void AliGenEMCocktail::CreateCocktail()
{
AliGenParam *genpizero=0;
Char_t namePizero[10];
snprintf(namePizero,10,"Pizero");
+ //fNPart/0.925: increase number of particles so that we have the chosen number of particles in the chosen eta range
genpizero = new AliGenParam(fNPart/0.925, new AliGenEMlib(), AliGenEMlib::kPizero, "DUMMY");
+ //fYMin/0.925: increase eta range, so that the electron yield is constant (<5% change) over the chosen eta range
genpizero->SetYRange(fYMin/0.925, fYMax/0.925);
AddSource2Generator(namePizero,genpizero);
TF1 *fPtPizero = genpizero->GetPt();
public:
AliGenEMCocktail();
- enum GeneratorCode { kPizero=0, kEta, kRho, kOmega, kEtaprime, kPhi, kJpsi, kDirectRealGamma, kDirectVirtGamma, kGENs };
- enum SelectPartice { kGenPizero=0x001, kGenEta=0x002, kGenRho=0x004, kGenOmega=0x008, kGenEtaprime=0x010, kGenPhi=0x020, kGenJpsi=0x040, kGenDirectRealGamma=0x100, kGenDirectVirtGamma=0x200, kGenHadrons=0x7f, kGenGammas=0x300 };
+ enum GeneratorIndex_t { kPizero=0, kEta, kRho, kOmega, kEtaprime, kPhi, kJpsi, kDirectRealGamma, kDirectVirtGamma, kGENs };
+ enum ParticeGenerator_t { kGenPizero=0x001, kGenEta=0x002, kGenRho=0x004, kGenOmega=0x008, kGenEtaprime=0x010, kGenPhi=0x020, kGenJpsi=0x040, kGenDirectRealGamma=0x100, kGenDirectVirtGamma=0x200, kGenHadrons=0x7f, kGenGammas=0x300 };
virtual ~AliGenEMCocktail();
virtual void Init();
void SetDecayMode(Decay_t decay){ fDecayMode = decay;}
void SetWeightingMode(Weighting_t weight){ fWeightingMode = weight;}
void SetNPart(Int_t npart){ fNPart = npart; }
- void SetPtParam(Int_t PtSelect){ fPtSelect = PtSelect; }
- void SetCentrality(Int_t cent){ fCentrality = cent; }
+ void SetPtParam(AliGenEMlib::PtParamSet_t PtSelect){ fPtSelect = PtSelect; }
+ void SetCentrality(AliGenEMlib::Centrality_t cent){ fCentrality = cent; }
void SetV2Systematic(Int_t v2sys){ fV2Systematic = v2sys; }
void SetForceGammaConversion(Bool_t force=kTRUE){ fForceConv=force; }
- void SelectMotherParticles(Int_t part){ fSelectedParticles=part; }
+ void SetHeaviestHadron(ParticeGenerator_t part);
+ void SelectMotherParticles(ParticeGenerator_t part){ fSelectedParticles=part; }
private:
AliGenEMCocktail(const AliGenEMCocktail &cocktail);
Int_t fNPart; // multiplicity of each source per event
Double_t fYieldArray[kGENs]; // array of dN/dy for each source
- Int_t fPtSelect; // selected pT parameterization
- Int_t fCentrality; // selected centrality
+ AliGenEMlib::PtParamSet_t fPtSelect; // selected pT parameterization
+ AliGenEMlib::Centrality_t fCentrality; // selected centrality
Int_t fV2Systematic; //selected systematic error for v2 parameters
Bool_t fForceConv; //select whether you want to force all gammas to convert imidediately
return 1-CrossOverLc(a,b,x);
}
-const Double_t AliGenEMlib::fgkV2param[16][15] = {
+const Double_t AliGenEMlib::fgkV2param[kCentralities][16] = {
// charged pion cent, based on: https://twiki.cern.ch/twiki/bin/viewauth/ALICE/FlowPAGQM2012talkIdentified
- { 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 } // pp no V2
- ,{ 6.551541e-02, 1.438274e+00, 4.626379e-02, 2.512477e+00, 1.371824e+00, 2.964543e-02, 4.630670e+00, 4.228889e+00, 6.037970e-02, 1.425269e-03, 1.144124e+00, 0, 1, 9.154016e-04, 1.288285e+00 } // 0-5
- ,{ 1.171360e-01, 1.333046e+00, 4.536752e-02, 3.046448e+00, 3.903714e+00, 4.407124e-02, 9.122534e-01, 4.834519e+00, 1.186237e-01, 2.179274e-03, 8.968478e-01, 0, 1, 1.501201e-03, 9.902785e-01 } // 5-10
- ,{ 1.748423e-01, 1.285211e+00, 4.219624e-02, 4.019148e+00, 4.255047e+00, 7.956751e-03, 1.184731e-01,-9.211391e+00, 5.768716e-01, 3.127110e-03, 6.808650e-01, 0, 1, 2.786807e-03, 6.159338e-01 } // 10-20
- ,{ 2.152937e-01, 1.405391e+00, 5.037925e-02, 3.214458e+00, 3.991894e+00, 3.655882e-02, 1.968766e-01,-1.637650e+01, 7.023397e+00, 4.573453e-03, 6.031381e-01, 0, 1, 3.564348e-03, 5.748053e-01 } // 20-30
- ,{ 2.409800e-01, 1.476557e+00, 5.759362e-02, 3.339713e+00, 3.642386e+00,-1.544366e-02, 1.098611e-01,-1.373154e+01, 1.471955e+00, 5.200180e-03, 6.315474e-01, 0, 1, 3.776112e-03, 6.298605e-01 } // 30-40
- ,{ 2.495087e-01, 1.543711e+00, 6.217817e-02, 3.517101e+00, 4.558221e+00, 6.021316e-02, 1.486822e-01,-5.769155e+00, 5.576843e-01, 5.348029e-03, 7.255976e-01, 0, 1, 3.531350e-03, 7.661694e-01 } // 40-50
- ,{ 2.166449e-01, 1.931014e+00, 8.195656e-02, 2.226742e+00, 3.106472e+00, 1.058786e-01, 8.558786e-01, 4.006680e+00, 2.476313e-01, 5.137623e-03, 9.104401e-01, 0, 1, 2.477450e-03, 1.109649e+00 } // 50-60
- ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 } // 0-10
- ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 } // 20-40
- ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 } // 40-60
- ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 } // 60-80
- ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 } // 0-20
- ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 } // 0-40
- ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 } // 20-80
- ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 } // 40-80
+ { 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // pp no V2
+ ,{ 6.554571e-02, 1.436915e+00, 4.610598e-02, 2.554090e+00, 1.300948e+00, 2.970850e-02, 4.767877e+00, 4.228885e+00, 6.025959e-02, 1.570851e-03, 1.108941e+00, 0, 1, 1.715434e-03, 4.088070e-01, 25 } // 0-5
+ ,{ 1.171348e-01, 1.333067e+00, 4.537086e-02, 3.046348e+00, 3.903416e+00, 4.407152e-02, 9.123846e-01, 4.834531e+00, 1.186227e-01, 2.259463e-03, 8.916458e-01, 0, 1, 2.300647e-03, 4.531172e-01, 25 } // 5-10
+ ,{ 1.748434e-01, 1.285199e+00, 4.219881e-02, 4.018858e+00, 4.255082e+00, 7.955896e-03, 1.183264e-01,-9.329627e+00, 5.826570e-01, 3.368057e-03, 5.437668e-01, 0, 1, 3.178663e-03, 3.617552e-01, 25 } // 10-20
+ ,{ 2.149526e-01, 1.408792e+00, 5.062101e-02, 3.206279e+00, 3.988517e+00, 3.724655e-02, 1.995791e-01,-1.571536e+01, 6.494227e+00, 4.957874e-03, 4.903140e-01, 0, 1, 4.214626e-03, 3.457922e-01, 25 } // 20-30
+ ,{ 2.408942e-01, 1.477541e+00, 5.768983e-02, 3.333347e+00, 3.648508e+00,-2.044309e-02, 1.004145e-01,-2.386625e+01, 3.301913e+00, 5.666750e-03, 5.118686e-01, 0, 1, 4.626802e-03, 3.188974e-01, 25 } // 30-40
+ ,{ 2.495109e-01, 1.543680e+00, 6.217835e-02, 3.518863e+00, 4.557145e+00, 6.014553e-02, 1.491814e-01,-5.443647e+00, 5.403300e-01, 6.217285e-03, 5.580218e-01, 0, 1, 4.620486e-03, 3.792879e-01, 25 } // 40-50
+ ,{ 2.166399e-01, 1.931033e+00, 8.195390e-02, 2.226640e+00, 3.106649e+00, 1.058755e-01, 8.557791e-01, 4.006501e+00, 2.476449e-01, 6.720714e-03, 6.342966e-01, 0, 1, 4.449839e-03, 4.968750e-01, 25 } // 50-60
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 0-10
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 20-40
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 40-60
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 60-80
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 0-20
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 0-40
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 20-80
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 40-80
};
-const Double_t AliGenEMlib::fgkRawPtOfV2Param[16][10] = {
+const Double_t AliGenEMlib::fgkRawPtOfV2Param[kCentralities][10] = {
{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // pp no V2
,{ 2.181446e+08, 9.412925e-01, 1.158774e-01, 3.020303e+01, 6.790828e+00, 9.999996e+01, 2.616827e+00, 3.980492e+00, 1.225169e+07, 5.575243e+00 } // 0-5
,{ 3.006215e+08, 9.511881e-01, 1.192788e-01, 2.981931e+01, 5.068175e+01, 9.999993e+01, 2.650635e+00, 4.073982e+00, 2.508045e+07, 5.621039e+00 } // 5-10
,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 40-80
};
-const Double_t AliGenEMlib::fgkThermPtParam[16][2] = {
+const Double_t AliGenEMlib::fgkPtParam[kCentralities][10] = {
+ { 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // pp no V2
+ ,{ 7.641493e+01, 7.203468e-01, 3.651383e-01, 1.047542e+01, 3.494331e+00, 5.129019e+00, 3.081716e+00, 5.154525e+00, 3.065719e+01, 5.823718e+00 } // 0-5
+ ,{ 1.704676e+02, 7.852682e-01, 4.177172e-01, 1.014652e+01, 3.324409e+00, 4.825894e+00, 2.889738e+00, 4.772249e+00, 3.502627e+01, 5.938773e+00 } // 5-10
+ ,{ 1.823377e+02, 8.144309e-01, 4.291562e-01, 1.022767e+01, 3.585469e+00, 5.275078e+00, 3.144351e+00, 5.259097e+00, 2.675708e+01, 5.892506e+00 } // 10-20
+ ,{ 4.851407e+02, 9.341151e-01, 4.716673e-01, 1.058090e+01, 4.681218e+00, 7.261284e+00, 3.883227e+00, 6.638627e+00, 1.562806e+01, 5.772127e+00 } // 20-30
+ ,{ 3.157060e+01, 6.849451e-01, 4.868669e-01, 8.394558e+00, 3.539142e+00, 5.495280e+00, 4.102638e+00, 3.722991e+00, 1.638622e+01, 5.935963e+00 } // 30-40
+ ,{ 1.069397e+01, 5.816587e-01, 6.542961e-01, 6.472858e+00, 2.643870e+00, 3.929020e+00, 3.339224e+00, 2.410371e+00, 9.606748e+00, 6.116685e+00 } // 40-50
+ ,{ 1.857919e+01, 6.185989e-01, 5.878869e-01, 7.035064e+00, 2.892415e+00, 4.339383e+00, 3.549679e+00, 2.821061e+00, 1.529318e+01, 6.091388e+00 } // 50-60
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 0-10
+ ,{ 1.271594e+02, 7.790165e-01, 5.793214e-01, 8.050008e+00, 3.211312e+00, 4.825258e+00, 3.840509e+00, 3.046231e+00, 2.172177e+01, 5.983496e+00 } // 20-40
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 40-60
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 60-80
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 0-20
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 0-40
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 20-80
+ ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 40-80
+};
+
+const Double_t AliGenEMlib::fgkThermPtParam[kCentralities][2] = {
{ 0.0000000000, 0.0000000000 } // pp no V2
,{ 0.0000000000, 0.0000000000 } // 0-5
,{ 0.0000000000, 0.0000000000 } // 5-10
- ,{ 3.447105e+01, 3.416818e+00 } // 10-20 //based on: https://aliceinfo.cern.ch/Notes/node/249
+ ,{ 3.335661e+01, 3.400585e+00 } // 10-20 //based on: https://aliceinfo.cern.ch/Notes/node/249
,{ 0.0000000000, 0.0000000000 } // 20-30
,{ 0.0000000000, 0.0000000000 } // 30-40
,{ 0.0000000000, 0.0000000000 } // 40-50
,{ 0.0000000000, 0.0000000000 } // 50-60
- ,{ 3.888847e+02, 4.502683e+00 } // 0-10 //based on: https://aliceinfo.cern.ch/Notes/node/249
- ,{ 1.766210e+00, 2.473812e+00 } // 20-40 //based on: https://twiki.cern.ch/twiki/pub/ALICE/ALICEDirectPhotonSpectrumPaper/directPbPb.pdf
+ ,{ 3.648327e+02, 4.477749e+00 } // 0-10 //based on: https://aliceinfo.cern.ch/Notes/node/249
+ ,{ 1.696223e+00, 2.429660e+00 } // 20-40 //based on: https://twiki.cern.ch/twiki/pub/ALICE/ALICEDirectPhotonSpectrumPaper/directPbPb.pdf
,{ 0.0000000000, 0.0000000000 } // 40-60
,{ 0.0000000000, 0.0000000000 } // 60-80
- ,{ 1.576151e+01, 2.841202e+00 } // 0-20 //based on: https://twiki.cern.ch/twiki/pub/ALICE/ALICEDirectPhotonSpectrumPaper/directPbPb.pdf
- ,{ 4.263499e+01, 3.249843e+00 } // 0-40 //based on: https://aliceinfo.cern.ch/Figure/node/2866
+ ,{ 1.492160e+01, 2.805213e+00 } // 0-20 //based on: https://twiki.cern.ch/twiki/pub/ALICE/ALICEDirectPhotonSpectrumPaper/directPbPb.pdf
+ ,{ 4.215110e+01, 3.242719e+00 } // 0-40 //based on: https://aliceinfo.cern.ch/Figure/node/2866
,{ 0.0000000000, 0.0000000000 } // 20-80
,{ 0.0000000000, 0.0000000000 } // 40-80
};
const double &pt=px[0];
Double_t invYield = c[0]*pow(c[1]+pt*c[2],-c[3])*CrossOverLc(c[5],c[4],pt)+CrossOverRc(c[7],c[6],pt)*c[8]*pow(pt+0.001,-c[9]); //pt+0.001: prevent powerlaw from exploding for pt->0
- return invYield*(2*TMath::Pi()*pt);
+ return invYield*(2*TMath::Pi()*pt+0.001); //pt+0.001: be sure to be > 0
}
// double powerlaw for J/Psi yield
Double_t AliGenEMlib::V2DirectRealGamma( const Double_t *px, const Double_t */*dummy*/ )
{
- const static Double_t v2Param[3][15] = {
- { 1.211795e-01, 9.813671e-01, 0.000000e+00, 3.056960e+00, 2.380183e+00, -7.833212e-02, 5.000000e-01, 3.056960e+00, 1.195000e-01, 1.183293e-02, 1.252249e+00, 0, 1, 4.876263e-03, 1.518526e+00 } // 00-20, based on: https://aliceinfo.cern.ch/Notes/node/249
- ,{ 1.619000e-01, 2.185695e+00, 0.000000e+00, 1.637681e+00, 1.000000e+00, -1.226399e-06, 3.092027e+00, 3.064692e+00, 1.619000e-01, 2.264320e-02, 1.028641e+00, 0, 1, 8.172203e-03, 1.271637e+00 } // 20-40
- ,{ 1.335000e-01, 1.331963e+00, 0.000000e+00, 2.252315e+00, 1.198383e+00, -5.861987e-02, 7.132859e-01, 2.252315e+00, 2.934249e-01, 1.571589e-02, 1.001131e+00, 0, 1, 5.179715e-03, 1.329344e+00 } // 00-40
+ const static Double_t v2Param[3][16] = {
+ { 1.004245e-01, 1.057645e+00, 0.000000e+00, 2.836492e+00, 2.819767e+00, -6.231529e-02, 1.173054e+00, 2.836492e+00, 1.881590e-01, 1.183293e-02, 1.252249e+00, 0, 1, 4.876263e-03, 1.518526e+00, 4.5 } // 00-20, based on: https://aliceinfo.cern.ch/Notes/node/249
+ ,{ 1.619000e-01, 1.868201e+00, 6.983303e-15, 2.242170e+00, 4.484339e+00, -1.695734e-02, 2.301359e+00, 2.871469e+00, 1.619000e-01, 2.264320e-02, 1.028641e+00, 0, 1, 8.172203e-03, 1.271637e+00, 4.5 } // 20-40
+ ,{ 1.335000e-01, 1.076916e+00, 1.462605e-08, 2.785732e+00, 5.571464e+00, -2.356156e-02, 2.745437e+00, 2.785732e+00, 1.335000e-01, 1.571589e-02, 1.001131e+00, 0, 1, 5.179715e-03, 1.329344e+00, 4.5 } // 00-40
};
- switch(fgSelectedCentrality) {
+ switch(fgSelectedCentrality){
case k0020: return V2Param(px,v2Param[0]); break;
case k2040: return V2Param(px,v2Param[1]); break;
case k0040: return V2Param(px,v2Param[2]); break;
+ // case k0010: return 0.43*V2Param(px,v2Param[1]); break; //V2Pizero(0010)/V2Pizero(2040)=0.43 +-0.025
+ // case k1020: return 0.75*V2Param(px,v2Param[1]); break; //V2Pizero(1020)/V2Pizero(2040)=0.75 +-0.04
+ case k0010: return 0.53*V2Param(px,v2Param[2]); break; //V2Pizero(0010)/V2Pizero(0040)=0.53 +-0.03
+ case k1020: return 0.91*V2Param(px,v2Param[2]); break; //V2Pizero(1020)/V2Pizero(0040)=0.91 +-0.04
}
return 0;
}
Double_t AliGenEMlib::PtDirectVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
{
- return IntegratedKrollWada(px,px)*(PtPromptRealGamma(px,px)+PtThermalRealGamma(px,px));
+ return IntegratedKrollWada(px,px)*PtDirectRealGamma(px,px);
}
Int_t AliGenEMlib::IpDirectVirtGamma(TRandom *)
Double_t kb=0.;
Double_t kd=0.;
- double n1,n2,n3;
+ double n1,n2,n3,n4;
int oldCent;
switch(fgSelectedPtParam|fgSelectedCentrality) {
+ // fit to pi charged, same data like in kPiOldChargedPbPb,
+ // but tested and compared against newest (2014) neutral pi measurement
+ case kPichargedPbPb|k0005:
+ case kPichargedPbPb|k0510:
+ case kPichargedPbPb|k1020:
+ case kPichargedPbPb|k2030:
+ case kPichargedPbPb|k3040:
+ case kPichargedPbPb|k4050:
+ case kPichargedPbPb|k5060:
+ case kPichargedPbPb|k2040:
+ return PtModifiedHagedornPowerlaw(px,fgkPtParam[fgSelectedCentrality]);
+ break;
+ case kPichargedPbPb|k0010:
+ n1=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0005]);
+ n2=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0510]);
+ return (n1+n2)/2;
+ break;
+ case kPichargedPbPb|k0020:
+ n1=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0005]);
+ n2=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0510]);
+ n3=PtModifiedHagedornPowerlaw(px,fgkPtParam[k1020]);
+ return (n1+n2+2*n3)/4;
+ break;
+ case kPichargedPbPb|k0040:
+ n1=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0005]);
+ n2=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0510]);
+ n3=PtModifiedHagedornPowerlaw(px,fgkPtParam[k1020]);
+ n4=PtModifiedHagedornPowerlaw(px,fgkPtParam[k2040]);
+ return (n1+n2+2*n3+4*n4)/8;
+ break;
+ case kPichargedPbPb|k4060:
+ n1=PtModifiedHagedornPowerlaw(px,fgkPtParam[k4050]);
+ n2=PtModifiedHagedornPowerlaw(px,fgkPtParam[k5060]);
+ return (n1+n2)/2;
+ break;
+
+
// fit to pi charged v1
// charged pion from ToF, unidentified hadrons scaled with pion from TPC
// for Pb-Pb @ 2.76 TeV
- case kPichargedPbPb|k0005:
+ case kPiOldChargedPbPb|k0005:
kc=1347.5; kp0=0.9393; kp1=2.254; kn=11.294; kcT=0.002537; kT=2.414;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
- case kPichargedPbPb|k0510:
+ case kPiOldChargedPbPb|k0510:
kc=1256.1; kp0=0.9545; kp1=2.248; kn=11.291; kcT=0.002662; kT=2.326;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
- case kPichargedPbPb|k2030:
+ case kPiOldChargedPbPb|k2030:
kc=7421.6; kp0=1.2059; kp1=1.520; kn=10.220; kcT=0.002150; kT=2.196;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
- case kPichargedPbPb|k3040:
+ case kPiOldChargedPbPb|k3040:
kc=1183.2; kp0=1.0478; kp1=1.623; kn=9.8073; kcT=0.00198333; kT=2.073;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
// the following is what went into the Pb-Pb preliminary approval (0-10%)
- case kPichargedPbPb|k0010:
+ case kPiOldChargedPbPb|k0010:
kc=1296.0; kp0=0.968; kp1=2.567; kn=12.27; kcT=0.004219; kT=2.207;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
- case kPichargedPbPb|k1020:
+ case kPiOldChargedPbPb|k1020:
kc=986.0; kp0=0.9752; kp1=2.376; kn=11.62; kcT=0.003116; kT=2.213;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
- case kPichargedPbPb|k2040:
+ case kPiOldChargedPbPb|k2040:
kc=17337.0; kp0=1.337; kp1=1.507; kn=10.629; kcT=0.00184; kT=2.234;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
- case kPichargedPbPb|k4050:
+ case kPiOldChargedPbPb|k4050:
kc=6220.0; kp0=1.322; kp1=1.224; kn=9.378; kcT=0.000595; kT=2.383;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
- case kPichargedPbPb|k5060:
+ case kPiOldChargedPbPb|k5060:
kc=2319.0; kp0=1.267; kp1=1.188; kn=9.044; kcT=0.000437; kT=2.276;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
- case kPichargedPbPb|k4060:
+ case kPiOldChargedPbPb|k4060:
kc=4724.0; kp0=1.319; kp1=1.195; kn=9.255; kcT=0.000511; kT=2.344;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
- case kPichargedPbPb|k6080:
+ case kPiOldChargedPbPb|k6080:
kc=2842.0; kp0=1.465; kp1=0.8324; kn=8.167; kcT=0.0001049; kT=2.29;
return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
break;
- case kPichargedPbPb|k0020:
+ case kPiOldChargedPbPb|k0020:
oldCent=fgSelectedCentrality;
fgSelectedCentrality=k0010;
n1=PtPizero(px,px);
fgSelectedCentrality=oldCent;
return (n1+n2)/2;
break;
- case kPichargedPbPb|k0040:
+ case kPiOldChargedPbPb|k0040:
oldCent=fgSelectedCentrality;
fgSelectedCentrality=k0010;
n1=PtPizero(px,px);
Double_t AliGenEMlib::V2Jpsi( const Double_t *px, const Double_t */*dummy*/ )
{
- const int oldSys=fgSelectedV2Systematic;
- fgSelectedV2Systematic=kNoV2Sys;
- double ret=0;
-
- switch(oldSys){
- case kLoV2Sys: ret=0; break;
- case kNoV2Sys: ret=KEtScal(*px,6)/2; break;
- case kUpV2Sys: ret=KEtScal(*px,6); break;
+ const static Double_t v2Param[16] = { 1.156000e-01, 8.936854e-01, 0.000000e+00, 4.000000e+00, 6.222375e+00, -1.600314e-01, 8.766676e-01, 7.824143e+00, 1.156000e-01, 3.484503e-02, 4.413685e-01, 0, 1, 3.484503e-02, 4.413685e-01, 7.2 };
+ switch(fgSelectedCentrality){
+ case k2040: return V2Param(px,v2Param); break;
+ case k0010: return 0.43*V2Param(px,v2Param); break; //V2Pizero(0010)/V2Pizero(2040)=0.43 +-0.025
+ case k1020: return 0.75*V2Param(px,v2Param); break; //V2Pizero(1020)/V2Pizero(2040)=0.75 +-0.04
+ case k0020: return 0.66*V2Param(px,v2Param); break; //V2Pizero(0020)/V2Pizero(2040)=0.66 +-0.035
+ case k0040: return 0.82*V2Param(px,v2Param); break; //V2Pizero(0040)/V2Pizero(2040)=0.82 +-0.05
}
-
- fgSelectedV2Systematic=oldSys;
- return ret;
+ return 0;
}
Double_t AliGenEMlib::YFlat(Double_t /*y*/)
{
const int nq=2; //number of quarks for particle np, here always 2
Double_t scaledPt = sqrt(pow(2.0/nq*(sqrt(pt*pt+fgkHM[np]*fgkHM[np])-fgkHM[np])+fgkHM[0],2)-fgkHM[0]*fgkHM[0]);
- // double val=V2Pizero(&scaledPt, (Double_t*) 0);
- // static const double syserr[12]={0., 0.09, 0.07, 0.06, 0.04, 0.04, 0.04, 0.05, 0., 0., 0., 0.}; //based on pi vs kaon
- // double sys=fgSelectedV2Systematic*min(fgkV2param[fgSelectedCentrality][0],fgkV2param[fgSelectedCentrality][8])*syserr[fgSelectedCentrality];
- // return std::max(val+sys,0.0);
return V2Pizero(&scaledPt, (Double_t*) 0);
}
const double &pt=px[0];
double val=CrossOverLc(par[4],par[3],pt)*(2*par[0]/(1+TMath::Exp(par[1]*(par[2]-pt)))-par[0])+CrossOverRc(par[4],par[3],pt)*((par[8]-par[5])/(1+TMath::Exp(par[6]*(pt-par[7])))+par[5]);
- double sys=fgSelectedV2Systematic*par[11+fgSelectedV2Systematic*2]*pow(pt,par[12+fgSelectedV2Systematic*2]);
+ double sys=0;
+ if(fgSelectedV2Systematic){
+ double syspt=pt>par[15]?par[15]:pt;
+ sys=fgSelectedV2Systematic*par[11+fgSelectedV2Systematic*2]*pow(syspt,par[12+fgSelectedV2Systematic*2]);
+ }
return std::max(val+sys,0.0);
}
enum Particle_t{kPizero=0, kEta, kRho, kOmega, kEtaprime, kPhi, kJpsi, kDirectRealGamma, kDirectVirtGamma };
enum Centrality_t{kpp=0x0, k0005=0x1, k0510=0x2, k1020=0x3, k2030=0x4, k3040=0x5, k4050=0x6, k5060=0x7, k0010=0x8, k2040=0x9, k4060=0xA, k6080=0xB, k0020=0xC, k0040=0xD, k2080=0xE, k4080=0xF, kCentralities=0x10};
- enum PtParamSet_t{kPizero7TeVpp=0x10, kPizeroEta7TeVpp=0x20, kPizero7TeVpplow=0x30, kPizeroEta7TeVpplow=0x40, kPizero7TeVpphigh=0x50, kPizeroEta7TeVpphigh=0x60, kPizero2760GeVpp=0x70, kPizeroEta2760GeVpp=0x80, kPizero2760GeVpplow=0x90, kPizeroEta2760GeVpplow=0xA0, kPizero2760GeVpphigh=0xB0, kPizeroEta2760GeVpphigh=0xC0, kPichargedPbPb=0xD0, kPizeroPbPb=0xE0, kPichargedPPb=0xF0 };
+ enum PtParamSet_t{kPizero7TeVpp=0x00, kPizeroEta7TeVpp=0x10, kPizero7TeVpplow=0x20, kPizeroEta7TeVpplow=0x30, kPizero7TeVpphigh=0x40, kPizeroEta7TeVpphigh=0x50, kPizero2760GeVpp=0x60, kPizeroEta2760GeVpp=0x70, kPizero2760GeVpplow=0x80, kPizeroEta2760GeVpplow=0x90, kPizero2760GeVpphigh=0xA0, kPizeroEta2760GeVpphigh=0xB0, kPiOldChargedPbPb=0xC0, kPichargedPbPb=0xD0, kPizeroPbPb=0xE0, kPichargedPPb=0xF0 };
enum v2Sys_t{kLoV2Sys=-1, kNoV2Sys=0, kUpV2Sys=+1};
AliGenEMlib() { } ;
- static void SelectParams(Int_t ptSelect, Int_t centSelect=kpp, Int_t v2sys=kNoV2Sys)
+ static void SelectParams(PtParamSet_t ptSelect, Centrality_t centSelect=kpp, Int_t v2sys=kNoV2Sys)
{ fgSelectedPtParam=ptSelect; fgSelectedCentrality=centSelect; fgSelectedV2Systematic=v2sys; }
GenFunc GetPt(Int_t param, const char * tname=0) const;
static Double_t CrossOverLc(double a, double b, double x);
static Double_t CrossOverRc(double a, double b, double x);
- static const Double_t fgkV2param[16][15]; // parameters of pi v2
- static const Double_t fgkRawPtOfV2Param[16][10]; // parameters of the raw pt spectrum of v2 analysys
- static const Double_t fgkThermPtParam[16][2]; // parameters of thermal gamma pt
+ static const Double_t fgkPtParam[kCentralities][10]; // parameters of pi pt spectrum
+ static const Double_t fgkV2param[kCentralities][16]; // parameters of pi v2 spectrum
+ static const Double_t fgkRawPtOfV2Param[kCentralities][10]; // parameters of the raw pt spectrum of v2 analysis
+ static const Double_t fgkThermPtParam[kCentralities][2]; // parameters of thermal gamma pt
static const Double_t fgkHM[8]; // particle masses
static const Double_t fgkMtFactor[2][8]; // mt scaling factor
LHC_ENTRIES 81
-0 LHC_Beam_Energy i:1 1 29169 1399237350.0
-1 LHC_IntensityBeam1_totalIntensity f:1 1 21164785367.803 1399237350.0
-2 LHC_IntensityBeam2_totalIntensity f:1 1 18863422159.299 1399237350.0
-3 LHC_LumAverageBRANB_4L2_meanLuminosity f:1 1 12.807913272863 1399237350.0
-4 LHC_LumAverageBRANB_4R2_meanLuminosity f:1 1 13.760402768977 1399237350.0
-5 LHC_MachineMode s:1 1 PROTON PHYSICS 1399237350.0
-6 LHC_BeamMode s:1 1 STABLE BEAMS 1399237350.0
-7 LHC_Beams_Particle_Type s:1 1 PROTON 1399237350.0
-8 LHC_FillNumber s:1 1 1026 1399237350.0
-9 LHC_BunchLengthBeam1_nBunches i:1 1 2 1399237350.0
-10 LHC_BunchLengthBeam1_bunchesLenghts f:3564 1 8.2848604896093e-010 8.2358661805479e-010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399237350.0
-11 LHC_BunchLengthBeam1_filledBuckets i:3564 8 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399237350.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280471.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280472.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280473.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280474.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280475.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280476.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280477.0
-12 LHC_BunchLengthBeam2_nBunches i:1 1 2 1399237350.0
-13 LHC_BunchLengthBeam2_bunchesLenghts f:3564 1 8.1572761282861e-010 8.1869790982703e-010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399237350.0
-14 LHC_BunchLengthBeam2_filledBuckets i:3564 8 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399237350.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280471.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280472.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280473.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280474.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280475.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280476.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280477.0
-15 LHC_RunControl_SafeBeam1 i:1 1 15 1399237350.22
-16 LHC_RunControl_SafeBeam2 i:1 1 15 1399237350.0
-17 LHC_RunControl_BetaStar s:1 1 10 1399237350.0
-18 LHC_RunControl_ActiveInjectionScheme s:1 1 Single_2b_1_1_1 1399237350.0
-19 LHC_RunControl_IP2_Xing_Murad s:1 1 no_value 1399237350.0
-20 LHC_RunControl_IP2_ALICE_Murad s:1 1 no_value 1399237350.0
-21 LHC_LumAverageBRANB_4L2_acqMode i:1 3 7439 1399237350.0 7951 1328280490.0 7439 1297160586.0
-22 LHC_LumAverageBRANB_4L2_meanLuminosityError f:1 1 0 1399237350.0
-23 LHC_LumAverageBRANB_4L2_meanCrossingAngle f:1 1 0 1399237350.0
-24 LHC_LumAverageBRANB_4L2_meanCrossingAngleError f:1 1 0 1399237350.0
-25 LHC_LumAverageBRANB_4R2_acqMode i:1 1 7687 1399237350.0
-26 LHC_LumAverageBRANB_4R2_meanLuminosityError f:1 1 0 1399237350.0
-27 LHC_LumAverageBRANB_4R2_meanCrossingAngle f:1 1 0 1399237350.0
-28 LHC_LumAverageBRANB_4R2_meanCrossingAngleError f:1 1 0 1399237350.0
-29 LHC_CollimatorPos_TCLIA_4R2_lvdt_gap_downstream f:1 1 50.046328769759 1399237350.0
-30 LHC_CollimatorPos_TCLIA_4R2_lvdt_gap_upstream f:1 1 49.866079841922 1399237350.0
-31 LHC_CollimatorPos_TCLIA_4R2_lvdt_left_downstream f:1 1 24.997357144153 1399237350.0
-32 LHC_CollimatorPos_TCLIA_4R2_lvdt_left_upstream f:1 1 24.91255908613 1399237350.0
-33 LHC_CollimatorPos_TCLIA_4R2_lvdt_right_downstream f:1 1 -25.02661307636 1399237350.0
-34 LHC_CollimatorPos_TCLIA_4R2_lvdt_right_upstream f:1 1 -24.996569350351 1399237350.0
-35 LHC_CollimatorPos_TCTVB_4L2_lvdt_gap_downstream f:1 1 11.095173006215 1399237350.0
-36 LHC_CollimatorPos_TCTVB_4L2_lvdt_gap_upstream f:1 1 11.117604999786 1399237350.0
-37 LHC_CollimatorPos_TCTVB_4L2_lvdt_left_downstream f:1 1 6.2657452563246 1399237350.0
-38 LHC_CollimatorPos_TCTVB_4L2_lvdt_left_upstream f:1 1 6.2582903572663 1399237350.0
-39 LHC_CollimatorPos_TCTVB_4L2_lvdt_right_downstream f:1 1 -4.8219301074717 1399237350.0
-40 LHC_CollimatorPos_TCTVB_4L2_lvdt_right_upstream f:1 1 -4.822643299829 1399237350.0
-41 LHC_CollimatorPos_TCTVB_4R2_lvdt_gap_downstream f:1 1 11.199854263647 1399237350.0
-42 LHC_CollimatorPos_TCTVB_4R2_lvdt_gap_upstream f:1 1 10.883404308687 1399237350.0
-43 LHC_CollimatorPos_TCTVB_4R2_lvdt_left_downstream f:1 1 5.1526992903188 1399237350.0
-44 LHC_CollimatorPos_TCTVB_4R2_lvdt_left_upstream f:1 1 5.1308726395455 1399237350.0
-45 LHC_CollimatorPos_TCTVB_4R2_lvdt_right_downstream f:1 1 -5.9879638081037 1399237350.0
-46 LHC_CollimatorPos_TCTVB_4R2_lvdt_right_upstream f:1 1 -5.9028395851616 1399237350.0
-47 LHC_BeamSizeBeam1_acqMode i:1 1 0 1399237350.0
-48 LHC_BeamSizeBeam1_sigmaH f:1 1 0.78663575993523 1399237350.0
-49 LHC_BeamSizeBeam1_sigmaV f:1 1 0.66309333285671 1399237350.0
-50 LHC_BeamSizeBeam1_emittanceH f:1 1 -1 1399237350.0
-51 LHC_BeamSizeBeam1_emittanceV f:1 1 -1 1399237350.0
-52 LHC_BeamSizeBeam1_errorSigmaH f:1 1 -1 1399237350.0
-53 LHC_BeamSizeBeam1_errorSigmaV f:1 1 -1 1399237350.0
-54 LHC_BeamSizeBeam2_acqMode i:1 1 0 1399237350.0
-55 LHC_BeamSizeBeam2_sigmaH f:1 1 0.65687035181571 1399237350.0
-56 LHC_BeamSizeBeam2_sigmaV f:1 1 0.82232160177854 1399237350.0
-57 LHC_BeamSizeBeam2_emittanceH f:1 1 -1 1399237350.0
-58 LHC_BeamSizeBeam2_emittanceV f:1 1 -1 1399237350.0
-59 LHC_BeamSizeBeam2_errorSigmaH f:1 1 -1 1399237350.0
-60 LHC_BeamSizeBeam2_errorSigmaV f:1 1 -1 1399237350.0
-61 LHC_CirculatingBunchConfig_Beam1 i:2808 1 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399237350.0
-62 LHC_CirculatingBunchConfig_Beam2 i:2808 1 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399237350.0
-63 LHC_BeamIntensityPerBunchBeam1_averageBeamIntensity f:1 2 21897063148.426 1399237350.0 21888637698.717 1328280471.0
-64 LHC_BeamIntensityPerBunchBeam2_averageBeamIntensity f:1 1 21621985721.014 1399237350.0
-65 LHC_BeamLuminosityPerBunchBRANB_4L2_BunchLuminosityError f:1 1 0 0.0
-66 LHC_BeamLuminosityPerBunchBRANB_4R2_BunchLuminosityError f:1 1 0 0.0
-67 LHC_BeamIntensityPerBunchBeam1_Average_BunchIntensities f:3564 1 160502880 5017949 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155904384 4949961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399237350.0
-68 LHC_BeamIntensityPerBunchBeam2_Average_BunchIntensities f:3564 1 139031360 2003243 349362.875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139608112 2134134 492293.03125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59583.453125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399237350.0
-69 LHC_BeamLuminosityPerBunchBRANB_4L2_Average_BunchLuminosity f:3564 1 3.2214286327362 0.73952382802963 0.25333333015442 0.039523810148239 0.0099999997764826 0.0099999997764826 0.0066666668280959 0.003333333414048 0.003333333414048 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.003333333414048 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399237350.0
-70 LHC_BeamLuminosityPerBunchBRANB_4R2_Average_BunchLuminosity f:3564 1 1.1682540178299 0.25 0.032539684325457 0.0055555556900799 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054761905223131 1399237350.0
-71 BPTX_deltaT_B1_B2 f:1 45 -1.0152015384615 1399237350.822 -1.00656 1328280471.799 -0.98337538461537 1328280472.377 -0.9989723076923 1328280473.236 -1.0006584615384 1328280473.908 -0.94606923076923 1328280474.752 -0.9469123076923 1328280475.112 -0.99644307692307 1328280476.143 -0.99749692307691 1328280476.581 -0.98485076923076 1328280476.597 -1.0164661538462 1328280476.972 -1.0124615384615 1328280477.910 -0.99412461538461 1328280478.129 -0.99644307692307 1328280478.74 -0.99264923076922 1328280479.308 -0.97473384615384 1328280480.543 -0.97937076923075 1328280480.668 -0.98885538461538 1328280481.168 -0.9956 1328280482.106 -0.98948769230768 1328280482.387 -0.98632615384614 1328280483.294 -0.99749692307691 1328280483.669 -0.97620923076923 1328280483.950 -0.99834 1328280483.982 -1.0124615384615 1328280484.115 -1.0116184615385 1328280484.880 -0.99581076923076 1328280485.506 -0.9682 1328280486.303 -0.99180615384614 1328280486.53 -0.98969846153845 1328280486.740 -0.97915999999999 1328280487.366 -0.98674769230769 1328280488.163 -0.97810615384614 1328280488.819 -0.95428923076922 1328280489.741 -0.95681846153845 1328280490.179 -0.95492153846152 1328280490.7 -0.94880923076923 1328280491.468 -0.95492153846153 1328280492.156 -0.95344615384614 1328280492.875 -0.95829384615384 1328280492.578 -0.97641999999999 1328280493.297 -0.98295384615383 1328280493.63 -0.98695846153845 1328280493.828 -0.9907523076923 1328280494.516 -0.99285999999999 1328280504.235
-72 BPTX_deltaTRMS_B1_B2 f:1 1 0.028 1399237350.660
-73 BPTX_Phase_B1 f:1 71 20.828627692308 1399237350.806 20.805443076923 1328280471.361 20.807129230769 1328280472.908 20.807972307692 1328280473.96 20.809026153846 1328280474.565 20.840641538462 1328280475.972 20.822304615385 1328280476.129 20.818510769231 1328280477.308 20.823147692308 1328280478.668 20.829892307692 1328280479.90 20.826730769231 1328280480.278 20.805443076923 1328280481.935 20.819564615385 1328280482.99 20.803756923077 1328280483.490 20.827363076923 1328280484.37 20.816824615385 1328280485.366 20.808183076923 1328280486.803 20.810712307692 1328280487.179 20.8046 1328280488.452 20.803124615385 1328280489.859 20.821250769231 1328280490.281 20.825255384615 1328280491.813 20.827363076923 1328280492.219 20.827152307692 1328280493.657 20.820829230769 1328280494.478 20.803124615385 1328280495.931 20.823358461538 1328280496.322 20.813452307692 1328280497.666 20.825044615385 1328280498.260 20.828206153846 1328280499.604 20.822093846154 1328280500.690 20.833264615385 1328280501.238 20.794272307692 1328280502.535 20.825255384615 1328280503.566 20.786684615385 1328280504.442 20.82378 1328280505.864 20.829470769231 1328280506.888 20.815349230769 1328280507.216 20.816403076923 1328280508.810 20.820829230769 1328280509.107 20.79364 1328280510.498 20.822726153846 1328280511.639 20.830103076923 1328280512.647 20.818721538462 1328280513.804 20.828838461538 1328280514.413 20.810501538462 1328280515.554 20.814927692308 1328280515.977 20.789424615385 1328280527.618 20.826309230769 1328280528.422 20.82378 1328280529.751 20.830524615385 1328280530.251 20.822093846154 1328280531.736 20.831156923077 1328280532.158 20.834529230769 1328280533.447 20.834318461538 1328280534.823 20.82926 1328280535.198 20.825255384615 1328280536.745 20.814084615385 1328280537.74 20.835793846154 1328280538.543 20.835372307692 1328280539.488 20.809026153846 1328280540.864 20.826730769231 1328280541.317 20.837269230769 1328280542.677 20.806075384615 1328280543.99 20.825044615385 1328280544.521 20.829049230769 1328280545.592 20.82926 1328280546.30 20.818089230769 1328280547.452 20.804389230769 1328280548.827 20.795326153846 1328280549.249 20.811133846154 1328280549.640
-74 BPTX_PhaseRMS_B1 f:1 71 0.0058577164199717 1399237350.806 0.015511813524426 1328280471.361 0.015802914149653 1328280472.908 0.019239432854636 1328280473.96 0.01765297689162 1328280475.565 0.0065606472656569 1328280476.972 0.0055540791768716 1328280477.129 0.0076992820075604 1328280478.308 0.0069124596192787 1328280479.668 0.0072585446892548 1328280480.90 0.005283964017633 1328280481.278 0.017016792931008 1328280482.935 0.0051407820877149 1328280483.99 0.0139146008709 1328280484.490 0.0067235054255271 1328280485.37 0.005486481374234 1328280486.366 0.015128621325001 1328280487.803 0.016171508739485 1328280488.179 0.015499780643609 1328280489.452 0.017963796128907 1328280490.859 0.0063752030899306 1328280491.281 0.0055508789005023 1328280492.813 0.0068218938181613 1328280493.219 0.0067383552678652 1328280494.657 0.012865730904849 1328280495.478 0.015341480985112 1328280496.931 0.0047919301246493 1328280497.322 0.016934622383338 1328280498.666 0.0068039624549779 1328280499.260 0.0059599635438304 1328280500.604 0.0051113168094559 1328280500.690 0.0056649499754943 1328280501.238 0.01969863708979 1328280502.535 0.0049859286968842 1328280503.566 0.022312190448352 1328280504.442 0.0074186577678792 1328280505.864 0.0058242521728351 1328280506.888 0.0052772339222195 1328280507.216 0.0067129255520564 1328280508.810 0.017311456062559 1328280509.107 0.032943170087054 1328280510.498 0.0069470766232619 1328280511.639 0.0052094547864048 1328280512.647 0.0069716523047255 1328280513.804 0.0060152371612846 1328280514.413 0.018799386644911 1328280515.554 0.017470849574421 1328280516.977 0.017691562954225 1328280517.618 0.005128669827663 1328280518.422 0.0050448309945238 1328280519.751 0.0054397247798458 1328280520.251 0.01624168053945 1328280521.736 0.005457254571267 1328280522.158 0.0055748361930979 1328280523.447 0.0063682310809661 1328280524.823 0.0071973911940361 1328280525.198 0.004265669311439 1328280526.745 0.0098465555807465 1328280527.74 0.0058089774227672 1328280528.543 0.0048265693649127 1328280529.488 0.013647856983303 1328280530.864 0.0043832906230803 1328280531.317 0.0046584291483475 1328280532.677 0.020739199650184 1328280533.99 0.018265437138107 1328280534.521 0.0074886874210325 1328280535.592 0.0081306126031047 1328280536.30 0.0057505633580465 1328280537.452 0.019671556500387 1328280538.827 0.019149170488932 1328280539.249 0.018977308536511 1328280540.640
-75 BPTX_Phase_Shift_B1 f:1 71 1.3713723076923 1399237350.806 1.3945569230769 1328280471.361 1.3928707692307 1328280472.908 1.3920276923077 1328280473.96 1.3909738461538 1328280475.565 1.3593584615384 1328280476.972 1.3776953846154 1328280477.129 1.3814892307692 1328280478.308 1.3768523076923 1328280479.668 1.3701076923077 1328280480.90 1.3732692307692 1328280481.278 1.3945569230769 1328280482.935 1.3804353846154 1328280483.99 1.3962430769231 1328280484.490 1.3726369230769 1328280485.37 1.3831753846154 1328280486.366 1.3918169230769 1328280487.803 1.3892876923077 1328280488.179 1.3954 1328280489.452 1.3968753846154 1328280490.859 1.3787492307692 1328280491.281 1.3747446153846 1328280492.813 1.3726369230769 1328280493.219 1.3728476923077 1328280494.657 1.3791707692307 1328280495.478 1.3968753846154 1328280496.931 1.3766415384615 1328280497.322 1.3865476923077 1328280498.666 1.3749553846154 1328280499.260 1.3717938461538 1328280500.604 1.3779061538461 1328280500.690 1.3667353846154 1328280501.238 1.4057276923077 1328280502.535 1.3747446153846 1328280503.566 1.4133153846154 1328280504.442 1.37622 1328280505.864 1.3705292307692 1328280506.888 1.3846507692307 1328280507.216 1.3835969230769 1328280508.810 1.3791707692307 1328280509.107 1.40636 1328280510.498 1.3772738461538 1328280511.639 1.3698969230769 1328280512.647 1.3812784615384 1328280513.804 1.3711615384615 1328280514.413 1.3894984615384 1328280515.554 1.3850723076923 1328280516.977 1.4105753846154 1328280517.618 1.3736907692308 1328280518.422 1.37622 1328280519.751 1.3694753846154 1328280520.251 1.3779061538461 1328280521.736 1.3688430769231 1328280522.158 1.3654707692307 1328280523.447 1.3656815384615 1328280524.823 1.37074 1328280525.198 1.3747446153846 1328280526.745 1.3859153846154 1328280527.74 1.3642061538461 1328280528.543 1.3646276923077 1328280529.488 1.3909738461538 1328280530.864 1.3732692307692 1328280531.317 1.3627307692307 1328280532.677 1.3939246153846 1328280533.99 1.3749553846154 1328280534.521 1.3709507692307 1328280535.592 1.37074 1328280536.30 1.3819107692307 1328280537.452 1.3956107692307 1328280538.827 1.4046738461538 1328280539.249 1.3888661538461 1328280540.640
-76 BPTX_Phase_B2 f:1 70 21.883426153846 1399237350.962 21.892067692308 1328280471.799 21.876470769231 1328280472.221 21.93106 1328280473.737 21.881529230769 1328280474.143 21.894175384615 1328280475.581 21.89818 1328280476.894 21.895861538462 1328280477.58 21.913776923077 1328280478.543 21.904292307692 1328280479.153 21.910404615385 1328280480.356 21.899233846154 1328280481.653 21.877103076923 1328280482.966 21.877946153846 1328280483.865 21.905556923077 1328280484.287 21.907664615385 1328280485.725 21.900076923077 1328280486.147 21.923893846154 1328280487.726 21.925790769231 1328280488.991 21.919678461538 1328280489.140 21.914830769231 1328280490.562 21.908296923077 1328280491.47 21.904503076923 1328280492.500 21.896915384615 1328280493.938 21.930638461538 1328280494.236 21.891646153846 1328280495.40 21.915041538462 1328280496.494 21.904924615385 1328280497.932 21.916938461538 1328280498.229 21.898601538462 1328280499.510 21.905556923077 1328280500.440 21.905978461538 1328280501.894 21.899233846154 1328280502.425 21.900498461538 1328280503.707 21.897758461538 1328280504.176 21.893543076923 1328280505.676 21.915884615385 1328280506.247 21.897969230769 1328280507.685 21.879632307692 1328280508.169 21.91188 1328280509.654 21.908718461538 1328280510.76 21.915673846154 1328280511.405 21.88174 1328280512.100 21.898390769231 1328280513.538 21.889327692308 1328280514.976 21.8927 1328280515.461 21.903449230769 1328280516.930 21.893964615385 1328280517.118 21.911247692308 1328280518.844 21.922207692308 1328280519.345 21.915252307692 1328280520.642 21.927898461538 1328280521.126 21.907875384615 1328280522.517 21.920521538462 1328280523.908 21.911458461538 1328280524.854 21.919889230769 1328280525.120 21.919467692308 1328280526.683 21.924104615385 1328280527.136 21.910404615385 1328280528.496 21.918624615385 1328280529.902 21.919256923077 1328280530.145 21.906189230769 1328280531.473 21.905767692308 1328280532.974 21.912723076923 1328280533.380 21.934432307692 1328280534.818 21.928530769231 1328280535.920 21.88722 1328280536.233 21.891435384615 1328280537.624 21.912933846154 1328280538.140 21.924526153846 1328280549.953
-77 BPTX_PhaseRMS_B2 f:1 71 0.0132582055512 1399237350.962 0.011851154828506 1328280471.799 0.011666034083724 1328280472.221 0.015545713227875 1328280473.737 0.012332431712872 1328280474.143 0.0099611598858862 1328280475.581 0.015827211538637 1328280476.894 0.0095429827994217 1328280477.58 0.013351028814822 1328280478.543 0.016137271936797 1328280479.153 0.013745159888304 1328280480.356 0.015634474545681 1328280481.653 0.011277434147303 1328280482.966 0.016429863739095 1328280483.865 0.015941177938999 1328280484.287 0.020249647676094 1328280485.725 0.013469456660233 1328280486.147 0.01311198078095 1328280487.726 0.011828642641722 1328280488.991 0.014720838902324 1328280489.140 0.016782313880142 1328280490.562 0.012131412606713 1328280491.47 0.014955558472714 1328280492.500 0.014868570441783 1328280493.938 0.012491522569114 1328280494.236 0.0085666738347923 1328280495.40 0.017582373778654 1328280496.494 0.010274000148591 1328280497.932 0.012844824067516 1328280498.229 0.016499475257928 1328280499.510 0.012268869500348 1328280500.440 0.012691038295496 1328280501.894 0.013374133968534 1328280502.425 0.012289129501528 1328280503.707 0.014913915197187 1328280504.176 0.0087282386166461 1328280505.676 0.012247306526733 1328280506.247 0.0087208555033358 1328280507.685 0.013074659433039 1328280508.169 0.010714874205084 1328280509.654 0.010536142821836 1328280510.76 0.018738795222493 1328280511.405 0.011040968667306 1328280512.100 0.012655985921491 1328280513.538 0.014664601512308 1328280514.976 0.0079605504403661 1328280515.461 0.013669810524046 1328280516.930 0.017783353302304 1328280517.118 0.014802093638897 1328280518.844 0.013197082742008 1328280519.345 0.01971295218345 1328280520.642 0.017285133085945 1328280521.126 0.014735919878805 1328280522.517 0.0089969087261802 1328280523.908 0.017406527212107 1328280524.854 0.018700825890695 1328280525.120 0.018525644238133 1328280526.683 0.013044555199585 1328280527.136 0.016435811103418 1328280528.496 0.01551066793796 1328280529.902 0.02002074723281 1328280530.145 0.013745159888304 1328280531.473 0.014012746260155 1328280532.974 0.011974957301254 1328280533.380 0.01518431040922 1328280534.818 0.018449833629243 1328280535.920 0.015832824124689 1328280536.233 0.013562963152182 1328280537.624 0.010378966908264 1328280538.140 0.016160516871751 1328280539.577 0.01228334433962 1328280540.953
-78 BPTX_Phase_Shift_B2 f:1 70 0.31657384615382 1399237350.962 0.30793230769228 1328280471.799 0.32352923076921 1328280472.221 0.26893999999998 1328280473.737 0.31847076923075 1328280474.143 0.30582461538459 1328280475.581 0.30181999999998 1328280476.894 0.30413846153844 1328280477.58 0.28622307692305 1328280478.543 0.29570769230767 1328280479.153 0.28959538461536 1328280480.356 0.30076615384613 1328280481.653 0.3228969230769 1328280482.966 0.32205384615382 1328280483.865 0.29444307692305 1328280484.287 0.29233538461536 1328280485.725 0.29992307692305 1328280486.147 0.27610615384613 1328280487.726 0.27420923076921 1328280488.991 0.28032153846151 1328280489.140 0.28516923076921 1328280490.562 0.29170307692305 1328280491.47 0.2954969230769 1328280492.500 0.30308461538459 1328280493.938 0.26936153846151 1328280494.236 0.30835384615382 1328280495.40 0.28495846153844 1328280496.494 0.29507538461536 1328280497.932 0.28306153846152 1328280498.229 0.30139846153844 1328280499.510 0.29444307692305 1328280500.440 0.29402153846151 1328280501.894 0.30076615384613 1328280502.425 0.29950153846152 1328280503.707 0.30224153846152 1328280504.176 0.3064569230769 1328280505.676 0.28411538461536 1328280506.247 0.30203076923074 1328280507.685 0.32036769230767 1328280508.169 0.28811999999997 1328280509.654 0.29128153846152 1328280510.76 0.28432615384613 1328280511.405 0.31825999999998 1328280512.100 0.30160923076921 1328280513.538 0.31067230769228 1328280514.976 0.30729999999997 1328280515.461 0.29655076923075 1328280516.930 0.30603538461536 1328280517.118 0.28875230769228 1328280518.844 0.27779230769229 1328280519.345 0.28474769230766 1328280520.642 0.27210153846152 1328280521.126 0.29212461538459 1328280522.517 0.27947846153844 1328280523.908 0.28854153846152 1328280524.854 0.28011076923075 1328280525.120 0.28053230769229 1328280526.683 0.27589538461536 1328280527.136 0.28959538461536 1328280528.496 0.28137538461536 1328280529.902 0.28074307692305 1328280530.145 0.29381076923075 1328280531.473 0.29423230769229 1328280532.974 0.2872769230769 1328280533.380 0.26556769230767 1328280534.818 0.27146923076921 1328280535.920 0.31277999999998 1328280536.233 0.30856461538459 1328280537.624 0.28706615384613 1328280538.140 0.27547384615383 1328280539.953
-79 LHC_Particle_Type_B1 s:1 1 PROTON 1297160580.0
-80 LHC_Particle_Type_B2 s:1 1 PROTON 1297160580.0
-81 LHC_Data_Quality_Flag b:1 5 1 1297160580.0 0 1297160581.0 0 1297160582.0 1 1399237350.2 0 1328280472.0
+0 LHC_Beam_Energy i:1 1 29169 1399233600.0
+1 LHC_IntensityBeam1_totalIntensity f:1 1 21164785367.803 1399233600.0
+2 LHC_IntensityBeam2_totalIntensity f:1 1 18863422159.299 1399233600.0
+3 LHC_LumAverageBRANB_4L2_meanLuminosity f:1 1 12.807913272863 1399233600.0
+4 LHC_LumAverageBRANB_4R2_meanLuminosity f:1 1 13.760402768977 1399233600.0
+5 LHC_MachineMode s:1 1 PROTON PHYSICS 1399233600.0
+6 LHC_BeamMode s:1 1 STABLE BEAMS 1399233600.0
+7 LHC_Beams_Particle_Type s:1 1 PROTON 1399233600.0
+8 LHC_FillNumber s:1 1 1026 1399233600.0
+9 LHC_BunchLengthBeam1_nBunches i:1 1 2 1399233600.0
+10 LHC_BunchLengthBeam1_bunchesLenghts f:3564 1 8.2848604896093e-010 8.2358661805479e-010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399233600.0
+11 LHC_BunchLengthBeam1_filledBuckets i:3564 8 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399233600.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280471.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280472.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280473.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280474.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280475.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280476.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280477.0
+12 LHC_BunchLengthBeam2_nBunches i:1 1 2 1399233600.0
+13 LHC_BunchLengthBeam2_bunchesLenghts f:3564 1 8.1572761282861e-010 8.1869790982703e-010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399233600.0
+14 LHC_BunchLengthBeam2_filledBuckets i:3564 8 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399233600.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280471.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280472.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280473.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280474.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280475.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280476.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280477.0
+15 LHC_RunControl_SafeBeam1 i:1 1 15 1399233600.22
+16 LHC_RunControl_SafeBeam2 i:1 1 15 1399233600.0
+17 LHC_RunControl_BetaStar s:1 1 10 1399233600.0
+18 LHC_RunControl_ActiveInjectionScheme s:1 1 Single_2b_1_1_1 1399233600.0
+19 LHC_RunControl_IP2_Xing_Murad s:1 1 no_value 1399233600.0
+20 LHC_RunControl_IP2_ALICE_Murad s:1 1 no_value 1399233600.0
+21 LHC_LumAverageBRANB_4L2_acqMode i:1 3 7439 1399233600.0 7951 1328280490.0 7439 1297160586.0
+22 LHC_LumAverageBRANB_4L2_meanLuminosityError f:1 1 0 1399233600.0
+23 LHC_LumAverageBRANB_4L2_meanCrossingAngle f:1 1 0 1399233600.0
+24 LHC_LumAverageBRANB_4L2_meanCrossingAngleError f:1 1 0 1399233600.0
+25 LHC_LumAverageBRANB_4R2_acqMode i:1 1 7687 1399233600.0
+26 LHC_LumAverageBRANB_4R2_meanLuminosityError f:1 1 0 1399233600.0
+27 LHC_LumAverageBRANB_4R2_meanCrossingAngle f:1 1 0 1399233600.0
+28 LHC_LumAverageBRANB_4R2_meanCrossingAngleError f:1 1 0 1399233600.0
+29 LHC_CollimatorPos_TCLIA_4R2_lvdt_gap_downstream f:1 1 50.046328769759 1399233600.0
+30 LHC_CollimatorPos_TCLIA_4R2_lvdt_gap_upstream f:1 1 49.866079841922 1399233600.0
+31 LHC_CollimatorPos_TCLIA_4R2_lvdt_left_downstream f:1 1 24.997357144153 1399233600.0
+32 LHC_CollimatorPos_TCLIA_4R2_lvdt_left_upstream f:1 1 24.91255908613 1399233600.0
+33 LHC_CollimatorPos_TCLIA_4R2_lvdt_right_downstream f:1 1 -25.02661307636 1399233600.0
+34 LHC_CollimatorPos_TCLIA_4R2_lvdt_right_upstream f:1 1 -24.996569350351 1399233600.0
+35 LHC_CollimatorPos_TCTVB_4L2_lvdt_gap_downstream f:1 1 11.095173006215 1399233600.0
+36 LHC_CollimatorPos_TCTVB_4L2_lvdt_gap_upstream f:1 1 11.117604999786 1399233600.0
+37 LHC_CollimatorPos_TCTVB_4L2_lvdt_left_downstream f:1 1 6.2657452563246 1399233600.0
+38 LHC_CollimatorPos_TCTVB_4L2_lvdt_left_upstream f:1 1 6.2582903572663 1399233600.0
+39 LHC_CollimatorPos_TCTVB_4L2_lvdt_right_downstream f:1 1 -4.8219301074717 1399233600.0
+40 LHC_CollimatorPos_TCTVB_4L2_lvdt_right_upstream f:1 1 -4.822643299829 1399233600.0
+41 LHC_CollimatorPos_TCTVB_4R2_lvdt_gap_downstream f:1 1 11.199854263647 1399233600.0
+42 LHC_CollimatorPos_TCTVB_4R2_lvdt_gap_upstream f:1 1 10.883404308687 1399233600.0
+43 LHC_CollimatorPos_TCTVB_4R2_lvdt_left_downstream f:1 1 5.1526992903188 1399233600.0
+44 LHC_CollimatorPos_TCTVB_4R2_lvdt_left_upstream f:1 1 5.1308726395455 1399233600.0
+45 LHC_CollimatorPos_TCTVB_4R2_lvdt_right_downstream f:1 1 -5.9879638081037 1399233600.0
+46 LHC_CollimatorPos_TCTVB_4R2_lvdt_right_upstream f:1 1 -5.9028395851616 1399233600.0
+47 LHC_BeamSizeBeam1_acqMode i:1 1 0 1399233600.0
+48 LHC_BeamSizeBeam1_sigmaH f:1 1 0.78663575993523 1399233600.0
+49 LHC_BeamSizeBeam1_sigmaV f:1 1 0.66309333285671 1399233600.0
+50 LHC_BeamSizeBeam1_emittanceH f:1 1 -1 1399233600.0
+51 LHC_BeamSizeBeam1_emittanceV f:1 1 -1 1399233600.0
+52 LHC_BeamSizeBeam1_errorSigmaH f:1 1 -1 1399233600.0
+53 LHC_BeamSizeBeam1_errorSigmaV f:1 1 -1 1399233600.0
+54 LHC_BeamSizeBeam2_acqMode i:1 1 0 1399233600.0
+55 LHC_BeamSizeBeam2_sigmaH f:1 1 0.65687035181571 1399233600.0
+56 LHC_BeamSizeBeam2_sigmaV f:1 1 0.82232160177854 1399233600.0
+57 LHC_BeamSizeBeam2_emittanceH f:1 1 -1 1399233600.0
+58 LHC_BeamSizeBeam2_emittanceV f:1 1 -1 1399233600.0
+59 LHC_BeamSizeBeam2_errorSigmaH f:1 1 -1 1399233600.0
+60 LHC_BeamSizeBeam2_errorSigmaV f:1 1 -1 1399233600.0
+61 LHC_CirculatingBunchConfig_Beam1 i:2808 1 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399233600.0
+62 LHC_CirculatingBunchConfig_Beam2 i:2808 1 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399233600.0
+63 LHC_BeamIntensityPerBunchBeam1_averageBeamIntensity f:1 2 21897063148.426 1399233600.0 21888637698.717 1328280471.0
+64 LHC_BeamIntensityPerBunchBeam2_averageBeamIntensity f:1 1 21621985721.014 1399233600.0
+65 LHC_BeamLuminosityPerBunchBRANB_4L2_BunchLuminosityError f:1 1 0 0.0
+66 LHC_BeamLuminosityPerBunchBRANB_4R2_BunchLuminosityError f:1 1 0 0.0
+67 LHC_BeamIntensityPerBunchBeam1_Average_BunchIntensities f:3564 1 160502880 5017949 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155904384 4949961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399233600.0
+68 LHC_BeamIntensityPerBunchBeam2_Average_BunchIntensities f:3564 1 139031360 2003243 349362.875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139608112 2134134 492293.03125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59583.453125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399233600.0
+69 LHC_BeamLuminosityPerBunchBRANB_4L2_Average_BunchLuminosity f:3564 1 3.2214286327362 0.73952382802963 0.25333333015442 0.039523810148239 0.0099999997764826 0.0099999997764826 0.0066666668280959 0.003333333414048 0.003333333414048 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.003333333414048 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399233600.0
+70 LHC_BeamLuminosityPerBunchBRANB_4R2_Average_BunchLuminosity f:3564 1 1.1682540178299 0.25 0.032539684325457 0.0055555556900799 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054761905223131 1399233600.0
+71 BPTX_deltaT_B1_B2 f:1 45 -1.0152015384615 1399233600.822 -1.00656 1328280471.799 -0.98337538461537 1328280472.377 -0.9989723076923 1328280473.236 -1.0006584615384 1328280473.908 -0.94606923076923 1328280474.752 -0.9469123076923 1328280475.112 -0.99644307692307 1328280476.143 -0.99749692307691 1328280476.581 -0.98485076923076 1328280476.597 -1.0164661538462 1328280476.972 -1.0124615384615 1328280477.910 -0.99412461538461 1328280478.129 -0.99644307692307 1328280478.74 -0.99264923076922 1328280479.308 -0.97473384615384 1328280480.543 -0.97937076923075 1328280480.668 -0.98885538461538 1328280481.168 -0.9956 1328280482.106 -0.98948769230768 1328280482.387 -0.98632615384614 1328280483.294 -0.99749692307691 1328280483.669 -0.97620923076923 1328280483.950 -0.99834 1328280483.982 -1.0124615384615 1328280484.115 -1.0116184615385 1328280484.880 -0.99581076923076 1328280485.506 -0.9682 1328280486.303 -0.99180615384614 1328280486.53 -0.98969846153845 1328280486.740 -0.97915999999999 1328280487.366 -0.98674769230769 1328280488.163 -0.97810615384614 1328280488.819 -0.95428923076922 1328280489.741 -0.95681846153845 1328280490.179 -0.95492153846152 1328280490.7 -0.94880923076923 1328280491.468 -0.95492153846153 1328280492.156 -0.95344615384614 1328280492.875 -0.95829384615384 1328280492.578 -0.97641999999999 1328280493.297 -0.98295384615383 1328280493.63 -0.98695846153845 1328280493.828 -0.9907523076923 1328280494.516 -0.99285999999999 1328280504.235
+72 BPTX_deltaTRMS_B1_B2 f:1 1 0.028 1399233600.660
+73 BPTX_Phase_B1 f:1 71 20.828627692308 1399233600.806 20.805443076923 1328280471.361 20.807129230769 1328280472.908 20.807972307692 1328280473.96 20.809026153846 1328280474.565 20.840641538462 1328280475.972 20.822304615385 1328280476.129 20.818510769231 1328280477.308 20.823147692308 1328280478.668 20.829892307692 1328280479.90 20.826730769231 1328280480.278 20.805443076923 1328280481.935 20.819564615385 1328280482.99 20.803756923077 1328280483.490 20.827363076923 1328280484.37 20.816824615385 1328280485.366 20.808183076923 1328280486.803 20.810712307692 1328280487.179 20.8046 1328280488.452 20.803124615385 1328280489.859 20.821250769231 1328280490.281 20.825255384615 1328280491.813 20.827363076923 1328280492.219 20.827152307692 1328280493.657 20.820829230769 1328280494.478 20.803124615385 1328280495.931 20.823358461538 1328280496.322 20.813452307692 1328280497.666 20.825044615385 1328280498.260 20.828206153846 1328280499.604 20.822093846154 1328280500.690 20.833264615385 1328280501.238 20.794272307692 1328280502.535 20.825255384615 1328280503.566 20.786684615385 1328280504.442 20.82378 1328280505.864 20.829470769231 1328280506.888 20.815349230769 1328280507.216 20.816403076923 1328280508.810 20.820829230769 1328280509.107 20.79364 1328280510.498 20.822726153846 1328280511.639 20.830103076923 1328280512.647 20.818721538462 1328280513.804 20.828838461538 1328280514.413 20.810501538462 1328280515.554 20.814927692308 1328280515.977 20.789424615385 1328280527.618 20.826309230769 1328280528.422 20.82378 1328280529.751 20.830524615385 1328280530.251 20.822093846154 1328280531.736 20.831156923077 1328280532.158 20.834529230769 1328280533.447 20.834318461538 1328280534.823 20.82926 1328280535.198 20.825255384615 1328280536.745 20.814084615385 1328280537.74 20.835793846154 1328280538.543 20.835372307692 1328280539.488 20.809026153846 1328280540.864 20.826730769231 1328280541.317 20.837269230769 1328280542.677 20.806075384615 1328280543.99 20.825044615385 1328280544.521 20.829049230769 1328280545.592 20.82926 1328280546.30 20.818089230769 1328280547.452 20.804389230769 1328280548.827 20.795326153846 1328280549.249 20.811133846154 1328280549.640
+74 BPTX_PhaseRMS_B1 f:1 71 0.0058577164199717 1399233600.806 0.015511813524426 1328280471.361 0.015802914149653 1328280472.908 0.019239432854636 1328280473.96 0.01765297689162 1328280475.565 0.0065606472656569 1328280476.972 0.0055540791768716 1328280477.129 0.0076992820075604 1328280478.308 0.0069124596192787 1328280479.668 0.0072585446892548 1328280480.90 0.005283964017633 1328280481.278 0.017016792931008 1328280482.935 0.0051407820877149 1328280483.99 0.0139146008709 1328280484.490 0.0067235054255271 1328280485.37 0.005486481374234 1328280486.366 0.015128621325001 1328280487.803 0.016171508739485 1328280488.179 0.015499780643609 1328280489.452 0.017963796128907 1328280490.859 0.0063752030899306 1328280491.281 0.0055508789005023 1328280492.813 0.0068218938181613 1328280493.219 0.0067383552678652 1328280494.657 0.012865730904849 1328280495.478 0.015341480985112 1328280496.931 0.0047919301246493 1328280497.322 0.016934622383338 1328280498.666 0.0068039624549779 1328280499.260 0.0059599635438304 1328280500.604 0.0051113168094559 1328280500.690 0.0056649499754943 1328280501.238 0.01969863708979 1328280502.535 0.0049859286968842 1328280503.566 0.022312190448352 1328280504.442 0.0074186577678792 1328280505.864 0.0058242521728351 1328280506.888 0.0052772339222195 1328280507.216 0.0067129255520564 1328280508.810 0.017311456062559 1328280509.107 0.032943170087054 1328280510.498 0.0069470766232619 1328280511.639 0.0052094547864048 1328280512.647 0.0069716523047255 1328280513.804 0.0060152371612846 1328280514.413 0.018799386644911 1328280515.554 0.017470849574421 1328280516.977 0.017691562954225 1328280517.618 0.005128669827663 1328280518.422 0.0050448309945238 1328280519.751 0.0054397247798458 1328280520.251 0.01624168053945 1328280521.736 0.005457254571267 1328280522.158 0.0055748361930979 1328280523.447 0.0063682310809661 1328280524.823 0.0071973911940361 1328280525.198 0.004265669311439 1328280526.745 0.0098465555807465 1328280527.74 0.0058089774227672 1328280528.543 0.0048265693649127 1328280529.488 0.013647856983303 1328280530.864 0.0043832906230803 1328280531.317 0.0046584291483475 1328280532.677 0.020739199650184 1328280533.99 0.018265437138107 1328280534.521 0.0074886874210325 1328280535.592 0.0081306126031047 1328280536.30 0.0057505633580465 1328280537.452 0.019671556500387 1328280538.827 0.019149170488932 1328280539.249 0.018977308536511 1328280540.640
+75 BPTX_Phase_Shift_B1 f:1 71 1.3713723076923 1399233600.806 1.3945569230769 1328280471.361 1.3928707692307 1328280472.908 1.3920276923077 1328280473.96 1.3909738461538 1328280475.565 1.3593584615384 1328280476.972 1.3776953846154 1328280477.129 1.3814892307692 1328280478.308 1.3768523076923 1328280479.668 1.3701076923077 1328280480.90 1.3732692307692 1328280481.278 1.3945569230769 1328280482.935 1.3804353846154 1328280483.99 1.3962430769231 1328280484.490 1.3726369230769 1328280485.37 1.3831753846154 1328280486.366 1.3918169230769 1328280487.803 1.3892876923077 1328280488.179 1.3954 1328280489.452 1.3968753846154 1328280490.859 1.3787492307692 1328280491.281 1.3747446153846 1328280492.813 1.3726369230769 1328280493.219 1.3728476923077 1328280494.657 1.3791707692307 1328280495.478 1.3968753846154 1328280496.931 1.3766415384615 1328280497.322 1.3865476923077 1328280498.666 1.3749553846154 1328280499.260 1.3717938461538 1328280500.604 1.3779061538461 1328280500.690 1.3667353846154 1328280501.238 1.4057276923077 1328280502.535 1.3747446153846 1328280503.566 1.4133153846154 1328280504.442 1.37622 1328280505.864 1.3705292307692 1328280506.888 1.3846507692307 1328280507.216 1.3835969230769 1328280508.810 1.3791707692307 1328280509.107 1.40636 1328280510.498 1.3772738461538 1328280511.639 1.3698969230769 1328280512.647 1.3812784615384 1328280513.804 1.3711615384615 1328280514.413 1.3894984615384 1328280515.554 1.3850723076923 1328280516.977 1.4105753846154 1328280517.618 1.3736907692308 1328280518.422 1.37622 1328280519.751 1.3694753846154 1328280520.251 1.3779061538461 1328280521.736 1.3688430769231 1328280522.158 1.3654707692307 1328280523.447 1.3656815384615 1328280524.823 1.37074 1328280525.198 1.3747446153846 1328280526.745 1.3859153846154 1328280527.74 1.3642061538461 1328280528.543 1.3646276923077 1328280529.488 1.3909738461538 1328280530.864 1.3732692307692 1328280531.317 1.3627307692307 1328280532.677 1.3939246153846 1328280533.99 1.3749553846154 1328280534.521 1.3709507692307 1328280535.592 1.37074 1328280536.30 1.3819107692307 1328280537.452 1.3956107692307 1328280538.827 1.4046738461538 1328280539.249 1.3888661538461 1328280540.640
+76 BPTX_Phase_B2 f:1 70 21.883426153846 1399233600.962 21.892067692308 1328280471.799 21.876470769231 1328280472.221 21.93106 1328280473.737 21.881529230769 1328280474.143 21.894175384615 1328280475.581 21.89818 1328280476.894 21.895861538462 1328280477.58 21.913776923077 1328280478.543 21.904292307692 1328280479.153 21.910404615385 1328280480.356 21.899233846154 1328280481.653 21.877103076923 1328280482.966 21.877946153846 1328280483.865 21.905556923077 1328280484.287 21.907664615385 1328280485.725 21.900076923077 1328280486.147 21.923893846154 1328280487.726 21.925790769231 1328280488.991 21.919678461538 1328280489.140 21.914830769231 1328280490.562 21.908296923077 1328280491.47 21.904503076923 1328280492.500 21.896915384615 1328280493.938 21.930638461538 1328280494.236 21.891646153846 1328280495.40 21.915041538462 1328280496.494 21.904924615385 1328280497.932 21.916938461538 1328280498.229 21.898601538462 1328280499.510 21.905556923077 1328280500.440 21.905978461538 1328280501.894 21.899233846154 1328280502.425 21.900498461538 1328280503.707 21.897758461538 1328280504.176 21.893543076923 1328280505.676 21.915884615385 1328280506.247 21.897969230769 1328280507.685 21.879632307692 1328280508.169 21.91188 1328280509.654 21.908718461538 1328280510.76 21.915673846154 1328280511.405 21.88174 1328280512.100 21.898390769231 1328280513.538 21.889327692308 1328280514.976 21.8927 1328280515.461 21.903449230769 1328280516.930 21.893964615385 1328280517.118 21.911247692308 1328280518.844 21.922207692308 1328280519.345 21.915252307692 1328280520.642 21.927898461538 1328280521.126 21.907875384615 1328280522.517 21.920521538462 1328280523.908 21.911458461538 1328280524.854 21.919889230769 1328280525.120 21.919467692308 1328280526.683 21.924104615385 1328280527.136 21.910404615385 1328280528.496 21.918624615385 1328280529.902 21.919256923077 1328280530.145 21.906189230769 1328280531.473 21.905767692308 1328280532.974 21.912723076923 1328280533.380 21.934432307692 1328280534.818 21.928530769231 1328280535.920 21.88722 1328280536.233 21.891435384615 1328280537.624 21.912933846154 1328280538.140 21.924526153846 1328280549.953
+77 BPTX_PhaseRMS_B2 f:1 71 0.0132582055512 1399233600.962 0.011851154828506 1328280471.799 0.011666034083724 1328280472.221 0.015545713227875 1328280473.737 0.012332431712872 1328280474.143 0.0099611598858862 1328280475.581 0.015827211538637 1328280476.894 0.0095429827994217 1328280477.58 0.013351028814822 1328280478.543 0.016137271936797 1328280479.153 0.013745159888304 1328280480.356 0.015634474545681 1328280481.653 0.011277434147303 1328280482.966 0.016429863739095 1328280483.865 0.015941177938999 1328280484.287 0.020249647676094 1328280485.725 0.013469456660233 1328280486.147 0.01311198078095 1328280487.726 0.011828642641722 1328280488.991 0.014720838902324 1328280489.140 0.016782313880142 1328280490.562 0.012131412606713 1328280491.47 0.014955558472714 1328280492.500 0.014868570441783 1328280493.938 0.012491522569114 1328280494.236 0.0085666738347923 1328280495.40 0.017582373778654 1328280496.494 0.010274000148591 1328280497.932 0.012844824067516 1328280498.229 0.016499475257928 1328280499.510 0.012268869500348 1328280500.440 0.012691038295496 1328280501.894 0.013374133968534 1328280502.425 0.012289129501528 1328280503.707 0.014913915197187 1328280504.176 0.0087282386166461 1328280505.676 0.012247306526733 1328280506.247 0.0087208555033358 1328280507.685 0.013074659433039 1328280508.169 0.010714874205084 1328280509.654 0.010536142821836 1328280510.76 0.018738795222493 1328280511.405 0.011040968667306 1328280512.100 0.012655985921491 1328280513.538 0.014664601512308 1328280514.976 0.0079605504403661 1328280515.461 0.013669810524046 1328280516.930 0.017783353302304 1328280517.118 0.014802093638897 1328280518.844 0.013197082742008 1328280519.345 0.01971295218345 1328280520.642 0.017285133085945 1328280521.126 0.014735919878805 1328280522.517 0.0089969087261802 1328280523.908 0.017406527212107 1328280524.854 0.018700825890695 1328280525.120 0.018525644238133 1328280526.683 0.013044555199585 1328280527.136 0.016435811103418 1328280528.496 0.01551066793796 1328280529.902 0.02002074723281 1328280530.145 0.013745159888304 1328280531.473 0.014012746260155 1328280532.974 0.011974957301254 1328280533.380 0.01518431040922 1328280534.818 0.018449833629243 1328280535.920 0.015832824124689 1328280536.233 0.013562963152182 1328280537.624 0.010378966908264 1328280538.140 0.016160516871751 1328280539.577 0.01228334433962 1328280540.953
+78 BPTX_Phase_Shift_B2 f:1 70 0.31657384615382 1399233600.962 0.30793230769228 1328280471.799 0.32352923076921 1328280472.221 0.26893999999998 1328280473.737 0.31847076923075 1328280474.143 0.30582461538459 1328280475.581 0.30181999999998 1328280476.894 0.30413846153844 1328280477.58 0.28622307692305 1328280478.543 0.29570769230767 1328280479.153 0.28959538461536 1328280480.356 0.30076615384613 1328280481.653 0.3228969230769 1328280482.966 0.32205384615382 1328280483.865 0.29444307692305 1328280484.287 0.29233538461536 1328280485.725 0.29992307692305 1328280486.147 0.27610615384613 1328280487.726 0.27420923076921 1328280488.991 0.28032153846151 1328280489.140 0.28516923076921 1328280490.562 0.29170307692305 1328280491.47 0.2954969230769 1328280492.500 0.30308461538459 1328280493.938 0.26936153846151 1328280494.236 0.30835384615382 1328280495.40 0.28495846153844 1328280496.494 0.29507538461536 1328280497.932 0.28306153846152 1328280498.229 0.30139846153844 1328280499.510 0.29444307692305 1328280500.440 0.29402153846151 1328280501.894 0.30076615384613 1328280502.425 0.29950153846152 1328280503.707 0.30224153846152 1328280504.176 0.3064569230769 1328280505.676 0.28411538461536 1328280506.247 0.30203076923074 1328280507.685 0.32036769230767 1328280508.169 0.28811999999997 1328280509.654 0.29128153846152 1328280510.76 0.28432615384613 1328280511.405 0.31825999999998 1328280512.100 0.30160923076921 1328280513.538 0.31067230769228 1328280514.976 0.30729999999997 1328280515.461 0.29655076923075 1328280516.930 0.30603538461536 1328280517.118 0.28875230769228 1328280518.844 0.27779230769229 1328280519.345 0.28474769230766 1328280520.642 0.27210153846152 1328280521.126 0.29212461538459 1328280522.517 0.27947846153844 1328280523.908 0.28854153846152 1328280524.854 0.28011076923075 1328280525.120 0.28053230769229 1328280526.683 0.27589538461536 1328280527.136 0.28959538461536 1328280528.496 0.28137538461536 1328280529.902 0.28074307692305 1328280530.145 0.29381076923075 1328280531.473 0.29423230769229 1328280532.974 0.2872769230769 1328280533.380 0.26556769230767 1328280534.818 0.27146923076921 1328280535.920 0.31277999999998 1328280536.233 0.30856461538459 1328280537.624 0.28706615384613 1328280538.140 0.27547384615383 1328280539.953
+79 LHC_Particle_Type_B1 s:1 1 PROTON 1297160580.0
+80 LHC_Particle_Type_B2 s:1 1 PROTON 1297160580.0
+81 LHC_Data_Quality_Flag b:1 5 1 1297160580.0 0 1297160581.0 0 1297160582.0 1 1399233600.2 0 1328280472.0
==== END_OF_BLOCK ====
#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
AliHLTExternalTrackParam fTracklets[1]; // array of tracklets
#else
- AliHLTExternalTrackParam fTracklets[]; // array of tracklets
+ AliHLTExternalTrackParam fTracklets[0]; // array of tracklets
#endif
};
#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
AliHLTTrackMCLabel fLabels[1];
#else
- AliHLTTrackMCLabel fLabels[];
+ AliHLTTrackMCLabel fLabels[0];
#endif
};
}
header=&headerV2;
} else { //assuming V3 even if no header at all was found above
+ if(! headerVersion){
+ AliWarning("No data header found! Creating dummy header for empty blocks assuming CDH v3.");
+ }
headerV3.fSize=sizeof(AliRawDataHeaderV3);
const UInt_t* triggermask=pRawReader->GetTriggerPattern();
if (triggermask) {
struct AliHLTITSClusterData
{
AliHLTUInt32_t fSpacePointCnt;
-#ifndef __SUNPRO_CC
- AliHLTITSSpacePointData fSpacePoints[];
-#else
+#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
AliHLTITSSpacePointData fSpacePoints[1];
+#else
+ AliHLTITSSpacePointData fSpacePoints[0];
#endif
};
struct AliHLTTPCClusterData
{
AliHLTUInt32_t fSpacePointCnt;
-#if !defined(__SUNPRO_CC) && !defined(__clang__)
- AliHLTTPCSpacePointData fSpacePoints[];
-#else
+#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
AliHLTTPCSpacePointData fSpacePoints[1];
+#else
+ AliHLTTPCSpacePointData fSpacePoints[0];
#endif
};
struct AliHLTTPCClusterMCData
{
AliHLTUInt32_t fCount;
-#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC) || defined (__clang__)
+#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
AliHLTTPCClusterMCLabel fLabels[1];
#else
- AliHLTTPCClusterMCLabel fLabels[];
+ AliHLTTPCClusterMCLabel fLabels[0];
#endif
};
*/
struct AliHLTTPCUnpackedRawData
{
-#ifndef __SUNPRO_CC
- AliHLTTPCDigitRowData fDigits[];
-#else
+#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
AliHLTTPCDigitRowData fDigits[1];
+#else
+ AliHLTTPCDigitRowData fDigits[0];
#endif
};
c.SetQMax(cl.GetQMax());
outputRaw->fCount++;
}
-
- // fill into HLT output data
- AliHLTComponentBlockData bdRawClusters;
- FillBlockData( bdRawClusters );
- bdRawClusters.fOffset = size;
- bdRawClusters.fSize = sizeof(AliHLTTPCRawClusterData)+outputRaw->fCount*sizeof(AliHLTTPCRawCluster);
- bdRawClusters.fSpecification = iter->fSpecification;
- bdRawClusters.fDataType = AliHLTTPCDefinitions::fgkRawClustersDataType | kAliHLTDataOriginTPC;
- outputBlocks.push_back( bdRawClusters );
- fBenchmark.AddOutput(bdRawClusters.fSize);
- size += bdRawClusters.fSize;
- outputPtr += bdRawClusters.fSize;
- }
- continue; // HW clusters data block
+ }
+ // fill into HLT output data
+ AliHLTComponentBlockData bdRawClusters;
+ FillBlockData( bdRawClusters );
+ bdRawClusters.fOffset = size;
+ bdRawClusters.fSize = sizeof(AliHLTTPCRawClusterData)+outputRaw->fCount*sizeof(AliHLTTPCRawCluster);
+ bdRawClusters.fSpecification = iter->fSpecification;
+ bdRawClusters.fDataType = AliHLTTPCDefinitions::fgkRawClustersDataType | kAliHLTDataOriginTPC;
+ outputBlocks.push_back( bdRawClusters );
+ fBenchmark.AddOutput(bdRawClusters.fSize);
+ size += bdRawClusters.fSize;
+ outputPtr += bdRawClusters.fSize;
}
} // end of loop over data blocks
struct AliHLTTPCTrackletData
{
AliHLTUInt32_t fTrackletCnt;
-#ifndef __SUNPRO_CC
- AliHLTTPCTrackSegmentData fTracklets[];
-#else
+#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
AliHLTTPCTrackSegmentData fTracklets[1];
+#else
+ AliHLTTPCTrackSegmentData fTracklets[0];
#endif
//AliHLTTPCSpacePointData fSpacePoints[];
};
#include "AliHLTProcessor.h"
//forward declarations
-class AliHLTTPCSpacePointData;
+struct AliHLTTPCSpacePointData;
class AliTPCParam;
//class TClonesArray;
class TObjArray;
GPUd() static int CalculateHitWeight( int NHits, float chi2, int ) {
const float chi2_suppress = 6.f;
float weight = (((float) NHits * (chi2_suppress - chi2 / 500.f)) * (1e9 / chi2_suppress / 160.));
- if (weight < 0 || weight > 2e9) weight = 0;
+ if (weight < 0. || weight > 2e9) return 0;
return ( (int) weight );
//return( (NHits << 16) + num);
}
void AliHLTTPCCATrackerComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
{
// define guess for the output data size
- constBase = 200; // minimum size
+ constBase = 1200; // minimum size
inputMultiplier = 0.6; // size relative to input
}
class AliHLTTPCCATrackerFramework;
class AliHLTTPCCASliceOutput;
class AliHLTTPCCAClusterData;
-class AliHLTTPCSpacePointData;
+struct AliHLTTPCSpacePointData;
/**
* @class AliHLTTPCCATrackerComponent
AliHLTTRDClustersArray(Int_t det):fDetector(det),fCount(0){}
Short_t fDetector;
UShort_t fCount;
-#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC) || defined(__clang__)
+#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
cluster_type fCluster[1];
#else
- cluster_type fCluster[];
+ cluster_type fCluster[0];
#endif
};
#if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
UInt_t fTracklets[1];
#else
- UInt_t fTracklets[];
+ UInt_t fTracklets[0];
#endif
};
#include "AliHLTProcessor.h"
-class AliHLTTPCSpacePointData;
+struct AliHLTTPCSpacePointData;
class AliHLTGlobalBarrelTrack;
class AliHLTGlobalTrackResidualsComponent : public AliHLTProcessor {
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+
+
+////////////////////////////////////////////////////////////////////////////
+// Implementation of the ITS SDD fast clusterer class //
+// //
+// Origin: Simone Capodicasa, Universita e INFN, capodica@to.infn.it //
+// //
+////////////////////////////////////////////////////////////////////////////
+
+#include <vector>
+#include <TClonesArray.h>
+#include <TBits.h>
+#include <TMath.h>
+#include <TH2F.h>
+#include <TFile.h>
+#include "AliITSClusterFinderSDDfast.h"
+#include "AliITSRecPoint.h"
+#include "AliITSRecPointContainer.h"
+#include "AliITSDetTypeRec.h"
+#include "AliRawReader.h"
+#include "AliITSRawStreamSDD.h"
+#include "AliITSRawStreamSDDCompressed.h"
+#include "AliITSCalibrationSDD.h"
+#include "AliITSresponseSDD.h"
+#include "AliITSDetTypeRec.h"
+#include "AliITSReconstructor.h"
+#include "AliITSsegmentationSDD.h"
+#include "AliITSdigitSDD.h"
+#include "AliITSgeomTGeo.h"
+
+ClassImp(AliITSClusterFinderSDDfast)
+
+AliITSClusterFinderSDDfast::AliITSClusterFinderSDDfast(AliITSDetTypeRec* dettyp):AliITSClusterFinder(dettyp),
+ fNAnodes(0),
+ fNTimeBins(0),
+ fNZbins(0),
+ fNXbins(0),
+ fDDLBins(),
+ fCutOnPeakLoose(0.),
+ fCutOnPeakTight(0.),
+ fMaxDrTimeForTightCut(0.)
+{
+ //Default constructor
+ fNAnodes = GetSeg()->NpzHalf();
+ fNZbins = fNAnodes+2;
+ fNTimeBins = GetSeg()->Npx();
+ fNXbins = fNTimeBins+2;
+ AliDebug(2,Form("Cells in SDD cluster finder: Andoes=%d TimeBins=%d",fNAnodes,fNTimeBins));
+ SetPeakSelection(15.,30.,2000.);
+ fDDLBins.resize(kHybridsPerDDL);
+}
+
+
+//______________________________________________________________________
+AliITSClusterFinderSDDfast::~AliITSClusterFinderSDDfast()
+{
+ //Default destructor
+}
+
+//______________________________________________________________________
+void AliITSClusterFinderSDDfast::FindRawClusters(Int_t mod){
+
+ //Find clusters
+ SetModule(mod);
+ FindClustersSDD(fDigits);
+
+}
+
+//______________________________________________________________________
+void AliITSClusterFinderSDDfast::FindClustersSDD(TClonesArray *digits){
+
+ std::vector<int> bins0;
+ std::vector<int> bins1;
+ const Int_t kMapDim=fNZbins*fNXbins/32;
+ Int_t map0[kMapDim];
+ Int_t map1[kMapDim];
+ for(Int_t j=0;j<kMapDim;++j){
+ map0[j]=map1[j]=0;
+ }
+ AliITSCalibrationSDD* cal = (AliITSCalibrationSDD*)GetResp(fModule);
+ if(cal==0){
+ AliError(Form("Calibration object not present for SDD module %d\n",fModule));
+ return;
+ }
+
+ AliITSdigitSDD *d=0;
+ Int_t i, ndigits=digits->GetEntriesFast();
+ for (i=0; i<ndigits; i++){
+ d=(AliITSdigitSDD*)digits->UncheckedAt(i);
+ Int_t ian=d->GetCoord1();
+ Int_t itb=d->GetCoord2();
+ Float_t gain=cal->GetChannelGain(ian)/fDetTypeRec->GetAverageGainSDD();
+ Float_t charge=d->GetSignal(); // returns expanded signal
+ // (10 bit, low threshold already added)
+ Float_t baseline = cal->GetBaseline(ian);
+ if(charge>baseline) charge-=baseline;
+ else charge=0;
+
+ if(gain>0.){ // Bad channels have gain=0.
+ charge/=gain;
+ if(charge<cal->GetThresholdAnode(ian)) continue;
+ Int_t q=(Int_t)(charge+0.5);
+ Int_t y=itb+1;
+ Int_t z=ian+1;
+ Int_t iindex=y*fNZbins+z;
+ Float_t noise=cal->GetNoiseAfterElectronics(ian)*2.2; // applies zero suppression using the measured noise of each anode. Threshold values from ALICE-INT-1999-28 V10
+ if (z<=fNAnodes){
+ if(q>noise){
+ bins0.push_back(iindex);
+ bins0.push_back(q);
+ bins0.push_back(0);
+ bins0.push_back(i);
+ map0[iindex/32]|=(1<<(iindex%32));
+ }
+ }
+ else{
+ z-=fNAnodes;
+ if(q>noise){
+ iindex=y*fNZbins+z;
+ bins1.push_back(iindex);
+ bins1.push_back(q);
+ bins1.push_back(0);
+ bins1.push_back(i);
+ map1[iindex/32]|=(1<<(iindex%32));
+ }
+ }
+ }
+ }
+ FindClustersSDD(bins0, bins1, map0, map1, digits);
+}
+
+//______________________________________________________________________
+void AliITSClusterFinderSDDfast::FindClustersSDD(std::vector<int>& bins0, std::vector<int>& bins1, const Int_t map0[], const Int_t map1[], TClonesArray *digits, TClonesArray *clusters, Int_t jitter){
+
+ static AliITSRecoParam *repa = NULL;
+ if(!repa){
+ repa = (AliITSRecoParam*) AliITSReconstructor::GetRecoParam();
+ if(!repa){
+ repa = AliITSRecoParam::GetHighFluxParam();
+ AliWarning("Using default AliITSRecoParam class");
+ }
+ }
+ const TGeoHMatrix *mT2L=AliITSgeomTGeo::GetTracking2LocalMatrix(fModule);
+ AliITSCalibrationSDD* cal = (AliITSCalibrationSDD*)GetResp(fModule);
+ if(cal==0){
+ AliError(Form("Calibration object not present for SDD module %d\n",fModule));
+ return;
+ }
+
+ TClonesArray &cl=*clusters;
+ Int_t nrp=0;
+ for (Int_t s=0; s<2; s++){
+ Int_t *bins;
+ unsigned int binssize;
+ const Int_t* map;
+ if(s==0){
+ binssize=bins0.size();
+ bins = &bins0[0];
+ map=map0;
+ }
+ if(s==1){
+ binssize=bins1.size();
+ bins=&bins1[0];
+ map=map1;
+ }
+
+ const Int_t rresto=fNZbins-1;
+ Int_t cid=0;
+ for(std::vector<int>::size_type i=0;i<binssize;i+=4){
+ if(!bins[i+2])
+ bins[i+2]=++cid;
+ Int_t me=bins[i];
+ Int_t resto=me%fNZbins;
+ if(resto==rresto){
+ Int_t idxs[1]={me+fNZbins};
+ for(Int_t k=0;k<1;++k)
+ if(map[idxs[k]/32]&(1<<(idxs[k]%32)))
+ for(std::vector<int>::size_type j=i+4;j<binssize;j+=4)
+ if(bins[j]==idxs[k]){
+ bins[j+2]=bins[i+2];
+ break;
+ }
+ }
+ else{
+ Int_t idxs[2]={me+1,me+fNZbins};
+ for(int k=0;k<2;++k)
+ if(map[idxs[k]/32]&(1<<(idxs[k]%32)))
+ for(std::vector<int>::size_type j=i+4;j<binssize;j+=4)
+ if(bins[j]==idxs[k]){
+ bins[j+2]=bins[i+2];
+ break;
+ }
+ }
+ }
+ for(std::vector<int>::size_type i=0;i<binssize;i+=4){
+ Int_t me=bins[i];
+ Int_t resto=me%fNZbins;
+ if(resto==fNZbins-1){
+ Int_t idxs[1]={me+fNZbins};
+ Int_t myid=bins[i+2];
+ for(Int_t l=0;l<1;++l){
+ if(map[idxs[l]/32]&(1<<(idxs[l]%32)))
+ for(std::vector<int>::size_type j=i+4;j<binssize;j+=4){
+ if(bins[j]==idxs[l]){
+ Int_t hisid=bins[j+2];
+ if(myid!=hisid){
+ for(std::vector<int>::size_type k=2;k<binssize;k+=4)
+ if(bins[k]==hisid)
+ bins[k]=myid;
+ }
+ break;
+ }
+ }
+ }
+ }
+ else{
+ Int_t idxs[2]={me+1,me+fNZbins};
+ Int_t myid=bins[i+2];
+ for(Int_t l=0;l<2;++l){
+ if(map[idxs[l]/32]&(1<<(idxs[l]%32)))
+ for(std::vector<int>::size_type j=i+4;j<binssize;j+=4){
+ if(bins[j]==idxs[l]){
+ Int_t hisid=bins[j+2];
+ if(myid!=hisid){
+ for(std::vector<int>::size_type k=2;k<binssize;k+=4)
+ if(bins[k]==hisid)
+ bins[k]=myid;
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ Int_t recp[cid][12];
+ for(Int_t i=0;i<cid;++i)
+ for(Int_t j=0;j<12;++j)
+ recp[i][j]=0;
+
+ Int_t kplab[cid][10];
+ for(Int_t i=0;i<cid;++i)
+ for(Int_t j=0;j<10;++j)
+ kplab[i][j]=-2;
+
+ for(std::vector<int>::size_type i=0;i<binssize;i+=4){
+ Int_t q=bins[i+1];
+ Int_t me=bins[i+2]-1;
+ Int_t z=bins[i]%fNZbins;
+ Int_t x=bins[i]/fNZbins;
+ recp[me][0]+=q; //sumq
+ recp[me][1]+=z*q; //sumz
+ recp[me][2]+=x*q; //sumx
+
+#ifdef CSBASEDERROR
+ recp[me][3]+=z*z*q; //sigmaZ2
+ recp[me][4]+=x*x*q; //sigmaX2
+#endif
+
+ if(recp[me][5]==0){
+ recp[me][6]=z;
+ recp[me][7]=z;
+ recp[me][8]=x;
+ recp[me][9]=x;
+ recp[me][10]=q;
+ recp[me][11]=bins[i];
+ }
+ else{
+ if(recp[me][6]<z) recp[me][6]=z;
+ if(recp[me][7]>z) recp[me][7]=z;
+ if(recp[me][8]<x) recp[me][8]=x;
+ if(recp[me][9]>x) recp[me][9]=x;
+ if(recp[me][10]<q){
+ recp[me][10]=q;
+ recp[me][11]=bins[i];
+ }
+ }
+
+ if(digits){
+ Int_t kplab2[10];
+ for(Int_t ilab=0;ilab<10;++ilab)
+ kplab2[ilab]=kplab[me][ilab];
+ AliITSdigitSDD* d=(AliITSdigitSDD*)digits->UncheckedAt(bins[i+3]);
+ for (Int_t itrack=0;itrack<10;itrack++){
+ Int_t track = (d->GetTracks())[itrack];
+ if (track>=0) {
+ AddLabel(kplab2, track);
+ }
+ }
+ for(Int_t ilab=0;ilab<10;++ilab)
+ kplab[me][ilab]=kplab2[ilab];
+ }
+ ++recp[me][5]; //nPiInClu
+ }
+
+ for(Int_t i=0;i<cid;++i){
+ if(recp[i][5]==0) continue;
+ if(recp[i][5]==1) continue;
+
+ Float_t q=recp[i][0];
+
+ Int_t clSizAnode=recp[i][6]-recp[i][7]+1;
+ Int_t clSizTb=recp[i][8]-recp[i][9]+1;
+ if(repa->GetUseSDDClusterSizeSelection()){
+ if(clSizTb==1) continue; // cut common mode noise spikes
+ if(clSizAnode>5) continue; // cut common mode noise spikes
+ if(clSizTb>10) continue; // cut clusters on noisy anodes
+ if(cal->IsAMAt20MHz() && clSizTb>8) continue; // cut clusters on noisy anodes
+ }
+
+ Float_t zz=(Float_t)recp[i][1]/q;
+ Float_t xx=(Float_t)recp[i][2]/q;
+
+ AliITSresponseSDD* rsdd = fDetTypeRec->GetResponseSDD();
+
+ Float_t zAnode=zz-0.5; // to have anode in range 0.-255. and centered on the mid of the pitch
+ Float_t timebin=xx-0.5; // to have time bin in range 0.-255. amd centered on the mid of the bin
+
+ if(s==1) zAnode+=fNAnodes; // right side has anodes from 256. to 511.
+
+ Float_t zdet=GetSeg()->GetLocalZFromAnode(zAnode);
+ Float_t driftTimeUncorr=GetSeg()->GetDriftTimeFromTb(timebin)+jitter*rsdd->GetCarlosRXClockPeriod();
+ Float_t driftTime=driftTimeUncorr-rsdd->GetTimeZero(fModule);
+
+ if(driftTime<fMaxDrTimeForTightCut && recp[i][10]<fCutOnPeakTight) continue;
+
+ Float_t driftSpeed=cal->GetDriftSpeedAtAnode(zAnode) + rsdd->GetDeltaVDrift(fModule,zAnode>255);
+ Float_t driftPathMicron=driftTime*driftSpeed;
+ const Double_t kMicronTocm=1.0e-4;
+ Float_t xdet=(driftPathMicron-GetSeg()->Dx())*kMicronTocm; // xdet is negative
+ if(s==0) xdet=-xdet; // left side has positive local x
+
+ if(repa->GetUseSDDCorrectionMaps()){
+ Float_t corrx=0, corrz=0;
+ cal->GetCorrections(zdet,xdet,corrz,corrx,GetSeg());
+ zdet+=corrz;
+ xdet+=corrx;
+ }
+
+ Double_t loc[3]={xdet,0.,zdet},trk[3]={0.,0.,0.};
+ mT2L->MasterToLocal(loc,trk);
+ xx=trk[1];
+ zz=trk[2];
+
+ q+=(driftTime*rsdd->GetADCvsDriftTime(fModule)); // correction for zero supp.
+ q/=rsdd->GetADCtokeV(fModule);
+ if(cal-> IsAMAt20MHz()) q*=2.; // account for 1/2 sampling freq.
+ if(q<repa->GetMinClusterChargeSDD()) continue; // remove noise clusters
+
+#ifdef CSBASEDERROR
+ Float_t hit[6]={xx,zz,recp[i][3],recp[i][4],q,0.};
+#else
+ Float_t hit[6]={xx, zz, 0.0030*0.0030, 0.0020*0.0020, q, 0.};
+#endif
+
+ Int_t info[3]={clSizTb, clSizAnode, fNlayer[fModule]};
+
+ Int_t kplab2[10];
+ if(digits){
+ for(Int_t ilab=0;ilab<10;++ilab)
+ if(kplab[i][ilab]!=-2)
+ kplab2[ilab]=kplab[i][ilab];
+ else
+ kplab2[ilab]=-2;
+ }
+ else{
+ if(fRawID2ClusID) kplab2[0]=fNClusters+1; // RS: store clID+1 as a reference to the cluster
+ for(Int_t ilab=1;ilab<10;++ilab)
+ kplab2[ilab]=-2;
+ }
+ if(digits) CheckLabels2(kplab2);
+ kplab2[3]=fNdet[fModule];
+ AliITSRecPoint cc(kplab2,hit,info);
+ cc.SetType(101);
+ cc.SetDriftTime(driftTimeUncorr);
+ cc.SetDriftSide(s);
+ cc.SetChargeRatio(recp[i][10]);
+ if(clusters) new (cl[nrp]) AliITSRecPoint(cc);
+ else {
+ fDetTypeRec->AddRecPoint(cc);
+ }
+ ++nrp;
+ ++fNClusters;
+ }
+ }
+ AliDebug(2,Form("Clusters found on SDD module %d (unfolding %d) = %d\n",fModule,repa->GetUseUnfoldingInClusterFinderSDD(),nrp));
+}
+
+//______________________________________________________________________
+void AliITSClusterFinderSDDfast::RawdataToClusters(AliRawReader* rawReader){
+ //------------------------------------------------------------
+ // This function creates ITS clusters from raw data
+ //------------------------------------------------------------
+ fNClusters = 0; //RS
+ AliITSRawStream* inputSDD=AliITSRawStreamSDD::CreateRawStreamSDD(rawReader);
+ AliDebug(1,Form("%s is used",inputSDD->ClassName()));
+
+ AliITSDDLModuleMapSDD *ddlmap=(AliITSDDLModuleMapSDD*)fDetTypeRec->GetDDLModuleMapSDD();
+ inputSDD->SetDDLModuleMap(ddlmap);
+ for(Int_t iddl=0; iddl<AliITSDDLModuleMapSDD::GetNDDLs(); iddl++){
+ for(Int_t icar=0; icar<AliITSDDLModuleMapSDD::GetNModPerDDL();icar++){
+ Int_t iMod=ddlmap->GetModuleNumber(iddl,icar);
+ if(iMod==-1) continue;
+ AliITSCalibrationSDD* cal = (AliITSCalibrationSDD*)GetResp(iMod);
+ if(cal==0){
+ AliError(Form("Calibration object not present for SDD module %d\n",iMod));
+ continue;
+ }
+ Bool_t isZeroSupp=cal->GetZeroSupp();
+ if(isZeroSupp){
+ for(Int_t iSid=0; iSid<2; iSid++) inputSDD->SetZeroSuppLowThreshold(iMod-240,iSid,cal->GetZSLowThreshold(iSid));
+ }else{
+ for(Int_t iSid=0; iSid<2; iSid++) inputSDD->SetZeroSuppLowThreshold(iMod-240,iSid,0);
+ }
+ }
+ }
+ FindClustersSDD(inputSDD);
+ delete inputSDD;
+}
+
+void AliITSClusterFinderSDDfast::FindClustersSDD(AliITSRawStream* input){
+
+ AliITSRecPointContainer* rpc = AliITSRecPointContainer::Instance();
+ Int_t nClustersSDD=0;
+
+ const Int_t kMapDim=fNZbins*fNXbins/32;
+ Int_t mapsDDL[kHybridsPerDDL][kMapDim];
+ for(Int_t i=0;i<kHybridsPerDDL;++i)
+ for(Int_t j=0;j<kMapDim;++j)
+ mapsDDL[i][j]=0;
+
+ Int_t vectModId[kModulesPerDDL];
+ for(Int_t iMod=0; iMod<kModulesPerDDL; iMod++) vectModId[iMod]=-1;
+ // read raw data input stream
+ int countRW = 0; //RS
+ if (fRawID2ClusID) fRawID2ClusID->Reset(); //RS if array was provided, we shall store the rawID -> ClusterID
+
+ while (input->Next()) {
+ Int_t iModule = input->GetModuleID();
+ if(iModule<0){
+ AliWarning(Form("Invalid SDD module number %d\n", iModule));
+ continue;
+ }
+ Int_t iCarlos=input->GetCarlosId();
+ Int_t iSide=input->GetChannel();
+ Int_t iHybrid=iCarlos*2+iSide;
+
+ if(input->IsCompletedModule()){
+ vectModId[iCarlos]=iModule; // store the module number
+ }
+ else if(input->IsCompletedDDL()){
+ // when all data from a DDL was read, search for clusters
+ Int_t jitter=input->GetJitter();
+ for(Int_t iMod=0;iMod<kModulesPerDDL;iMod++){
+ if(vectModId[iMod]>=0){
+ fModule = vectModId[iMod];
+ TClonesArray* clusters=rpc->UncheckedGetClusters(fModule);
+ std::vector<int> bins0;
+ std::vector<int> bins1;
+ bins0=fDDLBins[iMod*2];
+ bins1=fDDLBins[iMod*2+1];
+ Int_t map0[kMapDim];
+ Int_t map1[kMapDim];
+ for(Int_t j=0;j<kMapDim;++j){
+ map0[j]=map1[j]=0;
+ }
+ for(Int_t i=0;i<kMapDim;++i){
+ map0[i]=mapsDDL[iMod*2][i];
+ map1[i]=mapsDDL[iMod*2+1][i];
+ }
+
+ FindClustersSDD(bins0, bins1, map0, map1, NULL, clusters,jitter);
+
+ Int_t nClusters = clusters->GetEntriesFast();
+ nClustersSDD += nClusters;
+ vectModId[iMod]=-1;
+ }
+ for (Int_t s=0; s<2; s++){
+ Int_t indexHyb=iMod*2+s;
+ for(std::vector<int>::size_type i=0;i<fDDLBins[indexHyb].size();++i)
+ fDDLBins[indexHyb].erase(fDDLBins[indexHyb].begin(),fDDLBins[indexHyb].end());
+ for(Int_t j=0;j<kMapDim;++j)
+ mapsDDL[indexHyb][j]=0;
+ }
+ }
+ }
+ else{ // fill the current digit into the bins array
+ if(iHybrid<0 || iHybrid>=kHybridsPerDDL){
+ AliWarning(Form("Invalid SDD hybrid number %d on module %d\n", iHybrid,iModule));
+ continue;
+ }
+ AliITSCalibrationSDD* cal=(AliITSCalibrationSDD*)GetResp(iModule);
+ if(cal==0){
+ AliError(Form("Calibration object not present for SDD module %d\n",iModule));
+ continue;
+ }
+ Float_t charge=input->GetSignal();
+ Int_t chan=input->GetCoord1()+fNAnodes*iSide;
+ Float_t gain=cal->GetChannelGain(chan)/fDetTypeRec->GetAverageGainSDD();;
+ Float_t baseline=cal->GetBaseline(chan);
+ if(charge>baseline) charge-=baseline;
+ else charge=0;
+ if(gain>0.){ // Bad channels have gain=0
+ charge/=gain;
+ if(charge>=cal->GetThresholdAnode(chan)){
+ Int_t q=(Int_t)(charge+0.5);
+ Int_t iz = input->GetCoord1();
+ Int_t itb = input->GetCoord2();
+ Float_t noise=cal->GetNoiseAfterElectronics(iz)*2.2; // applies zero suppression using the measured noise of each anode. Threshold values from ALICE-INT-1999-28 V10
+ Int_t index=(itb+1)*fNZbins+(iz+1);
+ if((itb<fNTimeBins) && (iz<fNAnodes)){
+ if(q<noise) continue;
+ fDDLBins[iHybrid].push_back(index);
+ fDDLBins[iHybrid].push_back(q);
+ fDDLBins[iHybrid].push_back(0);
+ fDDLBins[iHybrid].push_back(countRW);
+ mapsDDL[iHybrid][index/32]|=(1<<(index%32));
+ }
+ else{
+ AliWarning(Form("Invalid SDD cell: Anode=%d TimeBin=%d",iz,itb));
+ }
+ }
+ }
+ }
+ countRW++; //RS
+ }
+ AliDebug(1,Form("found clusters in ITS SDD: %d", nClustersSDD));
+}
--- /dev/null
+#ifndef ALIITSCLUSTERFINDERSDDFAST_H
+#define ALIITSCLUSTERFINDERSDDFAST_H
+
+//----------------------------------------------------------------------
+// ITS clusterer for SDD - fast algorithm
+//
+// Origin: Simone Capodicasa, Universita e INFN, capodica@to.infn.it
+//----------------------------------------------------------------------
+
+#include "AliITSClusterFinder.h"
+#include "AliITSDetTypeRec.h"
+#include <vector>
+
+class TBits;
+class TClonesArray;
+class AliRawReader;
+class AliITSRawStream;
+class AliITSCalibrationSDD;
+class AliITSsegmentationSDD;
+
+class AliITSClusterFinderSDDfast : public AliITSClusterFinder {
+ public:
+ AliITSClusterFinderSDDfast(AliITSDetTypeRec* dettyp);
+ virtual ~AliITSClusterFinderSDDfast();
+ virtual void FindRawClusters(Int_t mod);
+ virtual void RawdataToClusters(AliRawReader* rawReader);
+ void SetPeakSelection(Float_t looseCut=15., Float_t tightCut=30., Float_t maxTime=2000.){
+ fCutOnPeakLoose=looseCut;
+ fCutOnPeakTight=tightCut;
+ fMaxDrTimeForTightCut=maxTime;
+ }
+
+ enum {kHybridsPerDDL = 24}; // number of hybrids in each DDL
+ enum {kModulesPerDDL = 12}; // number of modules in each DDL
+
+ protected:
+ AliITSClusterFinderSDDfast(const AliITSClusterFinderSDDfast &source); // copy constructor
+ // assignment operator
+ AliITSClusterFinderSDDfast& operator=(const AliITSClusterFinderSDDfast &source);
+ void FindClustersSDD(TClonesArray *digits);
+ void FindClustersSDD(std::vector<int>& bins0, std::vector<int>& bins1, const Int_t map0[], const Int_t map1[], TClonesArray *dig, TClonesArray *clusters=0x0, Int_t jitter=0);
+
+ void FindClustersSDD(AliITSRawStream* input);
+ virtual AliITSCalibrationSDD* GetResp(Int_t mod)const{
+ return (AliITSCalibrationSDD*) fDetTypeRec->GetCalibrationModel(mod);}
+ virtual AliITSsegmentationSDD* GetSeg()const{
+ return (AliITSsegmentationSDD*)fDetTypeRec->GetSegmentationModel(1);}
+
+ Int_t fNAnodes; // number of anodes
+ Int_t fNTimeBins; // number of time bins
+ Int_t fNZbins; // number of cells along anodes
+ Int_t fNXbins; // number of cells along time
+ std::vector<std::vector<int> > fDDLBins; // container for digits for 1 DDL
+ Float_t fCutOnPeakLoose; // loose cut on peak (for all drift times)
+ Float_t fCutOnPeakTight; // tight cut on peak (for small drift times)
+ Float_t fMaxDrTimeForTightCut; // max. drift time for fCutOnPeakTight
+
+ ClassDef(AliITSClusterFinderSDDfast,1) // ITS cluster finder fast for SDD
+ };
+
+#endif
d=(AliITSdigitSDD*)digits->UncheckedAt(i);
Int_t ian=d->GetCoord1();
Int_t itb=d->GetCoord2();
- Int_t iSide=0;
- if (ian >= fNAnodes) iSide=1;
+ //Int_t iSide=0;
+ //if (ian >= fNAnodes) iSide=1;
Float_t gain=cal->GetChannelGain(ian)/fDetTypeRec->GetAverageGainSDD();
Float_t charge=d->GetSignal(); // returns expanded signal
// (10 bit, low threshold already added)
* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
- $Id$
-*/
+
////////////////////////////////////////////////////////////////////////
// This class defines the "Standard" reconstruction for the ITS //
#include "AliITSClusterFinder.h"
#include "AliITSClusterFinderV2SPD.h"
#include "AliITSClusterFinderV2SDD.h"
+#include "AliITSClusterFinderSDDfast.h"
#include "AliITSClusterFinderV2SSD.h"
#include "AliITSDetTypeRec.h"
#include "AliITSDDLModuleMapSDD.h"
#include "AliDataLoader.h"
#include "AliITSLoader.h"
+
class AliITSDriftSpeedArraySDD;
class AliITSCorrMapSDD;
class AliITSRecoParam;
AliWarning("Can not get SPD calibration from calibration database !");
return kFALSE;
}
-
fNMod[0] = calNoisySPD->GetEntries();
AliITSCalibration* cal;
}
//________________________________________________________________
-void AliITSDetTypeRec::SetDefaultClusterFindersV2(Bool_t rawdata){
+void AliITSDetTypeRec::SetDefaultClusterFindersV2(Bool_t rawdata, Bool_t fastSDD){
//Set defaults for cluster finder V2
//SDD
if(dettype==1){
if(!GetReconstructionModel(dettype)){
- clf = new AliITSClusterFinderV2SDD(this);
+ if(fastSDD){
+ clf = new AliITSClusterFinderSDDfast(this);
+ }
+ else {
+ clf = new AliITSClusterFinderV2SDD(this);
+ }
clf->InitGeometry();
if(!rawdata) clf->SetDigits(DigitsAddress(1));
SetReconstructionModel(dettype,clf);
SetDefaultClusterFindersV2();
AliDebug(1,"V2 cluster finder has been selected \n");
}else{
- SetDefaultClusterFindersV2();
- AliInfo("Cluster Finder Option not implemented, V2 cluster finder will be used \n");
+ SetDefaultClusterFindersV2(kFALSE,kTRUE);
+ AliDebug(1,"SPD and SSD V2 Cluster Finder - SDD fast Cluster Finder \n");
}
virtual AliITSgeom* GetITSgeom() const { return fITSgeom; }
virtual void SetITSgeom(AliITSgeom* const geom) { fITSgeom = geom; }
virtual void SetDefaults();
- virtual void SetDefaultClusterFindersV2(Bool_t rawdata=kFALSE);
+ virtual void SetDefaultClusterFindersV2(Bool_t rawdata=kFALSE,Bool_t fastSDD=kFALSE);
virtual void MakeBranch(TTree *tree,Option_t *opt);
virtual void SetTreeAddressD(TTree* const treeD);
void SetClusterFinder(Int_t cf=0) { fClusterFinder=cf; }
void SetClusterFinderV2() { SetClusterFinder(0); }
- void SetClusterFinderOrig() { SetClusterFinder(1); }
+ void SetClusterFinderSDDfast() { SetClusterFinder(1); }
Int_t GetClusterFinder() const { return fClusterFinder; }
void SetPID(Int_t pid=0) {fPID=pid;}
void SetDefaultPID() {SetPID(0);}
// reconstruct clusters
Int_t cluFindOpt = GetRecoParam()->GetClusterFinder();
+ // cluFindOpt = 0 --> ClusterFinder V2
+ // cluFindOpt = 1 --> as cluFindOpt = 0 for SPD and SSD. Fast SDD algo
TString recopt = GetRecoParam()->GetOptReco();
fDetTypeRec->SetTreeAddressD(digitsTree);
fDetTypeRec->MakeBranch(clustersTree,"R");
void AliITSReconstructor::Reconstruct(AliRawReader* rawReader, TTree *clustersTree) const
{
// reconstruct clusters from raw data
+ Int_t cluFindOpt = GetRecoParam()->GetClusterFinder();
+ // cluFindOpt = 0 --> ClusterFinder V2
+ // cluFindOpt = 1 --> as cluFindOpt = 0 for SPD and SSD. Fast SDD algo
TString recopt = GetRecoParam()->GetOptReco();
- fDetTypeRec->SetDefaultClusterFindersV2(kTRUE);
+ if(cluFindOpt == 0){
+ fDetTypeRec->SetDefaultClusterFindersV2(kTRUE);
+ }
+ else {
+ fDetTypeRec->SetDefaultClusterFindersV2(kTRUE,kTRUE);
+ }
fDetTypeRec->DigitsToRecPoints(rawReader,clustersTree,recopt.Data());
}
AliITSDetTypeRec.cxx
AliITSClusterFinder.cxx
AliITSClusterFinderV2SDD.cxx
+ AliITSClusterFinderSDDfast.cxx
AliITSClusterFinderV2SPD.cxx
AliITSClusterFinderV2SSD.cxx
AliITSClusterParam.cxx
#pragma link C++ class AliITSReconstructor+;
#pragma link C++ class AliITSRecoParam+;
#pragma link C++ class AliITSClusterFinderV2SDD+;
+#pragma link C++ class AliITSClusterFinderSDDfast+;
#pragma link C++ class AliITSClusterFinderV2SPD+;
#pragma link C++ class AliITSClusterFinderV2SSD+;
#pragma link C++ class AliITSCorrectSDDPoints+;
const Int_t kSeedingLayer1=6, kSeedingLayer2=4, kSeedingLayer3=5;
// Space point resolution
const Double_t kSigma2=0.0005*0.0005;
-// Max accepted chi2 per cluster
-const Double_t kmaxChi2PerCluster=10.;
+// Max accepted chi2
+const Double_t kmaxChi2PerCluster=20.;
+const Double_t kmaxChi2PerTrack=30.;
// Tracking "road" from layer to layer
const Double_t kRoadY=0.7;
const Double_t kRoadZ=0.7;
par[4]=(TMath::Abs(bz) < kAlmost0Field) ? kAlmost0 : crv/(bz*kB2C);
Double_t cov[15];
+ /*
for (Int_t i=0; i<15; i++) cov[i]=0.;
cov[0] =kSigma2*10;
cov[2] =kSigma2*10;
cov[5] =0.007*0.007*10; //FIXME all these lines
cov[9] =0.007*0.007*10;
cov[14]=0.1*0.1*10;
+ */
+ const Double_t dlt=0.0005;
+ Double_t
+ fy=1./(fgLayers[kSeedingLayer3].GetR() - fgLayers[kSeedingLayer2].GetR());
+ Double_t tz=fy;
+ Double_t cy=(f1(x1, y1, x2, y2+dlt, x3, y3) - crv)/dlt/bz/kB2C;
+ cy*=20; //FIXME: MS contribution to the cov[14]
+ Double_t s2=kSigma2;
+
+ cov[0]=s2;
+ cov[1]=0.; cov[2]=s2;
+ cov[3]=s2*fy; cov[4]=0.; cov[5]=s2*fy*fy;
+ cov[6]=0.; cov[7]=s2*tz; cov[8]=0.; cov[9]=s2*tz*tz;
+ cov[10]=s2*cy; cov[11]=0.; cov[12]=s2*fy*cy; cov[13]=0.; cov[14]=s2*cy*cy;
AliITSUTrackCooked *seed=new AliITSUTrackCooked();
seed->Set(Double_t(x), Double_t(a), par, cov);
if (TMath::Abs(dz[0]) > kmaxDCAxy) {delete seed; return kFALSE;}
if (TMath::Abs(dz[1]) > kmaxDCAz ) {delete seed; return kFALSE;}
+ Double_t xx0 = 0.008; // Rough layer thickness
+ Double_t radl= 9.36; // Radiation length of Si [cm]
+ Double_t rho = 2.33; // Density of Si [g/cm^3]
+ Double_t mass= 0.139;// Pion
+ if (!seed->CorrectForMeanMaterial(xx0, xx0*radl*rho, mass, kTRUE)) {
+ delete seed; return kFALSE;
+ }
+
seed->SetClusterIndex(l1,i1);
seed->SetClusterIndex(l2,i2);
seed->SetClusterIndex(l3,i3);
//if (c2->GetLabel(0)!=lab) continue;
//
Double_t z2=c2->GetZ();
-
if (z2 > (zr2+kzWin)) break; //check in Z
+
Float_t xyz2[3]; c2->GetGlobalXYZ(xyz2);
Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
if (TMath::Abs(phi2-phi1) > kpWin) continue; //check in Phi
-
+
Double_t zr3=z1 + (r3-r1)/(r2-r1)*(z2-z1);
Double_t crv=f1(xyz1[0], xyz1[1], xyz2[0], xyz2[1], GetX(), GetY());
Double_t phir3 = phi1 + 0.5*crv*(r3 - r1);
//deal with the best track
Int_t ncl=fTrackToFollow->GetNumberOfClusters();
Int_t nclb=fBestTrack->GetNumberOfClusters();
- if (ncl)
if (ncl >= nclb) {
Double_t chi2=fTrackToFollow->GetChi2();
- if (chi2/ncl < kmaxChi2PerCluster) {
+ if (chi2 < kmaxChi2PerTrack) {
if (ncl > nclb || chi2 < fBestTrack->GetChi2()) {
ResetBestTrack();
}
AliGenEventHeader *h=rl->GetHeader()->GenEventHeader();
TArrayF vtx(3);
h->PrimaryVertex(vtx);
+
+ Bool_t skip=kFALSE;
+ if (TMath::Abs(vtx[2]) > 10.) {
+ cout<<"Skipping an event with Zv="<<vtx[2]<<endl;
+ skip=kTRUE;
+ }
//******** Fill the "good" masks
Int_t *good=new Int_t[np]; for (k=0; k<np; k++) good[k]=0;
for (k=0; k<np; k++) {
if (good[k] != 0x7F) continue;
+ if (skip) continue; //No good primary vertex for this event
+
TParticle *p = (TParticle*)stack->Particle(k);
if (p == 0x0) {
cerr<<"Can not get particle "<<k<<endl;
Float_t phi;
Float_t xyz[3];
Float_t dX;
+ Float_t dY;
Float_t dZ;
Bool_t split;
Bool_t prim;
trOut->Branch("phi" , &cSum.phi ,"phi/F");
trOut->Branch("xyz", cSum.xyz, "xyz[3]/F");
trOut->Branch("dX" , &cSum.dX ,"dX/F");
+ trOut->Branch("dY" , &cSum.dY ,"dY/F");
trOut->Branch("dZ" , &cSum.dZ ,"dZ/F");
trOut->Branch("split",&cSum.split,"split/O");
trOut->Branch("prim", &cSum.prim, "prim/O");
cSum.q = cl->GetQ();
cSum.split = cl->TestBit(kSplit);
cSum.dX = (txyzH[0]-xyzClTr[0])*1e4;
+ cSum.dY = (txyzH[1]-xyzClTr[1])*1e4;
cSum.dZ = (txyzH[2]-xyzClTr[2])*1e4;
int label = cl->GetLabel(0);
TParticle* part = 0;
const double kPitchZ = 20e-4;
const int kNRow = 650;
const int kNCol = 1500;
- const double kSensThick = 120e-4; // -> sensor Si thickness
+ // const double kSensThick = 120e-4; // -> sensor Si thickness
//
const double kReadOutEdge = 0.2; // width of the readout edge (passive bottom)
const double kGuardRing = 50e-4; // width of passive area on left/right/top of the sensor
if (idLr>=kNLrInner) {
nChipsPerStaveLr *= nChipsPerModule;
ITS->DefineLayer(idLr, phi0, rLr, nChipsPerStaveLr*seg0->Dz(), nStaveLr, nModPerStaveLr,
- kSensThick, seg0->Dy(), seg0->GetChipTypeID(),kBuildLevel);
+ seg0->Dy()+150e-4, seg0->Dy(), seg0->GetChipTypeID(),kBuildLevel);
// printf("Add Lr%d: R=%6.2f DZ:%6.2f Staves:%3d NMod/Stave:%3d\n",
// idLr,rLr,nChipsPerStaveLr*seg0->Dz(),nStaveLr,nModPerStaveLr);
} else {
turbo = -radii2Turbo(tdr5dat[idLr][kRmn],rLr,tdr5dat[idLr][kRmx],seg0->Dx());
ITS->DefineLayerTurbo(idLr, phi0, rLr, nChipsPerStaveLr*seg0->Dz(), nStaveLr, nChipsPerStaveLr,
- seg0->Dx(), turbo, kSensThick, seg0->Dy(), seg0->GetChipTypeID());
+ seg0->Dx(), turbo, seg0->Dy()+250e-4, seg0->Dy(), seg0->GetChipTypeID());
// printf("Add Lr%d: R=%6.2f DZ:%6.2f Turbo:%+6.2f Staves:%3d NMod/Stave:%3d\n",
// idLr,rLr,nChipsPerStaveLr*seg0->Dz(),turbo,nStaveLr,nModPerStaveLr);
}
--- /dev/null
+#include <TVirtualStreamerInfo.h>
+#include <Bytes.h>
+#include <TFile.h>
+#include <TClass.h>
+
+#include "AliNetMessage.h"
+
+Bool_t AliNetMessage::fgEvolution = kFALSE;
+
+ClassImp(AliNetMessage)
+
+//______________________________________________________________________________
+AliNetMessage::AliNetMessage(UInt_t what)
+ :
+ TBufferFile(kWrite),
+ fWhat(what),
+ fClass(0),
+ fBufUncompressed(0),
+ fInfos(NULL),
+ fEvolution(kFALSE)
+{
+ // Create a AliNetMessage object for storing objects. The "what" integer
+ // describes the type of message. Predifined ROOT system message types
+ // can be found in MessageTypes.h. Make sure your own message types are
+ // unique from the ROOT defined message types (i.e. 0 - 10000 are
+ // reserved by ROOT). In case you OR "what" with kMESS_ACK, the message
+ // will wait for an acknowledgement from the remote side. This makes
+ // the sending process synchronous. In case you OR "what" with kMESS_ZIP,
+ // the message will be compressed in TSocket using the zip algorithm
+ // (only if message is > 256 bytes).
+
+ // space at the beginning of the message reserved for the message length
+ UInt_t reserved = 0;
+ *this << reserved;
+
+ *this << what;
+
+ SetBit(kCannotHandleMemberWiseStreaming);
+}
+
+
+//______________________________________________________________________________
+AliNetMessage::AliNetMessage(void *buf, Int_t bufsize)
+ :
+ TBufferFile(kRead, bufsize, buf),
+ fWhat(0),
+ fClass(0),
+ fBufUncompressed(0),
+ fInfos(NULL),
+ fEvolution(kFALSE)
+{
+ // Create a AliNetMessage object for reading objects. The objects will be
+ // read from buf. Use the What() method to get the message type.
+
+ // skip space at the beginning of the message reserved for the message length
+ fBufCur += sizeof(UInt_t);
+
+ *this >> fWhat;
+
+ if (fWhat == kMESS_OBJECT) {
+ InitMap();
+ fClass = ReadClass(); // get first the class stored in message
+ SetBufferOffset(sizeof(UInt_t) + sizeof(fWhat));
+ ResetMap();
+ } else {
+ fClass = 0;
+ }
+}
+
+//______________________________________________________________________________
+AliNetMessage::~AliNetMessage()
+{
+ // Clean up
+ Reset();
+}
+
+//______________________________________________________________________________
+void AliNetMessage::EnableSchemaEvolutionForAll(Bool_t enable)
+{
+ // Static function enabling or disabling the automatic schema evolution.
+ // By default schema evolution support is off.
+
+ fgEvolution = enable;
+}
+
+//______________________________________________________________________________
+Bool_t AliNetMessage::UsesSchemaEvolutionForAll()
+{
+ // Static function returning status of global schema evolution.
+
+ return fgEvolution;
+}
+
+//______________________________________________________________________________
+void AliNetMessage::ForceWriteInfo(TVirtualStreamerInfo *info, Bool_t /* force */)
+{
+ // Force writing the TStreamerInfo to the message.
+
+ if (fgEvolution || fEvolution) {
+ if (!fInfos) fInfos = new TList();
+ fInfos->Add(info);
+ }
+}
+
+//______________________________________________________________________________
+void AliNetMessage::Forward()
+{
+ // Change a buffer that was received into one that can be send, i.e.
+ // forward a just received message.
+
+ if (IsReading()) {
+ SetWriteMode();
+ SetBufferOffset(fBufSize);
+ SetBit(kCannotHandleMemberWiseStreaming);
+ }
+}
+
+//______________________________________________________________________________
+void AliNetMessage::TagStreamerInfo(TVirtualStreamerInfo *info)
+{
+ // Remember that the StreamerInfo is being used in writing.
+
+ if (fgEvolution || fEvolution) {
+ if (!fInfos) fInfos = new TList();
+ fInfos->Add(info);
+ }
+}
+
+//______________________________________________________________________________
+void AliNetMessage::IncrementLevel(TVirtualStreamerInfo *info)
+{
+ // Increment level.
+
+ TBufferFile::IncrementLevel(info);
+
+ if (!info) return;
+ if (fgEvolution || fEvolution) {
+ if (!fInfos) fInfos = new TList();
+
+ // add the streamer info, but only once
+ // this assumes that there is only one version
+ if (fInfos->FindObject(info->GetName())==NULL) {
+ fInfos->Add(info);
+ }
+ }
+}
+
+//______________________________________________________________________________
+void AliNetMessage::Reset()
+{
+ // Reset the message buffer so we can use (i.e. fill) it again.
+
+ SetBufferOffset(sizeof(UInt_t) + sizeof(fWhat));
+ ResetMap();
+
+ if (fBufUncompressed) {
+ delete [] fBufUncompressed;
+ fBufUncompressed=NULL;
+ }
+}
+
+//______________________________________________________________________________
+void AliNetMessage::SetLength() const
+{
+ // Set the message length at the beginning of the message buffer.
+
+ if (IsWriting()) {
+ char *buf = Buffer();
+ *((UInt_t*)buf) = (UInt_t)(Length() - sizeof(UInt_t));
+ }
+}
+
+//______________________________________________________________________________
+void AliNetMessage::SetWhat(UInt_t what)
+{
+ // Using this method one can change the message type a-posteriory.
+ // In case you OR "what" with kMESS_ACK, the message will wait for
+ // an acknowledgement from the remote side. This makes the sending
+ // process synchronous.
+
+ fWhat = what;
+
+ char *buf = Buffer();
+ buf += sizeof(UInt_t); // skip reserved length space
+ tobuf(buf, what);
+}
+
+//______________________________________________________________________________
+void AliNetMessage::WriteObject(const TObject *obj)
+{
+ // Write object to message buffer.
+ // When support for schema evolution is enabled the list of TStreamerInfo
+ // used to stream this object is kept in fInfos. This information is used
+ // by TSocket::Send that sends this list through the socket. This list is in
+ // turn used by TSocket::Recv to store the TStreamerInfo objects in the
+ // relevant TClass in case the TClass does not know yet about a particular
+ // class version. This feature is implemented to support clients and servers
+ // with either different ROOT versions or different user classes versions.
+
+ if (fgEvolution || fEvolution) {
+ if (fInfos)
+ fInfos->Clear();
+ else
+ fInfos = new TList();
+ }
+
+ WriteObjectAny(obj, TObject::Class());
+}
+
--- /dev/null
+#ifndef AliNetMessage_H
+#define AliNetMessage_H
+
+// adapted from AliHLTMessage
+
+#include <TBufferFile.h>
+
+#ifndef ROOT_MessageTypes
+#include <MessageTypes.h>
+#endif
+#ifndef ROOT_TBits
+#include <TBits.h>
+#endif
+
+class AliNetMessage : public TBufferFile
+{
+public:
+ AliNetMessage(UInt_t what = kMESS_ANY);
+ AliNetMessage(void *buf, Int_t bufsize);
+ virtual ~AliNetMessage();
+
+ void ForceWriteInfo(TVirtualStreamerInfo *info, Bool_t force);
+ void Forward();
+ void TagStreamerInfo(TVirtualStreamerInfo *info);
+ TClass *GetClass() const { return fClass;}
+ void IncrementLevel(TVirtualStreamerInfo* info);
+ void Reset();
+ void Reset(UInt_t what) { SetWhat(what); Reset(); }
+ UInt_t What() const { return fWhat; }
+ void SetLength() const;
+ void SetWhat(UInt_t what);
+
+ void EnableSchemaEvolution(Bool_t enable = kTRUE) { fEvolution = enable; }
+ Bool_t UsesSchemaEvolution() const { return fEvolution; }
+
+ void WriteObject(const TObject *obj);
+
+ static void EnableSchemaEvolutionForAll(Bool_t enable = kTRUE);
+ static Bool_t UsesSchemaEvolutionForAll();
+
+ const TList* GetStreamerInfos() const {return fInfos;}
+
+private:
+ AliNetMessage(const AliNetMessage &);
+ void operator=(const AliNetMessage &);
+
+ UInt_t fWhat; //!Message type
+ TClass *fClass; //!If message is kMESS_OBJECT pointer to object's class
+ char *fBufUncompressed; //!Uncompressed buffer
+ TList *fInfos; //Array of TStreamerInfo used in WriteObject
+ Bool_t fEvolution; //True if support for schema evolution required
+
+ static Bool_t fgEvolution; //True if global support for schema evolution required
+
+ ClassDef(AliNetMessage, 1);
+};
+#endif
#include <AliReconstruction.h>
#include <AliTPCRecoParam.h>
+#include <zmq.hpp>
+
#include "AliEventServerUtil.h"
#include "AliRecoServer.h"
#include "AliRecoServerThread.h"
fSettings(0),
fRecoTh(0)
{
- fContext = new zmq::context_t(1);
+#if (ZMQ_VERSION_MAJOR>=3)
+ fContext = new zmq::context_t;
+#else
+ fContext = new zmq::context_t(1);
+#endif /* (ZMQ_VERSION_MAJOR>=3) */
}
AliRecoServer::~AliRecoServer()
#ifndef __AliRecoServer_H__
#define __AliRecoServer_H__
-#include <zmq.hpp>
#include <TObjString.h>
#include <TQObject.h>
#include <RQ_OBJECT.h>
class AliReconstruction;
class AliRecoServerThread;
+namespace zmq
+{
+ class context_t;
+}
+
class AliRecoServer : public TQObject
{
RQ_OBJECT("AliRecoServer")
#include <RVersion.h>
#include <stdlib.h>
-#include <zmq.hpp>
-
#include <TCondition.h>
#include <TBufferFile.h>
#include <TMessage.h>
#include <TStreamerInfo.h>
#include <TThread.h>
-
#include <AliESDEvent.h>
#include <AliESDfriend.h>
#include <AliRawReader.h>
#include <AliRunLoader.h>
#include <AliReconstruction.h>
+#include <AliNetMessage.h>
+#include <AliSocket.h>
+
+#include <zmq.hpp>
+
#include "AliRecoServerThread.h"
-ClassImp(AliRecoServerThread);
+ClassImp(AliRecoServerThread)
AliRecoServerThread::AliRecoServerThread(zmq::context_t *context, AliReconstruction* reco)
- : TQObject(),
- fContext(0),
+ : AliThreadedSocket(context, AliThreadedSocket::WRITE),
fReco(0),
- fHost("tcp://*:5051"),
- fThread(0),
fCond(0)
{
- fContext = context;
fReco = reco;
}
Stop();
}
-Bool_t AliRecoServerThread::Start(const char* host)
-{
- if(!fThread){
- fHost = host;
- fCond = new TCondition(0);
- fThread = new TThread("AliRecoServerThread", (void(*) (void *) ) &RunThreaded, (void*) this );
- fThread->Run();
-
- return kTRUE;
- }
-
- return kFALSE;
-}
-
-Int_t AliRecoServerThread::Stop()
-{
- fCond->Signal();
-
- return 0;
-}
-
-Bool_t AliRecoServerThread::ForceStop()
+Bool_t AliRecoServerThread::Start(const char* endpoint)
{
- if(fThread){
- fThread->Kill();
- fThread->Delete();
- fThread=0;
-
- return kTRUE;
- }
+ fHost = endpoint;
- return kFALSE;
+ return AliThreadedSocket::Start();
}
-void AliRecoServerThread::Finished(Int_t status)
-{
- Emit("Finished(Int_t)", status);
-}
-
-void AliRecoServerThread::SendStreamerInfos(TMessage* mess, zmq::socket_t *sock)
-{
- //printf("Sending Streamer Infos....\n");
-
- // Check if TStreamerInfo must be sent. The list of TStreamerInfo of classes
- // in the object in the message is in the fInfos list of the message.
- // We send only the TStreamerInfos not yet sent on this socket.
- TList* infos = mess->GetStreamerInfos();
-
- TIter next(infos);
- TStreamerInfo *info;
- TList *minilist = 0;
- while ((info = (TStreamerInfo*)next())) {
- Int_t uid = info->GetNumber();
- if (!minilist) minilist = new TList();
-
- minilist->Add(info);
- }
-
- if (minilist) {
- TMessage messinfo(kMESS_STREAMERINFO);
- messinfo.WriteObject(minilist);
- delete minilist;
- if (messinfo.GetStreamerInfos())
- messinfo.GetStreamerInfos()->Clear();
-
- int bufsize = messinfo.Length();
- char* buf = (char*) malloc(bufsize * sizeof(char));
- memcpy(buf, messinfo.Buffer(), bufsize);
-
- // send!
- zmq::message_t message((void*)buf, bufsize, 0, 0);
-
- if (sock->send(message, ZMQ_SNDMORE))
- Warning("SendStreamerInfos", "problems sending TStreamerInfo's ...");
- }
-
- return;
-}
-
-void AliRecoServerThread::SendEvent(AliESDEvent* event, zmq::socket_t* socket)
-{
- if(!event) return;
-
- TMessage tmess(kMESS_OBJECT);
- tmess.Reset();
- tmess.WriteObject(event);
-
- TMessage::EnableSchemaEvolutionForAll(kTRUE);
- SendStreamerInfos(&tmess, socket);
-
- int bufsize = tmess.Length();
- char* buf = (char*) malloc(bufsize * sizeof(char));
- memcpy(buf, tmess.Buffer(), bufsize);
-
- // send!
- zmq::message_t message((void*)buf, bufsize, 0, 0);
- socket->send(message);
-
-}
-
-
-void* AliRecoServerThread::RunThreaded(void* arg)
+void* AliRecoServerThread::RunThrdWrite(void* arg)
{
TThread::SetCancelAsynchronous();
TThread::SetCancelOn();
const char* host = recoTh->GetHost();
zmq::context_t* context = recoTh->GetContext();
- AliReconstruction* reco = recoTh->GetReconstruction();
+ AliReconstruction* reco = recoTh->GetReconstruction();
- zmq::socket_t publisher(*context, ZMQ_PUB);
- publisher.bind(host);
+ // generate a publish socket
+ AliSocket publisher(context, ZMQ_PUB);
+ publisher.Bind(host);
if(reco==0) return 0;
if (status)
{
- event = reco->GetESDEvent();
- SendEvent(event, &publisher);
+ event = reco->GetESDEvent();
+
+ AliNetMessage tmess(kMESS_OBJECT);
+ tmess.Reset();
+ tmess.WriteObject(event);
+
+ publisher.Send(tmess);
sleep(1);
}
#include <TMutex.h>
#include <TCondition.h>
+#include "AliThreadedSocket.h"
+
class TCondition;
-class TMessage;
class TThread;
class AliReconstruction;
class AliESDEvent;
-namespace zmq{
- class context_t;
- class socket_t;
-}
-
-class AliRecoServerThread : public TQObject
+class AliRecoServerThread : public AliThreadedSocket
{
public:
AliRecoServerThread(zmq::context_t *context, AliReconstruction* reco);
virtual ~AliRecoServerThread();
- Bool_t Start(const char* host);
- Int_t Stop();
- Bool_t ForceStop(); // imediate kill it, use it with rarely and with caution
- zmq::context_t* GetContext() { return fContext; }
+ Bool_t Start(const char* endpoint);
+
+ const char* GetHost() const { return fHost.Data(); }
AliReconstruction* GetReconstruction() { return fReco; }
- const char* GetHost() { return fHost.Data(); }
- TCondition* Condition() { return fCond; }
+ TCondition* Condition() { return fCond; }
- void Finished(Int_t status); // *SIGNAL*
-
private:
- static void* RunThreaded(void* arg);
- static void SendStreamerInfos(TMessage* mess, zmq::socket_t *sock);
- static void SendEvent(AliESDEvent* event, zmq::socket_t* socket);
+ static void* RunThrdWrite(void* arg);
- // shared
- zmq::context_t* fContext;
AliReconstruction* fReco;
// local
- TString fHost;
- TThread* fThread;
TCondition* fCond; // condition whether to stop reco/clean exit thread
+ TString fHost;
private:
AliRecoServerThread(const AliRecoServerThread&); // Not implemented
--- /dev/null
+#include <cstring>
+
+#include <zmq.hpp>
+
+#include "AliNetMessage.h"
+#include "AliSocket.h"
+
+void __freeBuffer (void *data, void *hint)
+{
+ free(data);
+}
+
+
+ClassImp(AliSocket);
+AliSocket::AliSocket(zmq::context_t *context,int type)
+ : TObject(),
+ fContext(context)
+{
+ fSocket = new zmq::socket_t(*context,type);
+}
+
+AliSocket::~AliSocket()
+{
+ fSocket->close();
+}
+
+void AliSocket::Bind(const char* endpoint)
+{
+ fEndPoint = endpoint;
+
+ fSocket->bind(endpoint);
+}
+
+void AliSocket::Connect(const char* endpoint)
+{
+ fEndPoint = endpoint;
+
+ fSocket->connect(endpoint);
+}
+
+void AliSocket::Subscribe(const char* filter)
+{
+ fSocket->setsockopt(ZMQ_SUBSCRIBE, filter, strlen(filter) );
+}
+
+bool AliSocket::Recv(AliNetMessage *&mess, int flags)
+{
+ zmq::message_t message;
+
+ if(!fSocket->recv(&message, flags))
+ return false;
+
+ int bufSize = (int)message.size();
+
+ // buffer will be adopted by AliNetMessage, no need to free it
+ char* buf = new char[bufSize];
+ memcpy(buf, (char*)message.data(), bufSize);
+
+ mess = new AliNetMessage(buf, bufSize);
+
+ return true;
+}
+
+bool AliSocket::Send(AliNetMessage &mess, int flags)
+{
+ //NOTE: this is already done by AliNetMessage, should we do this too?
+ // send length of the message
+ int bufSize = mess.BufferSize();
+
+ // we need to copy it elsewhere because zmq takes ownership of the buffer data
+ char* buf = new char[bufSize];
+ memcpy(buf, (char*)mess.Buffer(), bufSize);
+
+ zmq::message_t message(buf, bufSize, __freeBuffer, NULL);
+
+ //fwrite(mess.Buffer(), sizeof(char), bufSize, stdout);
+
+ return fSocket->send(message, flags);
+}
--- /dev/null
+#ifndef ALISOCKET_H
+#define ALISOCKET_H
+
+#include <TObject.h>
+#include <TString.h>
+
+class AliNetMessage;
+
+namespace zmq
+{
+ class context_t;
+ class socket_t;
+}
+
+class AliSocket : public TObject
+{
+public:
+ AliSocket(zmq::context_t* context, int type);
+ virtual ~AliSocket();
+
+ void Bind(const char* endpoint);
+ void Connect(const char* endpoint);
+ void Subscribe(const char* filter);
+
+ bool Recv(AliNetMessage *&mess, int flags = 0);
+ bool Send(AliNetMessage &message, int flags = 0);
+
+private:
+ AliSocket(const AliSocket &); // Not implemented
+ void operator=(const AliSocket &); // Not implemented
+
+ zmq::context_t *fContext; //! the zmq context
+ zmq::socket_t *fSocket; //! the socket
+ TString fEndPoint; //!
+
+ ClassDef(AliSocket, 0);
+};
+
+#endif
--- /dev/null
+#include <zmq.hpp>
+
+#include <TThread.h>
+
+#include "AliNetMessage.h"
+#include "AliSocket.h"
+#include "AliThreadedSocket.h"
+
+ClassImp(AliThreadedSocket)
+AliThreadedSocket::AliThreadedSocket(zmq::context_t *context, EOpenMode mode)
+ : TQObject(),
+ fThread(0),
+ fContext(context),
+ fOpenMode(mode)
+{
+
+}
+
+AliThreadedSocket::~AliThreadedSocket()
+{
+ Stop();
+}
+
+Bool_t AliThreadedSocket::Start()
+{
+ if(!fThread){
+ if(fOpenMode==READ)
+ fThread = new TThread("AliThreadedSocket", (void(*) (void *) ) &RunThrdRead, (void*) this );
+ else
+ fThread = new TThread("AliThreadedSocket", (void(*) (void *) ) &RunThrdWrite,(void*) this );
+
+ if(fThread->Run()==0){
+ Emit("Started()");
+ return kTRUE;
+ }
+ }
+
+ return kFALSE;
+}
+
+Bool_t AliThreadedSocket::Stop()
+{
+ Emit("Stopped()");
+ return kTRUE;
+}
+
+Bool_t AliThreadedSocket::Kill()
+{
+ if(fThread){
+ if(fThread->Kill()!=0) return kFALSE;
+ fThread->Delete();
+ fThread=0;
+
+ Emit("Stopped()");
+ return kTRUE;
+ }
+}
+
+void AliThreadedSocket::Continue()
+{
+
+}
+
+zmq::context_t* AliThreadedSocket::GetContext() const
+{
+ return fContext;
+}
+
+TThread* AliThreadedSocket::GetThread() const
+{
+ return fThread;
+}
+
+void AliThreadedSocket::Started()
+{
+ Emit("Started()");
+}
+
+void AliThreadedSocket::Stopped()
+{
+ Emit("Stopped()");
+}
+
+void* AliThreadedSocket::RunThrdRead(void* arg)
+{
+ AliNetMessage* mess=0;
+ AliThreadedSocket* thsock = (AliThreadedSocket*)arg;
+ zmq::context_t* context = thsock->GetContext();
+
+ AliSocket sock(context, ZMQ_SUB);
+
+ do{
+ sock.Recv(mess);
+ }
+ while(mess==0);
+
+ thsock->Stopped();
+}
+
+void* AliThreadedSocket::RunThrdWrite(void* arg)
+{
+ AliNetMessage* mess=0;
+ AliThreadedSocket* thsock = (AliThreadedSocket*)arg;
+ zmq::context_t* context = thsock->GetContext();
+
+ AliSocket sock(context, ZMQ_PUB);
+
+ do{
+ sock.Send(*mess);
+ }
+ while(1);
+
+ thsock->Emit("Stopped()");
+}
--- /dev/null
+// Main authors: Mihai Niculescu 2014
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
+ * full copyright notice. *
+ **************************************************************************/
+
+#ifndef AliThreadedSocket_H
+#define AliThreadedSocket_H
+
+#include <TQObject.h>
+
+class TThread;
+class AliNetMessage;
+
+namespace zmq {
+ class context_t;
+}
+
+class AliThreadedSocket : public TQObject
+{
+public:
+ enum EOpenMode{READ, WRITE};
+
+ AliThreadedSocket(zmq::context_t *context, EOpenMode mode);
+ virtual ~AliThreadedSocket();
+
+ Bool_t Start();
+ Bool_t Stop();
+ Bool_t Kill();
+
+ zmq::context_t* GetContext() const;
+ TThread* GetThread() const;
+
+ void Started(); // *SIGNAL*
+ void Stopped(); // *SIGNAL*
+
+ void Continue();
+
+protected:
+ AliThreadedSocket(const AliThreadedSocket&); // Not implemented
+ AliThreadedSocket& operator=(const AliThreadedSocket&); // Not implemented
+
+ // reimplement these in a derived class
+ static void* RunThrdRead(void* arg);
+ static void* RunThrdWrite(void* arg);
+
+ zmq::context_t* fContext;
+ TThread* fThread;
+ EOpenMode fOpenMode;
+
+
+ ClassDef(AliThreadedSocket, 0);
+
+};
+#endif
# SHLIBS - Shared Libraries and objects for linking (Executables only) #
#--------------------------------------------------------------------------------#
-set ( SRCS
- AliEventServerWindow.cxx
+set ( SRCS
+ AliNetMessage.cxx
+ AliSocket.cxx
+ AliThreadedSocket.cxx
AliRecoServerThread.cxx
AliRecoServer.cxx
+ AliEventServerWindow.cxx
)
string ( REPLACE ".cxx" ".h" CINTHDRS "${SRCS}" )
set ( DHDR MONITORzmqLinkDef.h)
-set ( EINCLUDE STEER/STEERBase )#"${ZEROMQ_INCLUDE_DIR}")
+set ( EINCLUDE STEER/STEERBase ) # ${ZEROMQ_INCLUDE_DIR})
set(DIMDIR $ENV{DIMDIR})
set(ODIR $ENV{ODIR})
set ( CXXFLAGS "-DALI_DIM ${CXXFLAGS}")
endif(DIMDIR)
-set ( ELIBS ${ELIBS} ${ZEROMQ_LIBRARY} )
+set (ELIBS ${ELIBS} ${ZEROMQ_LIBRARIES} )
# this must be set in a better way
set ( ELIBSDIR ${ELIBSDIR} /usr/lib64)
+
+set (EXPORT
+ AliSocket.h
+ AliNetMessage.h
+ AliThreadedSocket.h
+ )
#pragma link off all functions;
#pragma link C++ class AliEventServerPreferencesWindow+;
-#pragma link C++ class AliQAHistNavigator+;
-#pragma link C++ class AliQAHistViewer+;
-#pragma link C++ class AliQADirList+;
-#pragma link C++ class AliQADirListItem+;
-#pragma link C++ class AliOnlineRecoTrigger+;
-#pragma link C++ class TerminateSignalHandler+;
+#pragma link C++ class AliQAHistNavigator+;
+#pragma link C++ class AliQAHistViewer+;
+#pragma link C++ class AliQADirList+;
+#pragma link C++ class AliQADirListItem+;
+#pragma link C++ class AliOnlineRecoTrigger+;
+#pragma link C++ class TerminateSignalHandler+;
#pragma link C++ class AliDimIntNotifier+;
#pragma link C++ class AliChildProcTerminator+;
#pragma link off all classes;
#pragma link off all functions;
-#pragma link C++ class AliEventServerWindow+;
+#pragma link C++ class AliNetMessage+;
+#pragma link C++ class AliSocket+;
+#pragma link C++ class AliThreadedSocket+;
#pragma link C++ class AliRecoServerThread+;
+#pragma link C++ class AliEventServerWindow+;
#pragma link C++ class AliRecoServer+;
#endif
fOADBForEMCAL(kFALSE), fOADBForPHOS(kFALSE),
fOADBFilePathEMCAL(""), fOADBFilePathPHOS(""),
fImportGeometryFromFile(0), fImportGeometryFilePath(""),
- fNSuperModulesUsed(0)
+ fNSuperModulesUsed(0),
+ fMCECellClusFracCorrOn(0), fMCECellClusFracCorrParam()
{
//Ctor
return areNeighbours;
}
+//_____________________________________________________________________________________
+Bool_t AliCalorimeterUtils::IsClusterSharedByTwoSuperModules(const AliEMCALGeometry * geom,
+ AliVCluster* cluster)
+{
+ //Method that checks if any of the cells in the cluster belongs to a different SM
+
+ Int_t iSupMod = -1;
+ Int_t iSM0 = -1;
+ Int_t iTower = -1;
+ Int_t iIphi = -1;
+ Int_t iIeta = -1;
+ Int_t iphi = -1;
+ Int_t ieta = -1;
+
+ for(Int_t iDigit=0; iDigit < cluster->GetNCells(); iDigit++)
+ {
+ //Get from the absid the supermodule, tower and eta/phi numbers
+ geom->GetCellIndex(cluster->GetCellAbsId(iDigit),iSupMod,iTower,iIphi,iIeta);
+ geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta, iphi,ieta);
+
+ //Check if there are cells of different SM
+ if (iDigit == 0 ) iSM0 = iSupMod;
+ else if(iSupMod!= iSM0) return kTRUE;
+ }
+
+ return kFALSE;
+
+}
//_____________________________________________________________________________________
return track ;
}
+//______________________________________________________________________________________________
+Float_t AliCalorimeterUtils::GetMCECellClusFracCorrection(Float_t eCell, Float_t eCluster) const
+{
+ // Correction factor for cell energy in cluster to temptatively match Data and MC
+ if( eCluster <= 0 || eCluster < eCell )
+ {
+ printf("AliCalorimeterUtils::GetMCECellClusFracCorrection() - Bad values eCell=%f, eCluster %f\n",eCell,eCluster);
+ return 1;
+ }
+
+ Float_t frac = eCell / eCluster;
+
+ Float_t correction = fMCECellClusFracCorrParam[0] +
+ TMath::Exp( frac*fMCECellClusFracCorrParam[2]+fMCECellClusFracCorrParam[1] ) +
+ fMCECellClusFracCorrParam[3]/TMath::Sqrt(frac);
+
+// printf("AliCalorimeterUtils::GetMCECellClusFracCorrection(eCell=%f, eCluster %f, frac %f) = %f\n",eCell, eCluster, frac, correction);
+// printf("\t %2.2f + TMath::Exp( %2.3f*%2.2f + %2.2f ) + %2.2f/TMath::Sqrt(%2.3f)) = %f\n",
+// fMCECellClusFracCorrParam[0],frac,fMCECellClusFracCorrParam[2],fMCECellClusFracCorrParam[1],fMCECellClusFracCorrParam[3], frac, correction);
+
+ return correction;
+}
+
//_____________________________________________________________________________________________________
Int_t AliCalorimeterUtils::GetModuleNumber(AliAODPWG4Particle * particle, AliVEvent * inputEvent) const
Int_t absId2 = -1 ;
const Int_t nCells = cluster->GetNCells();
+ Float_t eCluster = RecalibrateClusterEnergy(cluster, cells);// recalculate cluster energy, avoid non lin correction.
+
+ Float_t simuTotWeight = 0;
+ if(fMCECellClusFracCorrOn)
+ {
+ simuTotWeight = RecalibrateClusterEnergyWeightCell(cluster, cells,eCluster);// same but apply a weight
+ simuTotWeight/= eCluster;
+ }
+
TString calorimeter = "EMCAL";
if(!cluster->IsEMCAL()) calorimeter = "PHOS";
{
absIdList[iDigit] = cluster->GetCellsAbsId()[iDigit] ;
Float_t en = cells->GetCellAmplitude(absIdList[iDigit]);
- RecalibrateCellAmplitude(en,calorimeter,absIdList[iDigit]);
+ RecalibrateCellAmplitude(en,calorimeter,absIdList[iDigit]);
+
+ if(fMCECellClusFracCorrOn)
+ en*=GetMCECellClusFracCorrection(en,eCluster)/simuTotWeight;
+
if( en > emax )
{
emax = en ;
Float_t en1 = cells->GetCellAmplitude(absId1);
RecalibrateCellAmplitude(en1,calorimeter,absId1);
+ if(fMCECellClusFracCorrOn)
+ en1*=GetMCECellClusFracCorrection(en1,eCluster)/simuTotWeight;
+
//printf("%d : absIDi %d, E %f\n",iDigit, absId1,en1);
for(iDigitN = 0; iDigitN < nCells; iDigitN++)
Float_t en2 = cells->GetCellAmplitude(absId2);
RecalibrateCellAmplitude(en2,calorimeter,absId2);
+ if(fMCECellClusFracCorrOn)
+ en2*=GetMCECellClusFracCorrection(en2,eCluster)/simuTotWeight;
+
//printf("\t %d : absIDj %d, E %f\n",iDigitN, absId2,en2);
if ( AreNeighbours(calorimeter, absId1, absId2) )
if(absIdList[iDigit]>=0 )
{
absIdList[iDigitN] = absIdList[iDigit] ;
+
Float_t en = cells->GetCellAmplitude(absIdList[iDigit]);
- RecalibrateCellAmplitude(en,calorimeter,absIdList[iDigit]);
+ RecalibrateCellAmplitude(en,calorimeter,absIdList[iDigit]);
+
+ if(fMCECellClusFracCorrOn)
+ en*=GetMCECellClusFracCorrection(en,eCluster)/simuTotWeight;
+
if(en < fLocMaxCutE) continue; // Maxima only with seed energy at least
+
maxEList[iDigitN] = en ;
+
//printf("Local max %d, id %d, en %f\n", iDigit,absIdList[iDigitN],en);
iDigitN++ ;
}
if(fDebug > 0)
{
- printf("AliCalorimeterUtils::GetNumberOfLocalMaxima() - In cluster E %2.2f, M02 %2.2f, M20 %2.2f, N maxima %d \n",
- cluster->E(),cluster->GetM02(),cluster->GetM20(), iDigitN);
+ printf("AliCalorimeterUtils::GetNumberOfLocalMaxima() - In cluster E %2.2f (wth non lin. %2.2f), M02 %2.2f, M20 %2.2f, N maxima %d \n",
+ cluster->E(),eCluster, cluster->GetM02(),cluster->GetM20(), iDigitN);
if(fDebug > 1) for(Int_t imax = 0; imax < iDigitN; imax++)
{
fNSuperModulesUsed = 22;
+ fMCECellClusFracCorrParam[0] = 0.78;
+ fMCECellClusFracCorrParam[1] =-1.8;
+ fMCECellClusFracCorrParam[2] =-6.3;
+ fMCECellClusFracCorrParam[3] = 0.014;
+
}
return energy;
}
+//__________________________________________________________________________
+Float_t AliCalorimeterUtils::RecalibrateClusterEnergyWeightCell(AliVCluster * cluster,
+ AliVCaloCells * cells, Float_t energyOrg)
+{
+ // Recalibrate the cluster energy, considering the recalibration map and the energy of the cells that compose the cluster.
+ // Also consider reweighting of cells energy
+
+ //Initialize some used variables
+ Float_t frac = 0., energy = 0.;
+
+ if(cells)
+ {
+ //Get the cluster number of cells and list of absId, check what kind of cluster do we have.
+
+ UShort_t * index = cluster->GetCellsAbsId() ;
+ Double_t * fraction = cluster->GetCellsAmplitudeFraction() ;
+
+ Int_t ncells = cluster->GetNCells();
+
+ TString calo = "EMCAL";
+ if(cluster->IsPHOS())
+ calo = "PHOS";
+
+ //Loop on the cells, get the cell amplitude and recalibration factor, multiply and and to the new energy
+ for(Int_t icell = 0; icell < ncells; icell++){
+
+ Int_t absId = index[icell];
+
+ frac = fraction[icell];
+ if(frac < 1e-3) frac = 1; //in case of EMCAL, this is set as 0, not used.
+
+ Float_t amp = cells->GetCellAmplitude(absId);
+ RecalibrateCellAmplitude(amp,calo, absId);
+
+ amp*=GetMCECellClusFracCorrection(amp,energyOrg);
+
+ if(fDebug>2)
+ printf("AliCalorimeterUtils::RecalibrateClusterEnergy() - recalibrate cell: %s, cell fraction %f, cell energy %f\n",
+ calo.Data(),frac,cells->GetCellAmplitude(absId));
+
+ energy += amp*frac;
+ }
+
+ if(fDebug>1)
+ printf("AliCalorimeterUtils::RecalibrateClusterEnergy() - Energy before %f, after %f\n",cluster->E(),energy);
+
+ }// cells available
+ else
+ {
+ Fatal("RecalibrateClusterEnergy()","Cells pointer does not exist!");
+ }
+
+ return energy;
+}
+
+
//__________________________________________________________________________________________
void AliCalorimeterUtils::RecalculateClusterPosition(AliVCaloCells* cells, AliVCluster* clu)
{
Bool_t AreNeighbours(TString calo, Int_t absId1, Int_t absId2) const ;
+ Bool_t IsClusterSharedByTwoSuperModules(const AliEMCALGeometry * geom,
+ AliVCluster* cluster);
+
Int_t GetNumberOfLocalMaxima(AliVCluster* cluster, AliVCaloCells* cells) ;
Int_t GetNumberOfLocalMaxima(AliVCluster* cluster, AliVCaloCells* cells,
void SwitchOnClusterPlot() { fPlotCluster = kTRUE ; }
void SwitchOffClusterPlot() { fPlotCluster = kFALSE ; }
+ Float_t GetMCECellClusFracCorrection(Float_t eCell, Float_t eCluster) const ;
+ void SetMCECellClusFracCorrectionParamters(Int_t i, Float_t param) { if(i<4) fMCECellClusFracCorrParam[i] = param; }
+
+ Bool_t IsMCECellClusFracCorrectionOn() const { return fMCECellClusFracCorrOn ; }
+ void SwitchOnMCECellClusFracCorrection() { fMCECellClusFracCorrOn = kTRUE ; }
+ void SwitchOffMCECellClusFracCorrection() { fMCECellClusFracCorrOn = kFALSE ; }
+
+
//Calorimeters Geometry Methods
AliEMCALGeometry * GetEMCALGeometry() const { return fEMCALGeo ; }
TString EMCALGeometryName() const { return fEMCALGeoName ; }
void RecalibrateCellTime (Double_t & time, TString calo, Int_t absId, Int_t bunchCrossNumber) const ;
void RecalibrateCellAmplitude(Float_t & amp, TString calo, Int_t absId) const ;
Float_t RecalibrateClusterEnergy(AliVCluster* cluster, AliVCaloCells * cells);
+ Float_t RecalibrateClusterEnergyWeightCell(AliVCluster* cluster, AliVCaloCells * cells, Float_t energyOrg);
// Run dependent energy calibrations (EMCAL)
Int_t fNSuperModulesUsed; // Number of supermodules to be used in analysis, can be different than the real geo,
// to be used at initialization of histograms
+ Bool_t fMCECellClusFracCorrOn; // Correct or not the weight of cells in cluster
+ Float_t fMCECellClusFracCorrParam[4]; // Parameters for the function correcting the weight of the cells in the cluster
AliCalorimeterUtils( const AliCalorimeterUtils & cu) ; // cpy ctor
AliCalorimeterUtils & operator = (const AliCalorimeterUtils & cu) ; // cpy assignment
- ClassDef(AliCalorimeterUtils,16)
+ ClassDef(AliCalorimeterUtils,17)
} ;
//______________________________________________________________________________
void runLocalESE(
- const int iMCtruth = 2,
+ const int iMCtruth = 0,
const char * addTaskString = ".x AddTaskNanoAODFilter.C(%d,1)" //
)
{
// start analysis
// Always read the same file:
TChain * chain = new TChain("aodTree");
- chain->Add("./AliAOD.root");
+
+ chain->Add("~//Work/ALICE/ANALYSIS/current/nAOD/input/LHC10h/AOD86/0356/AliAOD.root");
+ chain->Add("~//Work/ALICE/ANALYSIS/current/nAOD/input/LHC10h/AOD86/0407/AliAOD.root");
+ chain->Add("~//Work/ALICE/ANALYSIS/current/nAOD/input/LHC10h/AOD86/0398/AliAOD.root");
Printf("Starting Analysis....");
+ chain->Print();
mgr->StartAnalysis("local", chain,123456789);
}
fMinMCLabel(0),
fMCLabelShift(0),
fNcentBins(4),
+ fNeedEmcalGeom(kTRUE),
fGeom(0),
fTracks(0),
fCaloClusters(0),
fOutput(0),
fHistTrialsAfterSel(0),
fHistEventsAfterSel(0),
+ fHistXsectionAfterSel(0),
fHistTrials(0),
- fHistXsection(0),
fHistEvents(0),
+ fHistXsection(0),
fHistPtHard(0),
fHistCentrality(0),
fHistZVertex(0),
fMinMCLabel(0),
fMCLabelShift(0),
fNcentBins(4),
+ fNeedEmcalGeom(kTRUE),
fGeom(0),
fTracks(0),
fCaloClusters(0),
fOutput(0),
fHistTrialsAfterSel(0),
fHistEventsAfterSel(0),
+ fHistXsectionAfterSel(0),
fHistTrials(0),
- fHistXsection(0),
fHistEvents(0),
+ fHistXsection(0),
fHistPtHard(0),
fHistCentrality(0),
fHistZVertex(0),
fHistEventsAfterSel->GetXaxis()->SetTitle("p_{T} hard bin");
fHistEventsAfterSel->GetYaxis()->SetTitle("total events");
fOutput->Add(fHistEventsAfterSel);
+
+ fHistXsectionAfterSel = new TProfile("fHistXsectionAfterSel", "fHistXsectionAfterSel", 11, 0, 11);
+ fHistXsectionAfterSel->GetXaxis()->SetTitle("p_{T} hard bin");
+ fHistXsectionAfterSel->GetYaxis()->SetTitle("xsection");
+ fOutput->Add(fHistXsectionAfterSel);
fHistTrials = new TH1F("fHistTrials", "fHistTrials", 11, 0, 11);
fHistTrials->GetXaxis()->SetTitle("p_{T} hard bin");
fHistTrials->GetYaxis()->SetTitle("trials");
fOutput->Add(fHistTrials);
- fHistXsection = new TProfile("fHistXsection", "fHistXsection", 11, 0, 11);
- fHistXsection->GetXaxis()->SetTitle("p_{T} hard bin");
- fHistXsection->GetYaxis()->SetTitle("xsection");
- fOutput->Add(fHistXsection);
-
fHistEvents = new TH1F("fHistEvents", "fHistEvents", 11, 0, 11);
fHistEvents->GetXaxis()->SetTitle("p_{T} hard bin");
fHistEvents->GetYaxis()->SetTitle("total events");
fOutput->Add(fHistEvents);
+ fHistXsection = new TProfile("fHistXsection", "fHistXsection", 11, 0, 11);
+ fHistXsection->GetXaxis()->SetTitle("p_{T} hard bin");
+ fHistXsection->GetYaxis()->SetTitle("xsection");
+ fOutput->Add(fHistXsection);
+
const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
Bool_t AliAnalysisTaskEmcal::FillGeneralHistograms()
{
if (fIsPythia) {
- fHistEventsAfterSel->SetBinContent(fPtHardBin + 1, fHistEventsAfterSel->GetBinContent(fPtHardBin + 1) + 1);
- fHistTrialsAfterSel->SetBinContent(fPtHardBin + 1, fHistTrialsAfterSel->GetBinContent(fPtHardBin + 1) + fNTrials);
+ fHistEventsAfterSel->Fill(fPtHardBin, 1);
+ fHistTrialsAfterSel->Fill(fPtHardBin, fNTrials);
+ fHistXsectionAfterSel->Fill(fPtHardBin, fXsection);
fHistPtHard->Fill(fPtHard);
- if(fPythiaHeader) {
- fXsection = fPythiaHeader->GetXsection();
- if(fXsection>0.) {
- fHistXsection->Fill(fPtHardBin, fXsection);
- fHistTrials->Fill(fPtHardBin, fPythiaHeader->Trials());
- }
- }
}
fHistCentrality->Fill(fCent);
return kFALSE;
}
- Float_t trials = 0;
- Int_t pthard = 0;
+ Float_t xsection = 0;
+ Float_t trials = 0;
+ Int_t pthardbin = 0;
TFile *curfile = tree->GetCurrentFile();
if (!curfile) {
}
TChain *chain = dynamic_cast<TChain*>(tree);
- if (chain)
- tree = chain->GetTree();
+ if (chain) tree = chain->GetTree();
Int_t nevents = tree->GetEntriesFast();
- PythiaInfoFromFile(curfile->GetName(), fXsection, trials, pthard);
+ PythiaInfoFromFile(curfile->GetName(), xsection, trials, pthardbin);
// TODO: Workaround
- if ((pthard < 0) || (pthard > 10))
- pthard = 0;
- fHistTrials->Fill(pthard, trials);
- fHistXsection->Fill(pthard, fXsection);
- fHistEvents->Fill(pthard, nevents);
+ if ((pthardbin < 0) || (pthardbin > 10)) pthardbin = 0;
+
+ fHistTrials->Fill(pthardbin, trials);
+ fHistXsection->Fill(pthardbin, xsection);
+ fHistEvents->Fill(pthardbin, nevents);
return kTRUE;
}
return;
}
- fGeom = AliEMCALGeometry::GetInstance();
- if (!fGeom) {
- AliError(Form("%s: Can not create geometry", GetName()));
- return;
+ if (fNeedEmcalGeom) {
+ fGeom = AliEMCALGeometry::GetInstance();
+ if (!fGeom) {
+ AliError(Form("%s: Can not create geometry", GetName()));
+ return;
+ }
}
+
if (fEventPlaneVsEmcal >= 0) {
- Double_t ep = (fGeom->GetArm1PhiMax() + fGeom->GetArm1PhiMin()) / 2 * TMath::DegToRad() + fEventPlaneVsEmcal - TMath::Pi();
- fMinEventPlane = ep - TMath::Pi() / 4;
- fMaxEventPlane = ep + TMath::Pi() / 4;
+ if (fGeom) {
+ Double_t ep = (fGeom->GetArm1PhiMax() + fGeom->GetArm1PhiMin()) / 2 * TMath::DegToRad() + fEventPlaneVsEmcal - TMath::Pi();
+ fMinEventPlane = ep - TMath::Pi() / 4;
+ fMaxEventPlane = ep + TMath::Pi() / 4;
+ }
+ else {
+ AliWarning("Could not set event plane limits because EMCal geometry was not loaded!");
+ }
}
//Load all requested track branches - each container knows name already
if (fPtHard >= ptHardLo[fPtHardBin] && fPtHard < ptHardHi[fPtHardBin])
break;
}
-
+
+ fXsection = fPythiaHeader->GetXsection();
fNTrials = fPythiaHeader->Trials();
}
}
void SetMinMCLabel(Int_t s) { fMinMCLabel = s ; }
void SetMinNTrack(Int_t min) { fMinNTrack = min ; }
void SetMinPtTrackInEmcal(Double_t min) { fMinPtTrackInEmcal = min ; }
- void SetNCentBins(Int_t n) { fNcentBins = n ; }
+ void SetNCentBins(Int_t n) { fNcentBins = n ; }
+ void SetNeedEmcalGeom(Bool_t n) { fNeedEmcalGeom = n ; }
void SetOffTrigger(UInt_t t) { fOffTrigger = t ; }
void SetTrackEtaLimits(Double_t min, Double_t max, Int_t c=0);
void SetTrackPhiLimits(Double_t min, Double_t max, Int_t c=0);
Int_t fMinMCLabel; // minimum MC label value for the tracks/clusters being considered MC particles
Int_t fMCLabelShift; // if MC label > fMCLabelShift, MC label -= fMCLabelShift
Int_t fNcentBins; // how many centrality bins
+ Bool_t fNeedEmcalGeom; // whether or not the task need the emcal geometry
AliEMCALGeometry *fGeom; //!emcal geometry
TClonesArray *fTracks; //!tracks
TClonesArray *fCaloClusters; //!clusters
TObjArray fClusterCollArray; // cluster collection array
AliEmcalTriggerPatchInfo *fMainTriggerPatch; // main trigger patch, will be cached after calling GetMainTriggerPatch() first time
TriggerType fTriggerType; // trigger type J1 or J2
+
TList *fOutput; //!output list
TH1 *fHistTrialsAfterSel; //!total number of trials per pt hard bin after selection
TH1 *fHistEventsAfterSel; //!total number of events per pt hard bin after selection
+ TProfile *fHistXsectionAfterSel; //!x section from pythia header
TH1 *fHistTrials; //!trials from pyxsec.root
- TProfile *fHistXsection; //!x section from pyxsec.root
TH1 *fHistEvents; //!total number of events per pt hard bin
+ TProfile *fHistXsection; //!x section from pyxsec.root
TH1 *fHistPtHard; //!pt hard distribution
TH1 *fHistCentrality; //!event centrality distribution
TH1 *fHistZVertex; //!z vertex position
AliAnalysisTaskEmcal(const AliAnalysisTaskEmcal&); // not implemented
AliAnalysisTaskEmcal &operator=(const AliAnalysisTaskEmcal&); // not implemented
- ClassDef(AliAnalysisTaskEmcal, 8) // EMCAL base analysis task
+ ClassDef(AliAnalysisTaskEmcal, 9) // EMCAL base analysis task
};
#endif
else if (!newt->IsExtrapolatedToEMCAL()) {
if (fAttemptProp)
propthistrack = kTRUE;
- else if (fAttemptPropMatch && !newt->IsEMCAL())
+ else if (fAttemptPropMatch && newt->IsEMCAL())
propthistrack = kTRUE;
}
if (propthistrack)
} else {
ec = dynamic_cast<AliESDCaloCluster*>(clust);
TArrayI *arr = ec->GetTracksMatched();
- arr->Set(0);
+ if(arr) arr->Set(0);
}
const Int_t N = partC->GetNumberOfMatchedObj();
if (N <= 0)
if (!etrack)
continue;
- if (fTrackEfficiency < 1) {
- Double_t r = gRandom->Rndm();
- if (fTrackEfficiency < r)
- continue;
- }
-
if (!fEsdTrackCuts->AcceptTrack(etrack))
continue;
delete ntrack;
continue;
}
+
+ if (fTrackEfficiency < 1) {
+ Double_t r = gRandom->Rndm();
+ if (fTrackEfficiency < r)
+ continue;
+ }
+
if (fDoPropagation)
AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(ntrack,fDist);
new ((*fTracks)[ntrnew++]) AliESDtrack(*ntrack);
AliESDtrack *etrack = fEsdEv->GetTrack(i);
if (!etrack)
continue;
+
+ if ((fEsdTrackCuts!=0) && !fEsdTrackCuts->AcceptTrack(etrack))
+ continue;
+
if (fTrackEfficiency < 1) {
Double_t r = gRandom->Rndm();
if (fTrackEfficiency < r)
continue;
}
- if ((fEsdTrackCuts!=0) && !fEsdTrackCuts->AcceptTrack(etrack))
- continue;
+
AliESDtrack *ntrack = new ((*fTracks)[ntrnew++]) AliESDtrack(*etrack);
if (fDoPropagation)
AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(ntrack,fDist);
if (!etrack)
continue;
- if (fTrackEfficiency < 1) {
- Double_t r = gRandom->Rndm();
- if (fTrackEfficiency < r)
- continue;
- }
-
if (fEsdTrackCuts->AcceptTrack(etrack)) {
AliESDtrack *newTrack = new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
if (fDoPropagation)
UInt_t status = etrack->GetStatus();
if (!fIncludeNoITS && ((status&AliESDtrack::kITSrefit)==0))
continue;
+
+ if (fTrackEfficiency < 1) {
+ Double_t r = gRandom->Rndm();
+ if (fTrackEfficiency < r)
+ continue;
+ }
+
AliESDtrack *newTrack = new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
if (fDoPropagation)
AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,fDist);
recparam->SetTimeMax(timeMax);
recparam->SetTimeCut(timeCut);
- if (clusterizer == AliEMCALRecParam::kClusterizerNxN) //MV: copied from tender. please check
- recparam->SetNxM(3,3);
+ if (clusterizer == AliEMCALRecParam::kClusterizerNxN)
+ recparam->SetNxM(1,1); // -> (1,1) means 3x3!
AliEMCALRecoUtils *recoUtils = new AliEMCALRecoUtils();
recoUtils->SetNonLinearityFunction(0);
-// $Id$
-
AliEmcalAodTrackFilterTask* AddTaskEmcalAodTrackFilter(
const char *name = "FilterTracks",
const char *inname = "tracks",
TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
if (inputDataType != "AOD")) {
- ::Error("AddTaskAodTrackFilter", "This task works only on AOD analysis");
+ ::Info("AddTaskEmcalAodTpcTrack", "This task is only needed for AOD analysis. No task added.");
return NULL;
}
Bool_t doProp = kFALSE;
TString runPeriod(runperiod);
runPeriod.ToLower();
- if (runPeriod == "lhc11h" || runPeriod == "lhc13b" || runPeriod == "lhc13c" ||
- runPeriod == "lhc13d" || runPeriod == "lhc13e" || runPeriod == "lhc13f" ||
- runPeriod == "lhc13g" || runPeriod == "lhc12g" || runPeriod == "lhc10h" ||
- runPeriod == "lhc10d" || runPeriod == "lhc10e" || runPeriod == "lhc12a" ||
- runPeriod == "lhc12b" || runPeriod == "lhc12c" || runPeriod == "lhc12d" ||
- runPeriod == "lhc12e" || runPeriod == "lhc12f" || runPeriod == "lhc12g" ||
- runPeriod == "lhc12h" || runPeriod == "lhc12i"
+ if (runPeriod == "lhc10d" || runPeriod == "lhc10e" || runPeriod == "lhc10h" ||
+ runPeriod == "lhc11h" || runPeriod == "lhc12a" || runPeriod == "lhc12b" ||
+ runPeriod == "lhc12c" || runPeriod == "lhc12d" || runPeriod == "lhc12e" ||
+ runPeriod == "lhc12f" || runPeriod == "lhc12g" || runPeriod == "lhc12h" ||
+ runPeriod == "lhc12i" || runPeriod == "lhc13b" || runPeriod == "lhc13c" ||
+ runPeriod == "lhc13d" || runPeriod == "lhc13e" || runPeriod == "lhc13f" ||
+ runPeriod == "lhc13g"
) {
aodTask->SetAODfilterBits(256,512); // hybrid tracks
- if (runPeriod == "lhc10h" || runPeriod == "lhc10d" || runPeriod == "lhc10e")
+ if (runPeriod == "lhc10d" || runPeriod == "lhc10e" || runPeriod == "lhc10h")
includeNoITS = kTRUE;
- } else if (runPeriod == "lhc12a15e" || runPeriod == "lhc13b4" || runPeriod == "lhc13b4_fix" || runPeriod == "lhc13b4_plus" || runPeriod == "lhc12a15f"
- || runPeriod.Contains("lhc12a17") || runPeriod.Contains("lhc14a1")) {
+ else if (runPeriod == "lhc11h") // fix cascade bug in LHC11h AOD145
+ aodTask->SetAttemptProp(kTRUE);
+ } else if (runPeriod == "lhc12a15e" || runPeriod == "lhc12a15f" || runPeriod.Contains("lhc12a17") ||
+ runPeriod == "lhc13b4" || runPeriod == "lhc13b4_fix" || runPeriod == "lhc13b4_plus" ||
+ runPeriod.Contains("lhc14a1")
+ ) {
aodTask->SetAODfilterBits(256,512); // hybrid tracks
aodTask->SetMC(kTRUE);
} else if (runPeriod == "lhc11a" || runPeriod == "lhc10hold") {
}
aodTask->SetIncludeNoITS(includeNoITS);
aodTask->SetDoPropagation(doProp);
- //aodTask->SetAttemptProp(kTRUE);
//-------------------------------------------------------
// Final settings, pass to manager and set the containers
if (reclusterize) {
params->SetClusterizerFlag(clusterizer);
if (clusterizer == AliEMCALRecParam::kClusterizerNxN)
- params->SetNxM(3,3);
+ params->SetNxM(1,1); // -> (1,1) means 3x3!
}
params->SetTimeMin(timeMin);
params->SetTimeMax(timeMax);
// for basic kinematic cuts
//
// author: N. van der Kolk (kolk@nikhef.nl)
-// mods: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch)
+// mods: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch), Redmer Bertens (rbertens@cern.ch)
#include <limits.h>
#include <float.h>
fCutEta(kFALSE),
fEtaMax(FLT_MAX),
fEtaMin(-FLT_MAX),
+ fCutEtaGap(kFALSE),
+ fEtaGapMax(0.),
+ fEtaGapMin(0.),
fCutPhi(kFALSE),
fPhiMax(FLT_MAX),
fPhiMin(-FLT_MAX),
if(fCutPhi) {if (track->Phi() < fPhiMin || track->Phi() >= fPhiMax ) return kFALSE;}
if(fCutCharge) {if (track->Charge() != fCharge) return kFALSE;}
if(fCutMass) {if (track->Mass() < fMassMin || track->Mass() >= fMassMax ) return kFALSE;}
+ if(fCutEtaGap) {if (track->Eta() > fEtaGapMin && track->Eta() < fEtaGapMax) return kFALSE;}
//if(fCutPID) {if (track->PID() != fPID) return kFALSE;}
return kTRUE;
}
if(fCutPt) {if (track->Pt() < fPtMin || track->Pt() >= fPtMax ) return kFALSE;}
if(fCutEta) {if (track->Eta() < fEtaMin || track->Eta() >= fEtaMax ) return kFALSE;}
if(fCutPhi) {if (track->Phi() < fPhiMin || track->Phi() >= fPhiMax ) return kFALSE;}
+ if(fCutEtaGap) {if (track->Eta() > fEtaGapMin && track->Eta() < fEtaGapMax) return kFALSE;}
+
//if(fCutPID) {if (track->GetPdgCode() != fPID) return kFALSE;}
//getting the charge from a tparticle is expensive
// A simple track cut class to the the AliFlowTrackSimple for basic
// kinematic cuts
// author: N. van der Kolk (kolk@nikhef.nl)
-// mods: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch)
+// mods: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch), Redmer Bertens (rbertens@cern.ch)
#ifndef ALIFLOWTRACKSIMPLECUTS_H
#define ALIFLOWTRACKSIMPLECUTS_H
void SetPtMin(Double_t min) {this->fPtMin = min; fCutPt=kTRUE; }
void SetEtaMax(Double_t max) {this->fEtaMax = max; fCutEta=kTRUE; }
void SetEtaMin(Double_t min) {this->fEtaMin = min; fCutEta=kTRUE; }
+ void SetEtaGap(Double_t min, Double_t max)
+ {fEtaGapMin = min, fEtaGapMax = max, fCutEtaGap = kTRUE; }
void SetPhiMax(Double_t max) {this->fPhiMax = max; fCutPhi=kTRUE; }
void SetPhiMin(Double_t min) {this->fPhiMin = min; fCutPhi=kTRUE; }
void SetPID(Int_t pid) {this->fPID = pid; fCutPID=kTRUE; }
Double_t GetEtaMax() const {return this->fEtaMax; }
Double_t GetEtaMin() const {return this->fEtaMin; }
Double_t GetPhiMax() const {return this->fPhiMax; }
+ Double_t GetEtaGapMin() const {return this->fEtaGapMin; }
+ Double_t GetEtaGapMax() const {return this->fEtaGapMax; }
Double_t GetPhiMin() const {return this->fPhiMin; }
Int_t GetPID() const {return this->fPID; }
Int_t GetCharge() const {return this->fCharge; }
Bool_t fCutEta; //cut on eta?
Double_t fEtaMax; //max eta
Double_t fEtaMin; //min eta
+ Bool_t fCutEtaGap; //have eta gap (i.e. discontinuous rp selection in eta?)
+ Double_t fEtaGapMax; // max eta gap
+ Double_t fEtaGapMin; // min eta gap
Bool_t fCutPhi; //cut on phi?
Double_t fPhiMax; //max phi
Double_t fPhiMin; //min phi
Double_t fMassMin; //min mass
Int_t fPOItype; //which poi type do we produce? (RP=0, POI=1,2,3,4,5...)
- ClassDef(AliFlowTrackSimpleCuts,2)
+ ClassDef(AliFlowTrackSimpleCuts,3)
};
#endif
//-----------------------------------------------------------------------
AliFlowEvent::AliFlowEvent():
- AliFlowEventSimple(), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
//-----------------------------------------------------------------------
AliFlowEvent::AliFlowEvent(Int_t n):
- AliFlowEventSimple(n), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(n), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
//-----------------------------------------------------------------------
AliFlowEvent::AliFlowEvent(const AliFlowEvent& event):
- AliFlowEventSimple(event), fApplyRecentering(event.fApplyRecentering), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(event), fApplyRecentering(event.fApplyRecentering), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// copy constructor
for(Int_t i(0); i < 9; i++) {
fApplyRecentering = event.fApplyRecentering;
fCachedRun = event.fCachedRun;
fVZEROcentralityBin = event.fVZEROcentralityBin;
+ fEvent = 0x0; // should never be copied
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
AliFlowEvent::AliFlowEvent( const AliMCEvent* anInput,
const AliCFManager* rpCFManager,
const AliCFManager* poiCFManager):
- AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
const AliCFManager* rpCFManager,
const AliCFManager* poiCFManager ):
- AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
AliFlowEvent::AliFlowEvent( const AliAODEvent* anInput,
const AliCFManager* rpCFManager,
const AliCFManager* poiCFManager):
- AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
KineSource anOption,
const AliCFManager* rpCFManager,
const AliCFManager* poiCFManager ):
- AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
const AliMultiplicity* anInputTracklets,
const AliCFManager* poiCFManager ):
- AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
AliFlowEvent::AliFlowEvent( const AliESDEvent* esd,
const AliCFManager* poiCFManager,
Bool_t hybrid):
- AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
const TH2F* anInputFMDhist,
const AliCFManager* poiCFManager ):
- AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
//-----------------------------------------------------------------------
AliFlowEvent::AliFlowEvent( AliFlowTrackCuts* rpCuts,
AliFlowTrackCuts* poiCuts ):
- AliFlowEventSimple(20), fApplyRecentering(kFALSE), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(20), fApplyRecentering(kFALSE), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
const AliESDPmdTrack *pmdtracks,
const AliCFManager* poiCFManager ):
- AliFlowEventSimple(20), fApplyRecentering(kFALSE), fCachedRun(-1), fVZEROcentralityBin(-1)
+ AliFlowEventSimple(20), fApplyRecentering(kFALSE), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0)
{
// constructor
for(Int_t i(0); i < 9; i++) {
{
// get q vectors for the subevents. if no recentering is necessary, get the guy from the flow event simple
AliFlowEventSimple::Get2Qsub(Qarray, n, weightsList, usePhiWeights, usePtWeights, useEtaWeights);
+ AliFlowVector vA = Qarray[0];
+ AliFlowVector vB = Qarray[1];
+
// else get the recentering from the cached info
- if (fApplyRecentering == 2010) // 10h style recentering
+ if (fApplyRecentering == 2010) // 10h style recentering, implemented for n=2 and n=3
{
// first retrieve the q-vectors from the AliFlowEventSimple:: routine
- AliFlowVector vA = Qarray[0];
- AliFlowVector vB = Qarray[1];
// extract the information form the current flow vectors
Double_t Qxc(vA.X()); // IMPORTANT: user is responsible for the sign of eta
Double_t Qyc(vA.Y()); // vzeroC has negative pseudorapidity and is taken as subevent A
Double_t Qya(vB.Y());
// init some values for the corrections
- // values for vector a (VZEROA)
+ // default values for vector a (VZEROA)
Double_t Qxamean(0);
Double_t Qxarms(1);
Double_t Qyamean(0);
Double_t Qyarms(1);
- // values for vector b (VZEROC)
+ // default values for vector b (VZEROC)
Double_t Qxcmean(0);
Double_t Qxcrms(1);
Double_t Qycmean(0);
Double_t Qycrms(1);
+ // note that defaults are chosen such that for n!=2||n!=3 re-centering is a null-operation
if( n == 2) { // second order symmetry
Qxamean = fMeanQ[fVZEROcentralityBin][1][0];
Qycmean = fMeanQv3[fVZEROcentralityBin][0][1];
Qycrms = fWidthQv3[fVZEROcentralityBin][0][1];
}
+// printf(" > n %i Qx %.2f Qxrms %.2f \n", n, Qxamean, Qxarms);
// do the correction
Double_t QxaCor = (Qxa - Qxamean)/Qxarms;
Double_t QyaCor = (Qya - Qyamean)/Qyarms;
vA.Set(QxcCor, QycCor);
vB.Set(QxaCor, QyaCor);
} else if (fApplyRecentering == 2011) { // 11h style recentering
- // in this case, the q-vectors are repaced by the ones from
- // the event header
-
- // first retrieve the q-vectors from the AliFlowEventSimple:: routine
- AliFlowVector vA = Qarray[0];
- AliFlowVector vB = Qarray[1];
Double_t QxaCor = 0.;
Double_t QyaCor = 0.;
Double_t QxcCor = 0.;
Double_t QycCor = 0.;
- // copy the new q-vectors from the cache
- if(n == 2) {
- QxaCor = fMeanQ[0][1][0];
- QyaCor = fMeanQ[0][1][1];
- QxcCor = fMeanQ[0][0][0];
- QycCor = fMeanQ[0][0][1];
- } else if (n == 3) {
- QxaCor = fMeanQv3[0][1][0];
- QyaCor = fMeanQv3[0][1][1];
- QxcCor = fMeanQv3[0][0][0];
- QycCor = fMeanQv3[0][0][1];
- }
- // set the new q-vectors (which in this case means REPLACING)
- vA.Set(QxcCor, QycCor);
- vB.Set(QxaCor, QyaCor);
+ if(fEvent && fEvent->GetEventplane()) {
+ fEvent->GetEventplane()->CalculateVZEROEventPlane(fEvent, 8, n, QxaCor, QyaCor);
+ fEvent->GetEventplane()->CalculateVZEROEventPlane(fEvent, 9, n, QxcCor, QycCor);
+
+ // set the new q-vectors (which in this case means REPLACING)
+ vA.Set(QxcCor, QycCor);
+ vB.Set(QxaCor, QyaCor);
+ } // if for some reason the info from the event header is not available, the AliFlowTrackCuts object
+ // has provided the equalized multiplicity info so this should still be relatively safe
}
}
//_____________________________________________________________________________
void AliFlowEvent::SetVZEROCalibrationForTrackCuts(AliFlowTrackCuts* cuts) {
// open calibration info, copied from AliAnalyisTaskVnV0.cxx
- if(!cuts->GetEvent()) return; // coverity. we need to know the event to get the runnumber and centrlaity
+ fEvent = cuts->GetEvent();
+ if(!fEvent) return; // coverity. we need to know the event to get the runnumber and centrlaity
// get the vzero centrality percentile (cc dependent calibration)
- Float_t v0Centr(cuts->GetEvent()->GetCentrality()->GetCentralityPercentile("V0M"));
+ Float_t v0Centr(fEvent->GetCentrality()->GetCentralityPercentile("V0M"));
if(v0Centr < 5) fVZEROcentralityBin = 0;
else if(v0Centr < 10) fVZEROcentralityBin = 1;
else if(v0Centr < 20) fVZEROcentralityBin = 2;
// if this event is from the same run as the previous event
// we can use the cached calibration values, no need to re-open the
- // aodb file
- Int_t run(cuts->GetEvent()->GetRunNumber());
- if(fCachedRun == run) {
- // the runnumber did not change, no need to open the database again
- // in case of 11h style recentering, update the q-sub vectors
- if(fApplyRecentering == 2011) SetVZEROCalibrationForTrackCuts2011(cuts);
- return;
- }
- // set the chached run number
- fCachedRun = run;
+ // aodb file, else cache the new run
+ Int_t run(fEvent->GetRunNumber());
+ if(fCachedRun == run) return;
+ else fCachedRun = run;
- TString oadbfilename = "$ALICE_ROOT/OADB/PWGCF/VZERO/VZEROcalibEP.root";
- TFile *foadb = TFile::Open(oadbfilename.Data());
-
+ TFile *foadb = TFile::Open("$ALICE_ROOT/OADB/PWGCF/VZERO/VZEROcalibEP.root");
if(!foadb){
- printf("OADB file %s cannot be opened\n",oadbfilename.Data());
+ printf("OADB file $ALICE_ROOT/OADB/PWGCF/VZERO/VZEROcalibEP.root cannot be opened, CALIBRATION FAILED !");
return;
}
for(Int_t r(0); r < 176; r++) {
if(run == runs11h[r]) {
printf(" > run has been identified as 11h < \n");
- if(cuts->GetVZEROgainEqualizationPerRing()) {
+ if(cuts->GetVZEROgainEqualizationPerRing()) {
// enable or disable rings through the weights, weight 1. is enabled, 0. is disabled
// start with the vzero c rings (segments 0 through 31)
(cuts->GetUseVZERORing(0)) ? cuts->SetVZEROCpol(0, 1.) : cuts->SetVZEROCpol(0, 0.);
(cuts->GetUseVZERORing(6)) ? cuts->SetVZEROApol(2, 1.) : cuts->SetVZEROApol(2, 0.);
(cuts->GetUseVZERORing(7)) ? cuts->SetVZEROApol(3, 1.) : cuts->SetVZEROApol(3, 0.);
} else {
- // else enable all rings
+ // else enable all rings, which is also default
for(Int_t i(0); i < 4; i++) cuts->SetVZEROCpol(i, 1.);
for(Int_t i(0); i < 4; i++) cuts->SetVZEROApol(i, 1.);
}
- // pass a NULL pointer to the track cuts object
- // the NULL pointer will identify 11h runs
+ // pass a NULL pointer to the track cuts object, the NULL pointer will identify 11h runs
cuts->SetVZEROgainEqualisation(NULL);
- // this will identify the recentering style that is required. flight might be changed if recenetering is disabled
fApplyRecentering = 2011;
- SetVZEROCalibrationForTrackCuts2011(cuts);
return; // the rest of the steps are not necessary
}
}
// the run has not been identified as lhc11h data, so we assume a template calibration
- printf("OADB object hMultVZEROBefCorr is not available for run %i (used run 137366)\n",run);
+ printf("OADB object hMultVZEROBefCorr is not available for run %i (used default run 137366)\n",run);
run = 137366;
}
printf(" > run has been identified as 10h < \n");
fApplyRecentering = 2010;
}
//_____________________________________________________________________________
-void AliFlowEvent::SetVZEROCalibrationForTrackCuts2011(AliFlowTrackCuts* cuts)
-{
- // load the vzero q-sub vectors
- if(!cuts->GetEvent() || !cuts->GetEvent()->GetEventplane()) return; // coverity
- Double_t qxEPa = 0, qyEPa = 0;
- Double_t qxEPc = 0, qyEPc = 0;
- Double_t qxEPa3 = 0, qyEPa3 = 0;
- Double_t qxEPc3 = 0, qyEPc3 = 0;
-
- // get the q-vectors from the header
- cuts->GetEvent()->GetEventplane()->CalculateVZEROEventPlane(cuts->GetEvent(), 8, 2, qxEPa, qyEPa);
- cuts->GetEvent()->GetEventplane()->CalculateVZEROEventPlane(cuts->GetEvent(), 9, 2, qxEPc, qyEPc);
- cuts->GetEvent()->GetEventplane()->CalculateVZEROEventPlane(cuts->GetEvent(), 8, 3, qxEPa3, qyEPa3);
- cuts->GetEvent()->GetEventplane()->CalculateVZEROEventPlane(cuts->GetEvent(), 9, 3, qxEPc3, qyEPc3);
-
- // store the values temporarily. this may seem
- // inelegant, but we don't want to include
- // aliflowtrackcuts or alivevnet in get2qsub
-
- // qx and qy for vzero a, second harmonc
- fMeanQ[0][1][0] = qxEPa;
- fMeanQ[0][1][1] = qyEPa;
- // qx and qx for vzero c, second harmonic
- fMeanQ[0][0][0] = qxEPc;
- fMeanQ[0][0][1] = qyEPc;
- // qx and qy for vzero a, third harmonic
- fMeanQv3[0][1][0] = qxEPa3;
- fMeanQv3[0][1][1] = qyEPa3;
- // qx and qy for vzero c, third harmonic
- fMeanQv3[0][0][0] = qxEPc3;
- fMeanQv3[0][0][1] = qyEPc3;
-}
-//_____________________________________________________________________________
void AliFlowEvent::ClearFast()
{
virtual void Get2Qsub(AliFlowVector* Qarray, Int_t n = 2, TList *weightsList = 0x0, Bool_t usePhiWeights = 0x0, Bool_t usePtWeights = 0x0, Bool_t useEtaWeights = 0x0);
void SetVZEROCalibrationForTrackCuts(AliFlowTrackCuts* cuts);
- void SetVZEROCalibrationForTrackCuts2011(AliFlowTrackCuts* cuts);
virtual void ClearFast();
virtual void ClearCachedRun();
private:
Int_t fApplyRecentering; // apply recentering of q-vectors? 2010 is 10h style, 2011 is 11h style
Int_t fCachedRun; //! cached calibration info for vzero
- Int_t fVZEROcentralityBin; //! centrality bin for the current event
+ Int_t fVZEROcentralityBin; //! centrality bin for the current event
Float_t fMeanQ[9][2][2]; //! recentering
Float_t fWidthQ[9][2][2]; //! recentering
Float_t fMeanQv3[9][2][2]; //! recentering
Float_t fWidthQv3[9][2][2]; //! recentering
+ AliVEvent* fEvent; //! current event
- ClassDef(AliFlowEvent,3)
+ ClassDef(AliFlowEvent,4)
};
#endif
#include "AliKFParticle.h"
#include "AliESDVZERO.h"
#include "AliFlowCommonConstants.h"
+#include "AliAnalysisManager.h"
+#include "AliPIDResponse.h"
ClassImp(AliFlowTrackCuts)
fCurrCentr(0.0),
fVZEROgainEqualization(NULL),
fApplyRecentering(kFALSE),
- fVZEROgainEqualizationPerRing(kFALSE)
+ fVZEROgainEqualizationPerRing(kFALSE),
+ fPIDResponse(NULL),
+ fNsigmaCut2(9)
{
//io constructor
SetPriors(); //init arrays
fCurrCentr(0.0),
fVZEROgainEqualization(NULL),
fApplyRecentering(kFALSE),
- fVZEROgainEqualizationPerRing(kFALSE)
+ fVZEROgainEqualizationPerRing(kFALSE),
+ fPIDResponse(NULL),
+ fNsigmaCut2(9)
{
//constructor
SetTitle("AliFlowTrackCuts");
fCurrCentr(0.0),
fVZEROgainEqualization(NULL),
fApplyRecentering(that.fApplyRecentering),
- fVZEROgainEqualizationPerRing(that.fVZEROgainEqualizationPerRing)
+ fVZEROgainEqualizationPerRing(that.fVZEROgainEqualizationPerRing),
+ fPIDResponse(that.fPIDResponse),
+ fNsigmaCut2(that.fNsigmaCut2)
{
//copy constructor
printf(" \n\n claling copy ctor \n\n" );
}
for(Int_t i(0); i < 8; i++) fUseVZERORing[i] = that.fUseVZERORing[i];
+ fPIDResponse = that.fPIDResponse;
+ fNsigmaCut2 = that.fNsigmaCut2;
+
return *this;
}
fEvent=event;
fMCevent=mcEvent;
+ // Get PID response
+ AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+ if(man){
+ AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
+ if(inputHandler) fPIDResponse=inputHandler->GetPIDResponse();
+ }
+
//do the magic for ESD
AliESDEvent* myESD = dynamic_cast<AliESDEvent*>(event);
AliAODEvent* myAOD = dynamic_cast<AliAODEvent*>(event);
if (dedx < fMinimalTPCdedx) pass=kFALSE;
Double_t time[9];
track->GetIntegratedTimes(time);
+ if (fCutPID && (fParticleID!=AliPID::kUnknown)) //if kUnknown don't cut on PID
+ {
+ if (!PassesAODpidCut(track)) pass=kFALSE;
+ }
+
if (fQA) {
+ // changed 04062014 used to be filled before possible PID cut
Double_t momTPC = track->GetTPCmomentum();
+ QAbefore( 0)->Fill(momTPC,GetBeta(track, kTRUE));
+ if(pass) QAafter( 0)->Fill(momTPC, GetBeta(track, kTRUE));
QAbefore( 1)->Fill(momTPC,dedx);
QAbefore( 5)->Fill(track->Pt(),track->DCA());
QAbefore( 6)->Fill(track->Pt(),track->ZAtDCA());
if (pass) QAafter( 12)->Fill(track->P(),(track->GetTOFsignal()-time[AliPID::kProton]));
}
- if (fCutPID && (fParticleID!=AliPID::kUnknown)) //if kUnknown don't cut on PID
- {
- if (!PassesAODpidCut(track)) pass=kFALSE;
- }
-
+
return pass;
}
return multiplicity;
}
+//-----------------------------------------------------------------------
+AliFlowTrackCuts* AliFlowTrackCuts::GetAODTrackCutsForFilterBit(UInt_t bit)
+{
+ // object which in its default form only cuts on filterbit (for AOD analysis)
+ AliFlowTrackCuts* cuts = new AliFlowTrackCuts(Form("AOD fitlerbit %i", (int)bit));
+ cuts->SetMinimalTPCdedx(-999999999);
+ cuts->SetAODfilterBit(bit);
+ cuts->SetParamType(AliFlowTrackCuts::kAODFilterBit);
+ return cuts;
+}
//-----------------------------------------------------------------------
AliFlowTrackCuts* AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts()
{
AliFlowTrackCuts* AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts2010()
{
//get standard VZERO cuts
+ //DISCLAIMER: LHC10h VZERO calibration consists (by default) of two steps
+ //1) re-weigting of signal
+ //2) re-centering of q-vectors
+ //step 2 is available only for n==2 and n==3, for the higher harmonics the user
+ //is repsonsible for making sure the q-sub distributions are (sufficiently) flat
+ //or a sensible NUA procedure is applied !
AliFlowTrackCuts* cuts = new AliFlowTrackCuts("standard vzero flow cuts 2010");
- cuts->SetParamType(kVZERO);
+ cuts->SetParamType(AliFlowTrackCuts::kVZERO);
cuts->SetEtaRange( -10, +10 );
+ cuts->SetEtaGap(-1., 1.);
cuts->SetPhiMin( 0 );
cuts->SetPhiMax( TMath::TwoPi() );
// options for the reweighting
cuts->SetVZEROgainEqualizationPerRing(kFALSE);
cuts->SetApplyRecentering(kTRUE);
- // to exclude a ring , do e.g.
+ // to exclude a ring , do e.g.
// cuts->SetUseVZERORing(7, kFALSE);
+ // excluding a ring will break the re-centering as re-centering relies on a
+ // database file which tuned to receiving info from all rings
return cuts;
}
//-----------------------------------------------------------------------
//if recentering is enableded, the sub-q vectors
//will be taken from the event header, so make sure to run
//the VZERO event plane selection task before this task !
+ //DISCLAIMER: recentering is only available for n==2
+ //for the higher harmonics the user
+ //is repsonsible for making sure the q-sub distributions are (sufficiently) flat
+ //or a sensible NUA procedure is applied !
//recentering replaces the already evaluated q-vectors, so
//when chosen, additional settings (e.g. excluding rings)
//have no effect. recentering is true by default
AliFlowTrackCuts* cuts = new AliFlowTrackCuts("standard vzero flow cuts 2011");
cuts->SetParamType(kVZERO);
cuts->SetEtaRange( -10, +10 );
+ cuts->SetEtaGap(-1., 1.);
cuts->SetPhiMin( 0 );
cuts->SetPhiMax( TMath::TwoPi() );
cuts->SetApplyRecentering(kTRUE);
- return cuts;
+ cuts->SetVZEROgainEqualizationPerRing(kFALSE);
+ return cuts;
}
//-----------------------------------------------------------------------
AliFlowTrackCuts* AliFlowTrackCuts::GetStandardGlobalTrackCuts2010()
case kTPCbayesian:
if (!PassesTPCbayesianCut(track)) pass=kFALSE;
break;
+ case kTPCTOFNsigma:
+ if (!PassesTPCTOFNsigmaCut(track)) pass = kFALSE;
+ break;
default:
return kTRUE;
break;
if (!PassesNucleiSelection(track)) pass=kFALSE;
break;
//end part added by Natasha
-
+
+ case kTPCTOFNsigma:
+ if (!PassesTPCTOFNsigmaCut(track)) pass = kFALSE;
+ break;
default:
printf("AliFlowTrackCuts::PassesCuts() this should never be called!\n");
pass=kFALSE;
}
//-----------------------------------------------------------------------
-Float_t AliFlowTrackCuts::GetBeta(const AliVTrack* track)
+Float_t AliFlowTrackCuts::GetBeta(const AliVTrack* track, Bool_t QAmode)
{
//get beta
Double_t integratedTimes[9] = {-1.0,-1.0,-1.0,-1.0,-1.0, -1.0, -1.0, -1.0, -1.0};
Float_t l = integratedTimes[0]*c;
Float_t trackT0 = fESDpid.GetTOFResponse().GetStartTime(p);
Float_t timeTOF = track->GetTOFsignal()- trackT0;
+ if(QAmode && timeTOF <= 0) return -999; // avoid division by zero when filling 'before' qa histograms
return l/timeTOF/c;
}
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
Bool_t AliFlowTrackCuts::PassesTOFbayesianCut(const AliAODTrack* track)
{
-//check is track passes bayesian combined TOF+TPC pid cut
+ //check is track passes bayesian combined TOF+TPC pid cut
Bool_t goodtrack = (track->GetStatus() & AliESDtrack::kTOFout) &&
(track->GetStatus() & AliESDtrack::kTIME) &&
(track->GetTOFsignal() > 12000) &&
return kFALSE;
Bool_t statusMatchingHard = TPCTOFagree(track);
-//ciao
if (fRequireStrictTOFTPCagreement && (!statusMatchingHard))
return kFALSE;
return select;
}
// end part added by Natasha
+//-----------------------------------------------------------------------
+Bool_t AliFlowTrackCuts::PassesTPCTOFNsigmaCut(const AliAODTrack* track)
+{
+ // do a simple combined cut on the n sigma from tpc and tof
+ // with information of the pid response object (needs pid response task)
+ // stub, not implemented yet
+ if(!fPIDResponse) return kFALSE;
+ if(!track) return kFALSE;
+
+ // check TOF status
+ if ((track->GetStatus()&AliVTrack::kTOFout)==0) return kFALSE;
+ if ((track->GetStatus()&AliVTrack::kTIME)==0) return kFALSE;
+
+ // check TPC status
+ if(track->GetTPCsignal() < 10) return kFALSE;
+
+ Float_t nsigmaTPC = fPIDResponse->NumberOfSigmas(AliPIDResponse::kTPC,track,fParticleID);
+ Float_t nsigmaTOF = fPIDResponse->NumberOfSigmas(AliPIDResponse::kTOF,track,fParticleID);
+
+ Float_t nsigma2 = nsigmaTPC*nsigmaTPC + nsigmaTOF*nsigmaTOF;
+
+ return (nsigma2 < fNsigmaCut2);
+
+}
+//-----------------------------------------------------------------------------
+Bool_t AliFlowTrackCuts::PassesTPCTOFNsigmaCut(const AliESDtrack* track)
+{
+ // do a simple combined cut on the n sigma from tpc and tof
+ // with information of the pid response object (needs pid response task)
+ // stub, not implemented yet
+ if(!fPIDResponse) return kFALSE;
+ if(!track) return kFALSE;
+
+ // check TOF status
+ if ((track->GetStatus()&AliVTrack::kTOFout)==0) return kFALSE;
+ if ((track->GetStatus()&AliVTrack::kTIME)==0) return kFALSE;
+
+ // check TPC status
+ if(track->GetTPCsignal() < 10) return kFALSE;
+
+ Float_t nsigmaTPC = fPIDResponse->NumberOfSigmas(AliPIDResponse::kTPC,track,fParticleID);
+ Float_t nsigmaTOF = fPIDResponse->NumberOfSigmas(AliPIDResponse::kTOF,track,fParticleID);
+
+ Float_t nsigma2 = nsigmaTPC*nsigmaTPC + nsigmaTOF*nsigmaTOF;
+
+ return (nsigma2 < fNsigmaCut2);
+
+}
+
//-----------------------------------------------------------------------
void AliFlowTrackCuts::SetPriors(Float_t centrCur){
//set priors for the bayesian pid selection
return "TOFbetaSimple";
case kTPCNuclei:
return "TPCnuclei";
+ case kTPCTOFNsigma:
+ return "TPCTOFNsigma";
default:
return "NOPID";
}
class AliESDkink;
class AliESDv0;
class AliESDVZERO;
+class AliPIDResponse;
class AliFlowTrackCuts : public AliFlowTrackSimpleCuts {
AliFlowTrackCuts& operator=(const AliFlowTrackCuts& someCuts);
virtual ~AliFlowTrackCuts();
+ static AliFlowTrackCuts* GetAODTrackCutsForFilterBit(UInt_t bit = 1);
static AliFlowTrackCuts* GetStandardTPCStandaloneTrackCuts();
static AliFlowTrackCuts* GetStandardTPCStandaloneTrackCuts2010();
static AliFlowTrackCuts* GetStandardGlobalTrackCuts2010();
kV0, //neutral reconstructed v0 particle
kVZERO, //forward VZERO detector
kMUON, // XZhang 20120604
- kKink
+ kKink,
+ kAODFilterBit
};
enum trackParameterMix { kPure,
kTrackWithMCkine,
kTPCdedx, // asymmetric cuts of TPC dedx signal
kTOFbetaSimple, //simple TOF only cut
kTPCbayesian, //bayesian cutTPC
- kTPCNuclei // added by Natasha for Nuclei
+ kTPCNuclei, // added by Natasha for Nuclei
+ kTPCTOFNsigma // simple cut on combined tpc tof nsigma
};
//setters (interface to AliESDtrackCuts)
Int_t GetPmdDetPlane()const {return fPmdDet; }
Float_t GetPmdAdc()const {return fPmdAdc;}
Float_t GetPmdNcell() const {return fPmdNcell; }
- Float_t GetBeta(const AliVTrack* t);
+ Float_t GetBeta(const AliVTrack* t, Bool_t QAmode = kFALSE);
Float_t Getdedx(const AliESDtrack* t) const;
Float_t GetBayesianProb() const {return fProbBayes;};
AliFlowBayesianPID* GetBayesianResponse() const {return fBayesianResponse;}
}
Bool_t GetUseVZERORing(Int_t i) const {return fUseVZERORing[i];}
+ void SetNumberOfSigmas(Float_t val) {fNsigmaCut2 = val*val;};
+ Float_t GetNumberOfSigmas() const {return TMath::Sqrt(fNsigmaCut2);};
+
protected:
//AliFlowTrack* MakeFlowTrackSPDtracklet() const;
//AliFlowTrack* MakeFlowTrackPMDtrack() const;
// part added by F. Noferini
Bool_t PassesTOFbayesianCut(const AliESDtrack* track);
Bool_t PassesNucleiSelection(const AliESDtrack* track); // added by Natasha
+ Bool_t PassesTPCTOFNsigmaCut(const AliAODTrack* track);
+ Bool_t PassesTPCTOFNsigmaCut(const AliESDtrack* track);
Bool_t TPCTOFagree(const AliVTrack *track);
// end part added by F. Noferini
Bool_t fUseVZERORing[8]; // kTRUE means the ring is included
static const Int_t fgkNumberOfVZEROtracks=64; //number of VZERO channels
- ClassDef(AliFlowTrackCuts,13)
+ AliPIDResponse *fPIDResponse; //! Pid reponse to manage Nsigma cuts
+ Float_t fNsigmaCut2; // Number of sigma^2 (cut value) for TPC+TOF nsigma cut
+
+ ClassDef(AliFlowTrackCuts,14)
};
#endif
{
/// Check if the particle is primary
- Bool_t isPrimary = kFALSE;
- if ( IsAODMCTrack(mcParticle) ) isPrimary = static_cast<const AliAODMCParticle*>(mcParticle)->IsPrimary();
+ if ( IsAODMCTrack(mcParticle) ) return static_cast<const AliAODMCParticle*>(mcParticle)->IsPrimary();
else if ( mcEvent ) {
- // First get the index of the current particle in the stack.
- // For this: get the mother, and get its daughter.
- // Since the mother can have many daughters, you can come up to a "sister"
- // of the particle. Nevertheless, if it is primary, then also the particle itself should be.
- Int_t imother = static_cast<const AliMCParticle*> (mcParticle)->GetMother();
- if ( imother < 0 ) isPrimary = kTRUE;
- else if ( static_cast<const AliMCParticle*>(mcEvent->GetTrack(imother))->GetFirstDaughter() < const_cast<AliMCEvent*>(mcEvent)->GetNumberOfPrimaries() ) isPrimary = kTRUE;
+ return ( mcParticle->GetLabel() < const_cast<AliMCEvent*>(mcEvent)->GetNumberOfPrimaries() );
}
else AliWarningClass("There is no MC info");
- return isPrimary;
+ return kFALSE;
}
//________________________________________________________________________
printf("Registering delta AOD file\n");
mgr->RegisterExtraFile("AliAOD.Muons.root");
mgr->RegisterExtraFile("AliAOD.Dimuons.root");
- AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kTRUE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,kTRUE,kTRUE,kTRUE,1100,1); // others
+ int muonMCMode=1; // 1 to keep all ancestors, whether or not we get something in the muon arm
+ AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kTRUE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,kTRUE,kTRUE,kTRUE,1100,muonMCMode); // others
} else {
- AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kFALSE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,kTRUE,kTRUE,kTRUE,1100,1); // others
+ AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kFALSE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,kTRUE,kTRUE,kTRUE,1100,muonMCMode); // others
}
if ( 0 && VAR_USE_ITS_RECO ) /* 0 for the moment to get this macro running also with AliRoot <= .... */
#if defined(__CINT__)
gSystem->Load("liblhapdf"); // Parton density functions
gSystem->Load("libEGPythia6"); // TGenerator interface
- gSystem->Load("libpythia6"); // Pythia 6.2
+ gSystem->Load("libpythia6"); // Pythia 6.2 (for decayer)
gSystem->Load("libAliPythia6"); // ALICE specific implementations
gSystem->Load("libgeant321");
-
+
if ( TString("VAR_GENERATOR").Contains("pythia8",TString::kIgnoreCase) )
{
std::cout << "Setting up Pythia8 required libraries and env. variables" << std::endl;
- gSystem->Load("libpythia8.so");
- gSystem->Load("libAliPythia8.so");
+ gSystem->Load("libpythia8");
+ gSystem->Load("libAliPythia8");
VAR_PYTHIA8_INCLUDES
VAR_PYTHIA8_SETENV
}
+
+ if ( TString("VAR_GENERATOR").Contains("pythia6",TString::kIgnoreCase) )
+ {
+ std::cout << "Setting up Pythia6 required env. variables" << std::endl;
+ VAR_PYTHIA6_INCLUDES
+ VAR_PYTHIA6_SETENV
+ }
+
+
#endif
+
new TGeant3TGeo("C++ Interface to Geant3");
//=======================================================================
return;
}
rl->SetCompressionLevel(2);
- rl->SetNumberOfEventsPerFile(20000);
+ rl->SetNumberOfEventsPerFile(5000);
gAlice->SetRunLoader(rl);
+ if ( TString("VAR_TRIGGER_CONFIGURATION").Length() > 0 )
+ {
+ AliSimulation::Instance()->SetTriggerConfig("VAR_TRIGGER_CONFIGURATION");
+ cout<<"Trigger configuration is set to VAR_TRIGGER_CONFIGURATION" << std::endl;
+ }
+
//
//=======================================================================
// ************* STEERING parameters FOR ALICE SIMULATION **************
std::cout << "VAR_GENERATOR settings " << std::endl;
gSystem->AddIncludePath("-I$ALICE_ROOT/include");
gSystem->AddIncludePath("-I$ALICE_ROOT/EVGEN");
+ gSystem->AddIncludePath("-I$ALICE_ROOT/STEER/STEER");
gROOT->LoadMacro("VAR_GENERATOR.C+");
AliGenerator* gener = VAR_GENERATOR();
+ TString slibs = gSystem->GetLibraries();
+ TObjArray* olibs = slibs.Tokenize(" ");
+ TObjString* s;
+ TIter next(olibs);
+ std::cout << "List of libraries=" << std::endl;
+ while ( ( s = static_cast<TObjString*>(next())) )
+ {
+ std::cout << s->String().Data() << std::endl;
+ }
+
+
gener->SetOrigin(0., 0., 0.); // Taken from OCDB
Float_t sigmax = 0.0025;
--- /dev/null
+/**********************************************************************
+ Created on : 21/11/2013
+ Purpose : pp 8 TeV paraset for JPsi
+ Author : Indranil Das, IPN Orsay
+ Email : indranil.das@cern.ch | indra.ehep@gmail.com
+**********************************************************************/
+
+#if !defined(__CINT__) || defined(__MAKECINT__)
+#include "TRandom.h"
+#include "AliGenParam.h"
+#include "AliGenMUONlib.h"
+#endif
+
+// generator functions
+//
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+Double_t V2Zero_M( const Double_t* /*px*/, const Double_t */*dummy*/ )
+{
+
+ return 0.0;
+
+}
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+Double_t YJpsiPPdummy_M(Double_t x, Double_t energy)
+{
+// J/Psi y
+// pp
+// from the fit of RHIC + LHC data, see arXiv:1103.2394
+//
+ x = x/TMath::Log(energy/3.097);
+ x = x*x;
+ Double_t y = TMath::Exp(-x/0.4/0.4/2);
+ if(x > 1) y=0;
+ return y;
+}
+
+//---------------------------------------------------------------------
+
+Double_t YJpsiPPpoly_M(Double_t x, Double_t energy)
+{
+// J/Psi y
+// pp
+// from the fit of RHIC + LHC data, see arXiv:1103.2394
+//
+ x = x/TMath::Log(energy/3.097);
+ x = x*x;
+ Double_t y = 1 - 6.9*x*x;
+ if(y < 0) y=0;
+ return y;
+}
+
+//---------------------------------------------------------------------
+
+Double_t YJpsiPP8000_M(const Double_t *px, const Double_t */*dummy*/)
+{
+// J/Psi y
+// pp 7 TeV
+//
+ return YJpsiPPdummy_M(*px, 8000);
+}
+
+//---------------------------------------------------------------------
+
+Double_t YJpsi_M(const Double_t *py, const Double_t */*dummy*/)
+{
+// J/psi y
+ const Double_t ky0 = 4.;
+ const Double_t kb=1.;
+ Double_t yj;
+ Double_t y=TMath::Abs(*py);
+ //
+ if (y < ky0)
+ yj=kb;
+ else
+ yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
+ return yj;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+Int_t IpJpsi_M(TRandom *)
+{
+// J/Psi composition
+ return 443;
+}
+
+//---------------------------------------------------------------------
+
+Int_t IpMuon_M(TRandom* /*ran*/) {
+
+ //muon composition
+ // if (ran->Rndm() < 0.5 ) {
+ // return 13;
+ // }
+ return 443;
+
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+Double_t PtJpsiPPdummy_M(Double_t x, Double_t energy)
+{
+// J/Psi pT
+// pp
+// from the fit of RHIC, CDF & LHC data, see arXiv:1103.2394
+//
+ const Double_t kpt0 = 1.04*TMath::Power(energy,0.101);
+ const Double_t kxn = 3.9;
+ //
+ Double_t pass1 = 1.+0.363*(x/kpt0)*(x/kpt0);
+ return x/TMath::Power(pass1,kxn);
+}
+
+//---------------------------------------------------------------------
+
+Double_t PtJpsiPP8000_M(const Double_t *px, const Double_t */*dummy*/)
+{
+// J/Psi pT
+// pp 7 TeV
+//
+ return PtJpsiPPdummy_M(*px,8000);
+}
+
+//---------------------------------------------------------------------
+
+Double_t PtJpsi_M( const Double_t *px, const Double_t */*dummy*/)
+{
+// J/Psi pT
+ const Double_t kpt0 = 4.;
+ const Double_t kxn = 3.6;
+ Double_t x=*px;
+ //
+ Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
+ return x/TMath::Power(pass1,kxn);
+}
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+// generators
+//
+AliGenerator* JPsi7TeV()
+{
+ printf("\nProcessing config setup : JPsi7TeV\n\n");
+ AliGenParam *jpsi7TeV = new AliGenParam(1, AliGenMUONlib::kJpsi,"pp 8");
+ jpsi7TeV->SetMomentumRange(0,999);
+ //jpsi7TeV->SetPtRange(0.,999.);
+ //jpsi7TeV->SetYRange(-4.2, -2.3);
+ jpsi7TeV->SetPtRange(0,50.);
+ jpsi7TeV->SetYRange(-4.5,-2.);
+ jpsi7TeV->SetPhiRange(0., 360.);
+ jpsi7TeV->SetCutOnChild(1);
+ jpsi7TeV->SetChildPhiRange(0.,360.);
+ jpsi7TeV->SetChildThetaRange(0.,180.);
+ jpsi7TeV->SetForceDecay(kDiMuon);
+ jpsi7TeV->SetTrackingFlag(1);
+
+ return jpsi7TeV;
+}
+
+AliGenerator* GenJPsi8TeVParaSet()
+{
+ printf("\nProcessing config setup : JPsi8TeVParaSet1\n\n");
+ AliGenParam *genJpsi8TeV = new AliGenParam(1,-1, PtJpsiPP8000_M, YJpsiPP8000_M, V2Zero_M, IpJpsi_M);
+ genJpsi8TeV->SetMomentumRange(0,999);
+ genJpsi8TeV->SetPtRange(0,50.);
+ genJpsi8TeV->SetYRange(-4.5,-2.0);
+ genJpsi8TeV->SetPhiRange(0., 360.);
+ genJpsi8TeV->SetCutOnChild(1);
+ genJpsi8TeV->SetChildPhiRange(0.,360.);
+ genJpsi8TeV->SetChildThetaRange(0.0,180.0);
+ genJpsi8TeV->SetOrigin(0,0,0);
+ genJpsi8TeV->SetForceDecay(kDiMuon);
+ genJpsi8TeV->SetTrackingFlag(1);
+ //genJpsi8TeV->Init();
+
+ return genJpsi8TeV;
+}
--- /dev/null
+#if !defined(__CINT__) || defined(__MAKECINT__)
+
+/// !!!!!!!!!!!!!!!!!!
+///
+/// WARNING
+///
+/// !!!!!!!!!!!!!!!!!!
+///
+/// THIS IS A QUICK HACK IN ORDER TO TEST THE PYTHIA6 TUNED FOR DIFFRACTION
+///
+/// IT'S A MERE CUT & PASTE OF THE ORIGIGNAL ALIGENPYTHIA.H/.CXX (VERSION AROUND ALIROOT V5-04-REV-18
+/// WITH TRIVIAL ADDITIONS TO TREAT 8 TEV PP AS 7 TEV PP ...
+///
+/// IT'S NOT THE WAY TO DO IT ON A PERMANENT BASIS...
+///
+///
+
+#include "AliGenMC.h"
+#include "AliPythia.h"
+
+class AliPythia;
+class TParticle;
+class AliGenPythiaEventHeader;
+class AliGenEventHeader;
+class AliStack;
+class AliRunLoader;
+class TObjArray;
+
+class AliGenPythia6Diff : public AliGenMC
+{
+public:
+
+ typedef enum {kFlavorSelection, kParentSelection, kHeavyFlavor} StackFillOpt_t;
+ typedef enum {kCountAll, kCountParents, kCountTrackables} CountMode_t;
+ typedef enum {kCluster, kCell} JetRecMode_t;
+
+ AliGenPythia6Diff();
+ AliGenPythia6Diff(Int_t npart);
+ virtual ~AliGenPythia6Diff();
+ virtual void Generate();
+ virtual void Init();
+ // Range of events to be printed
+ virtual void SetEventListRange(Int_t eventFirst=-1, Int_t eventLast=-1);
+ // Select process type
+ virtual void SetProcess(Process_t proc = kPyCharm) {fProcess = proc;}
+ virtual void SetTune(Int_t itune) {fItune = itune;}
+
+ // Select structure function
+ virtual void SetStrucFunc(StrucFunc_t func = kCTEQ5L) {fStrucFunc = func;}
+ // Select pt of hard scattering
+ virtual void SetPtHard(Float_t ptmin = 0, Float_t ptmax = 1.e10)
+ {fPtHardMin = ptmin; fPtHardMax = ptmax; }
+ // y of hard scattering
+ virtual void SetYHard(Float_t ymin = -1.e10, Float_t ymax = 1.e10)
+ {fYHardMin = ymin; fYHardMax = ymax; }
+ // Set initial and final state gluon radiation
+ virtual void SetGluonRadiation(Int_t iIn, Int_t iFin)
+ {fGinit = iIn; fGfinal = iFin;}
+ // Intrinsic kT
+ virtual void SetPtKick(Float_t kt = 1.)
+ {fPtKick = kt;}
+ // Use the Pythia 6.3 new multiple interations scenario
+ virtual void UseNewMultipleInteractionsScenario() {fNewMIS = kTRUE;}
+ // Switch off heavy flavors
+ virtual void SwitchHFOff() {fHFoff = kTRUE;}
+ // Set centre of mass energy
+ virtual void SetEnergyCMS(Float_t energy = 5500) {fEnergyCMS = energy;}
+ // Treat protons as inside nuclei with mass numbers a1 and a2
+ virtual void SetNuclei(Int_t a1, Int_t a2, Int_t pdfset = 0);
+ // Set colliding nuclei ("p","n",...)
+ virtual void SetCollisionSystem(TString projectile, TString target) { fProjectile = projectile; fTarget = target; }
+ virtual void SetNuclearPDF(Int_t pdf) {fNucPdf = pdf;}
+ virtual void SetUseNuclearPDF(Bool_t val) {fUseNuclearPDF = val;}
+ virtual void SetUseLorentzBoost(Bool_t val) {fUseLorentzBoost = val;}
+ //
+ // Trigger options
+ //
+ // Energy range for jet trigger
+ virtual void SetJetEtRange(Float_t etmin = 0., Float_t etmax = 1.e4)
+ {fEtMinJet = etmin; fEtMaxJet = etmax;}
+ // Eta range for jet trigger
+ virtual void SetJetEtaRange(Float_t etamin = -20., Float_t etamax = 20.)
+ {fEtaMinJet = etamin; fEtaMaxJet = etamax;}
+ // Phi range for jet trigger
+ virtual void SetJetPhiRange(Float_t phimin = 0., Float_t phimax = 360.)
+ {fPhiMinJet = TMath::Pi()*phimin/180.; fPhiMaxJet = TMath::Pi()*phimax/180.;}
+ // Jet reconstruction mode; default is cone algorithm
+ virtual void SetJetReconstructionMode(Int_t mode = kCell) {fJetReconstruction = mode;}
+ // Eta range for gamma trigger
+ virtual void SetGammaEtaRange(Float_t etamin = -20., Float_t etamax = 20.)
+ {fEtaMinGamma = etamin; fEtaMaxGamma = etamax;}
+ // Phi range for gamma trigger
+ virtual void SetGammaPhiRange(Float_t phimin = 0., Float_t phimax = 360.)
+ {fPhiMinGamma = TMath::Pi()*phimin/180.; fPhiMaxGamma = TMath::Pi()*phimax/180.;}
+
+ // Select events with fragmentation photon, decay photon, pi0 or eta going to PHOS or EMCAL and central barrel
+ virtual Bool_t TriggerOnSelectedParticles(Int_t np);
+
+ virtual void SetCheckPHOS (Bool_t b) {fCheckPHOS = b;}
+ virtual void SetCheckEMCAL (Bool_t b) {fCheckEMCAL = b;}
+ virtual void SetCheckBarrel (Bool_t b) {fCheckBarrel = b;}
+
+ //virtual void SetElectronInEMCAL (Bool_t b) {fEleInEMCAL = b;}
+ //virtual void SetPhotonInPHOS (Bool_t b) {fCheckPHOS = b; fPhotonInCalo = b;} // Not in use
+
+ virtual void SetFragPhotonInCalo (Bool_t b) { fFragPhotonInCalo = b;}
+ virtual void SetFragPhotonInBarrel(Bool_t b) {fCheckBarrel = b; fFragPhotonInCalo = b;}
+ virtual void SetFragPhotonInEMCAL (Bool_t b) {fCheckEMCAL = b; fFragPhotonInCalo = b;}
+ virtual void SetFragPhotonInPHOS (Bool_t b) {fCheckPHOS = b; fFragPhotonInCalo = b;}
+
+ virtual void SetHadronInCalo (Bool_t b) { fHadronInCalo = b;}
+ virtual void SetHadronInBarrel (Bool_t b) {fCheckBarrel = b; fHadronInCalo = b;}
+ virtual void SetHadronInEMCAL (Bool_t b) {fCheckEMCAL = b; fHadronInCalo = b;}
+ virtual void SetHadronInPHOS (Bool_t b) {fCheckPHOS = b; fHadronInCalo = b;}
+
+ virtual void SetElectronInCalo (Bool_t b) { fEleInCalo = b;}
+ virtual void SetElectronInBarrel (Bool_t b) {fCheckBarrel = b; fEleInCalo = b;}
+ virtual void SetElectronInEMCAL (Bool_t b) {fCheckEMCAL = b; fEleInCalo = b;}
+ virtual void SetElectronInPHOS (Bool_t b) {fCheckPHOS = b; fEleInCalo = b;}
+
+ virtual void SetDecayPhotonInCalo (Bool_t d) {fDecayPhotonInCalo = d;}
+ virtual void SetDecayPhotonInBarrel(Bool_t d) {fDecayPhotonInCalo = d; fCheckBarrel = d;}
+ virtual void SetDecayPhotonInEMCAL(Bool_t d) {fDecayPhotonInCalo = d; fCheckEMCAL = d;}
+ virtual void SetDecayPhotonInPHOS (Bool_t d) {fDecayPhotonInCalo = d; fCheckPHOS = d;}
+
+ virtual void SetPi0InCalo (Bool_t b, Bool_t f = kFALSE) {fPi0InCalo = b; fForceNeutralMeson2PhotonDecay = f;}
+ virtual void SetPi0InBarrel (Bool_t b, Bool_t f = kFALSE) {fPi0InCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckBarrel= b; }
+ virtual void SetPi0InEMCAL (Bool_t b, Bool_t f = kFALSE) {fPi0InCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckEMCAL = b; }
+ virtual void SetPi0InPHOS (Bool_t b, Bool_t f = kFALSE) {fPi0InCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckPHOS = b; }
+
+ virtual void SetEtaInCalo (Bool_t b, Bool_t f = kFALSE) {fEtaInCalo = b; fForceNeutralMeson2PhotonDecay = f;}
+ virtual void SetEtaInBarrel (Bool_t b, Bool_t f = kFALSE) {fEtaInCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckBarrel= b; }
+ virtual void SetEtaInEMCAL (Bool_t b, Bool_t f = kFALSE) {fEtaInCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckEMCAL = b; }
+ virtual void SetEtaInPHOS (Bool_t b, Bool_t f = kFALSE) {fEtaInCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckPHOS = b; }
+
+ virtual void SetPi0PhotonDecayInBarrel(Bool_t b, Bool_t f = kFALSE) {fPi0InCalo = b; fDecayPhotonInCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckBarrel = b; }
+ virtual void SetPi0PhotonDecayInEMCAL (Bool_t b, Bool_t f = kFALSE) {fPi0InCalo = b; fDecayPhotonInCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckEMCAL = b; }
+ virtual void SetPi0PhotonDecayInPHOS (Bool_t b, Bool_t f = kFALSE) {fPi0InCalo = b; fDecayPhotonInCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckPHOS = b; }
+
+ virtual void SetEtaPhotonDecayInBarrel(Bool_t b, Bool_t f = kFALSE) {fEtaInCalo = b; fDecayPhotonInCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckBarrel = b; }
+ virtual void SetEtaPhotonDecayInEMCAL (Bool_t b, Bool_t f = kFALSE) {fEtaInCalo = b; fDecayPhotonInCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckEMCAL = b; }
+ virtual void SetEtaPhotonDecayInPHOS (Bool_t b, Bool_t f = kFALSE) {fEtaInCalo = b; fDecayPhotonInCalo = b; fForceNeutralMeson2PhotonDecay = f; fCheckPHOS = b; }
+
+
+ // Trigger on a minimum multiplicity
+ virtual void SetTriggerChargedMultiplicity(Int_t multiplicity, Float_t etamax = 0, Float_t ptmin = -1.)
+ {fTriggerMultiplicity = multiplicity; fTriggerMultiplicityEta = etamax;
+ fTriggerMultiplicityPtMin = ptmin;}
+
+ // Calorimeters acceptance
+ // Set Phi in degrees, and Eta coverage, should not be negative
+ virtual void SetBarrelAcceptance(Float_t deta) {fTriggerEta = deta ;}
+ virtual void SetEMCALAcceptance (Float_t phimin, Float_t phimax, Float_t deta) {fEMCALMinPhi = phimin ; fEMCALMaxPhi = phimax ; fEMCALEta = deta ; }
+ virtual void SetPHOSAcceptance (Float_t phimin, Float_t phimax, Float_t deta) {fPHOSMinPhi = phimin ; fPHOSMaxPhi = phimax ; fPHOSEta = deta ; }
+ virtual void SetRotateParticleInPHOSeta(Bool_t b) {fCheckPHOSeta = b;}
+
+ virtual void SetTriggerParticleMinPt(Float_t pt) {fTriggerParticleMinPt = pt;}
+ // virtual void SetPhotonMinPt(Float_t pt) {fPhotonMinPt = pt;}
+ // virtual void SetElectronMinPt(Float_t pt) {fElectronMinPt = pt;}
+ // Trigger and rotate event
+ void RotatePhi(Bool_t& okdd);
+
+ // Trigger on a single particle (not related to calorimeter trigger above)
+ virtual void SetTriggerParticle(Int_t particle = 0, Float_t etamax = 0.9, Float_t ptmin = -1, Float_t ptmax = 1000)
+ {fTriggerParticle = particle; fTriggerEta = etamax; fTriggerMinPt = ptmin; fTriggerMaxPt = ptmax;}
+
+ //
+ // Heavy flavor options
+ //
+ // Set option for feed down from higher family
+ virtual void SetFeedDownHigherFamily(Bool_t opt) {
+ fFeedDownOpt = opt;
+ }
+ // Set option for selecting particles kept in stack according to flavor
+ // or to parent selection
+ virtual void SetStackFillOpt(StackFillOpt_t opt) {
+ fStackFillOpt = opt;
+ }
+ // Set fragmentation option
+ virtual void SetFragmentation(Bool_t opt) {
+ fFragmentation = opt;
+ }
+ // Set counting mode
+ virtual void SetCountMode(CountMode_t mode) {
+ fCountMode = mode;
+ }
+ //
+ // Quenching
+ //
+ // Set quenching mode 0 = no, 1 = AM, 2 = IL, 3 = NA, 4 = ACS
+ virtual void SetQuench(Int_t flag = 0) {fQuench = flag;}
+ // Set transport coefficient.
+ void SetQhat(Float_t qhat) {fQhat = qhat;}
+ //Set initial medium length.
+ void SetLength(Float_t length) {fLength = length;}
+ //set parameters for pyquen afterburner
+ virtual void SetPyquenPar(Float_t t0=1., Float_t tau0=0.1, Int_t nf=0,Int_t iengl=0, Int_t iangl=3)
+ {fpyquenT = t0; fpyquenTau = tau0; fpyquenNf=nf;fpyquenEloss=iengl;fpyquenAngle=iangl;}
+ virtual void SetHadronisation(Int_t flag = 1) {fHadronisation = flag;}
+ virtual void SetPatchOmegaDalitz(Int_t flag = 1) {fPatchOmegaDalitz = flag;}
+ virtual void SetReadFromFile(const Text_t *filname) {fkFileName = filname; fReadFromFile = 1;}
+ virtual void SetReadLHEF(const Text_t *filename) {fkNameLHEF = filename; fReadLHEF = 1;}
+
+ //
+ // Pile-up
+ //
+ // Get interaction rate for pileup studies
+ virtual void SetInteractionRate(Float_t rate,Float_t timewindow = 90.e-6);
+ virtual Float_t GetInteractionRate() const {return fInteractionRate;}
+ // get cross section of process
+ virtual Float_t GetXsection() const {return fXsection;}
+ // get triggered jets
+ void GetJets(Int_t& njets, Int_t& ntrig, Float_t jets[4][10]);
+// void RecJetsUA1(Int_t& njets, Float_t jets[4][50]);
+ void SetPycellParameters(Float_t etamax = 2., Int_t neta = 274, Int_t nphi = 432,
+ Float_t thresh = 0., Float_t etseed = 4.,
+ Float_t minet = 10., Float_t r = 1.);
+
+ void LoadEvent(AliStack* stack, Int_t flag = 0, Int_t reHadr = 0);
+ void LoadEvent(const TObjArray* stack, Int_t flag = 0, Int_t reHadr = 0);
+ // Getters
+ virtual Process_t GetProcess() const {return fProcess;}
+ virtual StrucFunc_t GetStrucFunc() const {return fStrucFunc;}
+ virtual void GetPtHard(Float_t& ptmin, Float_t& ptmax) const
+ {ptmin = fPtHardMin; ptmax = fPtHardMax;}
+ virtual void GetNuclei(Int_t& a1, Int_t& a2) const
+ {a1 = fAProjectile; a2 = fATarget;}
+ virtual void GetJetEtRange(Float_t& etamin, Float_t& etamax) const
+ {etamin = fEtaMinJet; etamax = fEtaMaxJet;}
+ virtual void GetJetPhiRange(Float_t& phimin, Float_t& phimax) const
+ {phimin = fPhiMinJet*180./TMath::Pi(); phimax = fPhiMaxJet*180/TMath::Pi();}
+ virtual void GetGammaEtaRange(Float_t& etamin, Float_t& etamax) const
+ {etamin = fEtaMinGamma; etamax = fEtaMaxGamma;}
+ virtual void GetGammaPhiRange(Float_t& phimin, Float_t& phimax) const
+ {phimin = fPhiMinGamma*180./TMath::Pi(); phimax = fPhiMaxGamma*180./TMath::Pi();}
+ //
+ Bool_t CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle);
+ Bool_t IsInEMCAL (Float_t phi, Float_t eta) const;
+ Bool_t IsInPHOS (Float_t phi, Float_t eta, Int_t iparticle) ;
+ Bool_t IsInBarrel(Float_t eta) const;
+ Bool_t IsFromHeavyFlavor(Int_t ipart);
+ //
+ virtual void FinishRun();
+ Bool_t CheckTrigger(const TParticle* jet1, const TParticle* jet2);
+ //Used in some processes to selected child properties
+ Bool_t CheckKinematicsOnChild();
+ void GetSubEventTime();
+
+ void SetTuneForDiff(Bool_t a=kTRUE) {fkTuneForDiff=a;}
+ AliDecayer * GetDecayer(){return fDecayer;}
+
+protected:
+ // adjust the weight from kinematic cuts
+ void AdjustWeights() const;
+ Int_t GenerateMB();
+ void MakeHeader();
+ void GeneratePileup();
+ Process_t fProcess; //Process type
+ Int_t fItune; // Pythia tune > 6.4
+ StrucFunc_t fStrucFunc; //Structure Function
+ Float_t fKineBias; //!Bias from kinematic selection
+ Int_t fTrials; //!Number of trials for current event
+ Int_t fTrialsRun; //!Number of trials for run
+ Float_t fQ; //Mean Q
+ Float_t fX1; //Mean x1
+ Float_t fX2; //Mean x2
+ Float_t fEventTime; //Time of the subevent
+ Float_t fInteractionRate; //Interaction rate (set by user)
+ Float_t fTimeWindow; //Time window for pileup events (set by user)
+ Int_t fCurSubEvent; //Index of the current sub-event
+ TArrayF *fEventsTime; //Subevents time for pileup
+ Int_t fNev; //Number of events
+ Int_t fFlavorSelect; //Heavy Flavor Selection
+ Float_t fXsection; //Cross-section
+ AliPythia *fPythia; //!Pythia
+ Float_t fPtHardMin; //lower pT-hard cut
+ Float_t fPtHardMax; //higher pT-hard cut
+ Float_t fYHardMin; //lower y-hard cut
+ Float_t fYHardMax; //higher y-hard cut
+ Int_t fGinit; //initial state gluon radiation
+ Int_t fGfinal; //final state gluon radiation
+ Int_t fHadronisation; //hadronisation
+ Bool_t fPatchOmegaDalitz; //flag for omega dalitz decay patch
+ Int_t fNpartons; //Number of partons before hadronisation
+ Int_t fReadFromFile; //read partons from file
+ Int_t fReadLHEF; //read lhef file
+ Int_t fQuench; //Flag for quenching
+ Float_t fQhat; //Transport coefficient (GeV^2/fm)
+ Float_t fLength; //Medium length (fm)
+ Float_t fpyquenT; //Pyquen initial temperature
+ Float_t fpyquenTau; //Pyquen initial proper time
+ Int_t fpyquenNf; //Pyquen number of flavours into the game
+ Int_t fpyquenEloss; //Pyquen type of energy loss
+ Int_t fpyquenAngle; //Pyquen radiation angle for gluons
+ Float_t fImpact; //Impact parameter for quenching simulation (q-pythia)
+ Float_t fPtKick; //Transverse momentum kick
+ Bool_t fFullEvent; //!Write Full event if true
+ AliDecayer *fDecayer; //!Pointer to the decayer instance
+ Int_t fDebugEventFirst; //!First event to debug
+ Int_t fDebugEventLast; //!Last event to debug
+ Float_t fEtMinJet; //Minimum et of triggered Jet
+ Float_t fEtMaxJet; //Maximum et of triggered Jet
+ Float_t fEtaMinJet; //Minimum eta of triggered Jet
+ Float_t fEtaMaxJet; //Maximum eta of triggered Jet
+ Float_t fPhiMinJet; //Minimum phi of triggered Jet
+ Float_t fPhiMaxJet; //Maximum phi of triggered Jet
+ Int_t fJetReconstruction; //Jet Reconstruction mode
+ Float_t fEtaMinGamma; // Minimum eta of triggered gamma
+ Float_t fEtaMaxGamma; // Maximum eta of triggered gamma
+ Float_t fPhiMinGamma; // Minimum phi of triggered gamma
+ Float_t fPhiMaxGamma; // Maximum phi of triggered gamma
+ Float_t fPycellEtaMax; // Max. eta for Pycell
+ Int_t fPycellNEta; // Number of eta bins for Pycell
+ Int_t fPycellNPhi; // Number of phi bins for Pycell
+ Float_t fPycellThreshold; // Pycell threshold
+ Float_t fPycellEtSeed; // Pycell seed
+ Float_t fPycellMinEtJet; // Pycell min. jet et
+ Float_t fPycellMaxRadius; // Pycell cone radius
+ StackFillOpt_t fStackFillOpt; // Stack filling with all particles with
+ // that flavour or only with selected
+ // parents and their decays
+ Bool_t fFeedDownOpt; // Option to set feed down from higher
+ // quark families (e.g. b->c)
+ Bool_t fFragmentation; // Option to activate fragmentation by Pythia
+ Bool_t fSetNuclei; // Flag indicating that SetNuclei has been called
+ Bool_t fUseNuclearPDF; // flag if nuclear pdf should be applied
+ Bool_t fUseLorentzBoost; // flag if lorentz boost should be applied
+ Bool_t fNewMIS; // Flag for the new multipple interactions scenario
+ Bool_t fHFoff; // Flag for switching heafy flavor production off
+ Int_t fNucPdf; // Nuclear pdf 0: EKS98 1: EPS08
+ Int_t fTriggerParticle; // Trigger on this particle ...
+ Float_t fTriggerEta; // .. within |eta| < fTriggerEta
+ Float_t fTriggerMinPt; // .. within pt > fTriggerMinPt
+ Float_t fTriggerMaxPt; // .. within pt < fTriggerMaxPt
+ Int_t fTriggerMultiplicity; // Trigger on events with a minimum charged multiplicity
+ Float_t fTriggerMultiplicityEta; // in a given eta range
+ Float_t fTriggerMultiplicityPtMin; // above this pT
+ CountMode_t fCountMode; // Options for counting when the event will be finished.
+ // fCountMode = kCountAll --> All particles that end up in the
+ // stack are counted
+ // fCountMode = kCountParents --> Only selected parents are counted
+ // fCountMode = kCountTrackabless --> Only particles flagged for tracking
+ // are counted
+ //
+ //
+
+ AliGenPythiaEventHeader* fHeader; //! Event header
+ AliRunLoader* fRL; //! Run Loader
+ const Text_t* fkFileName; //! Name of file to read from
+ const Text_t* fkNameLHEF; //! Name of lhef file to read from
+ Bool_t fFragPhotonInCalo; // Option to ask for Fragmentation Photon in calorimeters acceptance
+ Bool_t fHadronInCalo; // Option to ask for hadron (not pi0) in calorimeters acceptance
+ Bool_t fPi0InCalo; // Option to ask for Pi0 in calorimeters acceptance
+ Bool_t fEtaInCalo; // Option to ask for Eta in calorimeters acceptance
+ Bool_t fPhotonInCalo; // Option to ask for Photon in calorimeter acceptance (not in use)
+ Bool_t fDecayPhotonInCalo;// Option to ask for Decay Photon in calorimeter acceptance
+ Bool_t fForceNeutralMeson2PhotonDecay; // Option to ask for Pi0/Eta in calorimeters acceptance when decay into 2 photons
+ Bool_t fEleInCalo; // Option to ask for Electron in EMCAL acceptance
+ Bool_t fEleInEMCAL; // Option to ask for Electron in EMCAL acceptance (not in use)
+ Bool_t fCheckBarrel; // Option to ask for FragPhoton or Pi0 or Eta or gamma decays in central barrel acceptance
+ Bool_t fCheckEMCAL; // Option to ask for FragPhoton or Pi0 or Eta or gamma decays in calorimeters EMCAL acceptance
+ Bool_t fCheckPHOS; // Option to ask for FragPhoton or Pi0 or Eta or gamma decays in calorimeters PHOS acceptance
+ Bool_t fCheckPHOSeta; // Option to ask for rotate event particles in phi to have in PHOS acceptance a requested particle that previously had the good eta
+ Int_t fPHOSRotateCandidate; // Internal member to select the particle candidate to trigger the event phi rotation, to put it in PHOS phi acceptance
+ Float_t fTriggerParticleMinPt; // Minimum momentum of Fragmentation Photon or Pi0 or other hadron
+ Float_t fPhotonMinPt; // Minimum momentum of Photon (not in use)
+ Float_t fElectronMinPt; // Minimum momentum of Electron (not in use)
+ //Calorimeters eta-phi acceptance
+ Float_t fPHOSMinPhi; // Minimum phi PHOS, degrees
+ Float_t fPHOSMaxPhi; // Maximum phi PHOS, degrees
+ Float_t fPHOSEta; // Minimum eta PHOS, coverage delta eta
+ Float_t fEMCALMinPhi; // Minimum phi EMCAL, degrees
+ Float_t fEMCALMaxPhi; // Maximum phi EMCAL, degrees
+ Float_t fEMCALEta; // Maximum eta EMCAL, coverage delta eta
+
+ Bool_t fkTuneForDiff; // Pythia tune
+ Int_t fProcDiff;
+private:
+ AliGenPythia6Diff(const AliGenPythia6Diff &Pythia);
+ AliGenPythia6Diff & operator=(const AliGenPythia6Diff & rhs);
+
+
+ Bool_t CheckDiffraction();
+ Bool_t GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
+ Double_t &wSD, Double_t &wDD, Double_t &wND);
+
+ ClassDef(AliGenPythia6Diff, 14) // AliGenerator interface to Pythia
+};
+
+#endif
+
+#include <TClonesArray.h>
+#include <TDatabasePDG.h>
+#include <TParticle.h>
+#include <TPDGCode.h>
+#include <TObjArray.h>
+#include <TSystem.h>
+#include <TTree.h>
+#include "AliConst.h"
+#include "AliDecayerPythia.h"
+#include "AliFastGlauber.h"
+#include "AliHeader.h"
+#include "AliGenPythiaEventHeader.h"
+#include "AliPythia.h"
+#include "AliPythiaRndm.h"
+#include "AliRun.h"
+#include "AliStack.h"
+#include "AliRunLoader.h"
+#include "AliMC.h"
+#include "AliLog.h"
+#include "PyquenCommon.h"
+
+ClassImp(AliGenPythia6Diff)
+
+
+AliGenPythia6Diff::AliGenPythia6Diff():
+AliGenMC(),
+fProcess(kPyCharm),
+fItune(-1),
+fStrucFunc(kCTEQ5L),
+fKineBias(0.),
+fTrials(0),
+fTrialsRun(0),
+fQ(0.),
+fX1(0.),
+fX2(0.),
+fEventTime(0.),
+fInteractionRate(0.),
+fTimeWindow(0.),
+fCurSubEvent(0),
+fEventsTime(0),
+fNev(0),
+fFlavorSelect(0),
+fXsection(0.),
+fPythia(0),
+fPtHardMin(0.),
+fPtHardMax(1.e4),
+fYHardMin(-1.e10),
+fYHardMax(1.e10),
+fGinit(1),
+fGfinal(1),
+fHadronisation(1),
+fPatchOmegaDalitz(0),
+fNpartons(0),
+fReadFromFile(0),
+fReadLHEF(0),
+fQuench(0),
+fQhat(0.),
+fLength(0.),
+fpyquenT(1.),
+fpyquenTau(0.1),
+fpyquenNf(0),
+fpyquenEloss(0),
+fpyquenAngle(0),
+fImpact(0.),
+fPtKick(1.),
+fFullEvent(kTRUE),
+fDecayer(new AliDecayerPythia()),
+fDebugEventFirst(-1),
+fDebugEventLast(-1),
+fEtMinJet(0.),
+fEtMaxJet(1.e4),
+fEtaMinJet(-20.),
+fEtaMaxJet(20.),
+fPhiMinJet(0.),
+fPhiMaxJet(2.* TMath::Pi()),
+fJetReconstruction(kCell),
+fEtaMinGamma(-20.),
+fEtaMaxGamma(20.),
+fPhiMinGamma(0.),
+fPhiMaxGamma(2. * TMath::Pi()),
+fPycellEtaMax(2.),
+fPycellNEta(274),
+fPycellNPhi(432),
+fPycellThreshold(0.),
+fPycellEtSeed(4.),
+fPycellMinEtJet(10.),
+fPycellMaxRadius(1.),
+fStackFillOpt(kFlavorSelection),
+fFeedDownOpt(kTRUE),
+fFragmentation(kTRUE),
+fSetNuclei(kFALSE),
+fUseNuclearPDF(kFALSE),
+fUseLorentzBoost(kTRUE),
+fNewMIS(kFALSE),
+fHFoff(kFALSE),
+fNucPdf(0),
+fTriggerParticle(0),
+fTriggerEta(0.9),
+fTriggerMinPt(-1),
+fTriggerMaxPt(1000),
+fTriggerMultiplicity(0),
+fTriggerMultiplicityEta(0),
+fTriggerMultiplicityPtMin(0),
+fCountMode(kCountAll),
+fHeader(0),
+fRL(0),
+fkFileName(0),
+fkNameLHEF(0),
+fFragPhotonInCalo(kFALSE),
+fHadronInCalo(kFALSE) ,
+fPi0InCalo(kFALSE) ,
+fEtaInCalo(kFALSE) ,
+fPhotonInCalo(kFALSE), // not in use
+fDecayPhotonInCalo(kFALSE),
+fForceNeutralMeson2PhotonDecay(kFALSE),
+fEleInCalo(kFALSE),
+fEleInEMCAL(kFALSE), // not in use
+fCheckBarrel(kFALSE),
+fCheckEMCAL(kFALSE),
+fCheckPHOS(kFALSE),
+fCheckPHOSeta(kFALSE),
+fPHOSRotateCandidate(-1),
+fTriggerParticleMinPt(0),
+fPhotonMinPt(0), // not in use
+fElectronMinPt(0), // not in use
+fPHOSMinPhi(219.),
+fPHOSMaxPhi(321.),
+fPHOSEta(0.13),
+fEMCALMinPhi(79.),
+fEMCALMaxPhi(191.),
+fEMCALEta(0.71),
+fkTuneForDiff(0),
+fProcDiff(0)
+{
+ // Default Constructor
+ fEnergyCMS = 5500.;
+ if (!AliPythiaRndm::GetPythiaRandom())
+ AliPythiaRndm::SetPythiaRandom(GetRandom());
+}
+
+AliGenPythia6Diff::AliGenPythia6Diff(Int_t npart)
+:AliGenMC(npart),
+fProcess(kPyCharm),
+fItune(-1),
+fStrucFunc(kCTEQ5L),
+fKineBias(0.),
+fTrials(0),
+fTrialsRun(0),
+fQ(0.),
+fX1(0.),
+fX2(0.),
+fEventTime(0.),
+fInteractionRate(0.),
+fTimeWindow(0.),
+fCurSubEvent(0),
+fEventsTime(0),
+fNev(0),
+fFlavorSelect(0),
+fXsection(0.),
+fPythia(0),
+fPtHardMin(0.),
+fPtHardMax(1.e4),
+fYHardMin(-1.e10),
+fYHardMax(1.e10),
+fGinit(kTRUE),
+fGfinal(kTRUE),
+fHadronisation(kTRUE),
+fPatchOmegaDalitz(0),
+fNpartons(0),
+fReadFromFile(kFALSE),
+fReadLHEF(0),
+fQuench(kFALSE),
+fQhat(0.),
+fLength(0.),
+fpyquenT(1.),
+fpyquenTau(0.1),
+fpyquenNf(0),
+fpyquenEloss(0),
+fpyquenAngle(0),
+fImpact(0.),
+fPtKick(1.),
+fFullEvent(kTRUE),
+fDecayer(new AliDecayerPythia()),
+fDebugEventFirst(-1),
+fDebugEventLast(-1),
+fEtMinJet(0.),
+fEtMaxJet(1.e4),
+fEtaMinJet(-20.),
+fEtaMaxJet(20.),
+fPhiMinJet(0.),
+fPhiMaxJet(2.* TMath::Pi()),
+fJetReconstruction(kCell),
+fEtaMinGamma(-20.),
+fEtaMaxGamma(20.),
+fPhiMinGamma(0.),
+fPhiMaxGamma(2. * TMath::Pi()),
+fPycellEtaMax(2.),
+fPycellNEta(274),
+fPycellNPhi(432),
+fPycellThreshold(0.),
+fPycellEtSeed(4.),
+fPycellMinEtJet(10.),
+fPycellMaxRadius(1.),
+fStackFillOpt(kFlavorSelection),
+fFeedDownOpt(kTRUE),
+fFragmentation(kTRUE),
+fSetNuclei(kFALSE),
+fUseNuclearPDF(kFALSE),
+fUseLorentzBoost(kTRUE),
+fNewMIS(kFALSE),
+fHFoff(kFALSE),
+fNucPdf(0),
+fTriggerParticle(0),
+fTriggerEta(0.9),
+fTriggerMinPt(-1),
+fTriggerMaxPt(1000),
+fTriggerMultiplicity(0),
+fTriggerMultiplicityEta(0),
+fTriggerMultiplicityPtMin(0),
+fCountMode(kCountAll),
+fHeader(0),
+fRL(0),
+fkFileName(0),
+fkNameLHEF(0),
+fFragPhotonInCalo(kFALSE),
+fHadronInCalo(kFALSE) ,
+fPi0InCalo(kFALSE) ,
+fEtaInCalo(kFALSE) ,
+fPhotonInCalo(kFALSE), // not in use
+fDecayPhotonInCalo(kFALSE),
+fForceNeutralMeson2PhotonDecay(kFALSE),
+fEleInCalo(kFALSE),
+fEleInEMCAL(kFALSE), // not in use
+fCheckBarrel(kFALSE),
+fCheckEMCAL(kFALSE),
+fCheckPHOS(kFALSE),
+fCheckPHOSeta(kFALSE),
+fPHOSRotateCandidate(-1),
+fTriggerParticleMinPt(0),
+fPhotonMinPt(0), // not in use
+fElectronMinPt(0), // not in use
+fPHOSMinPhi(219.),
+fPHOSMaxPhi(321.),
+fPHOSEta(0.13),
+fEMCALMinPhi(79.),
+fEMCALMaxPhi(191.),
+fEMCALEta(0.71),
+fkTuneForDiff(0),
+fProcDiff(0)
+{
+ // default charm production at 5. 5 TeV
+ // semimuonic decay
+ // structure function GRVHO
+ //
+ fEnergyCMS = 5500.;
+ fName = "Pythia";
+ fTitle= "Particle Generator using PYTHIA";
+ SetForceDecay();
+ // Set random number generator
+ if (!AliPythiaRndm::GetPythiaRandom())
+ AliPythiaRndm::SetPythiaRandom(GetRandom());
+}
+
+AliGenPythia6Diff::~AliGenPythia6Diff()
+{
+ // Destructor
+ if(fEventsTime) delete fEventsTime;
+}
+
+void AliGenPythia6Diff::SetInteractionRate(Float_t rate,Float_t timewindow)
+{
+ // Generate pileup using user specified rate
+ fInteractionRate = rate;
+ fTimeWindow = timewindow;
+ GeneratePileup();
+}
+
+void AliGenPythia6Diff::GeneratePileup()
+{
+ // Generate sub events time for pileup
+ fEventsTime = 0;
+ if(fInteractionRate == 0.) {
+ Warning("GeneratePileup","Zero interaction specified. Skipping pileup generation.\n");
+ return;
+ }
+
+ Int_t npart = NumberParticles();
+ if(npart < 0) {
+ Warning("GeneratePileup","Negative number of particles. Skipping pileup generation.\n");
+ return;
+ }
+
+ if(fEventsTime) delete fEventsTime;
+ fEventsTime = new TArrayF(npart);
+ TArrayF &array = *fEventsTime;
+ for(Int_t ipart = 0; ipart < npart; ipart++)
+ array[ipart] = 0.;
+
+ Float_t eventtime = 0.;
+ while(1)
+ {
+ eventtime += (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
+ if(eventtime > fTimeWindow) break;
+ array.Set(array.GetSize()+1);
+ array[array.GetSize()-1] = eventtime;
+ }
+
+ eventtime = 0.;
+ while(1)
+ {
+ eventtime -= (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
+ if(TMath::Abs(eventtime) > fTimeWindow) break;
+ array.Set(array.GetSize()+1);
+ array[array.GetSize()-1] = eventtime;
+ }
+
+ SetNumberParticles(fEventsTime->GetSize());
+}
+
+void AliGenPythia6Diff::SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
+ Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
+{
+ // Set pycell parameters
+ fPycellEtaMax = etamax;
+ fPycellNEta = neta;
+ fPycellNPhi = nphi;
+ fPycellThreshold = thresh;
+ fPycellEtSeed = etseed;
+ fPycellMinEtJet = minet;
+ fPycellMaxRadius = r;
+}
+
+
+
+void AliGenPythia6Diff::SetEventListRange(Int_t eventFirst, Int_t eventLast)
+{
+ // Set a range of event numbers, for which a table
+ // of generated particle will be printed
+ fDebugEventFirst = eventFirst;
+ fDebugEventLast = eventLast;
+ if (fDebugEventLast==-1) fDebugEventLast=fDebugEventFirst;
+}
+
+void AliGenPythia6Diff::Init()
+{
+ // Initialisation
+
+ SetMC(AliPythia::Instance());
+ fPythia=(AliPythia*) fMCEvGen;
+
+ //
+ fParentWeight=1./Float_t(fNpart);
+ //
+
+
+ fPythia->SetCKIN(3,fPtHardMin);
+ fPythia->SetCKIN(4,fPtHardMax);
+ fPythia->SetCKIN(7,fYHardMin);
+ fPythia->SetCKIN(8,fYHardMax);
+
+ if (fProjectile != "p" || fTarget != "p") fPythia->SetCollisionSystem(fProjectile,fTarget);
+
+ if(fUseNuclearPDF)
+ fPythia->SetNuclei(fAProjectile, fATarget, fNucPdf);
+ // Fragmentation?
+ if (fFragmentation) {
+ fPythia->SetMSTP(111,1);
+ } else {
+ fPythia->SetMSTP(111,0);
+ }
+
+
+ // initial state radiation
+ fPythia->SetMSTP(61,fGinit);
+ // final state radiation
+ fPythia->SetMSTP(71,fGfinal);
+ // pt - kick
+ if (fPtKick > 0.) {
+ fPythia->SetMSTP(91,1);
+ fPythia->SetPARP(91,fPtKick);
+ fPythia->SetPARP(93, 4. * fPtKick);
+ } else {
+ fPythia->SetMSTP(91,0);
+ }
+
+ if (fReadLHEF) fPythia->OpenFortranFile(97, const_cast<char*>(fkNameLHEF));
+
+ if (fReadFromFile) {
+ fRL = AliRunLoader::Open(fkFileName, "Partons");
+ fRL->LoadKinematics();
+ fRL->LoadHeader();
+ } else {
+ fRL = 0x0;
+ }
+ //
+ fPythia->ProcInit(fProcess,fEnergyCMS,fStrucFunc, fItune);
+ // Forward Paramters to the AliPythia object
+ fDecayer->SetForceDecay(fForceDecay);
+ // Switch off Heavy Flavors on request
+ if (fHFoff) {
+ // Maximum number of quark flavours used in pdf
+ fPythia->SetMSTP(58, 3);
+ // Maximum number of flavors that can be used in showers
+ fPythia->SetMSTJ(45, 3);
+ // Switch off g->QQbar splitting in decay table
+ ((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
+ }
+
+ fDecayer->Init();
+
+
+ // Parent and Children Selection
+ switch (fProcess)
+ {
+ case kPyOldUEQ2ordered:
+ case kPyOldUEQ2ordered2:
+ case kPyOldPopcorn:
+ break;
+ case kPyCharm:
+ case kPyCharmUnforced:
+ case kPyCharmPbPbMNR:
+ case kPyCharmpPbMNR:
+ case kPyCharmppMNR:
+ case kPyCharmppMNRwmi:
+ break;
+ case kPyD0PbPbMNR:
+ case kPyD0pPbMNR:
+ case kPyD0ppMNR:
+ fParentSelect[0] = 421;
+ fFlavorSelect = 4;
+ break;
+ case kPyDPlusPbPbMNR:
+ case kPyDPluspPbMNR:
+ case kPyDPlusppMNR:
+ fParentSelect[0] = 411;
+ fFlavorSelect = 4;
+ break;
+ case kPyDPlusStrangePbPbMNR:
+ case kPyDPlusStrangepPbMNR:
+ case kPyDPlusStrangeppMNR:
+ fParentSelect[0] = 431;
+ fFlavorSelect = 4;
+ break;
+ case kPyLambdacppMNR:
+ fParentSelect[0] = 4122;
+ fFlavorSelect = 4;
+ break;
+ case kPyBeauty:
+ case kPyBeautyJets:
+ case kPyBeautyPbPbMNR:
+ case kPyBeautypPbMNR:
+ case kPyBeautyppMNR:
+ case kPyBeautyppMNRwmi:
+ break;
+ case kPyBeautyUnforced:
+ fParentSelect[0] = 511;
+ fParentSelect[1] = 521;
+ fParentSelect[2] = 531;
+ fParentSelect[3] = 5122;
+ fParentSelect[4] = 5132;
+ fParentSelect[5] = 5232;
+ fParentSelect[6] = 5332;
+ fFlavorSelect = 5;
+ break;
+ case kPyJpsiChi:
+ case kPyJpsi:
+ fParentSelect[0] = 443;
+ break;
+ case kPyMbDefault:
+ case kPyMbAtlasTuneMC09:
+ case kPyMb:
+ case kPyMbWithDirectPhoton:
+ case kPyMbNonDiffr:
+ case kPyMbMSEL1:
+ case kPyJets:
+ case kPyDirectGamma:
+ case kPyLhwgMb:
+ break;
+ case kPyW:
+ case kPyZ:
+ case kPyMBRSingleDiffraction:
+ case kPyMBRDoubleDiffraction:
+ case kPyMBRCentralDiffraction:
+ break;
+ }
+ //
+ //
+ // JetFinder for Trigger
+ //
+ // Configure detector (EMCAL like)
+ //
+ fPythia->SetPARU(51, fPycellEtaMax);
+ fPythia->SetMSTU(51, fPycellNEta);
+ fPythia->SetMSTU(52, fPycellNPhi);
+ //
+ // Configure Jet Finder
+ //
+ fPythia->SetPARU(58, fPycellThreshold);
+ fPythia->SetPARU(52, fPycellEtSeed);
+ fPythia->SetPARU(53, fPycellMinEtJet);
+ fPythia->SetPARU(54, fPycellMaxRadius);
+ fPythia->SetMSTU(54, 2);
+ //
+ // This counts the total number of calls to Pyevnt() per run.
+ fTrialsRun = 0;
+ fQ = 0.;
+ fX1 = 0.;
+ fX2 = 0.;
+ fNev = 0 ;
+ //
+ //
+ //
+ AliGenMC::Init();
+
+ // Reset Lorentz boost if demanded
+ if(!fUseLorentzBoost) {
+ fDyBoost = 0;
+ Warning("Init","Demand to discard Lorentz boost.\n");
+ }
+ //
+ //
+ //
+ if (fSetNuclei) {
+ fDyBoost = 0;
+ Warning("Init","Deprecated function SetNuclei() used (nPDFs + no boost). Use SetProjectile + SetTarget + SetUseNuclearPDF + SetUseLorentzBoost instead.\n");
+ }
+ fPythia->SetPARJ(200, 0.0);
+ fPythia->SetPARJ(199, 0.0);
+ fPythia->SetPARJ(198, 0.0);
+ fPythia->SetPARJ(197, 0.0);
+
+ if (fQuench == 1) {
+ fPythia->InitQuenching(0., 0.1, 0.6e6, 0);
+ }
+
+ if(fQuench ==2){fPythia->SetPyquenParameters(fpyquenT,fpyquenTau,fpyquenNf,fpyquenEloss,fpyquenAngle);}
+
+ if (fQuench == 3) {
+ // Nestor's change of the splittings
+ fPythia->SetPARJ(200, 0.8);
+ fPythia->SetMSTJ(41, 1); // QCD radiation only
+ fPythia->SetMSTJ(42, 2); // angular ordering
+ fPythia->SetMSTJ(44, 2); // option to run alpha_s
+ fPythia->SetMSTJ(47, 0); // No correction back to hard scattering element
+ fPythia->SetMSTJ(50, 0); // No coherence in first branching
+ fPythia->SetPARJ(82, 1.); // Cut off for parton showers
+ } else if (fQuench == 4) {
+ // Armesto-Cunqueiro-Salgado change of the splittings.
+ AliFastGlauber* glauber = AliFastGlauber::Instance();
+ glauber->Init(2);
+ //read and store transverse almonds corresponding to differnt
+ //impact parameters.
+ glauber->SetCentralityClass(0.,0.1);
+ fPythia->SetPARJ(200, 1.);
+ fPythia->SetPARJ(198, fQhat);
+ fPythia->SetPARJ(199, fLength);
+ fPythia->SetMSTJ(42, 2); // angular ordering
+ fPythia->SetMSTJ(44, 2); // option to run alpha_s
+ fPythia->SetPARJ(82, 1.); // Cut off for parton showers
+ }
+
+ if ( AliLog::GetDebugLevel("","AliGenPythia6Diff") >= 1 ) {
+ fPythia->Pystat(4);
+ fPythia->Pystat(5);
+ }
+}
+
+void AliGenPythia6Diff::Generate()
+{
+ // Generate one event
+ if (!fPythia) fPythia=(AliPythia*) fMCEvGen;
+ fDecayer->ForceDecay();
+
+ Double_t polar[3] = {0,0,0};
+ Double_t origin[3] = {0,0,0};
+ Double_t p[4];
+ // converts from mm/c to s
+ const Float_t kconv=0.001/2.999792458e8;
+ //
+ Int_t nt=0;
+ Int_t jev=0;
+ Int_t j, kf;
+ fTrials=0;
+ fEventTime = 0.;
+
+
+
+ // Set collision vertex position
+ if (fVertexSmear == kPerEvent) Vertex();
+
+ // event loop
+ while(1)
+ {
+ //
+ // Produce event
+ //
+ //
+ // Switch hadronisation off
+ //
+ fPythia->SetMSTJ(1, 0);
+
+ if (fQuench ==4){
+ Double_t bimp;
+ // Quenching comes through medium-modified splitting functions.
+ AliFastGlauber::Instance()->GetRandomBHard(bimp);
+ fPythia->SetPARJ(197, bimp);
+ fImpact = bimp;
+ fPythia->Qpygin0();
+ }
+ //
+ // Either produce new event or read partons from file
+ //
+ if (!fReadFromFile) {
+ if (!fNewMIS) {
+ fPythia->Pyevnt();
+ } else {
+ fPythia->Pyevnw();
+ }
+ fNpartons = fPythia->GetN();
+ } else {
+ printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
+ fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
+ fPythia->SetN(0);
+ LoadEvent(fRL->Stack(), 0 , 1);
+ fPythia->Pyedit(21);
+ }
+
+ //
+ // Run quenching routine
+ //
+ if (fQuench == 1) {
+ fPythia->Quench();
+ } else if (fQuench == 2){
+ fPythia->Pyquen(208., 0, 0.);
+ } else if (fQuench == 3) {
+ // Quenching is via multiplicative correction of the splittings
+ }
+
+ //
+ // Switch hadronisation on
+ //
+ if (fHadronisation) {
+ fPythia->SetMSTJ(1, 1);
+ //
+ // .. and perform hadronisation
+ // printf("Calling hadronisation %d\n", fPythia->GetN());
+
+ if (fPatchOmegaDalitz) {
+ fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
+ fPythia->Pyexec();
+ fPythia->DalitzDecays();
+ fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
+ }
+ fPythia->Pyexec();
+ }
+ fTrials++;
+ fPythia->ImportParticles(&fParticles,"All");
+
+ if (TMath::Abs(fDyBoost) > 1.e-4) Boost();
+ if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
+
+ //
+ //
+ //
+ Int_t i;
+
+ fNprimaries = 0;
+ Int_t np = fParticles.GetEntriesFast();
+
+ if (np == 0) continue;
+ //
+
+ //
+ Int_t* pParent = new Int_t[np];
+ Int_t* pSelected = new Int_t[np];
+ Int_t* trackIt = new Int_t[np];
+ for (i = 0; i < np; i++) {
+ pParent[i] = -1;
+ pSelected[i] = 0;
+ trackIt[i] = 0;
+ }
+
+ Int_t nc = 0; // Total n. of selected particles
+ Int_t nParents = 0; // Selected parents
+ Int_t nTkbles = 0; // Trackable particles
+ if (fProcess != kPyMbDefault &&
+ fProcess != kPyMb &&
+ fProcess != kPyMbAtlasTuneMC09 &&
+ fProcess != kPyMbWithDirectPhoton &&
+ fProcess != kPyJets &&
+ fProcess != kPyDirectGamma &&
+ fProcess != kPyMbNonDiffr &&
+ fProcess != kPyMbMSEL1 &&
+ fProcess != kPyW &&
+ fProcess != kPyZ &&
+ fProcess != kPyCharmppMNRwmi &&
+ fProcess != kPyBeautyppMNRwmi &&
+ fProcess != kPyBeautyJets) {
+
+ for (i = 0; i < np; i++) {
+ TParticle* iparticle = (TParticle *) fParticles.At(i);
+ Int_t ks = iparticle->GetStatusCode();
+ kf = CheckPDGCode(iparticle->GetPdgCode());
+ // No initial state partons
+ if (ks==21) continue;
+ //
+ // Heavy Flavor Selection
+ //
+ // quark ?
+ kf = TMath::Abs(kf);
+ Int_t kfl = kf;
+ // Resonance
+
+ if (kfl > 100000) kfl %= 100000;
+ if (kfl > 10000) kfl %= 10000;
+ // meson ?
+ if (kfl > 10) kfl/=100;
+ // baryon
+ if (kfl > 10) kfl/=10;
+ Int_t ipa = iparticle->GetFirstMother()-1;
+ Int_t kfMo = 0;
+ //
+ // Establish mother daughter relation between heavy quarks and mesons
+ //
+ if (kf >= fFlavorSelect && kf <= 6) {
+ Int_t idau = iparticle->GetFirstDaughter() - 1;
+ if (idau > -1) {
+ TParticle* daughter = (TParticle *) fParticles.At(idau);
+ Int_t pdgD = daughter->GetPdgCode();
+ if (pdgD == 91 || pdgD == 92) {
+ Int_t jmin = daughter->GetFirstDaughter() - 1;
+ Int_t jmax = daughter->GetLastDaughter() - 1;
+ for (Int_t jp = jmin; jp <= jmax; jp++)
+ ((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
+ } // is string or cluster
+ } // has daughter
+ } // heavy quark
+
+
+ if (ipa > -1) {
+ TParticle * mother = (TParticle *) fParticles.At(ipa);
+ kfMo = TMath::Abs(mother->GetPdgCode());
+ }
+
+ // What to keep in Stack?
+ Bool_t flavorOK = kFALSE;
+ Bool_t selectOK = kFALSE;
+ if (fFeedDownOpt) {
+ if (kfl >= fFlavorSelect) flavorOK = kTRUE;
+ } else {
+ if (kfl > fFlavorSelect) {
+ nc = -1;
+ break;
+ }
+ if (kfl == fFlavorSelect) flavorOK = kTRUE;
+ }
+ switch (fStackFillOpt) {
+ case kHeavyFlavor:
+ case kFlavorSelection:
+ selectOK = kTRUE;
+ break;
+ case kParentSelection:
+ if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
+ break;
+ }
+ if (flavorOK && selectOK) {
+ //
+ // Heavy flavor hadron or quark
+ //
+ // Kinematic seletion on final state heavy flavor mesons
+ if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
+ {
+ continue;
+ }
+ pSelected[i] = 1;
+ if (ParentSelected(kf)) ++nParents; // Update parent count
+ // printf("\n particle (HF) %d %d %d", i, pSelected[i], kf);
+ } else {
+ // Kinematic seletion on decay products
+ if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
+ && !KinematicSelection(iparticle, 1))
+ {
+ continue;
+ }
+ //
+ // Decay products
+ // Select if mother was selected and is not tracked
+
+ if (pSelected[ipa] &&
+ !trackIt[ipa] && // mother will be tracked ?
+ kfMo != 5 && // mother is b-quark, don't store fragments
+ kfMo != 4 && // mother is c-quark, don't store fragments
+ kf != 92) // don't store string
+ {
+ //
+ // Semi-stable or de-selected: diselect decay products:
+ //
+ //
+ if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
+ {
+ Int_t ipF = iparticle->GetFirstDaughter();
+ Int_t ipL = iparticle->GetLastDaughter();
+ if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
+ }
+ // printf("\n particle (decay) %d %d %d", i, pSelected[i], kf);
+ pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
+ }
+ }
+ if (pSelected[i] == -1) pSelected[i] = 0;
+ if (!pSelected[i]) continue;
+ // Count quarks only if you did not include fragmentation
+ if (fFragmentation && kf <= 10) continue;
+
+ nc++;
+ // Decision on tracking
+ trackIt[i] = 0;
+ //
+ // Track final state particle
+ if (ks == 1) trackIt[i] = 1;
+ // Track semi-stable particles
+ if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
+ // Track particles selected by process if undecayed.
+ if (fForceDecay == kNoDecay) {
+ if (ParentSelected(kf)) trackIt[i] = 1;
+ } else {
+ if (ParentSelected(kf)) trackIt[i] = 0;
+ }
+ if (trackIt[i] == 1) ++nTkbles; // Update trackable counter
+ //
+ //
+
+ } // particle selection loop
+ if (nc > 0) {
+ for (i = 0; i<np; i++) {
+ if (!pSelected[i]) continue;
+ TParticle * iparticle = (TParticle *) fParticles.At(i);
+ kf = CheckPDGCode(iparticle->GetPdgCode());
+ Int_t ks = iparticle->GetStatusCode();
+ p[0] = iparticle->Px();
+ p[1] = iparticle->Py();
+ p[2] = iparticle->Pz();
+ p[3] = iparticle->Energy();
+
+ origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
+ origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
+ origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
+
+ Float_t tof = fTime + kconv*iparticle->T();
+ Int_t ipa = iparticle->GetFirstMother()-1;
+ Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
+
+ PushTrack(fTrackIt*trackIt[i], iparent, kf,
+ p[0], p[1], p[2], p[3],
+ origin[0], origin[1], origin[2], tof,
+ polar[0], polar[1], polar[2],
+ kPPrimary, nt, 1., ks);
+ pParent[i] = nt;
+ KeepTrack(nt);
+ fNprimaries++;
+ } // PushTrack loop
+ }
+ } else {
+ nc = GenerateMB();
+ } // mb ?
+
+ GetSubEventTime();
+
+ delete[] pParent;
+ delete[] pSelected;
+ delete[] trackIt;
+
+ if (nc > 0) {
+ switch (fCountMode) {
+ case kCountAll:
+ // printf(" Count all \n");
+ jev += nc;
+ break;
+ case kCountParents:
+ // printf(" Count parents \n");
+ jev += nParents;
+ break;
+ case kCountTrackables:
+ // printf(" Count trackable \n");
+ jev += nTkbles;
+ break;
+ }
+ if (jev >= fNpart || fNpart == -1) {
+ fKineBias=Float_t(fNpart)/Float_t(fTrials);
+
+ fQ += fPythia->GetVINT(51);
+ fX1 += fPythia->GetVINT(41);
+ fX2 += fPythia->GetVINT(42);
+ fTrialsRun += fTrials;
+ fNev++;
+ MakeHeader();
+ break;
+ }
+ }
+ } // event loop
+ SetHighWaterMark(nt);
+ // adjust weight due to kinematic selection
+ // AdjustWeights();
+ // get cross-section
+ fXsection=fPythia->GetPARI(1);
+}
+
+Int_t AliGenPythia6Diff::GenerateMB()
+{
+ //
+ // Min Bias selection and other global selections
+ //
+ Int_t i, kf, nt, iparent;
+ Int_t nc = 0;
+ Double_t p[4];
+ Double_t polar[3] = {0,0,0};
+ Double_t origin[3] = {0,0,0};
+ // converts from mm/c to s
+ const Float_t kconv=0.001/2.999792458e8;
+
+
+ Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
+
+
+
+ Int_t* pParent = new Int_t[np];
+ for (i=0; i< np; i++) pParent[i] = -1;
+ if ((fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi )
+ && fEtMinJet > 0.) {
+ TParticle* jet1 = (TParticle *) fParticles.At(6);
+ TParticle* jet2 = (TParticle *) fParticles.At(7);
+
+ if (!jet1 || ! jet2 || !CheckTrigger(jet1, jet2)) {
+ delete [] pParent;
+ return 0;
+ }
+ }
+
+
+ // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
+ // implemented primaryly for kPyJets, but extended to any kind of process.
+ if ((fFragPhotonInCalo || fPi0InCalo || fEtaInCalo || fEleInCalo || fHadronInCalo || fDecayPhotonInCalo) &&
+ (fCheckPHOS || fCheckEMCAL || fCheckBarrel) ) {
+ Bool_t ok = TriggerOnSelectedParticles(np);
+
+ if(!ok) {
+ delete[] pParent;
+ return 0;
+ }
+ }
+
+ // Check for diffraction
+ if(fkTuneForDiff) {
+ if(fItune==320 && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1) || ( TMath::Abs(fEnergyCMS - 8000) < 1 ) ) ) {
+ if(!CheckDiffraction()) {
+ delete [] pParent;
+ return 0;
+ }
+ }
+ }
+
+ // Check for minimum multiplicity
+ if (fTriggerMultiplicity > 0) {
+ Int_t multiplicity = 0;
+ for (i = 0; i < np; i++) {
+ TParticle * iparticle = (TParticle *) fParticles.At(i);
+
+ Int_t statusCode = iparticle->GetStatusCode();
+
+ // Initial state particle
+ if (statusCode != 1)
+ continue;
+ // eta cut
+ if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
+ continue;
+ // pt cut
+ if (iparticle->Pt() < fTriggerMultiplicityPtMin)
+ continue;
+
+ TParticlePDG* pdgPart = iparticle->GetPDG();
+ if (pdgPart && pdgPart->Charge() == 0)
+ continue;
+
+ ++multiplicity;
+ }
+
+ if (multiplicity < fTriggerMultiplicity) {
+ delete [] pParent;
+ return 0;
+ }
+ Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
+ }
+
+
+ if (fTriggerParticle) {
+ Bool_t triggered = kFALSE;
+ for (i = 0; i < np; i++) {
+ TParticle * iparticle = (TParticle *) fParticles.At(i);
+ kf = CheckPDGCode(iparticle->GetPdgCode());
+ if (kf != fTriggerParticle) continue;
+ if (iparticle->Pt() == 0.) continue;
+ if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
+ if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
+ triggered = kTRUE;
+ break;
+ }
+ if (!triggered) {
+ delete [] pParent;
+ return 0;
+ }
+ }
+
+
+ // Check if there is a ccbar or bbbar pair with at least one of the two
+ // in fYMin < y < fYMax
+
+ if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
+ TParticle *partCheck;
+ TParticle *mother;
+ Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
+ Bool_t theChild=kFALSE;
+ Bool_t triggered=kFALSE;
+ Float_t y;
+ Int_t pdg,mpdg,mpdgUpperFamily;
+ for(i=0; i<np; i++) {
+ partCheck = (TParticle*)fParticles.At(i);
+ pdg = partCheck->GetPdgCode();
+ if(TMath::Abs(pdg) == fFlavorSelect) { // quark
+ if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
+ y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
+ (partCheck->Energy()-partCheck->Pz()+1.e-13));
+ if(y>fYMin && y<fYMax) inYcut=kTRUE;
+ }
+ if(fTriggerParticle) {
+ if(TMath::Abs(pdg)==fTriggerParticle) triggered=kTRUE;
+ }
+ if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
+ Int_t mi = partCheck->GetFirstMother() - 1;
+ if(mi<0) continue;
+ mother = (TParticle*)fParticles.At(mi);
+ mpdg=TMath::Abs(mother->GetPdgCode());
+ mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b
+ if ( ParentSelected(mpdg) ||
+ (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
+ if (KinematicSelection(partCheck,1)) {
+ theChild=kTRUE;
+ }
+ }
+ }
+ }
+ if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
+ delete[] pParent;
+ return 0;
+ }
+ if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
+ delete[] pParent;
+ return 0;
+ }
+ if(fTriggerParticle && !triggered) { // particle requested is not produced
+ delete[] pParent;
+ return 0;
+ }
+
+ }
+
+ //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
+ if ( (
+
+ fProcess == kPyW ||
+ fProcess == kPyZ ||
+ fProcess == kPyMbDefault ||
+ fProcess == kPyMb ||
+ fProcess == kPyMbAtlasTuneMC09 ||
+ fProcess == kPyMbWithDirectPhoton ||
+ fProcess == kPyMbNonDiffr)
+ && (fCutOnChild == 1) ) {
+ if ( !CheckKinematicsOnChild() ) {
+ delete[] pParent;
+ return 0;
+ }
+ }
+
+
+ for (i = 0; i < np; i++) {
+ Int_t trackIt = 0;
+ TParticle * iparticle = (TParticle *) fParticles.At(i);
+ kf = CheckPDGCode(iparticle->GetPdgCode());
+ Int_t ks = iparticle->GetStatusCode();
+ Int_t km = iparticle->GetFirstMother();
+ if (
+ (((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) || (ks !=1)) && ((fStackFillOpt != kHeavyFlavor) || IsFromHeavyFlavor(i))) ||
+ ((fProcess == kPyJets || fProcess == kPyBeautyJets) && ks == 21 && km == 0 && i>1)
+ )
+ {
+ nc++;
+ if (ks == 1) trackIt = 1;
+ Int_t ipa = iparticle->GetFirstMother()-1;
+
+ iparent = (ipa > -1) ? pParent[ipa] : -1;
+
+ //
+ // store track information
+ p[0] = iparticle->Px();
+ p[1] = iparticle->Py();
+ p[2] = iparticle->Pz();
+ p[3] = iparticle->Energy();
+
+
+ origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
+ origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
+ origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
+
+ Float_t tof = fTime + fEventTime + kconv * iparticle->T();
+
+ PushTrack(fTrackIt*trackIt, iparent, kf,
+ p[0], p[1], p[2], p[3],
+ origin[0], origin[1], origin[2], tof,
+ polar[0], polar[1], polar[2],
+ kPPrimary, nt, 1., ks);
+ fNprimaries++;
+ KeepTrack(nt);
+ pParent[i] = nt;
+ SetHighWaterMark(nt);
+
+ } // select particle
+ } // particle loop
+
+ delete[] pParent;
+
+ return 1;
+}
+
+
+void AliGenPythia6Diff::FinishRun()
+{
+ // Print x-section summary
+ fPythia->Pystat(1);
+
+ if (fNev > 0.) {
+ fQ /= fNev;
+ fX1 /= fNev;
+ fX2 /= fNev;
+ }
+
+ printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
+ printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
+}
+
+void AliGenPythia6Diff::AdjustWeights() const
+{
+ // Adjust the weights after generation of all events
+ //
+ if (gAlice) {
+ TParticle *part;
+ Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
+ for (Int_t i=0; i<ntrack; i++) {
+ part= gAlice->GetMCApp()->Particle(i);
+ part->SetWeight(part->GetWeight()*fKineBias);
+ }
+ }
+}
+
+void AliGenPythia6Diff::SetNuclei(Int_t a1, Int_t a2, Int_t pdfset)
+{
+ // Treat protons as inside nuclei with mass numbers a1 and a2
+
+ fAProjectile = a1;
+ fATarget = a2;
+ fNucPdf = pdfset; // 0 EKS98 9 EPS09LO 19 EPS09NLO
+ fUseNuclearPDF = kTRUE;
+ fSetNuclei = kTRUE;
+}
+
+
+void AliGenPythia6Diff::MakeHeader()
+{
+ //
+ // Make header for the simulated event
+ //
+ if (gAlice) {
+ if (gAlice->GetEvNumber()>=fDebugEventFirst &&
+ gAlice->GetEvNumber()<=fDebugEventLast) fPythia->Pylist(2);
+ }
+
+ // Builds the event header, to be called after each event
+ if (fHeader) delete fHeader;
+ fHeader = new AliGenPythiaEventHeader("Pythia");
+ //
+ // Event type
+ if(fProcDiff>0){
+ // if(fProcDiff == 92 || fProcDiff == 93) printf("\n\n\n\n\n");
+ // printf("fPythia->GetMSTI(1) = %d fProcDiff = %d\n",fPythia->GetMSTI(1), fProcDiff);
+ ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fProcDiff);
+ }
+ else
+ ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->GetMSTI(1));
+ //
+ // Number of trials
+ ((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
+ //
+ // Event Vertex
+ fHeader->SetPrimaryVertex(fVertex);
+ fHeader->SetInteractionTime(fTime+fEventTime);
+ //
+ // Number of primaries
+ fHeader->SetNProduced(fNprimaries);
+ //
+ // Event weight
+ fHeader->SetEventWeight(fPythia->GetVINT(97));
+ //
+ // Jets that have triggered
+
+ //Need to store jets for b-jet studies too!
+ if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi)
+ {
+ Int_t ntrig, njet;
+ Float_t jets[4][10];
+ GetJets(njet, ntrig, jets);
+
+
+ for (Int_t i = 0; i < ntrig; i++) {
+ ((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
+ jets[3][i]);
+ }
+ }
+ //
+ // Copy relevant information from external header, if present.
+ //
+ Float_t uqJet[4];
+
+ if (fRL) {
+ AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
+ for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
+ {
+ printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
+
+
+ exHeader->TriggerJet(i, uqJet);
+ ((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
+ }
+ }
+ //
+ // Store quenching parameters
+ //
+ if (fQuench){
+ Double_t z[4] = {0.};
+ Double_t xp = 0.;
+ Double_t yp = 0.;
+
+ if (fQuench == 1) {
+ // Pythia::Quench()
+ fPythia->GetQuenchingParameters(xp, yp, z);
+ } else if (fQuench == 2){
+ // Pyquen
+ Double_t r1 = PARIMP.rb1;
+ Double_t r2 = PARIMP.rb2;
+ Double_t b = PARIMP.b1;
+ Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
+ Double_t phi = PARIMP.psib1;
+ xp = r * TMath::Cos(phi);
+ yp = r * TMath::Sin(phi);
+
+ } else if (fQuench == 4) {
+ // QPythia
+ Double_t xy[2];
+ Double_t i0i1[2];
+ AliFastGlauber::Instance()->GetSavedXY(xy);
+ AliFastGlauber::Instance()->GetSavedI0I1(i0i1);
+ xp = xy[0];
+ yp = xy[1];
+ ((AliGenPythiaEventHeader*) fHeader)->SetImpactParameter(fImpact);
+ }
+
+ ((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
+ ((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
+ }
+ //
+ // Store pt^hard and cross-section
+ ((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetVINT(47));
+// ((AliGenPythiaEventHeader*) fHeader)->SetXsection(fPythia->GetPARI(1));
+
+ //
+ // Store Event Weight
+ ((AliGenPythiaEventHeader*) fHeader)->SetEventWeight(fPythia->GetPARI(7));
+
+ //
+ // Pass header
+ //
+ AddHeader(fHeader);
+ fHeader = 0x0;
+}
+
+Bool_t AliGenPythia6Diff::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
+{
+ // Check the kinematic trigger condition
+ //
+ Double_t eta[2];
+ eta[0] = jet1->Eta();
+ eta[1] = jet2->Eta();
+ Double_t phi[2];
+ phi[0] = jet1->Phi();
+ phi[1] = jet2->Phi();
+ Int_t pdg[2];
+ pdg[0] = jet1->GetPdgCode();
+ pdg[1] = jet2->GetPdgCode();
+ Bool_t triggered = kFALSE;
+
+ if (fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi) {
+ Int_t njets = 0;
+ Int_t ntrig = 0;
+ Float_t jets[4][10];
+ //
+ // Use Pythia clustering on parton level to determine jet axis
+ //
+ GetJets(njets, ntrig, jets);
+
+ if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
+ //
+ } else {
+ Int_t ij = 0;
+ Int_t ig = 1;
+ if (pdg[0] == kGamma) {
+ ij = 1;
+ ig = 0;
+ }
+ //Check eta range first...
+ if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
+ (eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
+ {
+ //Eta is okay, now check phi range
+ if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
+ (phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
+ {
+ triggered = kTRUE;
+ }
+ }
+ }
+ return triggered;
+}
+
+
+
+Bool_t AliGenPythia6Diff::CheckKinematicsOnChild(){
+ //
+ //Checking Kinematics on Child (status code 1, particle code ?, kin cuts
+ //
+ Bool_t checking = kFALSE;
+ Int_t j, kcode, ks, km;
+ Int_t nPartAcc = 0; //number of particles in the acceptance range
+ Int_t numberOfAcceptedParticles = 1;
+ if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
+ Int_t npart = fParticles.GetEntriesFast();
+
+ for (j = 0; j<npart; j++) {
+ TParticle * jparticle = (TParticle *) fParticles.At(j);
+ kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
+ ks = jparticle->GetStatusCode();
+ km = jparticle->GetFirstMother();
+
+ if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
+ nPartAcc++;
+ }
+ if( numberOfAcceptedParticles <= nPartAcc){
+ checking = kTRUE;
+ break;
+ }
+ }
+
+ return checking;
+}
+
+void AliGenPythia6Diff::LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr)
+{
+ //
+ // Load event into Pythia Common Block
+ //
+
+ Int_t npart = stack -> GetNprimary();
+ Int_t n0 = 0;
+
+ if (!flag) {
+ (fPythia->GetPyjets())->N = npart;
+ } else {
+ n0 = (fPythia->GetPyjets())->N;
+ (fPythia->GetPyjets())->N = n0 + npart;
+ }
+
+
+ for (Int_t part = 0; part < npart; part++) {
+ TParticle *mPart = stack->Particle(part);
+
+ Int_t kf = mPart->GetPdgCode();
+ Int_t ks = mPart->GetStatusCode();
+ Int_t idf = mPart->GetFirstDaughter();
+ Int_t idl = mPart->GetLastDaughter();
+
+ if (reHadr) {
+ if (ks == 11 || ks == 12) {
+ ks -= 10;
+ idf = -1;
+ idl = -1;
+ }
+ }
+
+ Float_t px = mPart->Px();
+ Float_t py = mPart->Py();
+ Float_t pz = mPart->Pz();
+ Float_t e = mPart->Energy();
+ Float_t m = mPart->GetCalcMass();
+
+
+ (fPythia->GetPyjets())->P[0][part+n0] = px;
+ (fPythia->GetPyjets())->P[1][part+n0] = py;
+ (fPythia->GetPyjets())->P[2][part+n0] = pz;
+ (fPythia->GetPyjets())->P[3][part+n0] = e;
+ (fPythia->GetPyjets())->P[4][part+n0] = m;
+
+ (fPythia->GetPyjets())->K[1][part+n0] = kf;
+ (fPythia->GetPyjets())->K[0][part+n0] = ks;
+ (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
+ (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
+ (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
+ }
+}
+
+void AliGenPythia6Diff::LoadEvent(const TObjArray* stack, Int_t flag, Int_t reHadr)
+{
+ //
+ // Load event into Pythia Common Block
+ //
+
+ Int_t npart = stack -> GetEntries();
+ Int_t n0 = 0;
+
+ if (!flag) {
+ (fPythia->GetPyjets())->N = npart;
+ } else {
+ n0 = (fPythia->GetPyjets())->N;
+ (fPythia->GetPyjets())->N = n0 + npart;
+ }
+
+
+ for (Int_t part = 0; part < npart; part++) {
+ TParticle *mPart = dynamic_cast<TParticle *>(stack->At(part));
+ if (!mPart) continue;
+
+ Int_t kf = mPart->GetPdgCode();
+ Int_t ks = mPart->GetStatusCode();
+ Int_t idf = mPart->GetFirstDaughter();
+ Int_t idl = mPart->GetLastDaughter();
+
+ if (reHadr) {
+ if (ks == 11 || ks == 12) {
+ ks -= 10;
+ idf = -1;
+ idl = -1;
+ }
+ }
+
+ Float_t px = mPart->Px();
+ Float_t py = mPart->Py();
+ Float_t pz = mPart->Pz();
+ Float_t e = mPart->Energy();
+ Float_t m = mPart->GetCalcMass();
+
+
+ (fPythia->GetPyjets())->P[0][part+n0] = px;
+ (fPythia->GetPyjets())->P[1][part+n0] = py;
+ (fPythia->GetPyjets())->P[2][part+n0] = pz;
+ (fPythia->GetPyjets())->P[3][part+n0] = e;
+ (fPythia->GetPyjets())->P[4][part+n0] = m;
+
+ (fPythia->GetPyjets())->K[1][part+n0] = kf;
+ (fPythia->GetPyjets())->K[0][part+n0] = ks;
+ (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
+ (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
+ (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
+ }
+}
+
+
+//void AliGenPythia6Diff::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
+//{
+// //
+// // Calls the Pythia jet finding algorithm to find jets in the current event
+// //
+// //
+// //
+// // Save jets
+// Int_t n = fPythia->GetN();
+//
+// //
+// // Run Jet Finder
+// fPythia->Pycell(njets);
+// Int_t i;
+// for (i = 0; i < njets; i++) {
+// Float_t px = (fPythia->GetPyjets())->P[0][n+i];
+// Float_t py = (fPythia->GetPyjets())->P[1][n+i];
+// Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
+// Float_t e = (fPythia->GetPyjets())->P[3][n+i];
+//
+// jets[0][i] = px;
+// jets[1][i] = py;
+// jets[2][i] = pz;
+// jets[3][i] = e;
+// }
+//}
+//
+//
+
+void AliGenPythia6Diff::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
+{
+ //
+ // Calls the Pythia clustering algorithm to find jets in the current event
+ //
+ Int_t n = fPythia->GetN();
+ nJets = 0;
+ nJetsTrig = 0;
+ if (fJetReconstruction == kCluster) {
+ //
+ // Configure cluster algorithm
+ //
+ fPythia->SetPARU(43, 2.);
+ fPythia->SetMSTU(41, 1);
+ //
+ // Call cluster algorithm
+ //
+ fPythia->Pyclus(nJets);
+ //
+ // Loading jets from common block
+ //
+ } else {
+
+ //
+ // Run Jet Finder
+ fPythia->Pycell(nJets);
+ }
+
+ Int_t i;
+ for (i = 0; i < nJets; i++) {
+ Float_t px = (fPythia->GetPyjets())->P[0][n+i];
+ Float_t py = (fPythia->GetPyjets())->P[1][n+i];
+ Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
+ Float_t e = (fPythia->GetPyjets())->P[3][n+i];
+ Float_t pt = TMath::Sqrt(px * px + py * py);
+ Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
+ Float_t theta = TMath::ATan2(pt,pz);
+ Float_t et = e * TMath::Sin(theta);
+ Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
+ if (
+ eta > fEtaMinJet && eta < fEtaMaxJet &&
+ phi > fPhiMinJet && phi < fPhiMaxJet &&
+ et > fEtMinJet && et < fEtMaxJet
+ )
+ {
+ jets[0][nJetsTrig] = px;
+ jets[1][nJetsTrig] = py;
+ jets[2][nJetsTrig] = pz;
+ jets[3][nJetsTrig] = e;
+ nJetsTrig++;
+ // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
+ } else {
+ // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
+ }
+ }
+}
+
+void AliGenPythia6Diff::GetSubEventTime()
+{
+ // Calculates time of the next subevent
+ fEventTime = 0.;
+ if (fEventsTime) {
+ TArrayF &array = *fEventsTime;
+ fEventTime = array[fCurSubEvent++];
+ }
+ // printf(" Event time: %d %f %p",fCurSubEvent,fEventTime,fEventsTime);
+ return;
+}
+
+Bool_t AliGenPythia6Diff::IsInBarrel(Float_t eta) const
+{
+ // Is particle in Central Barrel acceptance?
+ // etamin=-etamax
+ if( eta < fTriggerEta )
+ return kTRUE;
+ else
+ return kFALSE;
+}
+
+Bool_t AliGenPythia6Diff::IsInEMCAL(Float_t phi, Float_t eta) const
+{
+ // Is particle in EMCAL acceptance?
+ // phi in degrees, etamin=-etamax
+ if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
+ eta < fEMCALEta )
+ return kTRUE;
+ else
+ return kFALSE;
+}
+
+Bool_t AliGenPythia6Diff::IsInPHOS(Float_t phi, Float_t eta, Int_t iparticle)
+{
+ // Is particle in PHOS acceptance?
+ // Acceptance slightly larger considered.
+ // phi in degrees, etamin=-etamax
+ // iparticle is the index of the particle to be checked, for PHOS rotation case
+
+ if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
+ eta < fPHOSEta )
+ return kTRUE;
+ else
+ {
+ if( fCheckPHOSeta && eta < fPHOSEta) fPHOSRotateCandidate = iparticle;
+
+ return kFALSE;
+ }
+}
+
+void AliGenPythia6Diff::RotatePhi(Bool_t& okdd)
+{
+ //Rotate event in phi to enhance events in PHOS acceptance
+
+ if(fPHOSRotateCandidate < 0) return ;
+
+ //calculate the new position random between fPHOSMinPhi and fPHOSMaxPhi
+ Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
+ Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
+ Double_t phiPHOS = (AliPythiaRndm::GetPythiaRandom())->Uniform(phiPHOSmin,phiPHOSmax);
+
+ //calculate deltaphi
+ TParticle* ph = (TParticle *) fParticles.At(fPHOSRotateCandidate);
+ Double_t phphi = ph->Phi();
+ Double_t deltaphi = phiPHOS - phphi;
+
+
+
+ //loop for all particles and produce the phi rotation
+ Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
+ Double_t oldphi, newphi;
+ Double_t newVx, newVy, r, vZ, time;
+ Double_t newPx, newPy, pt, pz, e;
+ for(Int_t i=0; i< np; i++) {
+ TParticle* iparticle = (TParticle *) fParticles.At(i);
+ oldphi = iparticle->Phi();
+ newphi = oldphi + deltaphi;
+ if(newphi < 0) newphi = 2*TMath::Pi() + newphi; // correct angle
+ if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi(); // correct angle
+
+ r = iparticle->R();
+ newVx = r * TMath::Cos(newphi);
+ newVy = r * TMath::Sin(newphi);
+ vZ = iparticle->Vz(); // don't transform
+ time = iparticle->T(); // don't transform
+
+ pt = iparticle->Pt();
+ newPx = pt * TMath::Cos(newphi);
+ newPy = pt * TMath::Sin(newphi);
+ pz = iparticle->Pz(); // don't transform
+ e = iparticle->Energy(); // don't transform
+
+ // apply rotation
+ iparticle->SetProductionVertex(newVx, newVy, vZ, time);
+ iparticle->SetMomentum(newPx, newPy, pz, e);
+
+ } //end particle loop
+
+ // now let's check that we put correctly the candidate photon in PHOS
+ Float_t phi = ph->Phi()*180./TMath::Pi(); //Convert to degrees
+ Float_t eta =TMath::Abs(ph->Eta());//in calos etamin=-etamax
+ if(IsInPHOS(phi,eta,-1))
+ okdd = kTRUE;
+
+ // reset the value for next event
+ fPHOSRotateCandidate = -1;
+
+}
+
+
+Bool_t AliGenPythia6Diff::CheckDiffraction()
+{
+ // use this method only with Perugia-0 tune!
+
+ // printf("AAA\n");
+
+ Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
+
+ Int_t iPart1=-1;
+ Int_t iPart2=-1;
+
+ Double_t y1 = 1e10;
+ Double_t y2 = -1e10;
+
+ const Int_t kNstable=20;
+ const Int_t pdgStable[20] = {
+ 22, // Photon
+ 11, // Electron
+ 12, // Electron Neutrino
+ 13, // Muon
+ 14, // Muon Neutrino
+ 15, // Tau
+ 16, // Tau Neutrino
+ 211, // Pion
+ 321, // Kaon
+ 311, // K0
+ 130, // K0s
+ 310, // K0l
+ 2212, // Proton
+ 2112, // Neutron
+ 3122, // Lambda_0
+ 3112, // Sigma Minus
+ 3222, // Sigma Plus
+ 3312, // Xsi Minus
+ 3322, // Xsi0
+ 3334 // Omega
+ };
+
+ for (Int_t i = 0; i < np; i++) {
+ TParticle * part = (TParticle *) fParticles.At(i);
+
+ Int_t statusCode = part->GetStatusCode();
+
+ // Initial state particle
+ if (statusCode != 1)
+ continue;
+
+ Int_t pdg = TMath::Abs(part->GetPdgCode());
+ Bool_t isStable = kFALSE;
+ for (Int_t i1 = 0; i1 < kNstable; i1++) {
+ if (pdg == pdgStable[i1]) {
+ isStable = kTRUE;
+ break;
+ }
+ }
+ if(!isStable)
+ continue;
+
+ Double_t y = part->Y();
+
+ if (y < y1)
+ {
+ y1 = y;
+ iPart1 = i;
+ }
+ if (y > y2)
+ {
+ y2 = y;
+ iPart2 = i;
+ }
+ }
+
+ if(iPart1<0 || iPart2<0) return kFALSE;
+
+ y1=TMath::Abs(y1);
+ y2=TMath::Abs(y2);
+
+ TParticle * part1 = (TParticle *) fParticles.At(iPart1);
+ TParticle * part2 = (TParticle *) fParticles.At(iPart2);
+
+ Int_t pdg1 = part1->GetPdgCode();
+ Int_t pdg2 = part2->GetPdgCode();
+
+
+ Int_t iPart = -1;
+ if (pdg1 == 2212 && pdg2 == 2212)
+ {
+ if(y1 > y2)
+ iPart = iPart1;
+ else if(y1 < y2)
+ iPart = iPart2;
+ else {
+ iPart = iPart1;
+ if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
+ }
+ }
+ else if (pdg1 == 2212)
+ iPart = iPart1;
+ else if (pdg2 == 2212)
+ iPart = iPart2;
+
+
+
+
+
+ Double_t M=-1.;
+ if(iPart>0) {
+ TParticle * part = (TParticle *) fParticles.At(iPart);
+ Double_t E= part->Energy();
+ Double_t P= part->P();
+ Double_t M2 = (fEnergyCMS-E-P)*(fEnergyCMS-E+P);
+ if(M2<0) return kFALSE;
+ M= TMath::Sqrt(M2);
+ }
+
+ Double_t Mmin, Mmax, wSD, wDD, wND;
+ if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
+
+ if(M>-1 && M<Mmin) return kFALSE;
+ if(M>Mmax) M=-1;
+
+ Int_t procType=fPythia->GetMSTI(1);
+ Int_t proc0=2;
+ if(procType== 94) proc0=1;
+ if(procType== 92 || procType== 93) proc0=0;
+
+ Int_t proc=2;
+ if(M>0) proc=0;
+ else if(proc0==1) proc=1;
+
+ if(proc==1 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wDD) return kFALSE;
+ if(proc==2 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wND) return kFALSE;
+
+
+ // if(proc==1 || proc==2) return kFALSE;
+
+ if(proc!=0) {
+ if(proc0!=0) fProcDiff = procType;
+ else fProcDiff = 95;
+ return kTRUE;
+ }
+
+ if(wSD<0) AliError("wSD<0 ! \n");
+
+ if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)> wSD) return kFALSE;
+
+ // printf("iPart = %d\n", iPart);
+
+ if(iPart==iPart1) fProcDiff=93;
+ else if(iPart==iPart2) fProcDiff=92;
+ else {
+ printf("EROOR: iPart!=iPart1 && iPart!=iPart2\n");
+
+ }
+
+ return kTRUE;
+}
+
+
+
+Bool_t AliGenPythia6Diff::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
+ Double_t &wSD, Double_t &wDD, Double_t &wND)
+{
+
+ // 900 GeV
+ if(TMath::Abs(fEnergyCMS-900)<1 ){
+
+ const Int_t nbin=400;
+ Double_t bin[]={
+ 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
+ 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
+ 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
+ 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
+ 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
+ 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
+ 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
+ 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
+ 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
+ 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
+ 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
+ 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
+ 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
+ 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
+ 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
+ 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
+ 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
+ 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
+ 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
+ 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
+ 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
+ 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
+ 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
+ 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
+ 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
+ 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
+ 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
+ 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
+ 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
+ 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
+ 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
+ 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
+ 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
+ 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
+ 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
+ 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
+ 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
+ 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
+ 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
+ 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
+ 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
+ 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
+ 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
+ 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
+ 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
+ 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
+ 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
+ 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
+ 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
+ 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
+ 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
+ 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
+ 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
+ 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
+ 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
+ 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
+ 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
+ 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
+ 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
+ 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
+ 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
+ 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
+ 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
+ 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
+ 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
+ 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
+ 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
+ Double_t w[]={
+ 1.000000, 0.643457, 0.645609, 0.648347, 0.604563, 0.605002,
+ 0.602819, 0.611473, 0.576412, 0.562354, 0.550216, 0.529285,
+ 0.534558, 0.534364, 0.530358, 0.518475, 0.489253, 0.469754,
+ 0.469825, 0.450513, 0.455849, 0.435312, 0.437210, 0.456686,
+ 0.413577, 0.427093, 0.426894, 0.418834, 0.409475, 0.388483,
+ 0.412208, 0.388912, 0.389611, 0.382572, 0.389220, 0.370964,
+ 0.380463, 0.370873, 0.363701, 0.369363, 0.357361, 0.365759,
+ 0.348566, 0.337062, 0.348190, 0.332330, 0.359001, 0.335836,
+ 0.339154, 0.335599, 0.336035, 0.335204, 0.353440, 0.337836,
+ 0.333874, 0.307120, 0.294963, 0.324978, 0.313359, 0.317688,
+ 0.323758, 0.319304, 0.335317, 0.301765, 0.317257, 0.356331,
+ 0.323119, 0.297732, 0.303188, 0.326102, 0.316467, 0.294728,
+ 0.308135, 0.288857, 0.325692, 0.312493, 0.291100, 0.325921,
+ 0.313317, 0.295980, 0.308481, 0.328380, 0.313081, 0.296763,
+ 0.295431, 0.317325, 0.320462, 0.286918, 0.316035, 0.335208,
+ 0.283193, 0.333945, 0.292534, 0.294164, 0.330680, 0.296992,
+ 0.285509, 0.317260, 0.298269, 0.311299, 0.312129, 0.286822,
+ 0.287442, 0.319139, 0.283314, 0.318454, 0.297727, 0.301597,
+ 0.282483, 0.294792, 0.305569, 0.290957, 0.297817, 0.282908,
+ 0.272401, 0.305584, 0.300220, 0.297020, 0.298781, 0.278008,
+ 0.277727, 0.323777, 0.287419, 0.342074, 0.287259, 0.303658,
+ 0.302668, 0.279622, 0.280586, 0.313630, 0.276068, 0.257051,
+ 0.309996, 0.265534, 0.297138, 0.281738, 0.294610, 0.292882,
+ 0.286860, 0.312686, 0.293244, 0.293744, 0.271375, 0.278734,
+ 0.280308, 0.304739, 0.287907, 0.285261, 0.311180, 0.313476,
+ 0.289660, 0.289282, 0.319505, 0.271285, 0.272008, 0.289245,
+ 0.281038, 0.285284, 0.295836, 0.281416, 0.283501, 0.295417,
+ 0.304372, 0.297764, 0.291378, 0.321530, 0.315604, 0.329507,
+ 0.282609, 0.275576, 0.283721, 0.311714, 0.283760, 0.273188,
+ 0.312193, 0.264347, 0.281532, 0.301226, 0.281718, 0.336408,
+ 0.283157, 0.332010, 0.289974, 0.290256, 0.301569, 0.332228,
+ 0.288282, 0.326339, 0.313653, 0.300361, 0.289470, 0.264830,
+ 0.298659, 0.272359, 0.278878, 0.306001, 0.328168, 0.294991,
+ 0.327737, 0.278056, 0.302435, 0.284183, 0.279270, 0.307279,
+ 0.307917, 0.315196, 0.283803, 0.313333, 0.315730, 0.304818,
+ 0.307171, 0.295223, 0.333741, 0.346911, 0.310143, 0.336686,
+ 0.275459, 0.334781, 0.295405, 0.275816, 0.301678, 0.327242,
+ 0.320717, 0.309230, 0.292145, 0.294489, 0.305088, 0.300969,
+ 0.277438, 0.326159, 0.297065, 0.301177, 0.303843, 0.275382,
+ 0.304019, 0.284166, 0.289610, 0.331611, 0.317131, 0.310880,
+ 0.360456, 0.294052, 0.342694, 0.327166, 0.336797, 0.298040,
+ 0.295767, 0.260053, 0.325544, 0.335310, 0.320182, 0.301072,
+ 0.313117, 0.283407, 0.299206, 0.293525, 0.305067, 0.255978,
+ 0.327055, 0.316382, 0.317700, 0.278993, 0.283120, 0.314000,
+ 0.274396, 0.291208, 0.348813, 0.319603, 0.313076, 0.289155,
+ 0.343988, 0.311426, 0.322896, 0.328726, 0.337062, 0.389093,
+ 0.284122, 0.312184, 0.304008, 0.319170, 0.320778, 0.288390,
+ 0.337272, 0.356273, 0.343310, 0.312209, 0.330709, 0.297977,
+ 0.346146, 0.369162, 0.324385, 0.339831, 0.337037, 0.318739,
+ 0.343157, 0.277720, 0.368407, 0.321330, 0.338997, 0.314220,
+ 0.328861, 0.321824, 0.328013, 0.356925, 0.359144, 0.296314,
+ 0.345415, 0.396711, 0.347032, 0.294928, 0.343799, 0.322331,
+ 0.328656, 0.326098, 0.337338, 0.337038, 0.300179, 0.351391,
+ 0.324337, 0.330896, 0.302842, 0.310522, 0.337052, 0.359989,
+ 0.383250, 0.359355, 0.315382, 0.333113, 0.342598, 0.355348,
+ 0.320751, 0.320475, 0.351762, 0.351475, 0.338358, 0.326153,
+ 0.302507, 0.340048, 0.318685, 0.381646, 0.339320, 0.299453,
+ 0.426599, 0.393515, 0.353929, 0.328435, 0.413976, 0.292558,
+ 0.379340, 0.358344, 0.409259, 0.313821, 0.336675, 0.324521,
+ 0.408382, 0.346273, 0.312939, 0.362453, 0.343152, 0.330577,
+ 0.332831, 0.353299, 0.347745, 0.334818, 0.332234, 0.385585,
+ 0.395483, 0.395316, 0.326972, 0.349434, 0.317604, 0.328980,
+ 0.375056, 0.317290, 0.357083, 0.346165, 0.310444, 0.356873,
+ 0.359523, 0.365308, 0.365122, 0.383685, 0.370975, 0.396928,
+ 0.407654, 0.307755, 0.323033, 0.350580, 0.345231, 0.342462,
+ 0.400000, 0.318309, 0.403570, 0.322856, 0.383053, 0.422252,
+ 0.386112, 0.364314, 0.434375, 0.334629};
+ wDD = 0.379611;
+ wND = 0.496961;
+ wSD = -1;
+
+ Mmin = bin[0];
+ Mmax = bin[nbin];
+ if(M<Mmin || M>Mmax) return kTRUE;
+
+ Int_t ibin=nbin-1;
+ for(Int_t i=1; i<=nbin; i++)
+ if(M<=bin[i]) {
+ ibin=i-1;
+ // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
+ break;
+ }
+ wSD=w[ibin];
+ return kTRUE;
+ }
+ else if(TMath::Abs(fEnergyCMS-2760)<1 ){
+
+ const Int_t nbin=400;
+ Double_t bin[]={
+ 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
+ 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
+ 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
+ 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
+ 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
+ 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
+ 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
+ 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
+ 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
+ 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
+ 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
+ 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
+ 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
+ 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
+ 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
+ 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
+ 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
+ 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
+ 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
+ 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
+ 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
+ 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
+ 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
+ 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
+ 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
+ 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
+ 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
+ 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
+ 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
+ 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
+ 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
+ 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
+ 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
+ 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
+ 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
+ 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
+ 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
+ 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
+ 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
+ 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
+ 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
+ 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
+ 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
+ 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
+ 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
+ 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
+ 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
+ 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
+ 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
+ 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
+ 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
+ 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
+ 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
+ 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
+ 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
+ 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
+ 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
+ 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
+ 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
+ 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
+ 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
+ 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
+ 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
+ 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
+ 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
+ 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
+ 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
+ Double_t w[]={
+ 1.000000, 0.692593, 0.673384, 0.666273, 0.657285, 0.637723,
+ 0.625881, 0.643590, 0.606100, 0.589007, 0.567824, 0.578705,
+ 0.538530, 0.517937, 0.528278, 0.515918, 0.539461, 0.466186,
+ 0.489869, 0.468402, 0.465017, 0.453336, 0.460769, 0.474638,
+ 0.456347, 0.434471, 0.427478, 0.435435, 0.410934, 0.366431,
+ 0.382240, 0.379513, 0.394249, 0.386837, 0.353103, 0.382138,
+ 0.377497, 0.389479, 0.378736, 0.347933, 0.354605, 0.352077,
+ 0.324443, 0.358792, 0.339968, 0.359052, 0.330734, 0.318291,
+ 0.333703, 0.358644, 0.335819, 0.332213, 0.309051, 0.309975,
+ 0.331626, 0.304407, 0.309819, 0.312097, 0.312462, 0.320411,
+ 0.280401, 0.302311, 0.315863, 0.281479, 0.310003, 0.296911,
+ 0.313676, 0.281071, 0.294163, 0.306500, 0.283462, 0.274867,
+ 0.307149, 0.270555, 0.282264, 0.287373, 0.307849, 0.278675,
+ 0.286990, 0.278269, 0.300105, 0.286799, 0.265674, 0.275140,
+ 0.285702, 0.257352, 0.267714, 0.248204, 0.252220, 0.255678,
+ 0.282946, 0.268257, 0.282375, 0.262675, 0.275564, 0.248345,
+ 0.236259, 0.291914, 0.259936, 0.241338, 0.267389, 0.285044,
+ 0.289419, 0.253594, 0.284568, 0.231840, 0.260008, 0.268527,
+ 0.275363, 0.224115, 0.281260, 0.257913, 0.295152, 0.264399,
+ 0.232287, 0.282533, 0.223431, 0.255756, 0.244471, 0.221695,
+ 0.272450, 0.284244, 0.253682, 0.270717, 0.275403, 0.240323,
+ 0.245081, 0.241859, 0.216340, 0.244789, 0.220291, 0.238478,
+ 0.224691, 0.244058, 0.266117, 0.271478, 0.242012, 0.267321,
+ 0.248494, 0.253343, 0.255606, 0.235458, 0.241079, 0.233223,
+ 0.226813, 0.259224, 0.234239, 0.258606, 0.210892, 0.238186,
+ 0.243271, 0.222678, 0.213437, 0.273939, 0.247966, 0.232548,
+ 0.263438, 0.222089, 0.272111, 0.248818, 0.244295, 0.238368,
+ 0.236908, 0.248776, 0.232604, 0.231194, 0.227117, 0.231152,
+ 0.282140, 0.229778, 0.232631, 0.261794, 0.216633, 0.253471,
+ 0.242157, 0.227406, 0.269335, 0.230547, 0.210618, 0.285872,
+ 0.248776, 0.229875, 0.242728, 0.227388, 0.220567, 0.222062,
+ 0.235950, 0.224087, 0.228895, 0.208287, 0.235999, 0.208696,
+ 0.230367, 0.267667, 0.220484, 0.233402, 0.233815, 0.250455,
+ 0.253120, 0.219556, 0.230980, 0.236661, 0.222395, 0.226111,
+ 0.198315, 0.210555, 0.202813, 0.208594, 0.235976, 0.221490,
+ 0.243059, 0.204901, 0.216987, 0.229039, 0.231466, 0.221975,
+ 0.231220, 0.253638, 0.250448, 0.260291, 0.328345, 0.205739,
+ 0.222014, 0.251513, 0.279427, 0.270506, 0.248409, 0.222472,
+ 0.291632, 0.227796, 0.248769, 0.276896, 0.214742, 0.200139,
+ 0.230693, 0.226031, 0.268900, 0.185160, 0.245353, 0.205843,
+ 0.231155, 0.219122, 0.214811, 0.199763, 0.274179, 0.217598,
+ 0.274988, 0.237244, 0.211820, 0.225459, 0.252799, 0.235948,
+ 0.224986, 0.245385, 0.237770, 0.213373, 0.229737, 0.215487,
+ 0.234453, 0.249684, 0.239435, 0.250422, 0.257194, 0.214762,
+ 0.212266, 0.228988, 0.253798, 0.201607, 0.239946, 0.205245,
+ 0.231670, 0.212774, 0.206768, 0.231563, 0.189388, 0.227926,
+ 0.227203, 0.237754, 0.221628, 0.211138, 0.203322, 0.200985,
+ 0.231780, 0.220294, 0.232686, 0.234243, 0.218264, 0.255870,
+ 0.223213, 0.238670, 0.213713, 0.213064, 0.246700, 0.233446,
+ 0.221503, 0.206767, 0.200722, 0.226179, 0.237425, 0.239229,
+ 0.238611, 0.240419, 0.247806, 0.215923, 0.205298, 0.232778,
+ 0.272312, 0.226773, 0.258103, 0.223287, 0.269404, 0.203398,
+ 0.223782, 0.204213, 0.229664, 0.234040, 0.228419, 0.203936,
+ 0.263686, 0.199141, 0.236127, 0.214058, 0.204611, 0.224324,
+ 0.292140, 0.190735, 0.235157, 0.213018, 0.257085, 0.190554,
+ 0.203197, 0.213044, 0.237023, 0.214243, 0.193562, 0.262403,
+ 0.206256, 0.221396, 0.233588, 0.256611, 0.249731, 0.226683,
+ 0.199330, 0.251026, 0.222596, 0.201941, 0.186374, 0.221038,
+ 0.196555, 0.222560, 0.299419, 0.231979, 0.242924, 0.198310,
+ 0.217628, 0.235458, 0.278595, 0.218624, 0.277305, 0.239109,
+ 0.205600, 0.253715, 0.221173, 0.218195, 0.277647, 0.241974,
+ 0.268748, 0.268128, 0.292258, 0.249420, 0.191034, 0.219506,
+ 0.216502, 0.250677, 0.193386, 0.201310, 0.259464, 0.255351,
+ 0.269628, 0.221063, 0.294079, 0.196726, 0.233634, 0.221870,
+ 0.216236, 0.197259, 0.247433, 0.272765, 0.294079, 0.236336,
+ 0.206396, 0.238524, 0.247846, 0.269519, 0.237141, 0.230611,
+ 0.201712, 0.242225, 0.255565, 0.258738};
+ wDD = 0.512813;
+ wND = 0.518820;
+ wSD = -1;
+
+ Mmin = bin[0];
+ Mmax = bin[nbin];
+ if(M<Mmin || M>Mmax) return kTRUE;
+
+ Int_t ibin=nbin-1;
+ for(Int_t i=1; i<=nbin; i++)
+ if(M<=bin[i]) {
+ ibin=i-1;
+ // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
+ break;
+ }
+ wSD=w[ibin];
+ return kTRUE;
+ }
+
+
+ else if(TMath::Abs(fEnergyCMS-7000)<1 || TMath::Abs(fEnergyCMS-8000)<1){
+ const Int_t nbin=400;
+ Double_t bin[]={
+ 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
+ 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
+ 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
+ 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
+ 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
+ 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
+ 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
+ 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
+ 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
+ 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
+ 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
+ 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
+ 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
+ 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
+ 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
+ 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
+ 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
+ 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
+ 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
+ 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
+ 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
+ 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
+ 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
+ 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
+ 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
+ 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
+ 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
+ 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
+ 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
+ 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
+ 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
+ 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
+ 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
+ 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
+ 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
+ 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
+ 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
+ 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
+ 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
+ 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
+ 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
+ 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
+ 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
+ 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
+ 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
+ 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
+ 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
+ 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
+ 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
+ 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
+ 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
+ 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
+ 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
+ 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
+ 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
+ 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
+ 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
+ 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
+ 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
+ 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
+ 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
+ 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
+ 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
+ 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
+ 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
+ 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
+ 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
+ Double_t w[]={
+ 1.000000, 0.798640, 0.770197, 0.717990, 0.699434, 0.692093,
+ 0.620940, 0.655294, 0.636496, 0.633483, 0.600518, 0.594548,
+ 0.550759, 0.550413, 0.528926, 0.525877, 0.506701, 0.504117,
+ 0.486973, 0.492930, 0.461833, 0.488695, 0.438874, 0.460274,
+ 0.451551, 0.454424, 0.449270, 0.387571, 0.427556, 0.428740,
+ 0.401682, 0.402260, 0.408961, 0.395417, 0.387426, 0.378602,
+ 0.357826, 0.359125, 0.348494, 0.363710, 0.356117, 0.340363,
+ 0.337637, 0.396084, 0.341777, 0.340551, 0.348838, 0.344014,
+ 0.340468, 0.317654, 0.355584, 0.326023, 0.373416, 0.312298,
+ 0.326522, 0.290540, 0.335557, 0.318689, 0.327544, 0.319501,
+ 0.331754, 0.312728, 0.282263, 0.274937, 0.303867, 0.307820,
+ 0.289344, 0.268934, 0.288908, 0.290018, 0.291369, 0.295242,
+ 0.289067, 0.277685, 0.267957, 0.267559, 0.320229, 0.265060,
+ 0.305931, 0.305352, 0.262064, 0.281879, 0.287780, 0.270033,
+ 0.270814, 0.276667, 0.271531, 0.275283, 0.258189, 0.287969,
+ 0.251247, 0.301527, 0.267230, 0.245860, 0.293125, 0.253421,
+ 0.272396, 0.243637, 0.236206, 0.278452, 0.246544, 0.263165,
+ 0.230484, 0.231102, 0.258281, 0.244707, 0.270111, 0.248295,
+ 0.246942, 0.245592, 0.272766, 0.254243, 0.199647, 0.262590,
+ 0.226710, 0.243836, 0.214153, 0.233535, 0.235207, 0.234245,
+ 0.247698, 0.248379, 0.241463, 0.265230, 0.223242, 0.236191,
+ 0.252700, 0.231865, 0.228352, 0.229101, 0.237385, 0.246485,
+ 0.254706, 0.245565, 0.224841, 0.257301, 0.240968, 0.202379,
+ 0.236943, 0.241683, 0.220809, 0.219014, 0.213015, 0.244470,
+ 0.221042, 0.198996, 0.225295, 0.264466, 0.200600, 0.228143,
+ 0.250138, 0.216784, 0.268002, 0.275734, 0.218144, 0.229866,
+ 0.235443, 0.208909, 0.215067, 0.189743, 0.216741, 0.242686,
+ 0.200234, 0.218882, 0.245991, 0.222815, 0.219576, 0.209773,
+ 0.205247, 0.203855, 0.202534, 0.192536, 0.223447, 0.225810,
+ 0.220583, 0.248421, 0.223424, 0.206033, 0.203130, 0.221225,
+ 0.223763, 0.239216, 0.252311, 0.206893, 0.228461, 0.233591,
+ 0.201512, 0.242382, 0.215147, 0.232578, 0.207116, 0.239213,
+ 0.196215, 0.184367, 0.235135, 0.189768, 0.274084, 0.206267,
+ 0.203283, 0.248828, 0.250214, 0.217465, 0.232080, 0.215150,
+ 0.207936, 0.176789, 0.191338, 0.188655, 0.196181, 0.223691,
+ 0.254257, 0.216874, 0.213536, 0.221399, 0.192024, 0.212534,
+ 0.218169, 0.226635, 0.201191, 0.212700, 0.211634, 0.232353,
+ 0.223636, 0.208605, 0.249132, 0.183681, 0.221842, 0.187136,
+ 0.203772, 0.249575, 0.217713, 0.205193, 0.193941, 0.219707,
+ 0.264226, 0.182105, 0.207183, 0.220845, 0.236571, 0.182390,
+ 0.212914, 0.186266, 0.195361, 0.217665, 0.204527, 0.188804,
+ 0.222832, 0.191193, 0.201073, 0.185616, 0.195011, 0.200828,
+ 0.181434, 0.233707, 0.202925, 0.211992, 0.173100, 0.205258,
+ 0.182695, 0.216520, 0.218422, 0.209490, 0.211257, 0.215801,
+ 0.220652, 0.211409, 0.195731, 0.194957, 0.198888, 0.234926,
+ 0.221377, 0.229822, 0.176700, 0.172322, 0.212265, 0.206133,
+ 0.170355, 0.253305, 0.198688, 0.240043, 0.225384, 0.174729,
+ 0.195820, 0.200093, 0.196912, 0.212308, 0.200490, 0.240415,
+ 0.159744, 0.173686, 0.223853, 0.213604, 0.193779, 0.179328,
+ 0.180873, 0.237481, 0.179640, 0.235857, 0.202847, 0.167690,
+ 0.245093, 0.215504, 0.205848, 0.184408, 0.201626, 0.209651,
+ 0.236306, 0.217803, 0.188534, 0.187861, 0.161663, 0.221718,
+ 0.152044, 0.190412, 0.173505, 0.208995, 0.174575, 0.180734,
+ 0.247704, 0.203388, 0.194184, 0.169679, 0.182703, 0.213402,
+ 0.191808, 0.178604, 0.178116, 0.198452, 0.174687, 0.169809,
+ 0.222851, 0.156811, 0.229170, 0.210359, 0.178557, 0.248570,
+ 0.208536, 0.192571, 0.178912, 0.224505, 0.170822, 0.205492,
+ 0.330973, 0.160924, 0.203724, 0.213255, 0.205827, 0.187162,
+ 0.181252, 0.191723, 0.238106, 0.182398, 0.202358, 0.212066,
+ 0.201255, 0.168159, 0.185219, 0.229176, 0.158222, 0.164092,
+ 0.215405, 0.200724, 0.234811, 0.184488, 0.213112, 0.198577,
+ 0.219622, 0.160671, 0.179349, 0.206681, 0.206091, 0.165618,
+ 0.165203, 0.174442, 0.179287, 0.187318, 0.163481, 0.217440,
+ 0.160381, 0.177025, 0.204385, 0.163676, 0.210733, 0.186519,
+ 0.230701, 0.191764, 0.185119, 0.190770, 0.242987, 0.186812,
+ 0.202906, 0.161935, 0.182426, 0.197922, 0.181475, 0.155903,
+ 0.175006, 0.223482, 0.202706, 0.218108};
+ wDD = 0.207705;
+ wND = 0.289628;
+ wSD = -1;
+
+ Mmin = bin[0];
+ Mmax = bin[nbin];
+
+ if(M<Mmin || M>Mmax) return kTRUE;
+
+ Int_t ibin=nbin-1;
+ for(Int_t i=1; i<=nbin; i++)
+ if(M<=bin[i]) {
+ ibin=i-1;
+ // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
+ break;
+ }
+ wSD=w[ibin];
+ return kTRUE;
+ }
+
+ return kFALSE;
+}
+
+Bool_t AliGenPythia6Diff::IsFromHeavyFlavor(Int_t ipart)
+{
+ // Check if this is a heavy flavor decay product
+ TParticle * part = (TParticle *) fParticles.At(ipart);
+ Int_t mpdg = TMath::Abs(part->GetPdgCode());
+ Int_t mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
+ //
+ // Light hadron
+ if (mfl >= 4 && mfl < 6) return kTRUE;
+
+ Int_t imo = part->GetFirstMother()-1;
+ TParticle* pm = part;
+ //
+ // Heavy flavor hadron produced by generator
+ while (imo > -1) {
+ pm = (TParticle*)fParticles.At(imo);
+ mpdg = TMath::Abs(pm->GetPdgCode());
+ mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
+ if ((mfl > 3) && (mfl <6) && mpdg > 400) return kTRUE;
+ imo = pm->GetFirstMother()-1;
+ }
+ return kFALSE;
+}
+
+Bool_t AliGenPythia6Diff::CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle)
+{
+ // check the eta/phi correspond to the detectors acceptance
+ // iparticle is the index of the particle to be checked, for PHOS rotation case
+ if (fCheckPHOS && IsInPHOS (phi,eta,iparticle)) return kTRUE;
+ else if(fCheckEMCAL && IsInEMCAL (phi,eta)) return kTRUE;
+ else if(fCheckBarrel && IsInBarrel( eta)) return kTRUE;
+ else return kFALSE;
+}
+
+Bool_t AliGenPythia6Diff::TriggerOnSelectedParticles(Int_t np)
+{
+ // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
+ // implemented primaryly for kPyJets, but extended to any kind of process.
+
+ //printf("Check: frag photon %d, pi0 %d, eta %d, electron %d, hadron %d, decay %d, PHOS %d, EMCAL %d, Barrel %d \n",
+ // fFragPhotonInCalo,fPi0InCalo, fEtaInCalo,fEleInCalo,fHadronInCalo,fDecayPhotonInCalo,fCheckPHOS,fCheckEMCAL, fCheckBarrel);
+
+ Bool_t ok = kFALSE;
+ for (Int_t i=0; i< np; i++) {
+
+ TParticle* iparticle = (TParticle *) fParticles.At(i);
+
+ Int_t pdg = iparticle->GetPdgCode();
+ Int_t status = iparticle->GetStatusCode();
+ Int_t imother = iparticle->GetFirstMother() - 1;
+
+ TParticle* pmother = 0x0;
+ Int_t momStatus = -1;
+ Int_t momPdg = -1;
+ if(imother > 0 ){
+ pmother = (TParticle *) fParticles.At(imother);
+ momStatus = pmother->GetStatusCode();
+ momPdg = pmother->GetPdgCode();
+ }
+
+ ok = kFALSE;
+
+ //
+ // Check the particle type: hadron (not pi0 or eta), electron, decay photon (from pi0 or eta or any), pi0 or eta
+ //
+ // Hadron
+ if (fHadronInCalo && status == 1)
+ {
+ if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
+ // (in case neutral mesons were declared stable)
+ ok = kTRUE;
+ }
+ //Electron
+ else if (fEleInCalo && status == 1 && TMath::Abs(pdg) == 11)
+ {
+ ok = kTRUE;
+ }
+ //Fragmentation photon
+ else if (fFragPhotonInCalo && pdg == 22 && status == 1)
+ {
+ if(momStatus != 11) ok = kTRUE ; // No photon from hadron decay
+ }
+ // Decay photon
+ else if (fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay && pdg == 22) // pi0 status can be 1 or 11 depending on decay settings, work only for 11
+ {
+ if( momStatus == 11)
+ {
+ //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Decay photon! pdg %d, status %d, pt %2.2f, mom: pdg %d, pt %2.2f\n",
+ // pdg,status,iparticle->Pt(),momPdg,pmother->Pt());
+ ok = kTRUE ; // photon from hadron decay
+
+ //In case only decays from pi0 or eta requested
+ if(fPi0InCalo && momPdg!=111) ok = kFALSE;
+ if(fEtaInCalo && momPdg!=221) ok = kFALSE;
+ }
+
+ }
+ // Pi0 or Eta particle
+ else if ((fPi0InCalo || fEtaInCalo))
+ {
+ if(fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay ) continue ;
+
+ if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
+ {
+ //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
+ ok = kTRUE;
+ }
+ else if (fEtaInCalo && pdg == 221)
+ {
+ //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Eta! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
+ ok = kTRUE;
+ }
+
+ }// pi0 or eta
+
+ //
+ // Check that the selected particle is in the calorimeter acceptance
+ //
+ if(ok && iparticle->Pt() > fTriggerParticleMinPt)
+ {
+ //Just check if the selected particle falls in the acceptance
+ if(!fForceNeutralMeson2PhotonDecay )
+ {
+ //printf("\t Check acceptance! \n");
+ Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
+ Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
+
+ if(CheckDetectorAcceptance(phi,eta,i))
+ {
+ ok =kTRUE;
+ AliDebug(1,Form("Selected trigger pdg %d, status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
+ //printf("\t Accept \n");
+ break;
+ }
+ else ok = kFALSE;
+ }
+ //Mesons have several decay modes, select only those decaying into 2 photons
+ else if(fForceNeutralMeson2PhotonDecay && (fPi0InCalo || fEtaInCalo))
+ {
+ // In case we want the pi0/eta trigger,
+ // check the decay mode (2 photons)
+
+ //printf("\t Force decay 2 gamma\n");
+
+ Int_t ndaughters = iparticle->GetNDaughters();
+ if(ndaughters != 2){
+ ok=kFALSE;
+ continue;
+ }
+
+ TParticle*d1 = (TParticle *) fParticles.At(iparticle->GetDaughter(0)-1);
+ TParticle*d2 = (TParticle *) fParticles.At(iparticle->GetDaughter(1)-1);
+ if(!d1 || !d2) {
+ ok=kFALSE;
+ continue;
+ }
+
+ //iparticle->Print();
+ //d1->Print();
+ //d2->Print();
+
+ Int_t pdgD1 = d1->GetPdgCode();
+ Int_t pdgD2 = d2->GetPdgCode();
+ //printf("\t \t 2 daughters pdg = %d - %d\n",pdgD1,pdgD2);
+ //printf("mother %d - %d\n",d1->GetFirstMother(),d2->GetFirstMother());
+
+ if(pdgD1 != 22 || pdgD2 != 22){
+ ok = kFALSE;
+ continue;
+ }
+
+ //printf("\t accept decay\n");
+
+ //Trigger on the meson, not on the daughter
+ if(!fDecayPhotonInCalo){
+
+ Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
+ Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
+
+ if(CheckDetectorAcceptance(phi,eta,i))
+ {
+ //printf("\t Accept meson pdg %d\n",pdg);
+ ok =kTRUE;
+ AliDebug(1,Form("Selected trigger pdg %d (decay), status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
+ break;
+ } else {
+ ok=kFALSE;
+ continue;
+ }
+ }
+
+ //printf("Check daughters acceptance\n");
+
+ //Trigger on the meson daughters
+ //Photon 1
+ Float_t phi = d1->Phi()*180./TMath::Pi(); //Convert to degrees
+ Float_t eta =TMath::Abs(d1->Eta()); //in calos etamin=-etamax
+ if(d1->Pt() > fTriggerParticleMinPt)
+ {
+ //printf("\t Check acceptance photon 1! \n");
+ if(CheckDetectorAcceptance(phi,eta,i))
+ {
+ //printf("\t Accept Photon 1\n");
+ ok =kTRUE;
+ AliDebug(1,Form("Selected trigger pdg %d (decay), status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
+ break;
+ }
+ else ok = kFALSE;
+ } // pt cut
+ else ok = kFALSE;
+
+ //Photon 2
+ phi = d2->Phi()*180./TMath::Pi(); //Convert to degrees
+ eta =TMath::Abs(d2->Eta()); //in calos etamin=-etamax
+
+ if(d2->Pt() > fTriggerParticleMinPt)
+ {
+ //printf("\t Check acceptance photon 2! \n");
+ if(CheckDetectorAcceptance(phi,eta,i))
+ {
+ //printf("\t Accept Photon 2\n");
+ ok =kTRUE;
+ AliDebug(1,Form("Selected trigger pdg %d (decay), status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
+ break;
+ }
+ else ok = kFALSE;
+ } // pt cut
+ else ok = kFALSE;
+ } // force 2 photon daughters in pi0/eta decays
+ else ok = kFALSE;
+ } else ok = kFALSE; // check acceptance
+ } // primary loop
+
+ //
+ // If requested, rotate the particles event in phi to enhance/speed PHOS selection
+ // A particle passing all trigger conditions except phi position in PHOS, is used as reference
+ //
+ if(fCheckPHOSeta)
+ {
+ RotatePhi(ok);
+ }
+
+ return ok;
+}
+
+
+AliGenerator* GenPythia6Diff()
+{
+ AliGenPythia6Diff* pythia = new AliGenPythia6Diff(-1);
+ pythia->SetMomentumRange(0, 999999.);
+ pythia->SetThetaRange(0., 180.);
+ pythia->SetYRange(-12.,12.);
+ pythia->SetPtRange(0,1000.);
+ pythia->SetProcess(kPyMb);
+ pythia->SetEnergyCMS(VAR_PYTHIA6_CMS_ENERGY);
+ // Tune
+ // 320 Perugia 0
+ pythia->SetTune(320);
+ pythia->UseNewMultipleInteractionsScenario();
+ pythia->SetCrossingAngle(0,0.000280);
+ pythia->SetTuneForDiff();
+
+ return pythia;
+}
AliGenerator* GenPythia8()
{
AliGenPythiaPlus* generator = new AliGenPythiaPlus(AliPythia8::Instance());
- generator->SetProcess(kPyMbDefault);
+
+ generator->SetProcess((Process_t)9999);
+
+ // below the default setup corresponding to kPyMbDefault
+ // that we're not using directly otherwise the AliPythia8::ProcInit will
+ // override all our settings...
+
+ (AliPythia8::Instance())->ReadString("SoftQCD:minBias = on");
+ (AliPythia8::Instance())->ReadString("SoftQCD:singleDiffractive = on");
+ (AliPythia8::Instance())->ReadString("SoftQCD:doubleDiffractive = on");
// Centre of mass energy
generator->SetEnergyCMS(VAR_PYTHIA8_CMS_ENERGY);
seed = seed%900000000;
(AliPythia8::Instance())->ReadString("Random:setSeed = on");
(AliPythia8::Instance())->ReadString(Form("Random:seed = %d", seed));
-
+
std::cout << "Pythia8 seed set to " << seed << std::endl;
+
+
+ TString pythia8setup = VAR_PYTHIA8_SETUP_STRINGS;
+ TObjArray* setups = pythia8setup.Tokenize(";");
+ TIter next(setups);
+ TObjString* s;
+
+ while ( ( s = static_cast<TObjString*>(next()) ) )
+ {
+ std::cout << "Passing setup string " << s->String().Data() << " to Pythia8" << std::endl;
+ (AliPythia8::Instance())->ReadString(Form("%s",s->String().Data()));
+ }
+ delete setups;
+
+ std::cout << "end of GenPythia8" << std::endl;
+
return generator;
}
if ( VAR_USE_ITS_RECO )
{
- reco.SetRunReconstruction("MUON ITS");
+ reco.SetRunReconstruction("VZERO T0 MUON ITS FMD");
}
else
{
}
AliSimulation simulator;
- simulator.SetTriggerConfig("MUON");
simulator.SetRunQA("MUON:ALL");
simulator.SetRunHLT("");
- simulator.SetMakeSDigits("MUON");
- simulator.SetMakeDigits("MUON");// ITS"); // ITS needed to propagate the simulated vertex
- simulator.SetMakeDigitsFromHits("ITS"); // ITS needed to propagate the simulated vertex
+ if ( VAR_USE_ITS_RECO )
+ {
+ simulator.SetMakeSDigits("MUON T0 VZERO FMD"); // T0 and VZERO for trigger efficiencies, FMD for diffractive studies
+ simulator.SetMakeDigitsFromHits("ITS"); // ITS needed to propagate the simulated vertex
+ simulator.SetMakeDigits("MUON T0 VZERO FMD");// ITS"); // ITS needed to propagate the simulated vertex
+ }
+ else
+ {
+ simulator.SetTriggerConfig("MUON");
+ simulator.SetMakeSDigits("MUON");
+ simulator.SetMakeDigits("MUON");// ITS"); // ITS needed to propagate the simulated vertex
+ }
+
simulator.SetDefaultStorage(VAR_OCDB_PATH);
// Mag.field from OCDB
simulator.UseMagFieldFromGRP();
- simulator.UseVertexFromCDB();
+ if ( VAR_USE_ITS_RECO )
+ {
+ simulator.UseVertexFromCDB();
+ }
}
- // The rest
+ // The rest
TStopwatch timer;
timer.Start();
simulator.Run(nev);
echo "* # The AOD was not successfully checked *" >>stdout;
else
echo "* ---------------- Job Validated ------------------*" >> stdout;
+ echo "Removing log files which will not be needed then" >> stdout;
+ rm -f *.log
+ touch ok.log
error="0";
fi
fi
//______________________________________________________________________________
AliMuonAccEffSubmitter::AliMuonAccEffSubmitter(const char* generator, Bool_t localOnly,
- int pythia8version)
+ const char* generatorVersion)
: AliMuonGridSubmitter(AliMuonGridSubmitter::kAccEff,localOnly),
fRatio(-1.0),
fFixedNofEvents(10000),
{
// ctor
//
- // if generator contains "pythia8" and pythia8version is given then
- // the pythia8version must represent the integer part XXX of the
+ // if generator contains "pythia8" and generatorVersion is given then
+ // the pythiaversion must represent the integer part XXX of the
// include directory $ALICE_ROOT/PYTHI8/pythiaXXX/include where the file
// Analysis.h is to be found.
+ //
+ // if generator contains "pythia6" then generatorVersion should be the
+ // X.YY part of libpythia6.X.YY.so
+ //
- AddIncludePath("-I$ALICE_ROOT/STEER/STEER -I$ALICE_ROOT/PYTHIA6 -I$ALICE_ROOT/LHAPDF -I$ALICE_ROOT/PWG/muon -I$ALICE_ROOT/PWG/muondep -I$ALICE_ROOT/MUON -I$ALICE_ROOT/include -I$ALICE_ROOT/EVGEN");
+ AddIncludePath("-I$ALICE_ROOT/STEER/STEER -I$ALICE_ROOT/PYTHIA6 -I$ALICE_ROOT/LHAPDF -I$ALICE_ROOT/PWG/muon -I$ALICE_ROOT/PWG/muondep -I$ALICE_ROOT/MUON -I$ALICE_ROOT/include -I$ALICE_ROOT/EVGEN -I$ALICE_ROOT/FASTSIM");
TString ocdbPath("raw://");
SetVar("VAR_GENPARAMCUSTOMSINGLE_Y_P3","0.0130173");
SetVar("VAR_PYTHIA8_CMS_ENERGY","8000");
+ SetVar("VAR_PYTHIA6_CMS_ENERGY","8000");
SetVar("VAR_PURELY_LOCAL",Form("%d",localOnly));
gSystem->Load("libEVGEN");
+ SetVar("VAR_TRIGGER_CONFIGURATION","");
+
+ SetVar("VAR_PYTHIA8_INCLUDES","");
+ SetVar("VAR_PYTHIA8_SETENV","");
+
+ SetVar("VAR_PYTHIA6_INCLUDES","");
+ SetVar("VAR_PYTHIA6_SETENV","");
+
if ( TString(generator).Contains("pythia8",TString::kIgnoreCase) )
{
fMaxEventsPerChunk = 500; // 5000 is not reasonable with Pythia8 (and ITS+MUON...)
SetVar("VAR_USE_ITS_RECO","1");
- if (gSystem->AccessPathName(gSystem->ExpandPathName(Form("$ALICE_ROOT/PYTHIA8/pythia%d",pythia8version))))
+ if (gSystem->AccessPathName(gSystem->ExpandPathName(Form("$ALICE_ROOT/PYTHIA8/pythia%s",generatorVersion))))
{
- AliError(Form("Directory -I$ALICE_ROOT/PYTHIA8/pythia%d/include not found",pythia8version));
+ AliError(Form("Directory -I$ALICE_ROOT/PYTHIA8/pythia%s/include not found",generatorVersion));
Invalidate();
return;
}
- AddIncludePath(Form("-I$ALICE_ROOT/PYTHIA8 -I$ALICE_ROOT/PYTHIA8/pythia%d/include",pythia8version));
+ AddIncludePath(Form("-I$ALICE_ROOT/PYTHIA8 -I$ALICE_ROOT/PYTHIA8/pythia%s/include",generatorVersion));
// SetVar("VAR_PYTHIA8_VERSION",Form("\"%d\"",pythia8version));
- SetVar("VAR_PYTHIA8_INCLUDES",Form("gSystem->AddIncludePath(\"-I$ALICE_ROOT/PYTHIA6 -I$ALICE_ROOT/STEER/STEER -I$ALICE_ROOT/LHAPDF -I$ALICE_ROOT/PYTHIA8 -I$ALICE_ROOT/PYTHIA8/pythia%d/include\");\n",pythia8version));
+ SetVar("VAR_PYTHIA8_INCLUDES",Form("gSystem->AddIncludePath(\"-I$ALICE_ROOT/PYTHIA6 -I$ALICE_ROOT/STEER/STEER -I$ALICE_ROOT/LHAPDF -I$ALICE_ROOT/PYTHIA8 -I$ALICE_ROOT/PYTHIA8/pythia%s/include\");\n",generatorVersion));
TString p8env;
- p8env += Form(" gSystem->Setenv(\"PYTHIA8DATA\", gSystem->ExpandPathName(\"$ALICE_ROOT/PYTHIA8/pythia%d/xmldoc\"));\n",pythia8version);
+ p8env += Form(" gSystem->Setenv(\"PYTHIA8DATA\", gSystem->ExpandPathName(\"$ALICE_ROOT/PYTHIA8/pythia%s/xmldoc\"));\n",generatorVersion);
p8env += " gSystem->Setenv(\"LHAPDF\",gSystem->ExpandPathName(\"$ALICE_ROOT/LHAPDF\"));\n";
gSystem->Load("libFASTSIM");
gSystem->Load("liblhapdf"); // Parton density functions
gSystem->Load("libEGPythia6"); // TGenerator interface
- gSystem->Load("libpythia6"); // Pythia 6.2
+// gSystem->Load("libpythia6"); // Pythia 6.2
gSystem->Load("libAliPythia6"); // ALICE specific implementations
- gSystem->Load("libpythia8.so");
- gSystem->Load("libAliPythia8.so");
+ gSystem->Load("libpythia8");
+ gSystem->Load("libAliPythia8");
+
+ SetVar("VAR_PYTHIA8_SETUP_STRINGS","\"\"");
+
+ SetVar("VAR_TRIGGER_CONFIGURATION","p-p");
}
- else
+
+ if ( TString(generator).Contains("pythia6",TString::kIgnoreCase) )
{
- SetVar("VAR_PYTHIA8_INCLUDES","");
- SetVar("VAR_PYTHIA8_SETENV","");
+ fMaxEventsPerChunk = 500; // 5000 is not reasonable with Pythia6 (and ITS+MUON...)
+
+ fCompactMode = 2; // keep AOD as for the time being the filtering driven from AODtrain.C cannot
+ // add SPD tracklets to muon AODs.
+
+ gSystem->Load("libFASTSIM");
+ gSystem->Load("liblhapdf"); // Parton density functions
+ gSystem->Load("libEGPythia6"); // TGenerator interface
+ gSystem->Load(Form("libpythia6.%s",generatorVersion));
+ gSystem->Load("libAliPythia6");
+
+ SetVar("VAR_PYTHIA6_INCLUDES","gSystem->AddIncludePath(\"-I$ALICE_ROOT/PYTHIA6 -I$ALICE_ROOT/STEER/STEER -I$ALICE_ROOT/STEER/STEERBase -I$ALICE_ROOT/LHAPDF -I$ALICE_ROOT/FASTSIM\");");
+
+ TString p6env;
+
+ p6env += Form("gSystem->Load(\"libpythia6.%s\");",generatorVersion);
+
+ SetVar("VAR_PYTHIA6_SETENV",p6env.Data());
+
+ SetVar("VAR_USE_ITS_RECO","1");
+
+ SetVar("VAR_TRIGGER_CONFIGURATION","p-p");
}
-
+
SetGenerator(generator);
if (localOnly)
OutputToJDL(*os,"Validationcommand",Form("%s/validation_merge.sh",RemoteDir().Data()));
- OutputToJDL(*os,"TTL","7200");
+ OutputToJDL(*os,"TTL","14400");
OutputToJDL(*os,"OutputArchive",
"log_archive.zip:stderr,stdout@disk=1",
else if ( CompactMode() == 1 )
{
// keep only muon AODs and QA
- OutputToJDL(*os,"OutputArchive", "log_archive.zip:stderr,stdout,aod.log,checkaod.log,checkesd.log,rec.log,sim.log@disk=1",
+ OutputToJDL(*os,"OutputArchive", "log_archive.zip:stderr,stdout,*.log@disk=1",
"root_archive.zip:galice*.root,AliAOD.Muons.root,Merged.QA.Data.root@disk=2");
}
else if ( CompactMode() == 2 )
}
else
{
- OutputToJDL(*os,"TTL","7200");
+ OutputToJDL(*os,"TTL","14400");
}
return kTRUE;
if (runs.empty())
{
AliError("No run to work with");
- return kFALSE;
+ return 0;
}
TString currRun;
const std::vector<int>& runs = RunList();
+ if ( runs.empty() )
+ {
+ AliError("No run to work with");
+ return 0;
+ }
+
std::cout << "Generating script to execute : ./simrun.sh" << std::endl;
-
+
std::ofstream out("simrun.sh");
out << "#!/bin/bash" << std::endl;
out << "root.exe -b -q simrun.C --run "<< runs[0] <<" --event " << fFixedNofEvents << std::endl;
gSystem->Exec("chmod +x simrun.sh");
+
+ std::cout << "Cleaning up left-over files from previous simulation/reconstructions" << std::endl;
+ gSystem->Exec("rm -rf TrackRefs.root *.SDigits*.root Kinematics.root *.Hits.root geometry.root gphysi.dat Run*.tag.root HLT*.root *.ps *.Digits.root *.RecPoints.root galice.root *QA*.root Trigger.root *.log AliESD* AliAOD* *.d *.so *.stat");
+
std::cout << "Executing the script : ./simrun.sh" << std::endl;
+
gSystem->Exec("./simrun.sh");
return 1;
}
+namespace {
+
+ void OutputRunList(const char* filename, const std::vector<int>& runlist)
+ {
+ /// output a runlist to ASCII file
+
+ std::ofstream out(filename);
+
+ for ( std::vector<int>::size_type j = 0; j < runlist.size(); ++j )
+ {
+ out << runlist[j] << std::endl;
+ }
+ }
+}
+
+//______________________________________________________________________________
+Int_t AliMuonAccEffSubmitter::SplitRunList(const char* inputList, int maxJobs)
+{
+ /// In order to be able to submit, split a given runlist into chunks that will
+ /// fit within maxJobs (1500 for a typical user)
+
+ std::vector<int> runs;
+
+ AliAnalysisTriggerScalers tmp(inputList);
+ runs = tmp.GetRunList();
+
+ AliAnalysisTriggerScalers* ts(0x0);
+ std::vector<int> currentRunList;
+
+ int nJobs(0);
+ int nTotalJobs(0);
+ int nEvts(0);
+ int nFiles(0);
+
+ for (std::vector<int>::size_type i=0; i < runs.size(); ++i)
+ {
+ Int_t runNumber = runs[i];
+
+ Int_t nEvtRun(fFixedNofEvents);
+
+ if ( fRatio > 0 )
+ {
+ if (!ts)
+ {
+ AliInfo(Form("Creating AliAnalysisTriggerScalers from OCDB=%s",OCDBPath().Data()));
+ ts = new AliAnalysisTriggerScalers(runs,OCDBPath().Data());
+ }
+
+ AliAnalysisTriggerScalerItem* trigger = ts->GetTriggerScaler(runNumber, "L2A", ReferenceTrigger().Data());
+
+ if (!trigger)
+ {
+ AliError(Form("Could not get trigger %s for run %09d",ReferenceTrigger().Data(),runNumber));
+ continue;
+ }
+ nEvtRun = TMath::Nint(fRatio * trigger->Value());
+ }
+
+ Int_t nChunk = 1;
+
+ while (nEvtRun/nChunk+0.5 > MaxEventsPerChunk())
+ {
+ ++nChunk;
+ }
+
+ Int_t nEvtChunk = TMath::Nint(nEvtRun/nChunk + 0.5);
+
+ nJobs += nChunk;
+
+ nTotalJobs += nChunk;
+
+ nEvts += nChunk*nEvtChunk;
+
+ if ( nJobs > maxJobs )
+ {
+ ++nFiles;
+
+ OutputRunList(Form("%s.%d",inputList,nFiles),currentRunList);
+ nJobs = 0;
+ currentRunList.clear();
+ }
+
+
+ currentRunList.push_back(runNumber);
+
+ }
+
+ if ( !currentRunList.empty() )
+ {
+ ++nFiles;
+ OutputRunList(Form("%s.%d",inputList,nFiles),currentRunList);
+
+ }
+
+ delete ts;
+
+ std::cout << Form("input run list was split into %d files. Total number of jobs %d. Total number of events %d",
+ nFiles,nTotalJobs,nEvts) << std::endl;
+
+ return nFiles;
+}
+
+
//______________________________________________________________________________
Int_t AliMuonAccEffSubmitter::Submit(Bool_t dryRun)
{
public:
AliMuonAccEffSubmitter(const char* generator="GenParamCustom",
Bool_t localOnly=kFALSE,
- int pythia8version=8175);
+ const char* generatorVersion="8125");
virtual Bool_t Generate(const char* jdlname) const;
virtual Bool_t Run(const char* mode);
TString SnapshotDir() const { return GetMapValue("OCDBsnapshot"); }
+ Int_t SplitRunList(const char* inputList, int maxJobs=1500);
+
private:
Bool_t GenerateRunJDL(const char* name) const;
}
}
- SetPackages("VO_ALICE@AliRoot::v5-04-Rev-18","VO_ALICE@ROOT::v5-34-08-5","VO_ALICE@GEANT3::v1-15a-1");
+ SetPackages("VO_ALICE@AliRoot::v5-04-Rev-20");
TString basedir = gSystem->ExpandPathName("$ALICE_ROOT/PWG/muondep");
TString stemplate(Form("%s/%s",TemplateDir().Data(),file->String().Data()));
TString slocal(Form("%s/%s",LocalDir().Data(),file->String().Data()));
+ AliDebug(1,Form("Copying %s to %s",stemplate.Data(),slocal.Data()));
+
Int_t c = gSystem->CopyFile(stemplate.Data(),slocal.Data(),ShouldOverwriteFiles());
if ( c )
{
while ( ( v = static_cast<TObjString*>(next())) )
{
+ if ( v->String().Length() == 0 ) continue;
+
--n;
out << "\t\"" << v->String().Data() << "\"";
if ( n ) out << ",";
{
/// Replace the variables (i.e. things starting by VAR_) found in file
+ AliDebug(1,file);
+
std::ifstream in(file);
char line[1024];
TObjArray lines;
++nvars;
TObjString* key;
next.Reset();
+
+ int n(0);
+
while ( ( key = static_cast<TObjString*>(next())) )
{
+ AliDebug(1,Form("Does %s contains %s ?",sline.Data(),key->String().Data()));
+
if ( sline.Contains(key->String()) )
{
++nreplaced;
+ ++n;
TObjString* value = static_cast<TObjString*>(fVars->GetValue(key->String()));
+ AliDebug(1,Form("Replacing %s by %s in %s",key->String().Data(),value->String().Data(),sline.Data()));
sline.ReplaceAll(key->String(),value->String());
+ AliDebug(1,"Done");
break;
}
}
+
+ if (n==0)
+ {
+ AliError(Form("Could not find a replacement for variable %s",sline.Data()));
+ break;
+ }
}
lines.Add(new TObjString(sline));
out.close();
}
+ AliDebug(1,Form("replaced %d vars",nvars));
+
return kTRUE;
}
const char* api)
{
/// Set the packages to be used by the jobs
- /// Must be a valid combination, see http://alimonitor.cern.ch/packages/
- ///
+ /// If root and geant3 are given (default is to let alien get the correct
+ /// values for the requested aliroot version), then they must
+ /// correspond to a valid combination, see http://alimonitor.cern.ch/packages/
SetMapKeyValue("AliRoot",aliroot);
SetMapKeyValue("Root",root);
Bool_t AliMuonGridSubmitter::SetVar(const char* varname, const char* value)
{
/// Set a variable
+ ///
+ /// Pay attention to how string variables should be given here : you have
+ /// to espace the quotation marks :
+ ///
+ /// SetVar("VAR_PYTHIA8_SETUP_STRINGS","\"SoftQCD:doubleDiffractive=off\"");
TString s(varname);
s.ToUpper();
Bool_t CopyTemplateFilesToLocal();
- void SetPackages(const char* aliroot, const char* root, const char* geant3,
+ void SetPackages(const char* aliroot, const char* root="", const char* geant3="",
const char* api="VO_ALICE@APISCONFIG::V1.1x");
Bool_t ShouldOverwriteFiles() const { return fShouldOverwriteFiles; }
# SHLIBS - Shared Libraries and objects for linking (Executables only) #
#--------------------------------------------------------------------------------#
-set ( SRCS FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityKTPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoKKTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoTPCInnerCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoChi2CorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnSource.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelGausRinvFreezeOutGenerator.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnTrueQ.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnNonIdDR.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DLCMSSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleMomRes.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelAllHiddenInfo.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCchiNdof.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQATrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQAEventCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCncls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDG.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnTPCNcls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnGammaMonitor.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQinvCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctn3DSphericalEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoBPLCMS3DCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutAntiGamma.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleEtCorr.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutPt.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAvgSepCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDGV0.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAnalysisAzimuthalPbPb.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceLM.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPicoEventRP.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceKK.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx)
+set ( SRCS FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityKTPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoKKTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoTPCInnerCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoChi2CorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnSource.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelGausRinvFreezeOutGenerator.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnTrueQ.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnNonIdDR.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DLCMSSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleMomRes.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelAllHiddenInfo.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCchiNdof.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQATrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQAEventCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCncls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDG.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnTPCNcls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnGammaMonitor.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQinvCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctn3DSphericalEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoBPLCMS3DCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutAntiGamma.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleEtCorr.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutPt.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAvgSepCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDGV0.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAnalysisAzimuthalPbPb.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceLM.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPicoEventRP.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceKK.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnPairFractions.cxx FEMTOSCOPY/AliFemtoUser/AliAnalysisTaskParticleEfficiency.cxx)
string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" )
if(fDCA2D==1&&(sb[0]*sb[0]/fMaxDCAXY/fMaxDCAXY+sb[1]*sb[1]/fMaxDCAZ/fMaxDCAZ)>1)continue;
if(fDCA2D==2&&(0.35+0.42*std::pow(double(sPt),-0.9))<(sb[0])*sb[0])continue;
//if(eSDtrack->GetKinkIndex(0)>0)continue;//removes kinked tracks
- if(!aodTrack->IsPrimaryCandidate())continue;//I assume this removes kinks
+ //if(!aodTrack->IsPrimaryCandidate())continue;//I assume this removes kinks // commented out, method removed in AliAODTrack
//if(!aodTrack->GetStatus()&AliAODTrack::kTPCrefit&&fTPCRefit)continue;//refit in TPC
//if((fITSRefit==1||(fITSRefit==2&&sPt>5))&&!aodTrack->GetStatus()&AliAODTrack::kITSrefit)continue;//refit of its tracks either for none,all, or >5 GeV/c
if(fDEBUG)Printf("SPD %d %d ", aodTrack->HasPointOnITSLayer(0), aodTrack->HasPointOnITSLayer(1));
//*********************************************************
TExMap *trackMap = new TExMap();//Mapping matrix----
+ //TRandom *ran = new TRandom(); //random eff. correction
+
//1st loop track for Global tracks
for(Int_t i = 0; i < _nTracks; i++)
{
bitOK = t->TestFilterBit(_trackFilterBit);
if (!bitOK) continue; //128bit or 272bit
-
+
+ /* //------- Eff. test----------
+ Double_t yy = (1-0.7)/1.8;
+ Double_t zz = (pt-0.2);
+ //Double_t effValue = 0.7+yy*zz; //Slope
+ Double_t effValue = 0.7; //Flat
+ Double_t R = ran->Uniform(0,1);
+
+ if(R > effValue) continue;
+ //---------------------------
+ */
+
Int_t gID = t->GetID();
newAodTrack = gID >= 0 ?t : fAODEvent->GetTrack(trackMap->GetValue(-1-gID));
//==== QA ===========================
- _dcaz->Fill(DCAZ);
- _dcaxy->Fill(DCAXY);
- _etadis->Fill(eta);
- _phidis->Fill(phi);
+ //_dcaz->Fill(DCAZ);
+ //_dcaxy->Fill(DCAXY);
+ //_etadis->Fill(eta);
+ //_phidis->Fill(phi);
//===================================
//*************************************************
-#include "TChain.h"
-#include "TList.h"
-#include "TFile.h"
-#include "TTree.h"
-#include "TH1D.h"
-#include "TH2D.h"
-#include "TH3D.h"
-#include "THnSparse.h"
-#include "TCanvas.h"
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/* $Id:$ */
#include <TROOT.h>
#include <TChain.h>
#include "AliAODHandler.h"
#include "AliAODInputHandler.h"
+//#include "AliAODMCParticle.h"
#include "AliInputEventHandler.h"
#include "AliLog.h"
#include "AliESDEvent.h"
#include "AliCentrality.h"
#include "AliAnalysisTaskDptDptQA.h"
-#include "AliPID.h"
-#include "AliPIDResponse.h"
-
-#include "AliESDVertex.h"
-#include "AliESDEvent.h"
-#include "AliESDInputHandler.h"
-#include "AliAODEvent.h"
-#include "AliAODTrack.h"
-#include "AliAODInputHandler.h"
-#include "AliESD.h"
-#include "AliESDEvent.h"
-#include "AliAODEvent.h"
-#include "AliStack.h"
-#include "AliESDtrackCuts.h"
-#include "AliAODMCHeader.h"
-
-
-#include "AliGenHijingEventHeader.h"
-#include "AliGenEventHeader.h"
-#include "AliPID.h"
-#include "AliAODPid.h"
-#include "AliPIDResponse.h"
-#include "AliAODpidUtil.h"
-#include "AliPIDCombined.h"
-
-
-
ClassImp(AliAnalysisTaskDptDptQA)
+using std::cout;
+using std::endl;
+
AliAnalysisTaskDptDptQA::AliAnalysisTaskDptDptQA()
: AliAnalysisTaskSE(),
fAODEvent(0),
fESDEvent(0), //! ESD Event
fInputHandler(0),
-fPIDResponse(0x0),
_outputHistoList(0),
_twoPi ( 2.0 * 3.1415927),
_eventCount ( 0),
_requestedCharge_2 ( -1),
_dcaZMin ( -3),
_dcaZMax ( 3.),
-_dcaXYMin ( -2.4),
-_dcaXYMax ( 2.4),
+_dcaXYMin ( -3.),
+_dcaXYMax ( 3.),
_dedxMin ( 0),
_dedxMax ( 100000),
-_nClusterMin ( 80),
-_trackFilterBit (0),
-fNSigmaCut (3.),
+_nClusterMin ( 70),
+_trackFilterBit ( 128),
_field ( 1.),
_nTracks ( 0 ),
_mult0 ( 0 ),
_mult2 ( 0 ),
_mult3 ( 0 ),
_mult4 ( 0 ),
-_mult4a ( 0 ),
_mult5 ( 0 ),
_mult6 ( 0 ),
arraySize ( 2000),
_nBins_pt_1(18), _min_pt_1(0.2), _max_pt_1(2.0), _width_pt_1(0.1),
_nBins_phi_1(72), _min_phi_1(0), _max_phi_1(2.*3.1415927),_width_phi_1(2.*3.1415927/72.),
-_nBins_eta_1(0), _min_eta_1(0), _max_eta_1(0), _width_eta_1(0.1),
+_nBins_eta_1(0), _min_eta_1(0), _max_eta_1(0), _width_eta_1(0.1),
_nBins_etaPhi_1(0),
_nBins_etaPhiPt_1(0),
_nBins_pt_2(18), _min_pt_2(0.2), _max_pt_2(2.0), _width_pt_2(0.1),
_nBins_phi_2(72), _min_phi_2(0), _max_phi_2(2.*3.1415927),_width_phi_2(2.*3.1415927/72),
-_nBins_eta_2(0), _min_eta_2(0), _max_eta_2(0), _width_eta_2(0.1),
+_nBins_eta_2(0), _min_eta_2(0), _max_eta_2(0), _width_eta_2(0.1),
_nBins_etaPhi_2(0),
_nBins_etaPhiPt_2(0),
_m4 ( 0),
_m5 ( 0),
_m6 ( 0),
-_vertexZ ( 0),
-
-_Ncluster1 ( 0),
-_Ncluster2 ( 0),
+_vertexZ ( 0),
_etadis ( 0),
_phidis ( 0),
_dcaz ( 0),
_dcaxy ( 0),
-_spectra ( 0),
_n1_1_vsPt ( 0),
_n1_1_vsEtaVsPhi ( 0),
_s1pt_1_vsEtaVsPhi ( 0),
_n1_1_vsZVsEtaVsPhiVsPt ( 0),
-_n1_1_vsM ( 0),
+_n1_1_vsM ( 0), // w/ weight
_s1pt_1_vsM ( 0),
-_n1Nw_1_vsM ( 0),
+_n1Nw_1_vsM ( 0), // w/o weight
_s1ptNw_1_vsM ( 0),
_dedxVsP_1 ( 0),
_corrDedxVsP_1 ( 0),
_s2PtNNw_12_vsM ( 0),
_s2NPtNw_12_vsM ( 0),
_invMass ( 0),
+_invMassElec ( 0),
n1Name("NA"),
n1NwName("NA"),
n2Name("NA"),
fAODEvent(0),
fESDEvent(0),
fInputHandler(0),
-fPIDResponse(0),
_outputHistoList(0),
_twoPi ( 2.0 * 3.1415927),
_eventCount ( 0),
_requestedCharge_2 ( -1),
_dcaZMin ( -3),
_dcaZMax ( 3.),
-_dcaXYMin ( -2.4),
-_dcaXYMax ( 2.4),
+_dcaXYMin ( -3.),
+_dcaXYMax ( 3.),
_dedxMin ( 0),
_dedxMax ( 100000),
-_nClusterMin ( 80),
+_nClusterMin ( 70),
_trackFilterBit ( 0),
-fNSigmaCut ( 3.),
_field ( 1.),
_nTracks ( 0 ),
_mult0 ( 0 ),
_mult2 ( 0 ),
_mult3 ( 0 ),
_mult4 ( 0 ),
-_mult4a ( 0 ),
_mult5 ( 0 ),
_mult6 ( 0 ),
arraySize ( 2000),
_nBins_pt_1(18), _min_pt_1(0.2), _max_pt_1(2.0), _width_pt_1(0.1),
_nBins_phi_1(72), _min_phi_1(0), _max_phi_1(2.*3.1415927),_width_phi_1(2.*3.1415927/72.),
-_nBins_eta_1(0), _min_eta_1(0), _max_eta_1(0), _width_eta_1(0.1),
+_nBins_eta_1(0), _min_eta_1(0), _max_eta_1(0), _width_eta_1(0.1),
_nBins_etaPhi_1(0),
_nBins_etaPhiPt_1(0),
_nBins_pt_2(18), _min_pt_2(0.2), _max_pt_2(2.0), _width_pt_2(0.1),
_nBins_phi_2(72), _min_phi_2(0), _max_phi_2(2.*3.1415927),_width_phi_2(2.*3.1415927/72),
-_nBins_eta_2(0), _min_eta_2(0), _max_eta_2(0), _width_eta_2(0.1),
+_nBins_eta_2(0), _min_eta_2(0), _max_eta_2(0), _width_eta_2(0.1),
_nBins_etaPhi_2(0),
_nBins_etaPhiPt_2(0),
_m4 ( 0),
_m5 ( 0),
_m6 ( 0),
-_vertexZ ( 0),
-_Ncluster1 ( 0),
-_Ncluster2 ( 0),
+_vertexZ ( 0),
_etadis ( 0),
_phidis ( 0),
-
-_dcaz ( 0),
-_dcaxy ( 0),
-_spectra ( 0),
+_dcaz ( 0),
+_dcaxy ( 0),
_n1_1_vsPt ( 0),
_n1_1_vsEtaVsPhi ( 0),
_s1pt_1_vsEtaVsPhi ( 0),
_n1_1_vsZVsEtaVsPhiVsPt ( 0),
-_n1_1_vsM ( 0),
+_n1_1_vsM ( 0), // w/ weight
_s1pt_1_vsM ( 0),
-_n1Nw_1_vsM ( 0),
+_n1Nw_1_vsM ( 0), // w/o weight
_s1ptNw_1_vsM ( 0),
_dedxVsP_1 ( 0),
_corrDedxVsP_1 ( 0),
_s2PtNNw_12_vsM ( 0),
_s2NPtNw_12_vsM ( 0),
_invMass ( 0),
+_invMassElec ( 0),
n1Name("NA"),
n1NwName("NA"),
n2Name("NA"),
AliAnalysisTaskDptDptQA::~AliAnalysisTaskDptDptQA()
{
-
+
}
void AliAnalysisTaskDptDptQA::UserCreateOutputObjects()
{
+ cout<< "AliAnalysisTaskDptDptQA::CreateOutputObjects() Starting " << endl;
OpenFile(0);
_outputHistoList = new TList();
_outputHistoList->SetOwner();
+ //if (_useWeights) DefineInput(2, TList::Class());
+
+ //Setup the parameters of the histograms
_nBins_M0 = 500; _min_M0 = 0.; _max_M0 = 5000.; _width_M0 = (_max_M0-_min_M0)/_nBins_M0;
_nBins_M1 = 500; _min_M1 = 0.; _max_M1 = 5000.; _width_M1 = (_max_M1-_min_M1)/_nBins_M1;
_nBins_M2 = 500; _min_M2 = 0.; _max_M2 = 5000.; _width_M2 = (_max_M2-_min_M2)/_nBins_M2;
_nBins_etaPhiPt_2 = _nBins_etaPhi_2 * _nBins_pt_2;
_nBins_zEtaPhiPt_2 = _nBins_vertexZ * _nBins_etaPhiPt_2;
_nBins_etaPhi_12 = _nBins_etaPhi_1 * _nBins_etaPhi_2;
-
+
+ //setup the work arrays
+
_id_1 = new int[arraySize];
_charge_1 = new int[arraySize];
+ //_iPhi_1 = new int[arraySize];
+ //_iEta_1 = new int[arraySize];
_iEtaPhi_1 = new int[arraySize];
_iPt_1 = new int[arraySize];
_pt_1 = new float[arraySize];
_px_1 = new float[arraySize];
_py_1 = new float[arraySize];
_pz_1 = new float[arraySize];
+ //_phi_1 = new float[arraySize];
+ //_eta_1 = new float[arraySize];
_correction_1 = new float[arraySize];
-
+ _dedx_1 = new float[arraySize];
+
__n1_1_vsPt = getDoubleArray(_nBins_pt_1, 0.);
__n1_1_vsEtaPhi = getDoubleArray(_nBins_etaPhi_1, 0.);
__s1pt_1_vsEtaPhi = getDoubleArray(_nBins_etaPhi_1, 0.);
__n1_1_vsZEtaPhiPt = getFloatArray(_nBins_zEtaPhiPt_1, 0.);
-
+ cout << "==========================================================================================" << endl;
+ cout << "=============== Booking for particle 1 done." << endl;
+ cout << "_requestedCharge_1: " << _requestedCharge_1 << endl;
+ cout << "_requestedCharge_2: " << _requestedCharge_2 << endl;
+
if (_requestedCharge_2!=_requestedCharge_1)
{
- _sameFilter = 0;
+ cout << " creating arrays for particle 2 with size: " << arraySize << endl;
+ _sameFilter = 0;
//particle 2
_id_2 = new int[arraySize];
_charge_2 = new int[arraySize];
+ //_iPhi_2 = new int[arraySize];
+ //_iEta_2 = new int[arraySize];
_iEtaPhi_2 = new int[arraySize];
_iPt_2 = new int[arraySize];
_pt_2 = new float[arraySize];
_px_2 = new float[arraySize];
_py_2 = new float[arraySize];
_pz_2 = new float[arraySize];
+ //_phi_2 = new float[arraySize];
+ //_eta_2 = new float[arraySize];
_correction_2 = new float[arraySize];
-
+ _dedx_2 = new float[arraySize];
+
__n1_2_vsPt = getDoubleArray(_nBins_pt_2, 0.);
__n1_2_vsEtaPhi = getDoubleArray(_nBins_etaPhi_2, 0.);
__s1pt_2_vsEtaPhi = getDoubleArray(_nBins_etaPhi_2, 0.);
createHistograms();
PostData(0,_outputHistoList);
- //cout<< "AliAnalysisTaskDptDptQA::CreateOutputObjects() DONE " << endl;
+ cout<< "AliAnalysisTaskDptDptQA::CreateOutputObjects() DONE " << endl;
}
name = "eventAccounting";
- _eventAccounting = createHisto1D(name,name,10, -0.5, 9.5, "event Code", _title_counts);
+ // bin index : what it is...
+ // 0 : number of event submitted
+ // 1 : number accepted by centrality cut
+ // 2 : number accepted by centrality cut and z cut
+ // 3 : total number of particles that satisfied filter 1
+ // 4 : total number of particles that satisfied filter 2
+ _eventAccounting = createHisto1D(name,name,10, -0.5, 9.5, "event Code", _title_counts);
name = "m0"; _m0 = createHisto1D(name,name,_nBins_M1, _min_M1, _max_M1, _title_m0, _title_counts);
name = "m1"; _m1 = createHisto1D(name,name,_nBins_M1, _min_M1, _max_M1, _title_m1, _title_counts);
name = "m4"; _m4 = createHisto1D(name,name,_nBins_M4, _min_M4, _max_M4, _title_m4, _title_counts);
name = "m5"; _m5 = createHisto1D(name,name,_nBins_M5, _min_M5, _max_M5, _title_m5, _title_counts);
name = "m6"; _m6 = createHisto1D(name,name,_nBins_M6, _min_M6, _max_M6, _title_m6, _title_counts);
- name = "zV"; _vertexZ = createHisto1D(name,name,100, -10, 10, "z-Vertex (cm)", _title_counts);
+ name = "zV"; _vertexZ = createHisto1D(name,name,_nBins_vertexZ, _min_vertexZ, _max_vertexZ, "z-Vertex (cm)", _title_counts);
-
name = "Eta"; _etadis = createHisto1F(name,name, 200, -1.0, 1.0, "#eta","counts");
name = "Phi"; _phidis = createHisto1F(name,name, 360, 0.0, 6.4, "#phi","counts");
- name = "DCAz"; _dcaz = createHisto1F(name,name, 500, -5.0, 5.0, "dcaZ","counts");
- name = "DCAxy"; _dcaxy = createHisto1F(name,name, 500, -5.0, 5.0, "dcaXY","counts");
- name = "pTspectra"; _spectra = createHisto1F(name,name, 300, 0.1, 2.5, "pT","counts");
- //name = "Nclus1"; _Ncluster1 = createHisto1F(name,name, 200, 0, 200, "Ncluster1","counts");
- //name = "Nclus2"; _Ncluster2 = createHisto1F(name,name, 200, 0, 200, "Ncluster2","counts");
-
if (_singlesOnly)
{
name = n1Name+part_1_Name+vsPt; _n1_1_vsPt = createHisto1F(name,name, _nBins_pt_1, _min_pt_1, _max_pt_1, _title_pt_1, _title_AvgN_1);
name = n1Name+part_1_Name+vsZ+vsEtaPhi+vsPt; _n1_1_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_1, 0., double(_nBins_etaPhi_1), _nBins_pt_1, _min_pt_1, _max_pt_1, "zVertex", _title_etaPhi_1, _title_pt_1);
+ //name = "dedxVsP_1"; _dedxVsP_1 = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
+ //name = "corrDedxVsP_1"; _corrDedxVsP_1 = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
+ //name = "betaVsP_1"; _betaVsP_1 = createHisto2F(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
name = n1Name+part_2_Name+vsPt; _n1_2_vsPt = createHisto1F(name,name, _nBins_pt_2, _min_pt_2, _max_pt_2, _title_pt_2, _title_AvgN_2);
name = n1Name+part_2_Name+vsZ+vsEtaPhi+vsPt; _n1_2_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_2, 0., double(_nBins_etaPhi_2), _nBins_pt_2, _min_pt_2, _max_pt_2, "zVertex", _title_etaPhi_2, _title_pt_2);
+ //name = "dedxVsP_2"; _dedxVsP_2 = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
+ //name = "corrDedxVsP_2"; _corrDedxVsP_2 = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
+ //name = "betaVsP_2"; _betaVsP_2 = createHisto2F(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
}
else
name = s2PtNNwName+pair_12_Name + vsM; _s2PtNNw_12_vsM = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPtN_12);
name = s2NPtNwName+pair_12_Name + vsM; _s2NPtNw_12_vsM = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgNSumPt_12);
- name = "mInv"; _invMass = createHisto2F(name,name, 10, 0.0, 2.0, 200, 0.4, 0.6, "pT","InvMass","ptvsmass");
-
+ name = "mInv"; _invMass = createHisto1F(name,name, 500, 0., 1.000, "M_{inv}","counts");
+ name = "mInvElec"; _invMassElec = createHisto1F(name,name, 500, 0., 1.000, "M_{inv}","counts");
}
AliInfo(" AliAnalysisTaskDptDptQA::createHistoHistograms() All Done");
AliInfo("AliAnalysisTaskDptDptQA::finalizeHistograms() starting");
AliInfo(Form("CorrelationAnalyzers::finalizeHistograms() _eventCount : %d",int(_eventCount)));
-
+ if (_singlesOnly)
+ {
+ if (_sameFilter)
+ {
+ fillHistoWithArray(_n1_1_vsPt, __n1_1_vsPt, _nBins_pt_1);
+ fillHistoWithArray(_n1_1_vsZVsEtaVsPhiVsPt, __n1_1_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
+ fillHistoWithArray(_n1_2_vsPt, __n1_1_vsPt, _nBins_pt_1);
+ fillHistoWithArray(_n1_2_vsZVsEtaVsPhiVsPt, __n1_1_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
+ }
+ else
+ {
+ fillHistoWithArray(_n1_1_vsPt, __n1_1_vsPt, _nBins_pt_1);
+ fillHistoWithArray(_n1_1_vsZVsEtaVsPhiVsPt, __n1_1_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
+ fillHistoWithArray(_n1_2_vsPt, __n1_2_vsPt, _nBins_pt_2);
+ fillHistoWithArray(_n1_2_vsZVsEtaVsPhiVsPt, __n1_2_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_2, _nBins_pt_2);
+ }
+ }
+ else
+ {
+ if (_sameFilter)
+ {
+ fillHistoWithArray(_n1_1_vsEtaVsPhi, __n1_1_vsEtaPhi, _nBins_eta_1, _nBins_phi_1);
+ fillHistoWithArray(_s1pt_1_vsEtaVsPhi, __s1pt_1_vsEtaPhi, _nBins_eta_1, _nBins_phi_1);
+ fillHistoWithArray(_n1_2_vsEtaVsPhi, __n1_1_vsEtaPhi, _nBins_eta_1, _nBins_phi_1);
+ fillHistoWithArray(_s1pt_2_vsEtaVsPhi, __s1pt_1_vsEtaPhi, _nBins_eta_1, _nBins_phi_1);
+ }
+ else
+ {
+ fillHistoWithArray(_n1_1_vsEtaVsPhi, __n1_1_vsEtaPhi, _nBins_eta_1, _nBins_phi_1);
+ fillHistoWithArray(_s1pt_1_vsEtaVsPhi, __s1pt_1_vsEtaPhi, _nBins_eta_1, _nBins_phi_1);
+ fillHistoWithArray(_n1_2_vsEtaVsPhi, __n1_2_vsEtaPhi, _nBins_eta_2, _nBins_phi_2);
+ fillHistoWithArray(_s1pt_2_vsEtaVsPhi, __s1pt_2_vsEtaPhi, _nBins_eta_2, _nBins_phi_2);
+ }
+ fillHistoWithArray(_n2_12_vsEtaPhi, __n2_12_vsEtaPhi, _nBins_etaPhi_12);
+ fillHistoWithArray(_s2PtPt_12_vsEtaPhi, __s2ptpt_12_vsEtaPhi, _nBins_etaPhi_12);
+ fillHistoWithArray(_s2PtN_12_vsEtaPhi, __s2PtN_12_vsEtaPhi, _nBins_etaPhi_12);
+ fillHistoWithArray(_s2NPt_12_vsEtaPhi, __s2NPt_12_vsEtaPhi, _nBins_etaPhi_12);
+ fillHistoWithArray(_n2_12_vsPtVsPt, __n2_12_vsPtPt, _nBins_pt_1, _nBins_pt_2);
+
+ }
AliInfo("AliAnalysisTaskDptDptQA::finalizeHistograms() Done ");
}
//--------------//
{
int k1,k2;
- int charge;
- float q, phi, pt, eta, px, py, pz;
- //int ij;
- //int id_1, q_1, iPt_1;
- //float pt_1, px_1, py_1, pz_1, corr_1;
- //int id_2, q_2, iPt_2;
- //float pt_2, px_2, py_2, pz_2, corr_2;
- //float ptpt;
+ int iPhi, iEta, iEtaPhi, iPt, charge;
+ float q, p, phi, pt, eta, corr, corrPt, dedx, px, py, pz;
+ int ij;
+ int id_1, q_1, iEtaPhi_1, iPt_1;
+ float pt_1, px_1, py_1, pz_1, corr_1, dedx_1;
+ int id_2, q_2, iEtaPhi_2, iPt_2;
+ float pt_2, px_2, py_2, pz_2, corr_2, dedx_2;
+ float ptpt;
int iVertex, iVertexP1, iVertexP2;
- //int iZEtaPhiPt;
- //float massElecSq = 1.94797849000000016e-02;
- //double b[2];
- //double bCov[3];
+ int iZEtaPhiPt;
+ float massElecSq = 2.5e-7;
const AliAODVertex* vertex;
+ int nClus;
bool bitOK;
-
- AliAnalysisManager* manager = AliAnalysisManager::GetAnalysisManager();
- if (!manager) {
- return;
- }
- AliAODInputHandler* inputHandler = dynamic_cast<AliAODInputHandler*> (manager->GetInputEventHandler());
- if (!inputHandler) {
- return;
- }
-
- fAODEvent = dynamic_cast<AliAODEvent*>(InputEvent());
- //AliAODEvent* fAODEvent = dynamic_cast<AliAODEvent*>(InputEvent());
-
- if (!fAODEvent)
- {
- return;
- }
- fPIDResponse =inputHandler->GetPIDResponse();
- if (!fPIDResponse){
- AliFatal("This Task needs the PID response attached to the inputHandler");
- return;
- }
-
+
// count all events looked at here
_eventCount++;
-
+
+ // A. Adare - Fix from above to avoid coverity complaint about null dereference
if (_eventAccounting)
{
_eventAccounting->Fill(0);// count all calls to this function
}
else
{
-
- return;
+ cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - !_eventAccounting" << endl;
+ cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - Skip this task" << endl;
+ return;
+ }
+
+ //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - 1" << endl;
+
+ //Get pointer to current event
+ //fESDEvent = dynamic_cast<AliESDEvent*> (InputEvent());
+ fAODEvent = dynamic_cast<AliAODEvent*> (InputEvent());
+
+ // if(!fAODEvent && !fESDEvent)
+ if(!fAODEvent)
+ {
+ AliError("AliAnalysisTaskDptDptQA::Exec(Option_t *option) !fAODEvent");
+ return;
}
_eventAccounting->Fill(1);// count all calls to this function with a valid pointer
__n1_1 = __n1_2 = __s1pt_1 = __s1pt_2 = __n1Nw_1 = __n1Nw_2 = __s1ptNw_1 = __s1ptNw_2 = 0;
float v0Centr = -999.;
- float v0ACentr = -999.;
float trkCentr = -999.;
float spdCentr = -999.;
-
float vertexX = -999;
float vertexY = -999;
float vertexZ = -999;
- //float vertexXY = -999;
- // float dcaZ = -999;
- //float dcaXY = -999;
+ float vertexXY = -999;
float centrality = -999;
- float Kaon1Charge[50000];
- float Kaon1Px[50000];
- float Kaon1Py[50000];
- float Kaon1Pz[50000];
- float Kaon2Charge[50000];
- float Kaon2Px[50000];
- float Kaon2Py[50000];
- float Kaon2Pz[50000];
-
- int nKaon1s = 0;
- int nKaon2s = 0;
-
- //k1Mass = 0.139570;
- //kMass = 0.139570;
-
-
if(fAODEvent)
{
- //Centrality
- AliCentrality* centralityObject = fAODEvent->GetHeader()->GetCentralityP();
- if (centralityObject)
- {
- //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - 6" << endl;
-
- v0Centr = centralityObject->GetCentralityPercentile("V0M");
- v0ACentr = centralityObject->GetCentralityPercentile("V0A");
- trkCentr = centralityObject->GetCentralityPercentile("TRK");
- spdCentr = centralityObject->GetCentralityPercentile("CL1");
-
- }
-
- _nTracks =fAODEvent->GetNumberOfTracks();//NEW Test
+ //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - 5" << endl;
+
+ //Centrality
+ AliCentrality* centralityObject = fAODEvent->GetHeader()->GetCentralityP();
+ if (centralityObject)
+ {
+ //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - 6" << endl;
- _mult3 = _nTracks;
- _mult4 = v0Centr;
- _mult4a = v0ACentr;
- _mult5 = trkCentr;
- _mult6 = spdCentr;
- _field = fAODEvent->GetMagneticField();
+ v0Centr = centralityObject->GetCentralityPercentile("V0M");
+ trkCentr = centralityObject->GetCentralityPercentile("TRK");
+ spdCentr = centralityObject->GetCentralityPercentile("CL1");
+ //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - 7" << endl;
- //_centralityMethod
- switch (_centralityMethod)
- {
- case 0: centrality = _mult0; break;
- case 1: centrality = _mult1; break;
- case 2: centrality = _mult2; break;
- case 3: centrality = _mult3; break;
- case 4: centrality = _mult4; break;
- case 5: centrality = _mult5; break;
- case 6: centrality = _mult6; break;
- case 7: centrality = _mult4a; break;
- }
+ }
+ //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - 8" << endl;
+
+ _nTracks = fAODEvent->GetNTracks();
+ //_mult0 = 0;
+ //_mult1 = 0;
+ //_mult2 = 0;
+ _mult3 = _nTracks;
+ _mult4 = v0Centr;
+ _mult5 = trkCentr;
+ _mult6 = spdCentr;
+ _field = fAODEvent->GetMagneticField();
+
+ //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - _field:" << _field << endl;
+
+ //_centralityMethod
+ switch (_centralityMethod)
+ {
+ case 0: centrality = _mult0; break;
+ case 1: centrality = _mult1; break;
+ case 2: centrality = _mult2; break;
+ case 3: centrality = _mult3; break;
+ case 4: centrality = _mult4; break;
+ case 5: centrality = _mult5; break;
+ case 6: centrality = _mult6; break;
+ }
+
+ //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - 10" << endl;
+
+ //filter on centrality
+ // require the v0 and trk centralities to agree within 5%.
+
+ //if ((Float_t(GetTPCMult(fAOD)) > (-40.3+1.22*GetGlobalMult(fAOD))) && (Float_t(GetTPCMult(fAOD)) < (32.1+1.59*GetGlobalMult(fAOD)))) {//3 sigma
+
+
+ if ( centrality < _centralityMin ||
+ centrality > _centralityMax ||
+ fabs(v0Centr-trkCentr)>5.0)
+ {
+ //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - 11" << endl;
+ // we dont analyze this event here...
+ return;
+ }
+ _eventAccounting->Fill(2);// count all events with right centrality
+ //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - 12" << endl;
+
+ // filter on z and xy vertex
+ vertex = (AliAODVertex*) fAODEvent->GetPrimaryVertexSPD();
+ if (!vertex || vertex->GetNContributors()<1)
+ {
+ vertexZ = -999;
+ vertexXY = -999;
+ cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - No valid vertex object or poor vertex" << endl;
+ }
+ else
+ {
+ vertexX = vertex->GetX();
+ vertexY = vertex->GetY();
+ vertexZ = vertex->GetZ();
+ vertexXY = sqrt(vertexX*vertexX+vertexY*vertexY);
+ }
+ if (!vertex ||
+ vertexZ < _vertexZMin ||
+ vertexZ > _vertexZMax ||
+ vertexXY < _vertexXYMin ||
+ vertexXY > _vertexXYMax)
+ return;
+
+ iVertex = int((vertexZ-_min_vertexZ)/_width_vertexZ);
+ iVertexP1 = iVertex*_nBins_etaPhiPt_1;
+ iVertexP2 = iVertex*_nBins_etaPhiPt_2;
+ if (iVertex<0 || iVertex>=_nBins_vertexZ)
+ {
+ AliError("AliAnalysisTaskDptDptQA::Exec(Option_t *option) iVertex<0 || iVertex>=_nBins_vertexZ ");
+ return;
+ }
+ _eventAccounting->Fill(3);// count all calls to this function with a valid pointer
+
+ // loop over all particles for singles
+ //debug() << "_nTracks:"<< _nTracks << endl;
+ for (int iTrack=0; iTrack< _nTracks; iTrack++)
+ {
+ //cout << "AliAnalysisTaskDptDptQA::UserExec(Option_t *option) - 16 iTrack:" << iTrack << endl;
- if ( centrality < _centralityMin || centrality > _centralityMax )
- {
- return;
- }
- _eventAccounting->Fill(2);// count all events with right centrality
+ AliAODTrack * t = (AliAODTrack *) fAODEvent->GetTrack(iTrack);
+ if (!t)
+ {
+ AliError(Form("AliAnalysisTaskDptDptQA::Exec(Option_t *option) No track ofr iTrack=%d", iTrack));
+ continue;
+ }
- // filter on z and xy vertex
- vertex = (AliAODVertex*) fAODEvent->GetPrimaryVertex();
- // Double_t V[2];
- //vertex->GetXYZ(V);
-
- if(vertex)
- {
- Double32_t fCov[6];
- vertex->GetCovarianceMatrix(fCov);
- if(vertex->GetNContributors() > 0)
- {
- if(fCov[5] != 0)
- {
- vertexX = vertex->GetX();
- vertexY = vertex->GetY();
- vertexZ = vertex->GetZ();
-
- if(TMath::Abs(vertexZ) > 10)
- {
- return;
- } // Z-Vertex Cut
- }
- }
- }
+ q = t->Charge();
+ charge = int(q);
+ phi = t->Phi();
+ p = t->P();
+ pt = t->Pt();
+ px = t->Px();
+ py = t->Py();
+ pz = t->Pz();
+ eta = t->Eta();
+ dedx = t->GetTPCsignal();
+ nClus = t->GetTPCNcls();
+ bitOK = t->TestFilterBit(_trackFilterBit);
- _vertexZ->Fill(vertexZ);
+ //cout << "_trackFilterBit:" << _trackFilterBit << " Track returns:" << bitOK << endl;
+ //cout << " q:" << q << " _requestedCharge_1:" << _requestedCharge_1 << endl;
+ //cout << " pt:" << pt << " _min_pt_1:" << _min_pt_1 << " _max_pt_1:" << _max_pt_1<< endl;
+ //cout << " phi:" << phi << endl;
+ //cout << " eta:" << eta << " _min_eta_1:" << _min_eta_1 << " _max_eta_1:" << _max_eta_1<< endl;
+ //cout << " dedx:" << dedx << " _dedxMin:" << _dedxMin << " _dedxMax:" << _dedxMax << endl;
+ //cout << "nclus:" << nClus<< " _nClusterMin:" << _nClusterMin << endl;
- iVertex = int((vertexZ-_min_vertexZ)/_width_vertexZ);
- iVertexP1 = iVertex*_nBins_etaPhiPt_1;
- iVertexP2 = iVertex*_nBins_etaPhiPt_2;
- if (iVertex<0 || iVertex>=_nBins_vertexZ)
- {
- AliError("AliAnalysisTaskDptDptQA::Exec(Option_t *option) iVertex<0 || iVertex>=_nBins_vertexZ ");
- return;
- }
- _eventAccounting->Fill(3);// count all calls to this function with a valid pointer
- //======================
+ //common cuts first
- //*********************************************************
- TExMap *trackMap = new TExMap();//Mapping matrix----
- //1st loop track
- for(Int_t i = 0; i < _nTracks; i++)
- {
- AliAODTrack* aodTrack = dynamic_cast<AliAODTrack *>(fAODEvent->GetTrack(i));
- if(!aodTrack) {
- AliError(Form("ERROR: Could not retrieve AODtrack %d",i));
- continue;
- }
- Int_t gID = aodTrack->GetID();
- if (aodTrack->TestFilterBit(1)) trackMap->Add(gID, i);//Global tracks
- }
-
- AliAODTrack* newAodTrack;
+ if (!bitOK || dedx<_dedxMin || dedx>_dedxMax || nClus<_nClusterMin) continue;
+ // Kinematics cuts used
+
+ if( pt < _min_pt_1 || pt > _max_pt_1) continue;
+ if( eta < _min_eta_1 || eta > _max_eta_1) continue;
+
+ _etadis->Fill(eta);
+ _phidis->Fill(phi);
- //Track Loop starts here
- for (int iTrack=0; iTrack< _nTracks; iTrack++)
- {
- AliAODTrack* t = dynamic_cast<AliAODTrack *>(fAODEvent->GetTrack(iTrack));
- if (!t) {
- AliError(Form("Could not receive track %d", iTrack));
- continue;
- }
+ //Particle 1
+ if (_requestedCharge_1 == charge)
+ {
+ iPhi = int( phi/_width_phi_1);
- bitOK = t->TestFilterBit(_trackFilterBit);
- if (!bitOK) continue; //128bit or 272bit
-
- Int_t gID = t->GetID();
- newAodTrack = gID >= 0 ?t : fAODEvent->GetTrack(trackMap->GetValue(-1-gID));
+ if (iPhi<0 || iPhi>=_nBins_phi_1 )
+ {
+ AliWarning("AliAnalysisTaskDptDptQA::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
+ return;
+ }
+
+ iEta = int((eta-_min_eta_1)/_width_eta_1);
+ if (iEta<0 || iEta>=_nBins_eta_1)
+ {
+ AliWarning(Form("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
+ continue;
+ }
+ iPt = int((pt -_min_pt_1 )/_width_pt_1 );
+ if (iPt<0 || iPt >=_nBins_pt_1)
+ {
+ AliWarning(Form("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) Mismatched iPt: %d",iPt));
+ continue;
+ }
+ iEtaPhi = iEta*_nBins_phi_1+iPhi;
+ iZEtaPhiPt = iVertexP1 + iEtaPhi*_nBins_pt_1 + iPt;
- q = t->Charge();
- charge = int(q);
- phi = t->Phi();
- pt = t->Pt();
- px = t->Px();
- py = t->Py();
- pz = t->Pz();
- eta = t->Eta();
- //dcaXY = t->DCA();
- //dcaZ = t->ZAtDCA();
-
- TVector3 mom(px, py, pz);
-
- //Double_t nsigmaelectron = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(newAodTrack,(AliPID::EParticleType)AliPID::kElectron));
- Double_t nsigmapion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(newAodTrack,(AliPID::EParticleType)AliPID::kPion));
- //Double_t nsigmakaon = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(newAodTrack,(AliPID::EParticleType)AliPID::kKaon));
- //Double_t nsigmaproton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(newAodTrack,(AliPID::EParticleType)AliPID::kProton));
+ if (_correctionWeight_1)
+ corr = _correctionWeight_1[iZEtaPhiPt];
+ else
+ corr = 1;
+ if (iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_1)
+ {
+ AliWarning("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_1");
+ continue;
+ }
+ //cout << "all good; process track:" << endl;
+
+ if (_singlesOnly)
+ {
+ //_betaVsP_1->Fill(p*q,_trackFilter_1->getBeta() );
+ //_dedxVsP_1->Fill(p*q,dedx);
+ //_corrDedxVsP_1->Fill(p*q,_trackFilter_1->getCorrectedDedx() );
+ __n1_1_vsPt[iPt] += corr; //cout << "step 15" << endl;
+ __n1_1_vsZEtaPhiPt[iZEtaPhiPt] += corr; //cout << "step 12" << endl;
+
+ }
+ else
+ {
+ corrPt = corr*pt;
+ _id_1[k1] = iTrack;
+ _charge_1[k1] = charge;
+ _iEtaPhi_1[k1] = iEtaPhi;
+ _iPt_1[k1] = iPt;
+ _pt_1[k1] = pt;
+ _px_1[k1] = px;
+ _py_1[k1] = py;
+ _pz_1[k1] = pz;
+ _correction_1[k1] = corr;
+ __n1_1 += corr;
+ __n1_1_vsEtaPhi[iEtaPhi] += corr;
+ __s1pt_1 += corrPt;
+ __s1pt_1_vsEtaPhi[iEtaPhi] += corrPt;
+ __n1Nw_1 += 1;
+ __s1ptNw_1 += pt;
+ ++k1;
+ if (k1>=arraySize)
+ {
+ AliError(Form("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) k1 >=arraySize; arraySize: %d",arraySize));
+ return;
+ }
+ }
+ }
+
+ if (!_sameFilter && _requestedCharge_2 == charge)
+ {
+ iPhi = int( phi/_width_phi_2);
+ if (iPhi<0 || iPhi>=_nBins_phi_2 )
+ {
+ AliWarning("AliAnalysisTaskDptDptQA::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
+ return;
+ }
- if(charge == 0) continue;
+ iEta = int((eta-_min_eta_2)/_width_eta_2);
+ if (iEta<0 || iEta>=_nBins_eta_2)
+ {
+ AliWarning(Form("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
+ continue;
+ }
+ iPt = int((pt -_min_pt_2 )/_width_pt_2 );
+ if (iPt<0 || iPt >=_nBins_pt_2)
+ {
+ AliWarning(Form("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) Mismatched iPt: %d",iPt));
+ continue;
+ }
- // Kinematics cuts used
- if( pt < _min_pt_1 || pt > _max_pt_1) continue;
- if( eta < _min_eta_1 || eta > _max_eta_1) continue;
-
- Double_t pos[3];
- newAodTrack->GetXYZ(pos);
-
- Double_t DCAX = pos[0] - vertexX;
- Double_t DCAY = pos[1] - vertexY;
- Double_t DCAZ = pos[2] - vertexZ;
-
- Double_t DCAXY = TMath::Sqrt((DCAX*DCAX) + (DCAY*DCAY));
+ iEtaPhi = iEta*_nBins_phi_2+iPhi;
+ iZEtaPhiPt = iVertexP2 + iEtaPhi*_nBins_pt_2 + iPt;
+ if (iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_2)
+ {
+ AliWarning("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_2");
+ continue;
+ }
- if (DCAZ < _dcaZMin ||
- DCAZ > _dcaZMax ||
- DCAXY > _dcaXYMax ) continue;
+ //cout << " iEtaPhi:" << iEtaPhi << " _nBins_etaPhi_1: "<< _nBins_etaPhi_1<< " _nBins_etaPhi_2: "<< _nBins_etaPhi_2<< endl;
+ //if (_useEbyECorrections) corr = (charge>0) ? _correction_2p[iEtaPhi] : _correction_2m[iEtaPhi]; else
+ //cout << "_correctionWeight_2:" << _correctionWeight_2 << endl;
+ if (_correctionWeight_2)
+ corr = _correctionWeight_2[iZEtaPhiPt];
+ else
+ corr = 1;
+ //dpt = pt - (charge>0) ? _avgPt_vsEtaPhi_2p[iEtaPhi] : _avgPt_vsEtaPhi_2m[iEtaPhi];
- //==== QA ===========================
- _dcaz->Fill(DCAZ);
- _dcaxy->Fill(DCAXY);
- _etadis->Fill(eta);
- _phidis->Fill(phi);
- _spectra->Fill(pt);
- //===================================
-
- if(TMath::Abs(nsigmapion) < fNSigmaCut && charge == -1) {
- Kaon1Charge[nKaon1s] = q;
- Kaon1Px[nKaon1s] = mom.X();
- Kaon1Py[nKaon1s] = mom.Y();
- Kaon1Pz[nKaon1s] = mom.Z();
- nKaon1s++;
-
- }
- if(TMath::Abs(nsigmapion) < fNSigmaCut && charge == 1) {
- Kaon2Charge[nKaon2s] = q;
- Kaon2Px[nKaon1s] = mom.X();
- Kaon2Py[nKaon1s] = mom.Y();
- Kaon2Pz[nKaon1s] = mom.Z();
- nKaon2s++;
-
- }
-
- TLorentzVector pion1(0,0,0,0);
- TLorentzVector pion2(0,0,0,0);
- TLorentzVector Kaon(0,0,0,0);
-
- for(int i=0; i<nKaon1s; i++)
+ if (_singlesOnly)
{
- pion1.SetXYZM(Kaon1Px[i],Kaon1Py[i],Kaon1Pz[i],0.139570);
- for(int j=0; j<nKaon2s; j++)
+ //_dedxVsP_2->Fill(p*q,dedx);
+ __n1_2_vsPt[iPt] += corr; //cout << "step 15" << endl;
+ __n1_2_vsZEtaPhiPt[iZEtaPhiPt] += corr; //cout << "step 12" << endl;
+ }
+ else
+ {
+ corrPt = corr*pt;
+ _id_2[k2] = iTrack; //cout << "step 1" << endl;
+ _charge_2[k2] = charge; //cout << "step 2" << endl;
+ _iEtaPhi_2[k2] = iEtaPhi; //cout << "step 3" << endl;
+ _iPt_2[k2] = iPt; //cout << "step 4" << endl;
+ _pt_2[k2] = pt; //cout << "step 5" << endl;
+ _px_2[k2] = px; //cout << "step 6" << endl;
+ _py_2[k2] = py; //cout << "step 7" << endl;
+ _pz_2[k2] = pz; //cout << "step 8" << endl;
+ _correction_2[k2] = corr; //cout << "step 9" << endl;
+ __n1_2 += corr; //cout << "step 10" << endl;
+ __s1pt_2 += corrPt; //cout << "step 13" << endl;
+ __n1Nw_2 += 1;
+ __n1_2_vsEtaPhi[iEtaPhi] += corr; //cout << "step 11" << endl;
+ __s1pt_2_vsEtaPhi[iEtaPhi] += corrPt; //cout << "step 14" << endl;
+ __s1ptNw_2 += pt;
+ ++k2;
+ if (k2>=arraySize)
{
- pion2.SetXYZM(Kaon2Px[j],Kaon2Py[j],Kaon2Pz[j],0.139570);
- Kaon = pion1 + pion2;
- float rapidity = Kaon.Rapidity();
- float pairpt = Kaon.Pt();
- if( rapidity < -0.50 || rapidity > 0.50 ) continue;
- _invMass->Fill(pairpt, Kaon.M());
+ AliWarning(Form("-W- k2 >=arraySize; arraySize: %d",arraySize));
+ return;
}
}
+
+ //cout << "done with track" << endl;
+ } //iTrack
+ } //aod
+ }
+
+
+ //cout << "Filling histograms now" << endl;
+ _m0->Fill(_mult0);
+ _m1->Fill(_mult1);
+ _m2->Fill(_mult2);
+ _m3->Fill(_mult3);
+ _m4->Fill(_mult4);
+ _m5->Fill(_mult5);
+ _m6->Fill(_mult6);
+ _vertexZ->Fill(vertexZ);
+
+ if (_singlesOnly)
+ {
+ // nothing to do here.
+ }
+ else
+ {
+ if (_sameFilter)
+ {
+ _n1_1_vsM->Fill(centrality, __n1_1);
+ _s1pt_1_vsM->Fill(centrality, __s1pt_1);
+ _n1Nw_1_vsM->Fill(centrality, __n1Nw_1);
+ _s1ptNw_1_vsM->Fill(centrality, __s1ptNw_1);
+ _n1_2_vsM->Fill(centrality, __n1_1);
+ _s1pt_2_vsM->Fill(centrality, __s1pt_1);
+ _n1Nw_2_vsM->Fill(centrality, __n1Nw_1);
+ _s1ptNw_2_vsM->Fill(centrality, __s1ptNw_1);
+ // reset pair counters
+ __n2_12 = __s2ptpt_12 = __s2NPt_12 = __s2PtN_12 = 0;
+ __n2Nw_12 = __s2ptptNw_12 = __s2NPtNw_12 = __s2PtNNw_12 = 0;
+ if (_field>0)
+ {
+ for (int i1=0; i1<k1; i1++)
+ {
+ ////cout << " i1:" << i1 << endl;
+ id_1 = _id_1[i1]; ////cout << " id_1:" << id_1 << endl;
+ q_1 = _charge_1[i1]; ////cout << " q_1:" << q_1 << endl;
+ iEtaPhi_1 = _iEtaPhi_1[i1]; ////cout << " iEtaPhi_1:" << iEtaPhi_1 << endl;
+ iPt_1 = _iPt_1[i1]; ////cout << " iPt_1:" << iPt_1 << endl;
+ corr_1 = _correction_1[i1]; ////cout << " corr_1:" << corr_1 << endl;
+ pt_1 = _pt_1[i1]; ////cout << " pt_1:" << pt_1 << endl;
+ dedx_1 = _dedx_1[i1]; ////cout << " dedx_1:" << dedx_1 << endl;
+ //1 and 2
+ for (int i2=i1+1; i2<k1; i2++)
+ {
+ ////cout << " i2:" << i2 << endl;
+ id_2 = _id_1[i2]; ////cout << " id_2:" << id_2 << endl;
+ if (id_1!=id_2)
+ {
+ q_2 = _charge_1[i2]; ////cout << " q_1:" << q_1 << endl;
+ iEtaPhi_2 = _iEtaPhi_1[i2]; ////cout << " iEtaPhi_1:" << iEtaPhi_1 << endl;
+ iPt_2 = _iPt_1[i2]; ////cout << " iPt_1:" << iPt_1 << endl;
+ corr_2 = _correction_1[i2]; ////cout << " corr_1:" << corr_1 << endl;
+ pt_2 = _pt_1[i2]; ////cout << " pt_1:" << pt_1 << endl;
+ dedx_2 = _dedx_1[i2]; ////cout << " dedx_2:" << dedx_2 << endl;
+ corr = corr_1*corr_2;
+ if (q_2>q_1 || (q_1>0 && q_2>0 && pt_2<=pt_1) || (q_1<0 && q_2<0 && pt_2>=pt_1))
+ {
+ ij = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2; ////cout << " ij:" << ij<< endl;
+ }
+ else // swap particles
+ {
+ ij = iEtaPhi_2*_nBins_etaPhi_1 + iEtaPhi_1; ////cout << " ij:" << ij<< endl;
+ }
+
+ __n2_12 += corr;
+ __n2_12_vsEtaPhi[ij] += corr;
+ ptpt = pt_1*pt_2;
+ __s2ptpt_12 += corr*ptpt;
+ __s2PtN_12 += corr*pt_1;
+ __s2NPt_12 += corr*pt_2;
+ __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
+ __s2PtN_12_vsEtaPhi[ij] += corr*pt_1;
+ __s2NPt_12_vsEtaPhi[ij] += corr*pt_2;
+ __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;
+
+ __n2Nw_12 += 1;
+ __s2ptptNw_12 += ptpt;
+ __s2PtNNw_12 += pt_1;
+ __s2NPtNw_12 += pt_2;
+
+ }
+ } //i2
+ } //i1
+ }
+ else // field<0
+ {
+ for (int i1=0; i1<k1; i1++)
+ {
+ ////cout << " i1:" << i1 << endl;
+ id_1 = _id_1[i1]; ////cout << " id_1:" << id_1 << endl;
+ q_1 = _charge_1[i1]; ////cout << " q_1:" << q_1 << endl;
+ iEtaPhi_1 = _iEtaPhi_1[i1]; ////cout << " iEtaPhi_1:" << iEtaPhi_1 << endl;
+ iPt_1 = _iPt_1[i1]; ////cout << " iPt_1:" << iPt_1 << endl;
+ corr_1 = _correction_1[i1]; ////cout << " corr_1:" << corr_1 << endl;
+ pt_1 = _pt_1[i1]; ////cout << " pt_1:" << pt_1 << endl;
+ dedx_1 = _dedx_1[i1]; ////cout << " dedx_1:" << dedx_1 << endl;
+ //1 and 2
+ for (int i2=i1+1; i2<k1; i2++)
+ {
+ ////cout << " i2:" << i2 << endl;
+ id_2 = _id_1[i2]; ////cout << " id_2:" << id_2 << endl;
+ if (id_1!=id_2)
+ {
+ q_2 = _charge_1[i2]; ////cout << " q_2:" << q_2 << endl;
+ iEtaPhi_2 = _iEtaPhi_1[i2]; ////cout << " iEtaPhi_2:" << iEtaPhi_2 << endl;
+ iPt_2 = _iPt_1[i2]; ////cout << " iPt_2:" << iPt_2 << endl;
+ corr_2 = _correction_1[i2]; ////cout << " corr_2:" << corr_2 << endl;
+ pt_2 = _pt_1[i2]; ////cout << " pt_2:" << pt_2 << endl;
+ dedx_2 = _dedx_1[i2]; ////cout << " dedx_2:" << dedx_2 << endl;
+ corr = corr_1*corr_2;
+ if ( q_2<q_1 || (q_1>0 && q_2>0 && pt_2>=pt_1) || (q_1<0 && q_2<0 && pt_2<=pt_1))
+ {
+ ij = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2; ////cout << " ij:" << ij<< endl;
+ }
+ else // swap particles
+ {
+ ij = iEtaPhi_2*_nBins_etaPhi_1 + iEtaPhi_1; ////cout << " ij:" << ij<< endl;
+ }
+
+ __n2_12 += corr;
+ __n2_12_vsEtaPhi[ij] += corr;
+ ptpt = pt_1*pt_2;
+ __s2ptpt_12 += corr*ptpt;
+ __s2PtN_12 += corr*pt_1;
+ __s2NPt_12 += corr*pt_2;
+ __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
+ __s2PtN_12_vsEtaPhi[ij] += corr*pt_1;
+ __s2NPt_12_vsEtaPhi[ij] += corr*pt_2;
+ __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;
+
+ __n2Nw_12 += 1;
+ __s2ptptNw_12 += ptpt;
+ __s2PtNNw_12 += pt_1;
+ __s2NPtNw_12 += pt_2;
+
+ }
+ } //i2
+ } //i1
+ }
+ }
+ else // filter 1 and 2 are different -- must do all particle pairs...
+ {
+ _n1_1_vsM->Fill(centrality, __n1_1);
+ _s1pt_1_vsM->Fill(centrality, __s1pt_1);
+ _n1Nw_1_vsM->Fill(centrality, __n1Nw_1);
+ _s1ptNw_1_vsM->Fill(centrality, __s1ptNw_1);
+ _n1_2_vsM->Fill(centrality, __n1_2);
+ _s1pt_2_vsM->Fill(centrality, __s1pt_2);
+ _n1Nw_2_vsM->Fill(centrality, __n1Nw_2);
+ _s1ptNw_2_vsM->Fill(centrality, __s1ptNw_2);
+ // reset pair counters
+ __n2_12 = __s2ptpt_12 = __s2NPt_12 = __s2PtN_12 = 0;
+ __n2Nw_12 = __s2ptptNw_12 = __s2NPtNw_12 = __s2PtNNw_12 = 0;
+ for (int i1=0; i1<k1; i1++)
+ {
+ ////cout << " i1:" << i1 << endl;
+ id_1 = _id_1[i1]; ////cout << " id_1:" << id_1 << endl;
+ q_1 = _charge_1[i1]; ////cout << " q_1:" << q_1 << endl;
+ iEtaPhi_1 = _iEtaPhi_1[i1]; ////cout << " iEtaPhi_1:" << iEtaPhi_1 << endl;
+ iPt_1 = _iPt_1[i1]; ////cout << " iPt_1:" << iPt_1 << endl;
+ corr_1 = _correction_1[i1]; ////cout << " corr_1:" << corr_1 << endl;
+ pt_1 = _pt_1[i1]; ////cout << " pt_1:" << pt_1 << endl;
+ px_1 = _px_1[i1]; ////cout << " px_1:" << px_1 << endl;
+ py_1 = _py_1[i1]; ////cout << " py_1:" << py_1 << endl;
+ pz_1 = _pz_1[i1]; ////cout << " pz_1:" << pz_1 << endl;
+ dedx_1 = _dedx_1[i1]; ////cout << " dedx_1:" << dedx_1 << endl;
+
+ //1 and 2
+ for (int i2=0; i2<k2; i2++)
+ {
+ ////cout << " i2:" << i2 << endl;
+ id_2 = _id_2[i2]; ////cout << " id_2:" << id_2 << endl;
+ if (id_1!=id_2) // exclude auto correlation
+ {
+ q_2 = _charge_2[i2]; ////cout << " q_2:" << q_2 << endl;
+ iEtaPhi_2 = _iEtaPhi_2[i2]; ////cout << " iEtaPhi_2:" << iEtaPhi_2 << endl;
+ iPt_2 = _iPt_2[i2]; ////cout << " iPt_2:" << iPt_2 << endl;
+ corr_2 = _correction_2[i2]; ////cout << " corr_2:" << corr_2 << endl;
+ pt_2 = _pt_2[i2]; ////cout << " pt_2:" << pt_2 << endl;
+ px_2 = _px_2[i2]; ////cout << " px_2:" << px_2 << endl;
+ py_2 = _py_2[i2]; ////cout << " py_2:" << py_2 << endl;
+ pz_2 = _pz_2[i2]; ////cout << " pz_2:" << pz_2 << endl;
+ dedx_2 = _dedx_2[i2]; ////cout << " dedx_2:" << dedx_2 << endl;
+ if (_rejectPairConversion)
+ {
+ float e1Sq = massElecSq + pt_1*pt_1 + pz_1*pz_1;
+ float e2Sq = massElecSq + pt_2*pt_2 + pz_2*pz_2;
+ float mInvSq = 2*(massElecSq + sqrt(e1Sq*e2Sq) - px_1*px_2 - py_1*py_2 - pz_1*pz_2 );
+ float mInv = sqrt(mInvSq);
+ _invMass->Fill(mInv);
+ if (mInv<0.5)
+ {
+ if (dedx_1>75. && dedx_2>75.)
+ {
+ _invMassElec->Fill(mInv);
+ if (mInv<0.05) continue;
+ }
+ }
+ }
+ corr = corr_1*corr_2;
+ ij = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2; ////cout << " ij:" << ij<< endl;
+ __n2_12 += corr;
+ __n2_12_vsEtaPhi[ij] += corr;
+ ptpt = pt_1*pt_2;
+ __s2ptpt_12 += corr*ptpt;
+ __s2PtN_12 += corr*pt_1;
+ __s2NPt_12 += corr*pt_2;
+ __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
+ __s2PtN_12_vsEtaPhi[ij] += corr*pt_1;
+ __s2NPt_12_vsEtaPhi[ij] += corr*pt_2;
+ __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;
+ __n2Nw_12 += 1;
+ __s2ptptNw_12 += ptpt;
+ __s2PtNNw_12 += pt_1;
+ __s2NPtNw_12 += pt_2;
+
+ }
+ } //i2
+ } //i1
+ }
+
+ _n2_12_vsM->Fill(centrality, __n2_12);
+ _s2PtPt_12_vsM->Fill(centrality, __s2ptpt_12);
+ _s2PtN_12_vsM->Fill(centrality, __s2NPt_12);
+ _s2NPt_12_vsM->Fill(centrality, __s2PtN_12);
+
+ _n2Nw_12_vsM->Fill(centrality, __n2Nw_12);
+ _s2PtPtNw_12_vsM->Fill(centrality, __s2ptptNw_12);
+ _s2PtNNw_12_vsM->Fill(centrality, __s2NPtNw_12);
+ _s2NPtNw_12_vsM->Fill(centrality, __s2PtNNw_12);
+
+ }
+
+
+ cout << "AliAnalysisTaskDptDptQA::UserExec() -----------------Event Done " << endl;
+ PostData(0,_outputHistoList);
- } //iTrack
- } //aod
}
void AliAnalysisTaskDptDptQA::FinishTaskOutput()
{
- AliInfo("AliAnalysisTaskDptDptQA::FinishTaskOutput() Starting.");
- Printf("= 0 ====================================================================");
+ cout << "AliAnalysisTaskDptDptQA::FinishTaskOutput() Starting." << endl;
+ cout << "= 0 ====================================================================" << endl;
finalizeHistograms();
- AliInfo("= 1 ====================================================================");
+ cout << "= 1 ====================================================================" << endl;
PostData(0,_outputHistoList);
- AliInfo("= 2 ====================================================================");
- AliInfo("AliAnalysisTaskDptDptQA::FinishTaskOutput() Done.");
+ cout << "= 2 ====================================================================" << endl;
+ cout << "AliAnalysisTaskDptDptQA::FinishTaskOutput() Done." << endl;
}
void AliAnalysisTaskDptDptQA::Terminate(Option_t* /*option*/)
{
- AliInfo("AliAnalysisTaskDptDptQA::Terminate() Starting/Done.");
+ cout << "AliAnalysisTaskDptDptQA::Terminate() Starting/Done." << endl;
}
_outputHistoList->Add(h);
}
else
- AliInfo("addToList(TH1 *h) _outputHistoList is null!!!!! Should abort ship");
+ cout << "addToList(TH1 *h) _outputHistoList is null!!!!! Shoudl abort ship" << endl;
}
#include "TString.h"
#include "AliLog.h"
-#include "AliPID.h"
-#include "AliPIDResponse.h"
-
class AliAODEvent;
class AliESDEvent;
class AliInputEventHandler;
+//class AliMCEvent;
+//class AliMCEventHandler;
class TH1;
class TH2;
class TH2;
class TH3D;
class TProfile;
-
-
class AliAnalysisTaskDptDptQA : public AliAnalysisTaskSE
{
public:
void fillHistoWithArray(TH1 * h, float * array, int size);
void fillHistoWithArray(TH2 * h, float * array, int size1, int size2);
void fillHistoWithArray(TH3 * h, float * array, int size1, int size2, int size3);
-
-
-
virtual void SetDebugLevel( int v ) { _debugLevel = v; }
virtual void SetSinglesOnly(int v) { _singlesOnly = v; }
virtual void SetDcaZMin(double v) { _dcaZMin = v; }
virtual void SetDcaZMax(double v) { _dcaZMax = v; }
virtual void SetDcaXYMin(double v) { _dcaXYMin = v; }
- virtual void SetDcaXYMax(double v) { _dcaXYMax = v; }
- virtual void SetTPCNclus(int v) { _tpcnclus = v; }
- virtual void SetChi2PerNDF(double v) { _chi2ndf = v; }
-
+ virtual void SetDcaXYMax(double v) { _dcaXYMax = v; }
virtual void SetDedxMin(double v) { _dedxMin = v; }
virtual void SetDedxMax(double v) { _dedxMax = v; }
virtual void SetNClusterMin(int v) { _nClusterMin = v; }
virtual void SetWeigth_1(TH3F * v) { _weight_1 = v; }
virtual void SetWeigth_2(TH3F * v) { _weight_2 = v; }
- void SetNSigmaCut(Double_t nsigma){ fNSigmaCut = nsigma;}
protected:
AliESDEvent* fESDEvent; //! ESD Event
AliInputEventHandler* fInputHandler; //! Generic InputEventHandler
- AliPIDResponse* fPIDResponse;
-
// Histogram settings
//TList* _inputHistoList;
TList* _outputHistoList;
double _dedxMax;
int _nClusterMin;
int _trackFilterBit;
- Double_t fNSigmaCut;
-
- int _tpcnclus;
- double _chi2ndf;
-
- //double _min_eta_1;
- //double _max_eta_1;
- //double _min_eta_2;
- //double _max_eta_2;
-
+
// event and track wise variables
double _mult2;
double _mult3;
double _mult4;
- double _mult4a;
double _mult5;
double _mult6;
TH1D * _m5;
TH1D * _m6;
TH1D * _vertexZ;
-
- TH1F * _Ncluster1;
- TH1F * _Ncluster2;
TH1F * _etadis;
TH1F * _phidis;
TH1F * _dcaz;
- TH1F * _dcaxy;
- TH1F * _spectra;
-
-
+ TH1F * _dcaxy;
// PARTICLE 1 (satisfies filter 1)
// Primary filled quantities
TProfile * _s1pt_1_vsM;
TProfile * _n1Nw_1_vsM; // w/o weight
TProfile * _s1ptNw_1_vsM;
- TH2D * _dedxVsP_1;
- TH2D * _corrDedxVsP_1;
+ TH2F * _dedxVsP_1;
+ TH2F * _corrDedxVsP_1;
TH2F * _betaVsP_1;
// PARTICLE 2 (satisfies filter 2)
TProfile * _s1pt_2_vsM;
TProfile * _n1Nw_2_vsM; // w/o weight
TProfile * _s1ptNw_2_vsM;
- TH2D * _dedxVsP_2;
- TH2D * _corrDedxVsP_2;
+ TH2F * _dedxVsP_2;
+ TH2F * _corrDedxVsP_2;
TH2F * _betaVsP_2;
// Pairs 1 & 2
TProfile * _s2PtNNw_12_vsM;
TProfile * _s2NPtNw_12_vsM;
- TH2F * _invMass;
-
+ TH1F * _invMass;
+ TH1F * _invMassElec;
+
TString n1Name;
TString n1NwName;
TString n2Name;
fListOfHistos->Add(fHistos);
fListOfHistos->Add(new TH1F("eventStat", ";;events", 4, -0.5, 3.5));
+ fListOfHistos->Add(new TH2F("mixedDist", ";centrality;tracks;events", 101, 0, 101, 200, 0, fMixingTracks * 1.5));
PostData(1,fListOfHistos);
if (!pool)
AliFatal(Form("No pool found for centrality = %f, zVtx = %f", centrality, zVtx));
if (pool->IsReady()){
+ ((TH2F*) fListOfHistos->FindObject("mixedDist"))->Fill(centrality, pool->NTracksInPool());
Int_t nMix = pool->GetCurrentNEvents();
((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(2);
name = "Eta"; _etadis = createHisto1F(name,name, 200, -1.0, 1.0, "#eta","counts");
name = "Phi"; _phidis = createHisto1F(name,name, 360, 0.0, 6.4, "#phi","counts");
- name = "DCAz"; _dcaz = createHisto1F(name,name, 500, -5.0, 5.0, "dcaZ","counts");
- name = "DCAxy"; _dcaxy = createHisto1F(name,name, 500, -5.0, 5.0, "dcaXY","counts");
-
- /*name = "dedxVsP_1"; _dedxVsP_1 = createHisto2D(name,name,1000,-10.,10.,1000,0.,1000.,"p (GeV/c)", "dedx", "counts");
- name = "dedxVsP_2"; _dedxVsP_2 = createHisto2D(name,name,1000,-10.,10.,1000,0.,1000.,"p (GeV/c)", "dedx", "counts");
- name = "corrDedxVsP_1"; _corrDedxVsP_1 = createHisto2D(name,name,1000,-10.,10.,1000,0.,500,"p (GeV/c)", "dedx", "counts");
- name = "corrDedxVsP_2"; _corrDedxVsP_2 = createHisto2D(name,name,1000,-10.,10.,1000,0.,500,"p (GeV/c)", "dedx", "counts");
- */
- name = "Nclus1"; _Ncluster1 = createHisto1F(name,name, 200, 0, 200, "Ncluster1","counts");
- name = "Nclus2"; _Ncluster2 = createHisto1F(name,name, 200, 0, 200, "Ncluster2","counts");
+ name = "DCAz"; _dcaz = createHisto1F(name,name, 340, -3.3, 3.3, "dcaZ","counts");
+ name = "DCAxy"; _dcaxy = createHisto1F(name,name, 100, -0.1, 2.5, "dcaXY","counts");
+
+ //name = "Nclus1"; _Ncluster1 = createHisto1F(name,name, 200, 0, 200, "Ncluster1","counts");
+ //name = "Nclus2"; _Ncluster2 = createHisto1F(name,name, 200, 0, 200, "Ncluster2","counts");
if (_singlesOnly)
{
AliError("ERROR: Could not retrieve MC event");
}
+ TExMap *trackMap = new TExMap();//Mapping matrix----
+ //1st loop track for Global tracks
+ for(Int_t i = 0; i < fAODEvent->GetNumberOfTracks(); i++)
+ {
+ AliAODTrack* aodTrack = dynamic_cast<AliAODTrack *>(fAODEvent->GetTrack(i));
+ if(!aodTrack) {
+ AliError(Form("ERROR: Could not retrieve AODtrack %d",i));
+ continue;
+ }
+ Int_t gID = aodTrack->GetID();
+ if (aodTrack->TestFilterBit(1)) trackMap->Add(gID, i);//Global tracks
+ }
+
+ AliAODTrack* newAodTrack;
+
for (int iTrack=0; iTrack< fAODEvent->GetNumberOfTracks(); iTrack++)
{
-
+
AliAODTrack *t = dynamic_cast<AliAODTrack *>(fAODEvent->GetTrack(iTrack));
-
+
if(!t) {
AliError(Form("ERROR: Could not retrieve AODtrack %d",iTrack));
continue;
}
-
+
bitOK = t->TestFilterBit(_trackFilterBit);
if (!bitOK) continue;
-
+
q = t->Charge();
charge = int(q);
phi = t->Phi();
py = t->Py();
pz = t->Pz();
eta = t->Eta();
+ //Float_t dcaXY = t->DCA();
+ //Float_t dcaZ = t->ZAtDCA();
- Double_t nsigmaelectron = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(t,(AliPID::EParticleType)AliPID::kElectron));
- Double_t nsigmapion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(t,(AliPID::EParticleType)AliPID::kPion));
- Double_t nsigmakaon = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(t,(AliPID::EParticleType)AliPID::kKaon));
- Double_t nsigmaproton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(t,(AliPID::EParticleType)AliPID::kProton));
+ // get the electron nsigma
+ Double_t nSigma = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(t,(AliPID::EParticleType)AliPID::kElectron));
+ Double_t nSigmaPions = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(t,(AliPID::EParticleType)AliPID::kPion));
+ Double_t nSigmaKaons = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(t,(AliPID::EParticleType)AliPID::kKaon));
+ Double_t nSigmaProtons = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(t,(AliPID::EParticleType)AliPID::kProton));
- if(nsigmaelectron < fNSigmaCut &&
- nsigmapion > fNSigmaCut &&
- nsigmakaon > fNSigmaCut &&
- nsigmaproton > fNSigmaCut ) continue;
-
- Float_t dcaXY = t->DCA();
- Float_t dcaZ = t->ZAtDCA();
+ //Make the decision based on the n-sigma of electrons exclusively
+ if(nSigma < fNSigmaCut
+ && nSigmaPions > fNSigmaCut
+ && nSigmaKaons > fNSigmaCut
+ && nSigmaProtons > fNSigmaCut ) continue;
- // Kinematics cuts
- if( pt < 0.2 || pt > 2.0) continue;
- if( eta < -0.8 || eta > 0.8) continue;
+ Int_t gID = t->GetID();
+ newAodTrack = gID >= 0 ?t : fAODEvent->GetTrack(trackMap->GetValue(-1-gID));
+
+ // Kinematics cuts
+ if( pt < 0.2 || pt > 2.0) continue;
+ if( eta < _min_eta_1 || eta > _max_eta_1) continue;
+
+ Double_t pos[3];
+ newAodTrack->GetXYZ(pos);
+
+ Double_t DCAX = pos[0] - vertexX;
+ Double_t DCAY = pos[1] - vertexY;
+ Double_t DCAZ = pos[2] - vertexZ;
+
+ Double_t DCAXY = TMath::Sqrt((DCAX*DCAX) + (DCAY*DCAY));
+
+ if (DCAZ < _dcaZMin ||
+ DCAZ > _dcaZMax ||
+ DCAXY > _dcaXYMax ) continue;
+
+ //==== QA ===========================
+ _dcaz->Fill(DCAZ);
+ _dcaxy->Fill(DCAXY);
+ _etadis->Fill(eta);
+ _phidis->Fill(phi);
+ //===================================
- Int_t label = TMath::Abs(t->GetLabel());
- AliAODMCParticle *AODmcTrack = (AliAODMCParticle*) fArrayMC->At(label);
-
//W/Wo Secondaries
//if (!AODmcTrack->IsPhysicalPrimary()) continue;
-
- if(fExcludeResonancesInMC)
- {
- //cout<<"***************Prabhat on Weak Decay Particles ************"<<endl;
- Int_t gMotherIndex = AODmcTrack->GetMother();
- if(gMotherIndex != -1) {
- AliAODMCParticle* motherTrack = dynamic_cast<AliAODMCParticle *>(mcEvent->GetTrack(gMotherIndex));
- if(motherTrack) {
- Int_t pdgCodeOfMother = motherTrack->GetPdgCode();
-
- if(pdgCodeOfMother == 311 ||
- pdgCodeOfMother == -311 ||
- pdgCodeOfMother == 310 ||
- pdgCodeOfMother == 3122 ||
- pdgCodeOfMother == -3122 ||
- pdgCodeOfMother == 111 ||
- pdgCodeOfMother == 22 ) continue;
- }
- }
- }
-
- if (AODmcTrack)
- {
- if(TMath::Abs(AODmcTrack->GetPdgCode()) == 11) continue;
- }
-
- _etadis->Fill(eta);
- _phidis->Fill(phi);
- _dcaz->Fill(dcaZ);
- _dcaxy->Fill(dcaXY);
-
+ //cout<<"***************Prabhat on Weak Decay Particles ************"<<endl;
+ if(fExcludeResonancesInMC)
+ {
+ Int_t label = TMath::Abs(t->GetLabel());
+ AliAODMCParticle *AODmcTrack = (AliAODMCParticle*) fArrayMC->At(label);
+
+ Int_t gMotherIndex = AODmcTrack->GetMother();
+ if(gMotherIndex != -1) {
+ AliAODMCParticle* motherTrack = dynamic_cast<AliAODMCParticle *>(mcEvent->GetTrack(gMotherIndex));
+ if(motherTrack) {
+ Int_t pdgCodeOfMother = motherTrack->GetPdgCode();
+
+ if(pdgCodeOfMother == 311 ||
+ pdgCodeOfMother == -311 ||
+ pdgCodeOfMother == 310 ||
+ pdgCodeOfMother == 3122 ||
+ pdgCodeOfMother == -3122 ||
+ pdgCodeOfMother == 111 ||
+ pdgCodeOfMother == 22 ) continue;
+ }
+ }
+ }
+
+ Int_t label = TMath::Abs(t->GetLabel());
+ AliAODMCParticle *AODmcTrack = (AliAODMCParticle*) fArrayMC->At(label);
+ if (AODmcTrack)
+ {
+ if(TMath::Abs(AODmcTrack->GetPdgCode()) == 11) continue;
+ }
+
//Particle 1
if (t->Charge() > 0)
{
-
+
iPhi = int( phi/_width_phi_1);
if (iPhi<0 || iPhi>=_nBins_phi_1 )
if(nclus<80) return 0;
//select primary:
-if(!track->GetType()==AliAODTrack :: kPrimary) return 0;
+if(track->GetType() != AliAODTrack::kPrimary) return 0;
return 1;
}
* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
+//Source code::dphicorrelations, TaskBFpsi, AliHelperPID
#include "AliTwoParticlePIDCorr.h"
#include "AliVParticle.h"
#include "AliESDpid.h"
#include "AliAODpidUtil.h"
#include <AliPIDResponse.h>
+#include "AliPIDCombined.h"
#include <AliAnalysisManager.h>
#include <AliInputEventHandler.h>
#include "AliGenCocktailEventHeader.h"
#include "AliGenEventHeader.h"
+#include "AliCollisionGeometry.h"
#include "AliEventPoolManager.h"
#include "AliAnalysisUtils.h"
fOutputList(0),
fCentralityMethod("V0A"),
fSampleType("pPb"),
+ fRequestEventPlane(kFALSE),
fnTracksVertex(1), // QA tracks pointing to principal vertex (= 3 default)
trkVtx(0),
zvtx(0),
fTrackStatus(0),
fSharedClusterCut(-1),
fVertextype(1),
+ skipParticlesAbove(0),
fzvtxcut(10.0),
ffilltrigassoUNID(kFALSE),
ffilltrigUNIDassoID(kFALSE),
fWeightPerEvent(kFALSE),
fTriggerSpeciesSelection(kFALSE),
fAssociatedSpeciesSelection(kFALSE),
+ fRandomizeReactionPlane(kFALSE),
fTriggerSpecies(SpPion),
fAssociatedSpecies(SpPion),
fCustomBinning(""),
SetChargeAxis(0),
frejectPileUp(kFALSE),
fminPt(0.2),
- fmaxPt(10.0),
+ fmaxPt(20.0),
fmineta(-0.8),
fmaxeta(0.8),
- fminprotonsigmacut(-6.0),
- fmaxprotonsigmacut(-3.0),
- fminpionsigmacut(0.0),
- fmaxpionsigmacut(4.0),
fselectprimaryTruth(kTRUE),
fonlyprimarydatareco(kFALSE),
fdcacut(kFALSE),
fminPtComboeff(2.0),
fmaxPtComboeff(4.0),
fminPtAsso(0),
- fmaxPtAsso(0),
+ fmaxPtAsso(0),
+ fmincentmult(0),
+ fmaxcentmult(0),
fhistcentrality(0),
fEventCounter(0),
fEtaSpectrasso(0),
fEventnomeson(0),
fhistJetTrigestimate(0),
fCentralityCorrelation(0x0),
+ fHistVZEROAGainEqualizationMap(0),
+ fHistVZEROCGainEqualizationMap(0),
+ fHistVZEROChannelGainEqualizationMap(0),
+fCentralityWeights(0),
+ fHistCentStats(0x0),
+ fHistRefmult(0x0),
+ fHistEQVZEROvsTPCmultiplicity(0x0),
+ fHistEQVZEROAvsTPCmultiplicity(0x0),
+ fHistEQVZEROCvsTPCmultiplicity(0x0),
+ fHistVZEROCvsEQVZEROCmultiplicity(0x0),
+ fHistVZEROAvsEQVZEROAmultiplicity(0x0),
+ fHistVZEROCvsVZEROAmultiplicity(0x0),
+ fHistEQVZEROCvsEQVZEROAmultiplicity(0x0),
+ fHistVZEROSignal(0x0),
+fHistEventPlaneReco(0x0),
+fHistEventPlaneTruth(0x0),
+fHistPsiMinusPhi(0x0),
fControlConvResoncances(0),
fHistoTPCdEdx(0x0),
fHistoTOFbeta(0x0),
ftwoTrackEfficiencyCutDataReco(kTRUE),
twoTrackEfficiencyCutValue(0.02),
fPID(NULL),
+ fPIDCombined(NULL),
eventno(0),
fPtTOFPIDmin(0.5),
fPtTOFPIDmax(4.0),
fPIDType(NSigmaTPCTOF),
fFIllPIDQAHistos(kTRUE),
fNSigmaPID(3),
+ fBayesCut(0.8),
+ fdiffPIDcutvalues(kFALSE),
+ fPIDCutval1(0.0),
+ fPIDCutval2(0.0),
+ fPIDCutval3(0.0),
+ fPIDCutval4(0.0),
fHighPtKaonNSigmaPID(-1),
fHighPtKaonSigma(3.5),
fUseExclusiveNSigma(kFALSE),
fOutputList(0),
fCentralityMethod("V0A"),
fSampleType("pPb"),
+ fRequestEventPlane(kFALSE),
fnTracksVertex(1), // QA tracks pointing to principal vertex (= 3 default)
trkVtx(0),
zvtx(0),
fTrackStatus(0),
fSharedClusterCut(-1),
fVertextype(1),
+ skipParticlesAbove(0),
fzvtxcut(10.0),
ffilltrigassoUNID(kFALSE),
ffilltrigUNIDassoID(kFALSE),
fWeightPerEvent(kFALSE),
fTriggerSpeciesSelection(kFALSE),
fAssociatedSpeciesSelection(kFALSE),
+ fRandomizeReactionPlane(kFALSE),
fTriggerSpecies(SpPion),
fAssociatedSpecies(SpPion),
fCustomBinning(""),
SetChargeAxis(0),
frejectPileUp(kFALSE),
fminPt(0.2),
- fmaxPt(10.0),
+ fmaxPt(20.0),
fmineta(-0.8),
fmaxeta(0.8),
- fminprotonsigmacut(-6.0),
- fmaxprotonsigmacut(-3.0),
- fminpionsigmacut(0.0),
- fmaxpionsigmacut(4.0),
fselectprimaryTruth(kTRUE),
fonlyprimarydatareco(kFALSE),
fdcacut(kFALSE),
fminPtComboeff(2.0),
fmaxPtComboeff(4.0),
fminPtAsso(0),
- fmaxPtAsso(0),
+ fmaxPtAsso(0),
+ fmincentmult(0),
+ fmaxcentmult(0),
fhistcentrality(0),
fEventCounter(0),
fEtaSpectrasso(0),
fEventno(0),
fEventnobaryon(0),
fEventnomeson(0),
- fhistJetTrigestimate(0),
+ fhistJetTrigestimate(0),
fCentralityCorrelation(0x0),
+ fHistVZEROAGainEqualizationMap(0),
+ fHistVZEROCGainEqualizationMap(0),
+ fHistVZEROChannelGainEqualizationMap(0),
+fCentralityWeights(0),
+ fHistCentStats(0x0),
+ fHistRefmult(0x0),
+ fHistEQVZEROvsTPCmultiplicity(0x0),
+ fHistEQVZEROAvsTPCmultiplicity(0x0),
+ fHistEQVZEROCvsTPCmultiplicity(0x0),
+ fHistVZEROCvsEQVZEROCmultiplicity(0x0),
+ fHistVZEROAvsEQVZEROAmultiplicity(0x0),
+ fHistVZEROCvsVZEROAmultiplicity(0x0),
+ fHistEQVZEROCvsEQVZEROAmultiplicity(0x0),
+ fHistVZEROSignal(0x0),
+fHistEventPlaneReco(0x0),
+fHistEventPlaneTruth(0x0),
+fHistPsiMinusPhi(0x0),
fControlConvResoncances(0),
fHistoTPCdEdx(0x0),
fHistoTOFbeta(0x0),
fTHnCorrIDUNIDmix(0),
fTHnTrigcount(0),
fTHnTrigcountMCTruthPrim(0),
- fPoolMgr(0x0),
+ fPoolMgr(0x0),
fArrayMC(0),
fAnalysisType("AOD"),
- fefffilename(""),
- ftwoTrackEfficiencyCutDataReco(kTRUE),
+ fefffilename(""),
+ ftwoTrackEfficiencyCutDataReco(kTRUE),
twoTrackEfficiencyCutValue(0.02),
fPID(NULL),
- eventno(0),
+ fPIDCombined(NULL),
+ eventno(0),
fPtTOFPIDmin(0.5),
fPtTOFPIDmax(4.0),
fRequestTOFPID(kTRUE),
fPIDType(NSigmaTPCTOF),
fFIllPIDQAHistos(kTRUE),
fNSigmaPID(3),
+ fBayesCut(0.8),
+ fdiffPIDcutvalues(kFALSE),
+ fPIDCutval1(0.0),
+ fPIDCutval2(0.0),
+ fPIDCutval3(0.0),
+ fPIDCutval4(0.0),
fHighPtKaonNSigmaPID(-1),
fHighPtKaonSigma(3.5),
fUseExclusiveNSigma(kFALSE),
}
if (fPID) delete fPID;
-
+ if (fPIDCombined) delete fPIDCombined;
+
}
//________________________________________________________________________
fOutputList->SetOwner();
fOutputList->SetName("PIDQAList");
-
- Int_t centmultbins=10;
- Double_t centmultmin=0.0;
- Double_t centmultmax=100.0;
- if(fSampleType=="pPb" || fSampleType=="PbPb")
- {
- centmultbins=10;
- centmultmin=0.0;
- centmultmax=100.0;
- }
- if(fSampleType=="pp")
- {
- centmultbins=10;
- centmultmin=0.0;
- centmultmax=200.0;
- }
-
-fhistcentrality=new TH1F("fhistcentrality","fhistcentrality",centmultbins*4,centmultmin,centmultmax);
-fOutput->Add(fhistcentrality);
-
- fEventCounter = new TH1F("fEventCounter","EventCounter", 12, 0.5,12.5);
+ fEventCounter = new TH1F("fEventCounter","EventCounter", 19, 0.5,19.5);
fEventCounter->GetXaxis()->SetBinLabel(1,"Event Accesed");
- fEventCounter->GetXaxis()->SetBinLabel(3,"After PileUP Cut");//only for MC
+ fEventCounter->GetXaxis()->SetBinLabel(3,"After PileUP Cut");//only for Data
fEventCounter->GetXaxis()->SetBinLabel(5,"Have A Vertex");
fEventCounter->GetXaxis()->SetBinLabel(7,"After vertex Cut");
- fEventCounter->GetXaxis()->SetBinLabel(9,"Within 0-100% centrality");
- fEventCounter->GetXaxis()->SetBinLabel(11,"Event Analyzed");
+ fEventCounter->GetXaxis()->SetBinLabel(9,"After centrality flattening");
+ fEventCounter->GetXaxis()->SetBinLabel(11,"Within 0-100% centrality");
+ fEventCounter->GetXaxis()->SetBinLabel(13,"Event Analyzed");
//fEventCounter->GetXaxis()->SetBinLabel(8,"Event Analysis finished");
fOutput->Add(fEventCounter);
fOutput->Add(fCentralityCorrelation);
}
+if(fCentralityMethod=="V0M" || fCentralityMethod=="V0A" || fCentralityMethod=="V0C" || fCentralityMethod=="CL1" || fCentralityMethod=="ZNA" || fCentralityMethod=="V0AEq" || fCentralityMethod=="V0CEq" || fCentralityMethod=="V0MEq")
+ {
+ TString gCentName[8] = {"V0A","V0C","V0M","V0AEq","V0CEq","V0MEq","CL1","ZNA"};
+ fHistCentStats = new TH2F("fHistCentStats",
+ "Centrality statistics;;Cent percentile",
+ 8,-0.5,7.5,220,-5,105);
+ for(Int_t i = 1; i <= 8; i++){
+ fHistCentStats->GetXaxis()->SetBinLabel(i,gCentName[i-1].Data());
+ //fHistCentStatsUsed->GetXaxis()->SetBinLabel(i,gCentName[i-1].Data());
+ }
+ fOutput->Add(fHistCentStats);
+ }
+
+if(fCentralityMethod.EndsWith("_MANUAL"))
+ {
+fhistcentrality=new TH1F("fhistcentrality","referencemultiplicity",30001,-0.5,30000.5);
+fOutput->Add(fhistcentrality);
+ }
+ else{
+fhistcentrality=new TH1F("fhistcentrality","centrality",220,-5,105);
+fOutput->Add(fhistcentrality);
+ }
+
+if(fCentralityMethod.EndsWith("_MANUAL"))
+ {
+TString gmultName[4] = {"V0A_MANUAL","V0C_MANUAL","V0M_MANUAL","TRACKS_MANUAL"};
+ fHistRefmult = new TH2F("fHistRefmult",
+ "Reference multiplicity",
+ 4,-0.5,3.5,10000,0,20000);
+ for(Int_t i = 1; i <= 4; i++){
+ fHistRefmult->GetXaxis()->SetBinLabel(i,gmultName[i-1].Data());
+ //fHistCentStatsUsed->GetXaxis()->SetBinLabel(i,gCentName[i-1].Data());
+ }
+ fOutput->Add(fHistRefmult);
+
+
+ //TPC vs EQVZERO multiplicity
+ fHistEQVZEROvsTPCmultiplicity = new TH2F("fHistEQVZEROvsTPCmultiplicity","EqVZERO vs TPC multiplicity",10001,-0.5,10000.5,4001,-0.5,4000.5);
+ fHistEQVZEROvsTPCmultiplicity->GetXaxis()->SetTitle("EqVZERO multiplicity (a.u.)");
+ fHistEQVZEROvsTPCmultiplicity->GetYaxis()->SetTitle("TPC multiplicity (a.u.)");
+ fOutput->Add(fHistEQVZEROvsTPCmultiplicity);
+
+
+ fHistEQVZEROAvsTPCmultiplicity = new TH2F("fHistEQVZEROAvsTPCmultiplicity","EqVZERO_A vs TPC multiplicity",10001,-0.5,10000.5,4001,-0.5,4000.5);
+ fHistEQVZEROAvsTPCmultiplicity->GetXaxis()->SetTitle("EqVZERO_A multiplicity (a.u.)");
+ fHistEQVZEROAvsTPCmultiplicity->GetYaxis()->SetTitle("TPC multiplicity (a.u.)");
+ fOutput->Add(fHistEQVZEROAvsTPCmultiplicity);
+
+
+ fHistEQVZEROCvsTPCmultiplicity = new TH2F("fHistEQVZEROCvsTPCmultiplicity","EqVZERO_C vs TPC multiplicity",10001,-0.5,10000.5,4001,-0.5,4000.5);
+ fHistEQVZEROCvsTPCmultiplicity->GetXaxis()->SetTitle("EqVZERO_C multiplicity (a.u.)");
+ fHistEQVZEROCvsTPCmultiplicity->GetYaxis()->SetTitle("TPC multiplicity (a.u.)");
+ fOutput->Add(fHistEQVZEROCvsTPCmultiplicity);
+
+ //EQVZERO vs VZERO multiplicity
+ fHistVZEROCvsEQVZEROCmultiplicity = new TH2F("fHistVZEROCvsEQVZEROCmultiplicity","EqVZERO_C vs VZERO_C multiplicity",10001,-0.5,10000.5,10001,-0.5,10000.5);
+ fHistVZEROCvsEQVZEROCmultiplicity->GetXaxis()->SetTitle("VZERO_C multiplicity (a.u.)");
+ fHistVZEROCvsEQVZEROCmultiplicity->GetYaxis()->SetTitle("EqVZERO_C multiplicity (a.u.)");
+ fOutput->Add(fHistVZEROCvsEQVZEROCmultiplicity);
+
+
+fHistVZEROAvsEQVZEROAmultiplicity = new TH2F("fHistVZEROAvsEQVZEROAmultiplicity","EqVZERO_A vs VZERO_A multiplicity",10001,-0.5,10000.5,10001,-0.5,10000.5);
+ fHistVZEROAvsEQVZEROAmultiplicity->GetXaxis()->SetTitle("VZERO_A multiplicity (a.u.)");
+ fHistVZEROAvsEQVZEROAmultiplicity->GetYaxis()->SetTitle("EqVZERO_A multiplicity (a.u.)");
+ fOutput->Add(fHistVZEROAvsEQVZEROAmultiplicity);
+
+
+ //VZEROC vs VZEROA multiplicity
+fHistVZEROCvsVZEROAmultiplicity = new TH2F("fHistVZEROCvsVZEROAmultiplicity","VZERO_C vs VZERO_A multiplicity",10001,-0.5,10000.5,10001,-0.5,10000.5);
+ fHistVZEROCvsVZEROAmultiplicity->GetXaxis()->SetTitle("VZERO_C multiplicity (a.u.)");
+ fHistVZEROCvsVZEROAmultiplicity->GetYaxis()->SetTitle("VZERO_A multiplicity (a.u.)");
+ fOutput->Add(fHistVZEROCvsVZEROAmultiplicity);
+
+
+
+ //EQVZEROC vs EQVZEROA multiplicity
+fHistEQVZEROCvsEQVZEROAmultiplicity = new TH2F("fHistEQVZEROCvsEQVZEROAmultiplicity","EqVZERO_C vs EqVZERO_A multiplicity",10001,-0.5,10000.5,10001,-0.5,10000.5);
+ fHistEQVZEROCvsEQVZEROAmultiplicity->GetXaxis()->SetTitle("EqVZERO_C multiplicity (a.u.)");
+ fHistEQVZEROCvsEQVZEROAmultiplicity->GetYaxis()->SetTitle("EqVZERO_A multiplicity (a.u.)");
+ fOutput->Add(fHistEQVZEROCvsEQVZEROAmultiplicity);
+
+ fHistVZEROSignal = new TH2F("fHistVZEROSignal","VZERO signal vs VZERO channel;VZERO channel; Signal (a.u.)",64,0.5,64.5,3001,-0.5,30000.5);
+ fOutput->Add(fHistVZEROSignal);
+}
+
+ if(fSampleType=="PbPb" && fRequestEventPlane){
+//Event plane
+ fHistEventPlaneReco = new TH2F("fHistEventPlaneReco",";#Psi_{2} [deg.];Centrality percentile;Counts",100,0,360.,220,-5,105);
+ fOutput->Add(fHistEventPlaneReco);
+
+//Event plane
+ fHistEventPlaneTruth = new TH2F("fHistEventPlaneTruth",";#Psi_{2} [deg.];Centrality percentile;Counts",100,0,360.,220,-5,105);
+ fOutput->Add(fHistEventPlaneTruth);
+
+ fHistPsiMinusPhi = new TH2D("fHistPsiMinusPhi","",4,-0.5,3.5,100,0,2.*TMath::Pi());
+ fOutput->Add(fHistPsiMinusPhi);
+
+ }
+
if(fCutConversions || fCutResonances)
{
fControlConvResoncances = new TH2F("fControlConvResoncances", ";id;delta mass", 3, -0.5, 2.5, 100, -0.1, 0.1);
fOutput->Add(fHistQA[i]);
}
- kTrackVariablesPair=6+SetChargeAxis;
+ Int_t eventplaneaxis=0;
+
+ if (fRequestEventPlane) eventplaneaxis=1;
- if(fcontainPIDtrig && !fcontainPIDasso) kTrackVariablesPair=7+SetChargeAxis;
+ kTrackVariablesPair=6+SetChargeAxis+eventplaneaxis;
+
+ if(fcontainPIDtrig && !fcontainPIDasso) kTrackVariablesPair=7+SetChargeAxis+eventplaneaxis;
- if(!fcontainPIDtrig && fcontainPIDasso) kTrackVariablesPair=7+SetChargeAxis;
+ if(!fcontainPIDtrig && fcontainPIDasso) kTrackVariablesPair=7+SetChargeAxis+eventplaneaxis;
- if(fcontainPIDtrig && fcontainPIDasso) kTrackVariablesPair=8+SetChargeAxis;
+ if(fcontainPIDtrig && fcontainPIDasso) kTrackVariablesPair=8+SetChargeAxis+eventplaneaxis;
// two particle histograms
"delta_eta: -2.4, -2.3, -2.2, -2.1, -2.0, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0,2.1, 2.2, 2.3, 2.4\n"
"multiplicity: 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1\n";
+ if(fRequestEventPlane){
+ defaultBinningStr += "eventPlane: -0.5,0.5,1.5,2.5,3.5\n"; // Event Plane Bins (Psi: -0.5->0.5 (in plane), 0.5->1.5 (intermediate), 1.5->2.5 (out of plane), 2.5->3.5 (rest))
+ }
+
if(fcontainPIDtrig){
defaultBinningStr += "PIDTrig: -0.5,0.5,1.5,2.5,3.5\n"; // course
}
if(fcontainPIDasso){
defaultBinningStr += "PIDAsso: -0.5,0.5,1.5,2.5,3.5\n"; // course
}
+
if(SetChargeAxis==2){
defaultBinningStr += "TrigCharge: -2.0,0.0,2.0\n"; // course
defaultBinningStr += "AssoCharge: -2.0,0.0,2.0\n"; // course
AliInfo(Form("Used AliTHn Binning:\n%s",fBinningString.Data()));
- // =========================================================
+ // =========================================================
// Now set the bins
// =========================================================
dBinsPair[5] = GetBinning(fBinningString, "delta_phi", iBinPair[5]);
axisTitlePair[5] = "#Delta#varphi (rad)";
+ Int_t dim_val=6;
+
+ if(fRequestEventPlane){
+ dBinsPair[dim_val] = GetBinning(fBinningString, "eventPlane", iBinPair[dim_val]);
+ axisTitlePair[dim_val] = "#varphi - #Psi_{2} (a.u.)";
+ dim_val=7;
+ }
+
if(!fcontainPIDtrig && !fcontainPIDasso && SetChargeAxis==2){
- dBinsPair[6] = GetBinning(fBinningString, "TrigCharge", iBinPair[6]);
- axisTitlePair[6] = "TrigCharge";
+ dBinsPair[dim_val] = GetBinning(fBinningString, "TrigCharge", iBinPair[dim_val]);
+ axisTitlePair[dim_val] = "TrigCharge";
- dBinsPair[7] = GetBinning(fBinningString, "AssoCharge", iBinPair[7]);
- axisTitlePair[7] = "AssoCharge";
+ dBinsPair[dim_val+1] = GetBinning(fBinningString, "AssoCharge", iBinPair[dim_val+1]);
+ axisTitlePair[dim_val+1] = "AssoCharge";
}
if(fcontainPIDtrig && !fcontainPIDasso){
- dBinsPair[6] = GetBinning(fBinningString, "PIDTrig", iBinPair[6]);
- axisTitlePair[6] = "PIDTrig";
+ dBinsPair[dim_val] = GetBinning(fBinningString, "PIDTrig", iBinPair[dim_val]);
+ axisTitlePair[dim_val] = "PIDTrig";
if(SetChargeAxis==2){
- dBinsPair[7] = GetBinning(fBinningString, "TrigCharge", iBinPair[7]);
- axisTitlePair[7] = "TrigCharge";
+ dBinsPair[dim_val+1] = GetBinning(fBinningString, "TrigCharge", iBinPair[dim_val+1]);
+ axisTitlePair[dim_val+1] = "TrigCharge";
- dBinsPair[8] = GetBinning(fBinningString, "AssoCharge", iBinPair[8]);
- axisTitlePair[8] = "AssoCharge";
+ dBinsPair[dim_val+2] = GetBinning(fBinningString, "AssoCharge", iBinPair[dim_val+2]);
+ axisTitlePair[dim_val+2] = "AssoCharge";
}
}
if(!fcontainPIDtrig && fcontainPIDasso){
- dBinsPair[6] = GetBinning(fBinningString, "PIDAsso", iBinPair[6]);
- axisTitlePair[6] = "PIDAsso";
+ dBinsPair[dim_val] = GetBinning(fBinningString, "PIDAsso", iBinPair[dim_val]);
+ axisTitlePair[dim_val] = "PIDAsso";
if(SetChargeAxis==2){
- dBinsPair[7] = GetBinning(fBinningString, "TrigCharge", iBinPair[7]);
- axisTitlePair[7] = "TrigCharge";
+ dBinsPair[dim_val+1] = GetBinning(fBinningString, "TrigCharge", iBinPair[dim_val+1]);
+ axisTitlePair[dim_val+1] = "TrigCharge";
- dBinsPair[8] = GetBinning(fBinningString, "AssoCharge", iBinPair[8]);
- axisTitlePair[8] = "AssoCharge";
+ dBinsPair[dim_val+2] = GetBinning(fBinningString, "AssoCharge", iBinPair[dim_val+2]);
+ axisTitlePair[dim_val+2] = "AssoCharge";
}
}
if(fcontainPIDtrig && fcontainPIDasso){
- dBinsPair[6] = GetBinning(fBinningString, "PIDTrig", iBinPair[6]);
- axisTitlePair[6] = "PIDTrig";
+ dBinsPair[dim_val] = GetBinning(fBinningString, "PIDTrig", iBinPair[dim_val]);
+ axisTitlePair[dim_val] = "PIDTrig";
- dBinsPair[7] = GetBinning(fBinningString, "PIDAsso", iBinPair[7]);
- axisTitlePair[7] = "PIDAsso";
+ dBinsPair[dim_val+1] = GetBinning(fBinningString, "PIDAsso", iBinPair[dim_val+1]);
+ axisTitlePair[dim_val+1] = "PIDAsso";
if(SetChargeAxis==2){
- dBinsPair[8] = GetBinning(fBinningString, "TrigCharge", iBinPair[8]);
- axisTitlePair[8] = "TrigCharge";
+ dBinsPair[dim_val+2] = GetBinning(fBinningString, "TrigCharge", iBinPair[dim_val+2]);
+ axisTitlePair[dim_val+2] = "TrigCharge";
- dBinsPair[9] = GetBinning(fBinningString, "AssoCharge", iBinPair[9]);
- axisTitlePair[9] = "AssoCharge";
+ dBinsPair[dim_val+3] = GetBinning(fBinningString, "AssoCharge", iBinPair[dim_val+3]);
+ axisTitlePair[dim_val+3] = "AssoCharge";
}
}
fmaxPtTrig=dBinsPair[2][iBinPair[2]];
fminPtAsso=dBinsPair[3][0];
fmaxPtAsso=dBinsPair[3][iBinPair[3]];
+ fmincentmult=dBinsPair[0][0];
+ fmaxcentmult=dBinsPair[0][iBinPair[0]];
//fminPtComboeff=fminPtTrig;***then this value will be fixed ,even Setter can't change it's value
//fmaxPtComboeff=fmaxPtTrig;
//binning for trigger no. counting
+ Int_t ChargeAxis=0;
+ if(SetChargeAxis==2) ChargeAxis=1;
+
Int_t* fBinst;
- Int_t dims=3+SetChargeAxis;
- if(fcontainPIDtrig) dims=4+SetChargeAxis;
+ Int_t dims=3+ChargeAxis+eventplaneaxis;
+ if(fcontainPIDtrig) dims=4+ChargeAxis+eventplaneaxis;
fBinst= new Int_t[dims];
+ Double_t* dBinsTrig[dims]; // bins for track variables
+ TString* axisTitleTrig; // axis titles for track variables
+ axisTitleTrig=new TString[dims];
+
for(Int_t i=0; i<3;i++)
{
fBinst[i]=iBinPair[i];
+ dBinsTrig[i]=dBinsPair[i];
+ axisTitleTrig[i]=axisTitlePair[i];
}
-if(!fcontainPIDtrig && !fcontainPIDasso && SetChargeAxis==2){
-fBinst[3]=iBinPair[6];
-fBinst[4]=iBinPair[7];
+ Int_t dim_val_trig=3;
+ if(fRequestEventPlane){
+ fBinst[dim_val_trig]=iBinPair[6];//if fRequestEventPlane=TRUE, dim_val already becomes 7.
+ dBinsTrig[dim_val_trig]=dBinsPair[6];
+ axisTitleTrig[dim_val_trig]=axisTitlePair[6];
+ dim_val_trig=4;
+ }
+
+if(!fcontainPIDtrig && !fcontainPIDasso && ChargeAxis==1){
+fBinst[dim_val_trig]=iBinPair[dim_val];
+dBinsTrig[dim_val_trig]=dBinsPair[dim_val];
+axisTitleTrig[dim_val_trig]=axisTitlePair[dim_val];
}
if(fcontainPIDtrig && !fcontainPIDasso){
-fBinst[3]=iBinPair[6];
- if(SetChargeAxis==2){
-fBinst[4]=iBinPair[7];
-fBinst[5]=iBinPair[8];
+fBinst[dim_val_trig]=iBinPair[dim_val];
+dBinsTrig[dim_val_trig]=dBinsPair[dim_val];
+axisTitleTrig[dim_val_trig]=axisTitlePair[dim_val];
+ if(ChargeAxis==1){
+fBinst[dim_val_trig+1]=iBinPair[dim_val+1];
+dBinsTrig[dim_val_trig+1]=dBinsPair[dim_val+1];
+axisTitleTrig[dim_val_trig+1]=axisTitlePair[dim_val+1];
}
}
if(!fcontainPIDtrig && fcontainPIDasso){
- if(SetChargeAxis==2){
- fBinst[3]=iBinPair[7];
- fBinst[4]=iBinPair[8];
+ if(ChargeAxis==1){
+ fBinst[dim_val_trig]=iBinPair[dim_val+1];
+dBinsTrig[dim_val_trig]=dBinsPair[dim_val+1];
+axisTitleTrig[dim_val_trig]=axisTitlePair[dim_val+1];
}
}
if(fcontainPIDtrig && fcontainPIDasso){
- fBinst[3]=iBinPair[6];
- if(SetChargeAxis==2){
-fBinst[4]=iBinPair[8];
-fBinst[5]=iBinPair[9];
+ fBinst[dim_val_trig]=iBinPair[dim_val];
+dBinsTrig[dim_val_trig]=dBinsPair[dim_val];
+axisTitleTrig[dim_val_trig]=axisTitlePair[dim_val];
+ if(ChargeAxis==1){
+fBinst[dim_val_trig+1]=iBinPair[dim_val+2];
+dBinsTrig[dim_val_trig+1]=dBinsPair[dim_val+2];
+axisTitleTrig[dim_val_trig+1]=axisTitlePair[dim_val+2];
}
}
if(ffilltrigassoUNID || ffilltrigUNIDassoID || ffilltrigIDassoUNID || ffilltrigIDassoID)
{
fTHnTrigcount = new AliTHn("fTHnTrigcount", "fTHnTrigcount", 2, dims, fBinst); //2 steps;;;;0->same event;;;;;1->mixed event
-for(Int_t i=0; i<3;i++){
- fTHnTrigcount->SetBinLimits(i, dBinsPair[i]);
- fTHnTrigcount->SetVarTitle(i, axisTitlePair[i]);
- }
- if(fcontainPIDtrig)
- {
- fTHnTrigcount->SetBinLimits(3, dBinsPair[6]);
- fTHnTrigcount->SetVarTitle(3, axisTitlePair[6]);
- }
+ for(Int_t i=0; i<dims;i++){
+ fTHnTrigcount->SetBinLimits(i, dBinsTrig[i]);
+ fTHnTrigcount->SetVarTitle(i, axisTitleTrig[i]);
+ }
fOutput->Add(fTHnTrigcount);
}
if((fAnalysisType =="MCAOD") && ffilltrigIDassoIDMCTRUTH) {
//AliTHns for trigger counting(truth MC)
fTHnTrigcountMCTruthPrim = new AliTHn("fTHnTrigcountMCTruthPrim", "fTHnTrigcountMCTruthPrim", 2, dims, fBinst); //2 steps;;;;0->same event;;;;;1->mixed event
-for(Int_t i=0; i<3;i++){
- fTHnTrigcountMCTruthPrim->SetBinLimits(i, dBinsPair[i]);
- fTHnTrigcountMCTruthPrim->SetVarTitle(i, axisTitlePair[i]);
- }
- if(fcontainPIDtrig)
- {
- fTHnTrigcountMCTruthPrim->SetBinLimits(3, dBinsPair[6]);
- fTHnTrigcountMCTruthPrim->SetVarTitle(3, axisTitlePair[6]);
- }
+ for(Int_t i=0; i<dims;i++){
+ fTHnTrigcount->SetBinLimits(i, dBinsTrig[i]);
+ fTHnTrigcount->SetVarTitle(i, axisTitleTrig[i]);
+ }
fOutput->Add(fTHnTrigcountMCTruthPrim);
}
fOutputList->Add(fHistoNSigma);
}
}
-
+
+ //BayesRec plot
+ if(fPIDType==Bayes){//use bayesianPID
+ fPIDCombined = new AliPIDCombined();
+ fPIDCombined->SetDefaultTPCPriors();//****************************************Need to know about it
+
+ for(Int_t ipart=0;ipart<NSpecies;ipart++){
+ Double_t miny=0.;
+ Double_t maxy=1;
+ TH2F *fHistoBayes=new TH2F(Form("BayesRec_%d",ipart),
+ Form("probability for reconstructed %s",kParticleSpeciesName[ipart]),200,0,10,500,miny,maxy);
+ fHistoBayes->GetXaxis()->SetTitle("P_{T} (GeV / c)");
+ fHistoBayes->GetYaxis()->SetTitle(Form("Bayes prob %s",kParticleSpeciesName[ipart]));
+ fOutputList->Add(fHistoBayes);
+
+
+ TH2F *fHistoBayesTPC=new TH2F(Form("probBayes_TPC_%d",ipart),
+ Form("probability for Tracks as %s",kParticleSpeciesName[ipart]),200,0,10,500,miny,maxy);
+ fHistoBayesTPC->GetXaxis()->SetTitle("P_{T} (GeV / c)");
+ fHistoBayesTPC->GetYaxis()->SetTitle(Form("Bayes prob TPC %s",kParticleSpeciesName[ipart]));
+ fOutputList->Add(fHistoBayesTPC);
+
+ TH2F *fHistoBayesTOF=new TH2F(Form("probBayes_TOF_%d",ipart),
+ Form("probability for Tracks as %s",kParticleSpeciesName[ipart]),200,0,10,500,miny,maxy);
+ fHistoBayesTOF->GetXaxis()->SetTitle("P_{T} (GeV / c)");
+ fHistoBayesTOF->GetYaxis()->SetTitle(Form("Bayes prob TOF %s",kParticleSpeciesName[ipart]));
+ fOutputList->Add(fHistoBayesTOF);
+
+ TH2F *fHistoBayesTPCTOF=new TH2F(Form("probBayes_TPCTOF_%d",ipart),
+ Form("probability for Tracks as %s",kParticleSpeciesName[ipart]),200,0,10,500,miny,maxy);
+ fHistoBayesTPCTOF->GetXaxis()->SetTitle("P_{T} (GeV / c)");
+ fHistoBayesTPCTOF->GetYaxis()->SetTitle(Form("Bayes prob TPCTOF %s",kParticleSpeciesName[ipart]));
+ fOutputList->Add(fHistoBayesTPCTOF);
+ }
+ }
+
+ //nsigma separation power plot
+ for(Int_t ipid=0;ipid<=NSigmaPIDType;ipid++){
+ Double_t miny=0;
+ Double_t maxy=10;
+ TH2F *Pi_Ka_sep=new TH2F(Form("Pi_Ka_sep_%d",ipid),
+ Form("Pi_Ka separation in %s",kPIDTypeName[ipid]),50,0,10,200,miny,maxy);
+ Pi_Ka_sep->GetXaxis()->SetTitle("P_{T} (GeV/C)");
+ Pi_Ka_sep->GetYaxis()->SetTitle(Form("expected seaparation(n#sigma) in %s",kPIDTypeName[ipid]));
+ fOutputList->Add(Pi_Ka_sep);
+
+ TH2F *Pi_Pr_sep=new TH2F(Form("Pi_Pr_sep_%d",ipid),
+ Form("Pi_Pr separation in %s",kPIDTypeName[ipid]),50,0,10,200,miny,maxy);
+ Pi_Pr_sep->GetXaxis()->SetTitle("P_{T} (GeV/C)");
+ Pi_Pr_sep->GetYaxis()->SetTitle(Form("expected seaparation(n#sigma) in %s",kPIDTypeName[ipid]));
+ fOutputList->Add(Pi_Pr_sep);
+
+ TH2F *Ka_Pr_sep=new TH2F(Form("Ka_Pr_sep_%d",ipid),
+ Form("Ka_Pr separation in %s",kPIDTypeName[ipid]),50,0,10,200,miny,maxy);
+ Ka_Pr_sep->GetXaxis()->SetTitle("P_{T} (GeV/C)");
+ Ka_Pr_sep->GetYaxis()->SetTitle(Form("expected seaparation(n#sigma) in %s",kPIDTypeName[ipid]));
+ fOutputList->Add(Ka_Pr_sep);
+ }
+
//nsigmaDC plot
if(fUseExclusiveNSigma) {
for(Int_t ipart=0;ipart<NSpecies;ipart++){
// count all events(physics triggered)
fEventCounter->Fill(1);
- // get centrality object and check quality(valid for p-Pb and Pb-Pb)
- Double_t cent_v0=0.0;
-
- if(fSampleType=="pPb" || fSampleType=="PbPb")
- {
- AliCentrality *centrality=0;
- if(aod)
- centrality = aod->GetHeader()->GetCentralityP();
- // if (centrality->GetQuality() != 0) return ;
-
- if(centrality)
- {
- cent_v0 = centrality->GetCentralityPercentile(fCentralityMethod);
- }
- else
- {
- cent_v0= -1;
- }
- }
+ // get centrality object and check quality(valid for p-Pb and Pb-Pb; coming soon for pp 7 TeV)
+ Double_t cent_v0=-1.0;
+ Double_t effcent=1.0;
+ Double_t refmultReco =0.0;
+ Double_t gReactionPlane = -1.;
//check the PIDResponse handler
if (!fPID) return;
if(TMath::Abs(zVtxmc)>fzvtxcut) return;
// For productions with injected signals, figure out above which label to skip particles/tracks
- Int_t skipParticlesAbove = 0;
if (fInjectedSignals)
{
AliInfo(Form("Injected signals in this event (%d headers). Keeping events of %s. Will skip particles/tracks above %d.", headers, eventHeader->ClassName(), skipParticlesAbove));
}
- //vertex selection(is it fine for PP?)
- if ( fVertextype==1){
- trkVtx = aod->GetPrimaryVertex();
- if (!trkVtx || trkVtx->GetNContributors()<=0) return;
- TString vtxTtl = trkVtx->GetTitle();
- if (!vtxTtl.Contains("VertexerTracks")) return;
- zvtx = trkVtx->GetZ();
- const AliAODVertex* spdVtx = aod->GetPrimaryVertexSPD();
- if (!spdVtx || spdVtx->GetNContributors()<=0) return;
- TString vtxTyp = spdVtx->GetTitle();
- Double_t cov[6]={0};
- spdVtx->GetCovarianceMatrix(cov);
- Double_t zRes = TMath::Sqrt(cov[5]);
- if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
- if (TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
- }
- else if(fVertextype==2) {//for pp and pb-pb case
- Int_t nVertex = aod->GetNumberOfVertices();
- if( nVertex > 0 ) {
- trkVtx = aod->GetPrimaryVertex();
- Int_t nTracksPrim = trkVtx->GetNContributors();
- zvtx = trkVtx->GetZ();
- //if (fDebug > 1)AliInfo(Form(" Vertex in = %f with %d particles by %s data ...",zVertex,nTracksPrim,vertex->GetName()));
- // Reject TPC only vertex
- TString name(trkVtx->GetName());
- if (name.CompareTo("PrimaryVertex") && name.CompareTo("SPDVertex"))return;
+ if (fSampleType=="pp" && fCentralityMethod.EndsWith("_MANUAL"))
+ {
+ //make the event selection with reco vertex cut and centrality cut and return the value of the centrality
+ Double_t refmultTruth = GetAcceptedEventMultiplicity(aod,kTRUE); //incase of ref multiplicity it will return the truth MC ref mullt value; need to determine the ref mult value separately for reco Mc case; in case of centrality this is final and fine
+ refmultReco = GetAcceptedEventMultiplicity(aod,kFALSE);
+ if(refmultTruth<=0 || refmultReco<=0) return;
+ cent_v0=refmultTruth;
+ }
+ else {
+ cent_v0=GetAcceptedEventMultiplicity(aod,kTRUE); //centrality value; 2nd argument has no meaning
+ if(cent_v0<0.) return;
+ }
- // Select a quality vertex by number of tracks?
- if( nTracksPrim < fnTracksVertex ) {
- //if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ...");
- return ;
- }
- // TODO remove vertexer Z events with dispersion > 0.02: Doesn't work for AOD at present
- //if (strcmp(vertex->GetTitle(), "AliVertexerZ") == 0 && vertex->GetDispersion() > 0.02)
- // return kFALSE;
- // if (fDebug > 1) AliInfo(" Primary-vertex Selection: event ACCEPTED...");
- }
- else return;
+ effcent=cent_v0;// This will be required for efficiency THn filling(specially in case of pp)
+ //get the event plane in case of PbPb
+ if(fSampleType=="PbPb"){
+ if(fRequestEventPlane){
+ gReactionPlane = GetEventPlane(aod,kTRUE);//get the truth event plane
+ fHistEventPlaneTruth->Fill(gReactionPlane,cent_v0);
+ if(gReactionPlane < 0) return;
+ }
}
- else if(fVertextype==0){//default case
- trkVtx = aod->GetPrimaryVertex();
- if (!trkVtx || trkVtx->GetNContributors()<=0) return;//proper number of contributors
- zvtx = trkVtx->GetZ();
- Double32_t fCov[6];
- trkVtx->GetCovarianceMatrix(fCov);
- if(fCov[5] == 0) return;//proper vertex resolution
- }
- else {
- AliInfo("Wrong Vertextype set for Primary-vertex Selection: event REJECTED ...");
- return;//as there is no proper sample type
- }
-
-
- fHistQA[0]->Fill((trkVtx->GetX()));fHistQA[1]->Fill((trkVtx->GetY()));fHistQA[2]->Fill((trkVtx->GetZ())); //for trkVtx only before vertex cut |zvtx|<10 cm
-
- //count events having a proper vertex
- fEventCounter->Fill(5);
-
- if (TMath::Abs(zvtx) > fzvtxcut) return;
-
-fHistQA[3]->Fill((trkVtx->GetX()));fHistQA[4]->Fill((trkVtx->GetY()));fHistQA[5]->Fill((trkVtx->GetZ()));//after vertex cut for trkVtx only
-
-//now we have events passed physics trigger, centrality,eventzvtx cut
-
-//count events after vertex cut
- fEventCounter->Fill(7);
-
-if(!aod) return; //for safety
-
-if (fSampleType=="pPb" || fSampleType=="PbPb") if (cent_v0 < 0) return;//for pp case it is the multiplicity
Double_t nooftrackstruth=0.0;//in case of pp this will give the multiplicity(for truth case) after the track loop(only for unidentified particles that pass kinematic cuts)
- Double_t cent_v0_truth=0.0;
-
//TObjArray* tracksMCtruth=0;
TObjArray* tracksMCtruth=new TObjArray;//for truth MC particles with PID,here unidentified means any particle other than pion, kaon or proton(Basicaly Spundefined of AliHelperPID)******WARNING::different from data and reco MC
tracksMCtruth->SetOwner(kTRUE); //***********************************IMPORTANT!
if(TMath::Abs(pdgtruth)!=211 && TMath::Abs(pdgtruth)!=321 && TMath::Abs(pdgtruth)!=2212) particletypeTruth=unidentified;//*********************WARNING:: situation is different from reco MC and data case(here we don't have SpUndefined particles,because here unidentified=SpUndefined)
// -- Fill THnSparse for efficiency and contamination calculation
- if (fSampleType=="pp") cent_v0=15.0;//integrated over multiplicity(so put any fixed value for each track so that practically means there is only one bin in multiplicity i.e. multiplicity intregated out )**************Important
+ if (fSampleType=="pp" && fCentralityMethod.EndsWith("_MANUAL")) effcent=15.0;//integrated over multiplicity(so put any fixed value for each track so that practically means there is only one bin in multiplicity i.e. multiplicity intregated out )**************Important
- Double_t primmctruth[4] = {cent_v0, zVtxmc,partMC->Pt(), partMC->Eta()};
+ Double_t primmctruth[4] = {effcent, zVtxmc,partMC->Pt(), partMC->Eta()};
if(ffillefficiency)
{
fTrackHistEfficiency[5]->Fill(primmctruth,0);//for all primary truth particles(4)
}//MC truth track loop ends
//*********************still in event loop
- Float_t weghtval=1.0;
- if (fSampleType=="pp") cent_v0_truth=nooftrackstruth;
- else cent_v0_truth=cent_v0;//the notation cent_v0 is reserved for reco/data case
+ if (fSampleType=="PbPb"){
+ if (fRandomizeReactionPlane)//only for TRuth MC??
+ {
+ Double_t centralityDigits = cent_v0*1000. - (Int_t)(cent_v0*1000.);
+ Double_t angle = TMath::TwoPi() * centralityDigits;
+ AliInfo(Form("Shifting phi of all tracks by %f (digits %f)", angle, centralityDigits));
+ ShiftTracks(tracksMCtruth, angle);
+ }
+ }
- //now cent_v0_truth should be used for all correlation function calculation
+ Float_t weghtval=1.0;
if(nooftrackstruth>0.0 && ffilltrigIDassoIDMCTRUTH)
{
//Fill Correlations for MC truth particles(same event)
if(tracksMCtruth && tracksMCtruth->GetEntriesFast()>0)//hadron triggered correlation
- Fillcorrelation(tracksMCtruth,0,cent_v0_truth,zVtxmc,weghtval,kFALSE,bSign,fPtOrderMCTruth,kFALSE,kFALSE,"trigIDassoIDMCTRUTH");//mixcase=kFALSE for same event case
+ Fillcorrelation(gReactionPlane,tracksMCtruth,0,cent_v0,zVtxmc,weghtval,kFALSE,bSign,fPtOrderMCTruth,kFALSE,kFALSE,"trigIDassoIDMCTRUTH");//mixcase=kFALSE for same event case
//start mixing
-AliEventPool* pool2 = fPoolMgr->GetEventPool(cent_v0_truth, zVtxmc+200);
+AliEventPool* pool2 = fPoolMgr->GetEventPool(cent_v0, zVtxmc+200);
if (pool2 && pool2->IsReady())
{//start mixing only when pool->IsReady
if(tracksMCtruth && tracksMCtruth->GetEntriesFast()>0)
{ //pool event loop start
TObjArray* bgTracks6 = pool2->GetEvent(jMix);
if(!bgTracks6) continue;
- Fillcorrelation(tracksMCtruth,bgTracks6,cent_v0_truth,zVtxmc,nmix,(jMix == 0),bSign,fPtOrderMCTruth,kFALSE,kTRUE,"trigIDassoIDMCTRUTH");//mixcase=kTRUE for mixing case
+ Fillcorrelation(gReactionPlane,tracksMCtruth,bgTracks6,cent_v0,zVtxmc,nmix,(jMix == 0),bSign,fPtOrderMCTruth,kFALSE,kTRUE,"trigIDassoIDMCTRUTH");//mixcase=kTRUE for mixing case
}// pool event loop ends mixing case
}//if(trackstrig && trackstrig->GetEntriesFast()>0) condition ends mixing case
if(tracksMCtruth) delete tracksMCtruth;
//now deal with reco tracks
+
+//detrmine the ref mult in case of Reco(not required if we get centrality info from AliCentrality)
+ if (fSampleType=="pp" && fCentralityMethod.EndsWith("_MANUAL")) cent_v0=refmultReco;
+ effcent=cent_v0;// This will be required for efficiency THn filling(specially in case of pp)
+
+ if(fSampleType=="PbPb"){
+ if(fRequestEventPlane){
+ gReactionPlane = GetEventPlane(aod,kFALSE);//get the reconstructed event plane
+ fHistEventPlaneReco->Fill(gReactionPlane,cent_v0);
+ if(gReactionPlane < 0) return;
+ }
+ }
//TObjArray* tracksUNID=0;
TObjArray* tracksUNID = new TObjArray;
tracksUNID->SetOwner(kTRUE);
Float_t bSign1=aod->GetHeader()->GetMagneticField() ;//used for reconstructed track dca cut
- Double_t trackscount=0.0;
+ Double_t trackscount=0.0;
// loop over reconstructed tracks
for (Int_t itrk = 0; itrk < aod->GetNumberOfTracks(); itrk++)
{ // reconstructed track loop starts
if(fRemoveDuplicates && isduplicate2) continue;//remove duplicates
fHistQA[11]->Fill(track->GetTPCNcls());
- Int_t tracktype=ClassifyTrack(track,trkVtx,bSign1);//dcacut=kFALSE,onlyprimary=kFALSE
+ Int_t tracktype=ClassifyTrack(track,trkVtx,bSign1,kTRUE);//dcacut=kFALSE,onlyprimary=kFALSE
if(tracktype==0) continue;
if(tracktype==1)//tracks "not" passed AliAODTrack::kPrimary at reconstructed level & have proper TPC PID response(?)
Float_t effmatrix=1.;
// -- Fill THnSparse for efficiency calculation
- if (fSampleType=="pp") cent_v0=15.0;//integrated over multiplicity(so put any fixed value for each track so that practically means there is only one bin in multiplicityi.e multiplicity intregated out )**************Important
+ if (fSampleType=="pp" && fCentralityMethod.EndsWith("_MANUAL")) effcent=15.0;//integrated over multiplicity(so put any fixed value for each track so that practically means there is only one bin in multiplicity i.e. multiplicity intregated out )**************Important
//NOTE:: this will be used for fillinfg THnSparse of efficiency & also to get the the track by track eff. factor on the fly(only in case of pp)
//Clone & Reduce track list(TObjArray) for unidentified particles
if(track->Charge()<0) chargeval=-1;
if(chargeval==0) continue;
if (fapplyTrigefficiency || fapplyAssoefficiency)//get the trackingefficiency x contamination factor for unidentified particles
- effmatrix=GetTrackbyTrackeffvalue(track,cent_v0,zvtx,particletypeMC);
+ effmatrix=GetTrackbyTrackeffvalue(track,effcent,zvtx,particletypeMC);
LRCParticlePID* copy = new LRCParticlePID(particletypeMC,chargeval,track->Pt(),track->Eta(), track->Phi(),effmatrix);
copy->SetUniqueID(eventno * 100000 +(Int_t)trackscount);
tracksUNID->Add(copy);//track information Storage for UNID correlation function(tracks that pass the filterbit & kinematic cuts only)
//get the pdg code of the corresponding truth particle
Int_t pdgCode = ((AliAODMCParticle*)recomatched)->GetPdgCode();
- Double_t allrecomatchedpid[4] = {cent_v0, zVtxmc,recomatched->Pt(), recomatched->Eta()};
+ Double_t allrecomatchedpid[4] = {effcent, zVtxmc,recomatched->Pt(), recomatched->Eta()};
if(ffillefficiency) {
fTrackHistEfficiency[5]->Fill(allrecomatchedpid,2);//for allreco matched
if(TMath::Abs(pdgCode)==211 || TMath::Abs(pdgCode)==321) fTrackHistEfficiency[3]->Fill(allrecomatchedpid,2);//for mesons
}
}
-
//now start the particle identification process:)
+
+Float_t dEdx = track->GetTPCsignal();
+ fHistoTPCdEdx->Fill(track->Pt(), dEdx);
+
+ if(HasTOFPID(track))
+{
+Double_t beta = GetBeta(track);
+fHistoTOFbeta->Fill(track->Pt(), beta);
+ }
+
+//do track identification(nsigma method)
+ particletypeMC=GetParticle(track,fFIllPIDQAHistos);//******************************problem is here
+
switch(TMath::Abs(pdgCode)){
case 2212:
if(fFIllPIDQAHistos){
for(Int_t ipid=0;ipid<=NSigmaPIDType;ipid++){
- if((ipid!=NSigmaTPC) && (!HasTOFPID(track)) && track->Pt()<fPtTOFPIDmin)continue;//not filling TOF and combined if no TOF PID
+ if((ipid!=NSigmaTPC) && (!HasTOFPID(track)))continue;//not filling TOF and combined if no TOF PID
TH2F *h=GetHistogram2D(Form("NSigmaMC_%d_%d",SpProton,ipid));
h->Fill(track->Pt(),fnsigmas[SpProton][ipid]);
}
case 321:
if(fFIllPIDQAHistos){
for(Int_t ipid=0;ipid<=NSigmaPIDType;ipid++){
- if((ipid!=NSigmaTPC) && (!HasTOFPID(track)) && track->Pt()<fPtTOFPIDmin)continue;//not filling TOF and combined if no TOF PID
+ if((ipid!=NSigmaTPC) && (!HasTOFPID(track)))continue;//not filling TOF and combined if no TOF PID
TH2F *h=GetHistogram2D(Form("NSigmaMC_%d_%d",SpKaon,ipid));
h->Fill(track->Pt(),fnsigmas[SpKaon][ipid]);
}
case 211:
if(fFIllPIDQAHistos){
for(Int_t ipid=0;ipid<=NSigmaPIDType;ipid++){
- if((ipid!=NSigmaTPC) && (!HasTOFPID(track)) && track->Pt()<fPtTOFPIDmin)continue;//not filling TOF and combined if no TOF PID
+ if((ipid!=NSigmaTPC) && (!HasTOFPID(track)))continue;//not filling TOF and combined if no TOF PID
TH2F *h=GetHistogram2D(Form("NSigmaMC_%d_%d",SpPion,ipid));
h->Fill(track->Pt(),fnsigmas[SpPion][ipid]);
}
}
-Float_t dEdx = track->GetTPCsignal();
- fHistoTPCdEdx->Fill(track->Pt(), dEdx);
-
- if(HasTOFPID(track))
-{
-Double_t beta = GetBeta(track);
-fHistoTOFbeta->Fill(track->Pt(), beta);
- }
-
- //do track identification(nsigma method)
- particletypeMC=GetParticle(track,fFIllPIDQAHistos);//******************************problem is here
-
//2-d TPCTOF map(for each Pt interval)
if(HasTOFPID(track)){
fTPCTOFPion3d->Fill(track->Pt(),fnsigmas[SpPion][NSigmaTOF],fnsigmas[SpPion][NSigmaTPC]);
if(track->Charge()<0) chargeval=-1;
if(chargeval==0) continue;
if (fapplyTrigefficiency || fapplyAssoefficiency)
- effmatrix=GetTrackbyTrackeffvalue(track,cent_v0,zvtx,particletypeMC);//get the tracking eff x TOF matching eff x PID eff x contamination factor for identified particles
+ effmatrix=GetTrackbyTrackeffvalue(track,effcent,zvtx,particletypeMC);//get the tracking eff x TOF matching eff x PID eff x contamination factor for identified particles
LRCParticlePID* copy1 = new LRCParticlePID(particletypeMC,chargeval,track->Pt(),track->Eta(), track->Phi(),effmatrix);
copy1->SetUniqueID(eventno * 100000 + (Int_t)trackscount);
tracksID->Add(copy1);
//*************************************************************still in event loop
-//same event delta-eta-deltaphi plot
-if(fSampleType=="pp") cent_v0=trackscount;//multiplicity
if(trackscount>0.0)
{
if (fSampleType=="pPb" || fSampleType=="PbPb") fCentralityCorrelation->Fill(cent_v0, trackscount);//only with unidentified tracks(i.e before PID selection);;;;;can be used to remove centrality outliers??????
//count selected events having centrality betn 0-100%
- fEventCounter->Fill(9);
+ fEventCounter->Fill(11);
//***************************************event no. counting
Bool_t isbaryontrig=kFALSE;
//same event delte-eta, delta-phi plot
if(tracksUNID && tracksUNID->GetEntriesFast()>0)//hadron triggered correlation
{//same event calculation starts
- if(ffilltrigassoUNID) Fillcorrelation(tracksUNID,0,cent_v0,zvtx,weghtval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigassoUNID");//mixcase=kFALSE (hadron-hadron correlation)
- if(tracksID && tracksID->GetEntriesFast()>0 && ffilltrigUNIDassoID) Fillcorrelation(tracksUNID,tracksID,cent_v0,zvtx,weghtval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigUNIDassoID");//mixcase=kFALSE (hadron-ID correlation)
+ if(ffilltrigassoUNID) Fillcorrelation(gReactionPlane,tracksUNID,0,cent_v0,zvtx,weghtval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigassoUNID");//mixcase=kFALSE (hadron-hadron correlation)
+ if(tracksID && tracksID->GetEntriesFast()>0 && ffilltrigUNIDassoID) Fillcorrelation(gReactionPlane,tracksUNID,tracksID,cent_v0,zvtx,weghtval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigUNIDassoID");//mixcase=kFALSE (hadron-ID correlation)
}
if(tracksID && tracksID->GetEntriesFast()>0)//ID triggered correlation
{//same event calculation starts
- if(tracksUNID && tracksUNID->GetEntriesFast()>0 && ffilltrigIDassoUNID) Fillcorrelation(tracksID,tracksUNID,cent_v0,zvtx,weghtval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigIDassoUNID");//mixcase=kFALSE (ID-hadron correlation)
- if(ffilltrigIDassoID) Fillcorrelation(tracksID,0,cent_v0,zvtx,weghtval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigIDassoID");//mixcase=kFALSE (ID-ID correlation)
+ if(tracksUNID && tracksUNID->GetEntriesFast()>0 && ffilltrigIDassoUNID) Fillcorrelation(gReactionPlane,tracksID,tracksUNID,cent_v0,zvtx,weghtval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigIDassoUNID");//mixcase=kFALSE (ID-hadron correlation)
+ if(ffilltrigIDassoID) Fillcorrelation(gReactionPlane,tracksID,0,cent_v0,zvtx,weghtval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigIDassoID");//mixcase=kFALSE (ID-ID correlation)
}
//still in main event loop
TObjArray* bgTracks = pool->GetEvent(jMix);
if(!bgTracks) continue;
if(ffilltrigassoUNID && tracksUNID && tracksUNID->GetEntriesFast()>0)//*******************************hadron trggered mixing
- Fillcorrelation(tracksUNID,bgTracks,cent_v0,zvtx,nmix1,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigassoUNID");//mixcase=kTRUE
+ Fillcorrelation(gReactionPlane,tracksUNID,bgTracks,cent_v0,zvtx,nmix1,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigassoUNID");//mixcase=kTRUE
if(ffilltrigIDassoUNID && tracksID && tracksID->GetEntriesFast()>0)//***********************************ID trggered mixing
- Fillcorrelation(tracksID,bgTracks,cent_v0,zvtx,nmix1,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigIDassoUNID");//mixcase=kTRUE
+ Fillcorrelation(gReactionPlane,tracksID,bgTracks,cent_v0,zvtx,nmix1,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigIDassoUNID");//mixcase=kTRUE
}// pool event loop ends mixing case
} //if pool->IsReady() condition ends mixing case
TObjArray* bgTracks2 = pool1->GetEvent(jMix);
if(!bgTracks2) continue;
if(ffilltrigUNIDassoID && tracksUNID && tracksUNID->GetEntriesFast()>0)
- Fillcorrelation(tracksUNID,bgTracks2,cent_v0,zvtx,nmix2,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigUNIDassoID");//mixcase=kTRUE
+ Fillcorrelation(gReactionPlane,tracksUNID,bgTracks2,cent_v0,zvtx,nmix2,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigUNIDassoID");//mixcase=kTRUE
if(ffilltrigIDassoID && tracksID && tracksID->GetEntriesFast()>0)
- Fillcorrelation(tracksID,bgTracks2,cent_v0,zvtx,nmix2,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigIDassoID");//mixcase=kTRUE
+ Fillcorrelation(gReactionPlane,tracksID,bgTracks2,cent_v0,zvtx,nmix2,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigIDassoID");//mixcase=kTRUE
}// pool event loop ends mixing case
} //if pool1->IsReady() condition ends mixing case
}//mixing with identified particles
//no. of events analyzed
-fEventCounter->Fill(11);
+fEventCounter->Fill(13);
}
if(tracksUNID) delete tracksUNID;
// count all events
fEventCounter->Fill(1);
- // get centrality object and check quality
- Double_t cent_v0=0;
+if (!fPID) return;//this should be available with each event even if we don't do PID selection
- if(fSampleType=="pPb" || fSampleType=="PbPb")
- {
- AliCentrality *centrality=0;
- if(aod)
- centrality = aod->GetHeader()->GetCentralityP();
- // if (centrality->GetQuality() != 0) return ;
+ Double_t cent_v0= -999.;
+ Double_t effcent=1.0;
+ Double_t gReactionPlane = -1.;
+ Float_t bSign = 0.;
+ Double_t trackscount=0;//counts particles passed filterbit cuts and kinematic cuts used in this analysis
- if(centrality)
- {
- cent_v0 = centrality->GetCentralityPercentile(fCentralityMethod);
- }
- else
- {
- cent_v0= -1;
- }
- }
- Float_t bSign = (aod->GetMagneticField() > 0) ? 1 : -1;//for two track efficiency cut in correlation function calculation
+ bSign = (aod->GetMagneticField() > 0) ? 1 : -1;//for two track efficiency cut in correlation function calculation
Float_t bSign1=aod->GetHeader()->GetMagneticField() ;//for dca cut in ClassifyTrack(), i.e in track loop
-// Pileup selection ************************************************
- if(frejectPileUp) //applicable only for TPC only tracks,not for hybrid tracks?.
- {
- if (fAnalysisUtils && fAnalysisUtils->IsPileUpEvent(aod)) return;
-//count events after PileUP cut
- fEventCounter->Fill(3);
- }
- if (!fPID) return;//this should be available with each event even if we don't do PID selection
+// check event cuts and fill event histograms and return the centrality or reference multiplicity value
+ if((cent_v0 = GetAcceptedEventMultiplicity(aod,kFALSE)) < 0){
+ return;
+ }
- //vertex selection(is it fine for PP?)
- if ( fVertextype==1){//for pPb basically if(!fAnalysisUtils->IsVertexSelected2013pA(aod)) return;
- trkVtx = aod->GetPrimaryVertex();
- if (!trkVtx || trkVtx->GetNContributors()<=0) return;
- TString vtxTtl = trkVtx->GetTitle();
- if (!vtxTtl.Contains("VertexerTracks")) return;
- zvtx = trkVtx->GetZ();
- const AliAODVertex* spdVtx = aod->GetPrimaryVertexSPD();
- if (!spdVtx || spdVtx->GetNContributors()<=0) return;
- TString vtxTyp = spdVtx->GetTitle();
- Double_t cov[6]={0};
- spdVtx->GetCovarianceMatrix(cov);
- Double_t zRes = TMath::Sqrt(cov[5]);
- if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
- if (TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
+ //get the event plane in case of PbPb
+ if(fSampleType=="PbPb"){
+ if(fRequestEventPlane){
+ gReactionPlane = GetEventPlane(aod,kFALSE);
+ fHistEventPlaneReco->Fill(gReactionPlane,cent_v0);
+ if(gReactionPlane < 0) return;
+ }
}
- else if(fVertextype==2) {//for pp and pb-pb case , taken from Jan's code
- Int_t nVertex = aod->GetNumberOfVertices();
- if( nVertex > 0 ) {
- trkVtx = aod->GetPrimaryVertex();
- Int_t nTracksPrim = trkVtx->GetNContributors();
- zvtx = trkVtx->GetZ();
- //if (fDebug > 1)AliInfo(Form(" Vertex in = %f with %d particles by %s data ...",zVertex,nTracksPrim,vertex->GetName()));
- // Reject TPC only vertex
- TString name(trkVtx->GetName());
- if (name.CompareTo("PrimaryVertex") && name.CompareTo("SPDVertex"))return;
- // Select a quality vertex by number of tracks?
- if( nTracksPrim < fnTracksVertex ) {
- //if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ...");
- return ;
- }
- // TODO remove vertexer Z events with dispersion > 0.02: Doesn't work for AOD at present
- //if (strcmp(vertex->GetTitle(), "AliVertexerZ") == 0 && vertex->GetDispersion() > 0.02)
- // return kFALSE;
- // if (fDebug > 1) AliInfo(" Primary-vertex Selection: event ACCEPTED...");
- }
- else return;
+ TObjArray* tracksUNID= new TObjArray;//track info before doing PID
+ tracksUNID->SetOwner(kTRUE); // IMPORTANT!
- }
- else if(fVertextype==0){//default case
- trkVtx = aod->GetPrimaryVertex();
- if (!trkVtx || trkVtx->GetNContributors()<=0) return;//proper number of contributors
- zvtx = trkVtx->GetZ();
- Double32_t fCov[6];
- trkVtx->GetCovarianceMatrix(fCov);
- if(fCov[5] == 0) return;//proper vertex resolution
- }
- else {
- AliInfo("Wrong Vertextype set for Primary-vertex Selection: event REJECTED ...");
- return;//as there is no proper sample type
- }
-
- fHistQA[0]->Fill((trkVtx->GetX()));fHistQA[1]->Fill((trkVtx->GetY()));fHistQA[2]->Fill((trkVtx->GetZ())); //for trkVtx only before vertex cut |zvtx|<10 cm
-
-//count events having a proper vertex
- fEventCounter->Fill(5);
-
- if (TMath::Abs(zvtx) > fzvtxcut) return;
-
-//count events after vertex cut
- fEventCounter->Fill(7);
-
-
- //if(!fAnalysisUtils->IsVertexSelected2013pA(aod)) return;
-
- fHistQA[3]->Fill((trkVtx->GetX()));fHistQA[4]->Fill((trkVtx->GetY()));fHistQA[5]->Fill((trkVtx->GetZ()));//after vertex cut,for trkVtx only
-
-
- if(!aod) return; //for safety
-
-if(fSampleType=="pPb" || fSampleType=="PbPb") if (cent_v0 < 0) return;//for pp case it is the multiplicity
-
- TObjArray* tracksUNID= new TObjArray;//track info before doing PID
- tracksUNID->SetOwner(kTRUE); // IMPORTANT!
-
- TObjArray* tracksID= new TObjArray;//only pions, kaons,protonsi.e. after doing the PID selection
+ TObjArray* tracksID= new TObjArray;//only pions, kaons,protons i.e. after doing the PID selection
tracksID->SetOwner(kTRUE); // IMPORTANT!
- Double_t trackscount=0.0;//in case of pp this will give the multiplicity after the track loop(only for unidentified particles that pass the filterbit and kinematic cuts)
-
+
eventno++;
Bool_t fTrigPtmin1=kFALSE;
if (!track) continue;
fHistQA[11]->Fill(track->GetTPCNcls());
Int_t particletype=-9999;//required for PID filling
- Int_t tracktype=ClassifyTrack(track,trkVtx,bSign1);//dcacut=kFALSE,onlyprimary=kFALSE
+ Int_t tracktype=ClassifyTrack(track,trkVtx,bSign1,kTRUE);//dcacut=kFALSE,onlyprimary=kFALSE
if(tracktype!=1) continue;
if(!track) continue;//for safety
//tag all particles as unidentified that passed filterbit & kinematic cuts
particletype=unidentified;
-
+ //To count the no. of tracks having an accepted track in a certain PT(e.g. Jet Pt) range
if(track->Pt()>=fminPtTrig) fTrigPtmin1=kTRUE;
if(track->Pt()>=(fminPtTrig+0.5)) fTrigPtmin2=kTRUE;
if(track->Pt()>=fmaxPtTrig) fTrigPtJet=kTRUE;
- if (fSampleType=="pp") cent_v0=15.0;//integrated over multiplicity [i.e each track has multiplicity 15.0](so put any fixed value for each track so that practically means there is only one bin in multiplicityi.e multiplicity intregated out )**************Important for efficiency related issues
+ if (fSampleType=="pp") effcent=15.0;//integrated over multiplicity [i.e each track has multiplicity 15.0](so put any fixed value for each track so that practically means there is only one bin in multiplicityi.e multiplicity intregated out )**************Important for efficiency related issues
//to reduce memory consumption in pool
if(track->Charge()<0) chargeval=-1;
if(chargeval==0) continue;
if (fapplyTrigefficiency || fapplyAssoefficiency)//get the trackingefficiency x contamination factor for unidentified particles
- effmatrix=GetTrackbyTrackeffvalue(track,cent_v0,zvtx,particletype);
+ effmatrix=GetTrackbyTrackeffvalue(track,effcent,zvtx,particletype);
LRCParticlePID* copy = new LRCParticlePID(particletype,chargeval,track->Pt(),track->Eta(), track->Phi(),effmatrix);
copy->SetUniqueID(eventno * 100000 + (Int_t)trackscount);
tracksUNID->Add(copy);//track information Storage for UNID correlation function(tracks that pass the filterbit & kinematic cuts only)
if(track->Charge()<0) chargeval=-1;
if(chargeval==0) continue;
if (fapplyTrigefficiency || fapplyAssoefficiency)
- effmatrix=GetTrackbyTrackeffvalue(track,cent_v0,zvtx,particletype);//get the tracking eff x TOF matching eff x PID eff x contamination factor for identified particles; Bool_t mesoneffrequired=kFALSE
+ effmatrix=GetTrackbyTrackeffvalue(track,effcent,zvtx,particletype);//get the tracking eff x TOF matching eff x PID eff x contamination factor for identified particles; Bool_t mesoneffrequired=kFALSE
LRCParticlePID* copy1 = new LRCParticlePID(particletype,chargeval,track->Pt(),track->Eta(), track->Phi(),effmatrix);
copy1->SetUniqueID(eventno * 100000 + (Int_t)trackscount);
tracksID->Add(copy1);
Float_t weightval=1.0;
-// cout<<fminPtAsso<<"***"<<fmaxPtAsso<<"*********************"<<fminPtTrig<<"***"<<fmaxPtTrig<<"*****************"<<kTrackVariablesPair<<endl;
-if(fSampleType=="pp") cent_v0=trackscount;//multiplicity
//fill the centrality/multiplicity distribution of the selected events
fhistcentrality->Fill(cent_v0);//*********************************WARNING::binning of cent_v0 is different for pp and pPb/PbPb case
if(fSampleType=="pPb" || fSampleType=="PbPb") fCentralityCorrelation->Fill(cent_v0, trackscount);//only with unidentified tracks(i.e before PID selection);;;;;can be used to remove centrality outliers??????
//count selected events having centrality betn 0-100%
- fEventCounter->Fill(9);
+ fEventCounter->Fill(11);
//***************************************event no. counting
Bool_t isbaryontrig=kFALSE;
if(tracksUNID && tracksUNID->GetEntriesFast()>0)//hadron triggered correlation
{//same event calculation starts
- if(ffilltrigassoUNID) Fillcorrelation(tracksUNID,0,cent_v0,zvtx,weightval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigassoUNID");//mixcase=kFALSE (hadron-hadron correlation)
- if(tracksID && tracksID->GetEntriesFast()>0 && ffilltrigUNIDassoID) Fillcorrelation(tracksUNID,tracksID,cent_v0,zvtx,weightval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigUNIDassoID");//mixcase=kFALSE (hadron-ID correlation)
+ if(ffilltrigassoUNID) Fillcorrelation(gReactionPlane,tracksUNID,0,cent_v0,zvtx,weightval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigassoUNID");//mixcase=kFALSE (hadron-hadron correlation)
+ if(tracksID && tracksID->GetEntriesFast()>0 && ffilltrigUNIDassoID) Fillcorrelation(gReactionPlane,tracksUNID,tracksID,cent_v0,zvtx,weightval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigUNIDassoID");//mixcase=kFALSE (hadron-ID correlation)
}
if(tracksID && tracksID->GetEntriesFast()>0)//ID triggered correlation
{//same event calculation starts
- if(tracksUNID && tracksUNID->GetEntriesFast()>0 && ffilltrigIDassoUNID) Fillcorrelation(tracksID,tracksUNID,cent_v0,zvtx,weightval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigIDassoUNID");//mixcase=kFALSE (ID-hadron correlation)
- if(ffilltrigIDassoID) Fillcorrelation(tracksID,0,cent_v0,zvtx,weightval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigIDassoID");//mixcase=kFALSE (ID-ID correlation)
+ if(tracksUNID && tracksUNID->GetEntriesFast()>0 && ffilltrigIDassoUNID) Fillcorrelation(gReactionPlane,tracksID,tracksUNID,cent_v0,zvtx,weightval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigIDassoUNID");//mixcase=kFALSE (ID-hadron correlation)
+ if(ffilltrigIDassoID) Fillcorrelation(gReactionPlane,tracksID,0,cent_v0,zvtx,weightval,kFALSE,bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kFALSE,"trigIDassoID");//mixcase=kFALSE (ID-ID correlation)
}
//still in main event loop
TObjArray* bgTracks = pool->GetEvent(jMix);
if(!bgTracks) continue;
if(ffilltrigassoUNID && tracksUNID && tracksUNID->GetEntriesFast()>0)//*******************************hadron trggered mixing
- Fillcorrelation(tracksUNID,bgTracks,cent_v0,zvtx,nmix1,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigassoUNID");//mixcase=kTRUE
+ Fillcorrelation(gReactionPlane,tracksUNID,bgTracks,cent_v0,zvtx,nmix1,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigassoUNID");//mixcase=kTRUE
if(ffilltrigIDassoUNID && tracksID && tracksID->GetEntriesFast()>0)//***********************************ID trggered mixing
- Fillcorrelation(tracksID,bgTracks,cent_v0,zvtx,nmix1,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigIDassoUNID");//mixcase=kTRUE
+ Fillcorrelation(gReactionPlane,tracksID,bgTracks,cent_v0,zvtx,nmix1,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigIDassoUNID");//mixcase=kTRUE
}// pool event loop ends mixing case
} //if pool->IsReady() condition ends mixing case
if(tracksUNID) {
TObjArray* bgTracks2 = pool1->GetEvent(jMix);
if(!bgTracks2) continue;
if(ffilltrigUNIDassoID && tracksUNID && tracksUNID->GetEntriesFast()>0)
- Fillcorrelation(tracksUNID,bgTracks2,cent_v0,zvtx,nmix2,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigUNIDassoID");//mixcase=kTRUE
+ Fillcorrelation(gReactionPlane,tracksUNID,bgTracks2,cent_v0,zvtx,nmix2,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigUNIDassoID");//mixcase=kTRUE
if(ffilltrigIDassoID && tracksID && tracksID->GetEntriesFast()>0)
- Fillcorrelation(tracksID,bgTracks2,cent_v0,zvtx,nmix2,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigIDassoID");//mixcase=kTRUE
+ Fillcorrelation(gReactionPlane,tracksID,bgTracks2,cent_v0,zvtx,nmix2,(jMix == 0),bSign,fPtOrderDataReco,ftwoTrackEfficiencyCutDataReco,kTRUE,"trigIDassoID");//mixcase=kTRUE
}// pool event loop ends mixing case
} //if pool1->IsReady() condition ends mixing case
//no. of events analyzed
-fEventCounter->Fill(11);
+fEventCounter->Fill(13);
//still in main event loop
}
//--------------------------------------------------------------------------------
-void AliTwoParticlePIDCorr::Fillcorrelation(TObjArray *trackstrig,TObjArray *tracksasso,Double_t cent,Float_t vtx,Float_t weight,Bool_t firstTime,Float_t bSign,Bool_t fPtOrder,Bool_t twoTrackEfficiencyCut,Bool_t mixcase,TString fillup)
+void AliTwoParticlePIDCorr::Fillcorrelation(Double_t gReactionPlane,TObjArray *trackstrig,TObjArray *tracksasso,Double_t cent,Float_t vtx,Float_t weight,Bool_t firstTime,Float_t bSign,Bool_t fPtOrder,Bool_t twoTrackEfficiencyCut,Bool_t mixcase,TString fillup)
{
//before calling this function check that either trackstrig & tracksasso are available
Float_t trigphi=trig->Phi();
Float_t trackefftrig=1.0;
if(fapplyTrigefficiency) trackefftrig=trig->geteffcorrectionval();
+
+ // Event plane (determine psi bin)
+ Double_t gPsiMinusPhi = 0.;
+ Double_t gPsiMinusPhiBin = -10.;
+if(fRequestEventPlane){
+ gPsiMinusPhi = TMath::Abs(trigphi - gReactionPlane);
+ //in-plane
+ if((gPsiMinusPhi <= 7.5*TMath::DegToRad())||
+ ((172.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 187.5*TMath::DegToRad())))
+ gPsiMinusPhiBin = 0.0;
+ //intermediate
+ else if(((37.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 52.5*TMath::DegToRad()))||
+ ((127.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 142.5*TMath::DegToRad()))||
+ ((217.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 232.5*TMath::DegToRad()))||
+ ((307.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 322.5*TMath::DegToRad())))
+ gPsiMinusPhiBin = 1.0;
+ //out of plane
+ else if(((82.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 97.5*TMath::DegToRad()))||
+ ((262.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 277.5*TMath::DegToRad())))
+ gPsiMinusPhiBin = 2.0;
+ //everything else
+ else
+ gPsiMinusPhiBin = 3.0;
+
+ fHistPsiMinusPhi->Fill(gPsiMinusPhiBin,gPsiMinusPhi);
+ }
+
//cout<<"*******************trackefftrig="<<trackefftrig<<endl;
Double_t* trigval;
Int_t dim=3;
- if(fcontainPIDtrig && SetChargeAxis==0) dim=4;
- if(!fcontainPIDtrig && SetChargeAxis==2) dim=4;
- if(fcontainPIDtrig && SetChargeAxis==2) dim=5;
+ Int_t eventplaneAxis=0;
+ if(fRequestEventPlane) eventplaneAxis=1;
+ if(fcontainPIDtrig && SetChargeAxis==0) dim=4+eventplaneAxis;
+ if(!fcontainPIDtrig && SetChargeAxis==2) dim=4+eventplaneAxis;
+ if(fcontainPIDtrig && SetChargeAxis==2) dim=5+eventplaneAxis;
trigval= new Double_t[dim];
trigval[0] = cent;
trigval[1] = vtx;
trigval[2] = trigpt;
- if(fcontainPIDtrig) {
- trigval[3] = particlepidtrig;
- if(SetChargeAxis==2) trigval[4]=trig->Charge();
+
+ if(fRequestEventPlane){
+ trigval[3] = gPsiMinusPhiBin;
+ if(fcontainPIDtrig && SetChargeAxis==0) trigval[4] = particlepidtrig;
+ if(!fcontainPIDtrig && SetChargeAxis==2) trigval[4] = trig->Charge();
+ if(fcontainPIDtrig && SetChargeAxis==2) {
+ trigval[4] = particlepidtrig;
+ trigval[5] = trig->Charge();
+ }
}
- if(!fcontainPIDtrig) {
- if(SetChargeAxis==2) trigval[3]=trig->Charge();
+ if(!fRequestEventPlane){
+ if(fcontainPIDtrig && SetChargeAxis==0) trigval[3] = particlepidtrig;
+ if(!fcontainPIDtrig && SetChargeAxis==2) trigval[3] = trig->Charge();
+ if(fcontainPIDtrig && SetChargeAxis==2) {
+ trigval[3] = particlepidtrig;
+ trigval[4] = trig->Charge();
+ }
}
+
+
if (fWeightPerEvent)
{
// leads effectively to a filling of one entry per filled trigger particle pT bin
if(!asso) continue;
- //to avoid overflow qnd underflow
+ //to avoid overflow and underflow
if(asso->Pt()<fminPtAsso || asso->Pt()>fmaxPtAsso) continue;//***********************Important
//if(fmaxPtAsso==fminPtTrig) {if(asso->Pt()==fminPtTrig) continue;}//******************Think about it!
Float_t effweight=trackefftrig*trackeffasso*weightperevent;
// if(mixcase==kFALSE) cout<<"*******************effweight="<<effweight<<endl;
Double_t* vars;
- vars= new Double_t[kTrackVariablesPair];
+ Int_t dimused=kTrackVariablesPair+eventplaneAxis;
+ vars= new Double_t[dimused];
vars[0]=cent;
vars[1]=vtx;
vars[2]=trigpt;
vars[3]=asso->Pt();
vars[4]=deleta;
vars[5]=delphi;
+
+ Int_t dimension=6;
+ if(fRequestEventPlane)
+ {
+ vars[6]=gPsiMinusPhiBin;
+ dimension=7;
+ }
+
if(!fcontainPIDtrig && !fcontainPIDasso && SetChargeAxis==2){
- vars[6]=trig->Charge();
- vars[7]=asso->Charge();
+ vars[dimension]=trig->Charge();
+ vars[dimension+1]=asso->Charge();
}
if(fcontainPIDtrig && !fcontainPIDasso){
- vars[6]=particlepidtrig;
+ vars[dimension]=particlepidtrig;
if(SetChargeAxis==2){
- vars[7]=trig->Charge();
- vars[8]=asso->Charge();
+ vars[dimension+1]=trig->Charge();
+ vars[dimension+2]=asso->Charge();
}
}
if(!fcontainPIDtrig && fcontainPIDasso){
- vars[6]=particlepidasso;
+ vars[dimension]=particlepidasso;
if(SetChargeAxis==2){
- vars[7]=trig->Charge();
- vars[8]=asso->Charge();
+ vars[dimension+1]=trig->Charge();
+ vars[dimension+2]=asso->Charge();
}
}
if(fcontainPIDtrig && fcontainPIDasso){
- vars[6]=particlepidtrig;
- vars[7]=particlepidasso;
+ vars[dimension]=particlepidtrig;
+ vars[dimension+1]=particlepidasso;
if(SetChargeAxis==2){
- vars[8]=trig->Charge();
- vars[9]=asso->Charge();
+ vars[dimension+2]=trig->Charge();
+ vars[dimension+3]=asso->Charge();
}
}
return effvalue;
}
-//-----------------------------------------------------------------------
+//---------------------------------------------------------------------------------
-Int_t AliTwoParticlePIDCorr::ClassifyTrack(AliAODTrack* track,AliAODVertex* vertex,Float_t magfield)
+Int_t AliTwoParticlePIDCorr::ClassifyTrack(AliAODTrack* track,AliAODVertex* vertex,Float_t magfield, Bool_t fill)
{
if(!track) return 0;
//select only primary traks(for data & reco MC tracks)
if(fonlyprimarydatareco && track->GetType()!=AliAODTrack::kPrimary) return 0;
if(track->Charge()==0) return 0;
- fHistQA[12]->Fill(track->GetTPCNcls());
+ if (fill) fHistQA[12]->Fill(track->GetTPCNcls());
Float_t dxy, dz;
dxy = track->DCA();
dz = track->ZAtDCA();
- fHistQA[6]->Fill(dxy);
- fHistQA[7]->Fill(dz);
+ if (fill) fHistQA[6]->Fill(dxy);
+ if (fill) fHistQA[7]->Fill(dz);
Float_t chi2ndf = track->Chi2perNDF();
- fHistQA[13]->Fill(chi2ndf);
- Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
- fHistQA[14]->Fill(nCrossedRowsTPC);
+ if (fill) fHistQA[13]->Fill(chi2ndf);
+ // Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
+ Float_t nCrossedRowsTPC = track->GetTPCNCrossedRows();
+ if (fill) fHistQA[14]->Fill(nCrossedRowsTPC);
//Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;
if (track->GetTPCNclsF()>0) {
Float_t ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC/track->GetTPCNclsF();
- fHistQA[15]->Fill(ratioCrossedRowsOverFindableClustersTPC);
+ if (fill) fHistQA[15]->Fill(ratioCrossedRowsOverFindableClustersTPC);
}
//accepted tracks
Float_t pt=track->Pt();
if(pt< fminPt || pt> fmaxPt) return 0;
if(TMath::Abs(track->Eta())> fmaxeta) return 0;
if(track->Phi()<0. || track->Phi()>2*TMath::Pi()) return 0;
- //if (!HasTPCPID(track)) return 0;//trigger & associated particles must have TPC PID,Is it required
+ //if (!HasTPCPID(track)) return 0;//trigger & associated particles must have TPC PID,Is it required???
// DCA XY
if (fdcacut && fDCAXYCut)
{
if (frac > fSharedClusterCut)
return 0;
}
- fHistQA[8]->Fill(pt);
- fHistQA[9]->Fill(track->Eta());
- fHistQA[10]->Fill(track->Phi());
+ if (fill) fHistQA[8]->Fill(pt);
+ if (fill) fHistQA[9]->Fill(track->Eta());
+ if (fill) fHistQA[10]->Fill(track->Phi());
return 1;
}
//________________________________________________________________________________
//This function is called within the func GetParticle() for accepted tracks only i.e.after call of Classifytrack() & for those tracks which have proper TPC PID response . combined nsigma(circular) cut only for particles having pt upto 4.0 Gev/c and beyond that use the asymmetric nsigma cut around pion's mean position in TPC ( while filling the TObjArray for trig & asso )
Float_t pt=track->Pt();
+//plot the separation power
+
+Double_t bethe[AliPID::kSPECIES]={0.};
+Double_t sigma_TPC[AliPID::kSPECIES]={0.};
+
+ Double_t Pi_Ka_sep[NSigmaPIDType+1]={0.};
+ Double_t Pi_Pr_sep[NSigmaPIDType+1]={0.};
+ Double_t Ka_Pr_sep[NSigmaPIDType+1]={0.};
+
+
+ Double_t ptpc = track->GetTPCmomentum();
+ Int_t dEdxN = track->GetTPCsignalN();
+ for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
+ bethe[ipart] = fPID->GetTPCResponse().GetExpectedSignal(ptpc, (AliPID::EParticleType)ipart);
+ //Double_t diff = dEdx - bethe;
+ sigma_TPC[ipart] = fPID->GetTPCResponse().GetExpectedSigma(ptpc, dEdxN, (AliPID::EParticleType)ipart);
+ //nSigma[ipart] = diff / sigma;
+ }
+ Pi_Ka_sep[NSigmaTPC]=TMath::Abs(bethe[AliPID::kPion]-bethe[AliPID::kKaon])/((sigma_TPC[AliPID::kPion]+sigma_TPC[AliPID::kKaon])/2.0);
+ Pi_Pr_sep[NSigmaTPC]=TMath::Abs(bethe[AliPID::kPion]-bethe[AliPID::kProton])/((sigma_TPC[AliPID::kPion]+sigma_TPC[AliPID::kProton])/2.0);
+ Ka_Pr_sep[NSigmaTPC]=TMath::Abs(bethe[AliPID::kKaon]-bethe[AliPID::kProton])/((sigma_TPC[AliPID::kKaon]+sigma_TPC[AliPID::kProton])/2.0);
+
+
+Double_t sigma_TOF[AliPID::kSPECIES]={0.};
+
+if(HasTOFPID(track) && pt>fPtTOFPIDmin)
+ {
+ Double_t timei[AliPID::kSPECIES];
+ track->GetIntegratedTimes(timei);
+ for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) { sigma_TOF[ipart]= fPID->GetTOFResponse().GetExpectedSigma(track->P(), timei[ipart], AliPID::ParticleMass(ipart));}
+ Pi_Ka_sep[NSigmaTOF]=TMath::Abs(timei[AliPID::kPion]-timei[AliPID::kKaon])/((sigma_TOF[AliPID::kPion]+sigma_TOF[AliPID::kKaon])/2.0);
+ Pi_Pr_sep[NSigmaTOF]=TMath::Abs(timei[AliPID::kPion]-timei[AliPID::kProton])/((sigma_TOF[AliPID::kPion]+sigma_TOF[AliPID::kProton])/2.0);
+ Ka_Pr_sep[NSigmaTOF]=TMath::Abs(timei[AliPID::kKaon]-timei[AliPID::kProton])/((sigma_TOF[AliPID::kKaon]+sigma_TOF[AliPID::kProton])/2.0);
+
+ Pi_Ka_sep[NSigmaTPCTOF]=TMath::Abs(Pi_Ka_sep[NSigmaTPC]*Pi_Ka_sep[NSigmaTPC]+Pi_Ka_sep[NSigmaTOF]*Pi_Ka_sep[NSigmaTOF]);
+ Pi_Pr_sep[NSigmaTPCTOF]=TMath::Abs(Pi_Pr_sep[NSigmaTPC]*Pi_Pr_sep[NSigmaTPC]+Pi_Pr_sep[NSigmaTOF]*Pi_Pr_sep[NSigmaTOF]);
+ Ka_Pr_sep[NSigmaTPCTOF]=TMath::Abs(Ka_Pr_sep[NSigmaTPC]*Ka_Pr_sep[NSigmaTPC]+Ka_Pr_sep[NSigmaTOF]*Ka_Pr_sep[NSigmaTOF]);
+ }
+
+
+//fill separation power histograms
+ for(Int_t ipid=0;ipid<=NSigmaPIDType;ipid++){
+ if(ipid==0){
+ TH2F *h=GetHistogram2D(Form("Pi_Ka_sep_%d",ipid));
+ h->Fill(track->Pt(),Pi_Ka_sep[ipid]);
+ TH2F *h1=GetHistogram2D(Form("Pi_Pr_sep_%d",ipid));
+ h1->Fill(track->Pt(),Pi_Pr_sep[ipid]);
+ TH2F *h2=GetHistogram2D(Form("Ka_Pr_sep_%d",ipid));
+ h2->Fill(track->Pt(),Ka_Pr_sep[ipid]);
+ }
+ if(HasTOFPID(track) && pt>fPtTOFPIDmin && ipid!=0){
+ TH2F *h=GetHistogram2D(Form("Pi_Ka_sep_%d",ipid));
+ h->Fill(track->Pt(),Pi_Ka_sep[ipid]);
+ TH2F *h1=GetHistogram2D(Form("Pi_Pr_sep_%d",ipid));
+ h1->Fill(track->Pt(),Pi_Pr_sep[ipid]);
+ TH2F *h2=GetHistogram2D(Form("Ka_Pr_sep_%d",ipid));
+ h2->Fill(track->Pt(),Ka_Pr_sep[ipid]);
+ }
+ }
+
+
//it is assumed that every track that passed the filterbit have proper TPC response(!!)
Float_t nsigmaTPCkPion =fPID->NumberOfSigmasTPC(track, AliPID::kPion);
Float_t nsigmaTPCkKaon =fPID->NumberOfSigmasTPC(track, AliPID::kKaon);
//Fill NSigma SeparationPlot
for(Int_t ipart=0;ipart<NSpecies;ipart++){
for(Int_t ipid=0;ipid<=NSigmaPIDType;ipid++){
- if((ipid!=NSigmaTPC) && (!HasTOFPID(track)) && track->Pt()<fPtTOFPIDmin)continue;//not filling TOF and combined if no TOF PID
+ if((ipid!=NSigmaTPC) && (!HasTOFPID(track)))continue;//not filling TOF and combined if no TOF PID
TH2F *h=GetHistogram2D(Form("NSigma_%d_%d",ipart,ipid));
h->Fill(track->Pt(),fnsigmas[ipart][ipid]);
}
Int_t AliTwoParticlePIDCorr::FindMinNSigma(AliAODTrack *track,Bool_t FillQAHistos)
{
//this function is always called after calling the function CalculateNSigmas(AliAODTrack *track)
-if(fRequestTOFPID && track->Pt()>fPtTOFPIDmin && track->Pt()<=fPtTOFPIDmax && (!HasTOFPID(track)) )return SpUndefined;//so any track having Pt>0.6 && Pt<=4.0 Gev withot having proper TOF response will be defined as SpUndefined
+if(fRequestTOFPID && track->Pt()>fPtTOFPIDmin && (!HasTOFPID(track)) )return SpUndefined;//so any track having Pt>0.6 withot having proper TOF response will be defined as SpUndefined
//get the identity of the particle with the minimum Nsigma
Float_t nsigmaPion=999., nsigmaKaon=999., nsigmaProton=999.;
switch (fPIDType){
nsigmaKaon = TMath::Abs(fnsigmas[SpKaon][NSigmaTPCTOF]) ;
nsigmaPion = TMath::Abs(fnsigmas[SpPion][NSigmaTPCTOF]) ;
break;
+ case Bayes://the nsigma in the bayesian is used to clean with a very large n-sigma value
+ nsigmaProton = TMath::Abs(fnsigmas[SpProton][NSigmaTPCTOF]);
+ nsigmaKaon = TMath::Abs(fnsigmas[SpKaon][NSigmaTPCTOF]) ;
+ nsigmaPion = TMath::Abs(fnsigmas[SpPion][NSigmaTPCTOF]) ;
+ break;
+ }
+
+
+if(fdiffPIDcutvalues){
+ if(track->Pt()<=4) fNSigmaPID=fPIDCutval1;
+ if(track->Pt()>4 && track->Pt()<=6) fNSigmaPID=fPIDCutval2;
+ if(track->Pt()>6 && track->Pt()<=8) fNSigmaPID=fPIDCutval3;
+ if(track->Pt()>8) fNSigmaPID=fPIDCutval4;
}
- if(track->Pt()<=fPtTOFPIDmax) { //the range upto which combined TPC-TOF cut can be used(here 4.0 Gev/C)
// guess the particle based on the smaller nsigma (within fNSigmaPID)
if( ( nsigmaKaon==nsigmaPion ) && ( nsigmaKaon==nsigmaProton )) return SpUndefined;//it is the default value for the three
if( ( nsigmaKaon < nsigmaPion ) && ( nsigmaKaon < nsigmaProton ) && (nsigmaKaon < fNSigmaPID)){
- if((fHighPtKaonNSigmaPID>0) && (track->Pt()>fHighPtKaonSigma) && (nsigmaKaon > fHighPtKaonNSigmaPID)) return SpUndefined;
+ if((fHighPtKaonNSigmaPID>0) && (track->Pt()>fHighPtKaonSigma) && (nsigmaKaon > fHighPtKaonNSigmaPID)) return SpUndefined;//different nsigma cut for kaons above a particular Pt range(within the TPC-TOF PID range)
if(FillQAHistos){
for(Int_t ipid=0;ipid<=NSigmaPIDType;ipid++){
- if((ipid!=NSigmaTPC) && (!HasTOFPID(track)) && (track->Pt()<fPtTOFPIDmin))continue;//not filling TOF and combined if no TOF PID
+ if((ipid!=NSigmaTPC) && (!HasTOFPID(track)))continue;//not filling TOF and combined if no TOF PID
TH2F *h=GetHistogram2D(Form("NSigmaRec_%d_%d",SpKaon,ipid));
h->Fill(track->Pt(),fnsigmas[SpKaon][ipid]);
}
if( ( nsigmaPion < nsigmaKaon ) && ( nsigmaPion < nsigmaProton ) && (nsigmaPion < fNSigmaPID)) {
if(FillQAHistos){
for(Int_t ipid=0;ipid<=NSigmaPIDType;ipid++){
- if((ipid!=NSigmaTPC) && (!HasTOFPID(track)) && (track->Pt()<fPtTOFPIDmin))continue;//not filling TOF and combined if no TOF PID
+ if((ipid!=NSigmaTPC) && (!HasTOFPID(track)))continue;//not filling TOF and combined if no TOF PID
TH2F *h=GetHistogram2D(Form("NSigmaRec_%d_%d",SpPion,ipid));
h->Fill(track->Pt(),fnsigmas[SpPion][ipid]);
}
if( ( nsigmaProton < nsigmaKaon ) && ( nsigmaProton < nsigmaPion ) && (nsigmaProton < fNSigmaPID)) {
if(FillQAHistos){
for(Int_t ipid=0;ipid<=NSigmaPIDType;ipid++){
- if((ipid!=NSigmaTPC) && (!HasTOFPID(track)) && (track->Pt()<fPtTOFPIDmin))continue;//not filling TOF and combined if no TOF PID
+ if((ipid!=NSigmaTPC) && (!HasTOFPID(track)))continue;//not filling TOF and combined if no TOF PID
TH2F *h=GetHistogram2D(Form("NSigmaRec_%d_%d",SpProton,ipid));
h->Fill(track->Pt(),fnsigmas[SpProton][ipid]);
}
// else, return undefined
return SpUndefined;
- }
- else {//asymmetric nsigma cut around pion's mean position for tracks having Pt>4.0 Gev
- if(fminprotonsigmacut<fnsigmas[SpPion][NSigmaTPC] && fnsigmas[SpPion][NSigmaTPC]<fmaxprotonsigmacut) return SpProton;
- if(fminpionsigmacut<fnsigmas[SpPion][NSigmaTPC] && fnsigmas[SpPion][NSigmaTPC]<fmaxpionsigmacut) return SpPion;
-// else, return undefined(here we don't detect kaons)
- return SpUndefined;
- }
-
+
+
}
//------------------------------------------------------------------------------------------
nsigmaKaon = TMath::Abs(fnsigmas[SpKaon][NSigmaTPCTOF]) ;
nsigmaPion = TMath::Abs(fnsigmas[SpPion][NSigmaTPCTOF]) ;
break;
+ case Bayes://the nsigma in the bayesian is used to clean with a very large n-sigma value
+ nsigmaProton = TMath::Abs(fnsigmas[SpProton][NSigmaTPCTOF]);
+ nsigmaKaon = TMath::Abs(fnsigmas[SpKaon][NSigmaTPCTOF]) ;
+ nsigmaPion = TMath::Abs(fnsigmas[SpPion][NSigmaTPCTOF]) ;
+ break;
}
- //there is chance of overlapping only for particles having pt below 4.0 GEv
- if(trk->Pt()<=4.0){
+ // Actually the tracks in the overlapping region(in TPC-TOF nSigma plane) will be ignored
+
if(nsigmaPion<fNSigmaPID && MinNSigma!=SpPion)fHasDoubleCounting[SpPion]=kTRUE;
if(nsigmaKaon<fNSigmaPID && MinNSigma!=SpKaon)fHasDoubleCounting[SpKaon]=kTRUE;
if(nsigmaProton<fNSigmaPID && MinNSigma!=SpProton)fHasDoubleCounting[SpProton]=kTRUE;
- }
+
if(FIllQAHistos){
//fill NSigma distr for double counting
for(Int_t ipart=0;ipart<NSpecies;ipart++){
- if(fHasDoubleCounting[ipart]){
+ if(fHasDoubleCounting[ipart]){//this may be kTRUE only for particles having Pt<=4.0 GeV/C, so this histo contains all the particles having Pt<=4.0 GeV/C in the nsigma overlapping region in TPC/TPC-TOF plane
for(Int_t ipid=0;ipid<=NSigmaPIDType;ipid++){
- if((ipid!=NSigmaTPC) && (!HasTOFPID(trk)) && (trk->Pt()<fPtTOFPIDmin))continue;//not filling TOF and combined if no TOF PID
+ if((ipid!=NSigmaTPC) && (!HasTOFPID(trk)))continue;//not filling TOF and combined if no TOF PID
TH2F *h=GetHistogram2D(Form("NSigmaDC_%d_%d",ipart,ipid));
h->Fill(trk->Pt(),fnsigmas[ipart][ipid]);
}
return fHasDoubleCounting;
}
+//////////////////////////////////////////////////////////////////////////////////////////////////
+
+Bool_t* AliTwoParticlePIDCorr::GetAllCompatibleIdentitiesNSigma(AliAODTrack * trk,Bool_t FIllQAHistos){
+ //mainly intended to check the probability of the PID of the tracks which are in the overlapping nSigma regions and near about the middle position from the mean position of two ID particle
+ Bool_t *IDs=GetDoubleCounting(trk,FIllQAHistos);
+ IDs[FindMinNSigma(trk,FIllQAHistos)]=kTRUE;
+ return IDs;
+
+}
+//////////////////////////////////////////////////////////////////////////////////////////////////
+
+UInt_t AliTwoParticlePIDCorr::CalcPIDCombined(AliAODTrack *track, Int_t detMask, Double_t* prob) const{
+ //
+ // Bayesian PID calculation
+ //
+ for(Int_t i=0;i<AliPID::kSPECIES;i++)
+ {
+ prob[i]=0.;
+ }
+ fPIDCombined->SetDetectorMask(detMask);
+
+ return fPIDCombined->ComputeProbabilities((AliAODTrack*)track, fPID, prob);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+
+Int_t AliTwoParticlePIDCorr::GetIDBayes(AliAODTrack * trk, Bool_t FIllQAHistos){
+
+ Bool_t *IDs=GetAllCompatibleIdentitiesNSigma(trk,FIllQAHistos);
+
+
+ //Filling of Probability histos
+ Double_t probTPC[AliPID::kSPECIES]={0.};
+ Double_t probTOF[AliPID::kSPECIES]={0.};
+ Double_t probTPCTOF[AliPID::kSPECIES]={0.};
+
+ UInt_t detUsedTPC = 0;
+ UInt_t detUsedTOF = 0;
+ UInt_t detUsedTPCTOF = 0;
+
+ //get the TPC probability
+ fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
+ detUsedTPC = fPIDCombined->ComputeProbabilities(trk, fPID, probTPC);
+if(detUsedTPC == AliPIDResponse::kDetTPC)
+ {
+for(Int_t ipart=0;ipart<NSpecies;ipart++){
+
+ TH2F *h=GetHistogram2D(Form("probBayes_TPC_%d",ipart));
+ if(ipart==0) h->Fill(trk->Pt(),probTPC[AliPID::kPion]);
+ if(ipart==1) h->Fill(trk->Pt(),probTPC[AliPID::kKaon]);
+ if(ipart==2) h->Fill(trk->Pt(),probTPC[AliPID::kProton]);
+ }
+ }
+
+ //get the TOF probability
+ fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF);
+ detUsedTOF = fPIDCombined->ComputeProbabilities(trk, fPID, probTOF);
+if(detUsedTOF == AliPIDResponse::kDetTOF)
+ {
+for(Int_t ipart=0;ipart<NSpecies;ipart++){
+ TH2F *h=GetHistogram2D(Form("probBayes_TOF_%d",ipart));
+ if(ipart==0) h->Fill(trk->Pt(),probTOF[AliPID::kPion]);
+ if(ipart==1) h->Fill(trk->Pt(),probTOF[AliPID::kKaon]);
+ if(ipart==2) h->Fill(trk->Pt(),probTOF[AliPID::kProton]);
+ }
+ }
+
+ //get the TPC-TOF probability
+ fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF|AliPIDResponse::kDetTPC);
+ detUsedTPCTOF = fPIDCombined->ComputeProbabilities(trk, fPID, probTPCTOF);
+if(detUsedTPCTOF == (AliPIDResponse::kDetTOF|AliPIDResponse::kDetTPC))
+ {
+for(Int_t ipart=0;ipart<NSpecies;ipart++){
+ TH2F *h=GetHistogram2D(Form("probBayes_TPCTOF_%d",ipart));
+ if(ipart==0) h->Fill(trk->Pt(),probTPCTOF[AliPID::kPion]);
+ if(ipart==1) h->Fill(trk->Pt(),probTPCTOF[AliPID::kKaon]);
+ if(ipart==2) h->Fill(trk->Pt(),probTPCTOF[AliPID::kProton]);
+}
+ }
+
+
+ Double_t probBayes[AliPID::kSPECIES];
+
+ UInt_t detUsed= 0;
+ if(HasTOFPID(trk) && trk->Pt()>fPtTOFPIDmin){//use TOF information
+ detUsed = CalcPIDCombined(trk, AliPIDResponse::kDetTOF|AliPIDResponse::kDetTPC, probBayes);
+ if(detUsed != (AliPIDResponse::kDetTOF|AliPIDResponse::kDetTPC))return SpUndefined;//check that TPC and TOF are used
+ }else{
+ detUsed = CalcPIDCombined(trk,AliPIDResponse::kDetTPC, probBayes);
+ if(detUsed != AliPIDResponse::kDetTPC)return SpUndefined;//check that TPC is used
+ }
+
+ //the probability has to be normalized to one, we check it
+ Double_t sump=0.;
+ for(Int_t ipart=0;ipart<AliPID::kSPECIES;ipart++)sump+=probBayes[ipart];
+ if(sump<.99 && sump>1.01){//FIXME precision problem in the sum, workaround
+ AliFatal("Bayesian probability not normalized to one");
+ }
+
+ if(fdiffPIDcutvalues){
+ if(trk->Pt()<=4) fBayesCut=fPIDCutval1;
+ if(trk->Pt()>4 && trk->Pt()<=6) fBayesCut=fPIDCutval2;
+ if(trk->Pt()>6 && trk->Pt()<=8) fBayesCut=fPIDCutval3;
+ if(trk->Pt()>8) fBayesCut=fPIDCutval4;
+ }
+
+
+ //probabilities are normalized to one, if the cut is above .5 there is no problem
+ if(probBayes[AliPID::kPion]>fBayesCut && IDs[SpPion]==1){
+ TH2F *h=GetHistogram2D(Form("BayesRec_%d",SpPion));
+ h->Fill(trk->Pt(),probBayes[AliPID::kPion]);
+ return SpPion;
+ }
+ else if(probBayes[AliPID::kKaon]>fBayesCut && IDs[SpKaon]==1){
+ TH2F *h=GetHistogram2D(Form("BayesRec_%d",SpKaon));
+ h->Fill(trk->Pt(),probBayes[AliPID::kKaon]);
+ return SpKaon;
+ }
+ else if(probBayes[AliPID::kProton]>fBayesCut && IDs[SpProton]==1){
+ TH2F *h=GetHistogram2D(Form("BayesRec_%d",SpProton));
+ h->Fill(trk->Pt(),probBayes[AliPID::kProton]);
+ return SpProton;
+ }
+ else{
+ return SpUndefined;
+ }
+}
+
+
//////////////////////////////////////////////////////////////////////////////////////////////////
Int_t AliTwoParticlePIDCorr::GetParticle(AliAODTrack * trk, Bool_t FIllQAHistos){
//return the specie according to the minimum nsigma value
Int_t ID=SpUndefined;
CalculateNSigmas(trk,FIllQAHistos);//fill the data member fnsigmas with the nsigmas value [ipart][iPID]
-
- ID=FindMinNSigma(trk,FIllQAHistos);
+
+ //Do PID
+ if(fPIDType==Bayes){//use bayesianPID
+
+ if(!fPIDCombined) {
+ AliFatal("PIDCombined object has to be set in the steering macro");
+ }
+
+ ID = GetIDBayes(trk,FIllQAHistos);
+
+ }else{ //use nsigma PID
+
+ ID=FindMinNSigma(trk,FIllQAHistos);
if(fUseExclusiveNSigma){ //if one particle has double counting and exclusive nsigma is requested ID = kSpUndefined
Bool_t *HasDC;
HasDC=GetDoubleCounting(trk,FIllQAHistos);
if(HasDC[ipart]==kTRUE) ID = SpUndefined;
}
}
-
+ }
//Fill PID signal plot
if(ID != SpUndefined){
for(Int_t idet=0;idet<fNDetectors;idet++){
return kFALSE;
}
//________________________________________________________________________
+
+Bool_t AliTwoParticlePIDCorr::AcceptEventCentralityWeight(Double_t centrality)
+{
+ // rejects "randomly" events such that the centrality gets flat
+ // uses fCentralityWeights histogram
+
+ // TODO code taken and adapted from AliRDHFCuts; waiting for general class AliCentralityFlattening
+
+ Double_t weight = fCentralityWeights->GetBinContent(fCentralityWeights->FindBin(centrality));
+ Double_t centralityDigits = centrality*100. - (Int_t)(centrality*100.);
+
+ Bool_t result = kFALSE;
+ if (centralityDigits < weight)
+ result = kTRUE;
+
+ AliInfo(Form("Centrality: %f; Digits: %f; Weight: %f; Result: %d", centrality, centralityDigits, weight, result));
+
+ return result;
+}
+
+//____________________________________________________________________
+void AliTwoParticlePIDCorr::ShiftTracks(TObjArray* tracks, Double_t angle)
+{
+ // shifts the phi angle of all tracks by angle
+ // 0 <= angle <= 2pi
+
+ for (Int_t i=0; i<tracks->GetEntriesFast(); ++i)
+ {
+ LRCParticlePID *part=(LRCParticlePID*)(tracks->UncheckedAt(i));
+
+ Double_t newAngle = part->Phi() + angle;
+ if (newAngle >= TMath::TwoPi())
+ newAngle -= TMath::TwoPi();
+
+ part->SetPhi(newAngle);
+ }
+}
+
+
+//________________________________________________________________________
+void AliTwoParticlePIDCorr::SetVZEROCalibrationFile(const char* filename,const char* lhcPeriod) {
+ //Function to setup the VZERO gain equalization
+ //============Get the equilization map============//
+ TFile *calibrationFile = TFile::Open(filename);
+ if((!calibrationFile)||(!calibrationFile->IsOpen())) {
+ Printf("No calibration file found!!!");
+ return;
+ }
+
+ TList *list = dynamic_cast<TList *>(calibrationFile->Get(lhcPeriod));
+ if(!list) {
+ Printf("Calibration TList not found!!!");
+ return;
+ }
+
+ fHistVZEROAGainEqualizationMap = dynamic_cast<TH1F *>(list->FindObject("gHistVZEROAGainEqualizationMap"));
+ if(!fHistVZEROAGainEqualizationMap) {
+ Printf("VZERO-A calibration object not found!!!");
+ return;
+ }
+ fHistVZEROCGainEqualizationMap = dynamic_cast<TH1F *>(list->FindObject("gHistVZEROCGainEqualizationMap"));
+ if(!fHistVZEROCGainEqualizationMap) {
+ Printf("VZERO-C calibration object not found!!!");
+ return;
+ }
+
+ fHistVZEROChannelGainEqualizationMap = dynamic_cast<TH2F *>(list->FindObject("gHistVZEROChannelGainEqualizationMap"));
+ if(!fHistVZEROChannelGainEqualizationMap) {
+ Printf("VZERO channel calibration object not found!!!");
+ return;
+ }
+}
+
+//________________________________________________________________________
+Double_t AliTwoParticlePIDCorr::GetChannelEqualizationFactor(Int_t run,Int_t channel) {
+ //
+ if(!fHistVZEROAGainEqualizationMap) return 1.0;
+
+ for(Int_t iBinX = 1; iBinX <= fHistVZEROChannelGainEqualizationMap->GetNbinsX(); iBinX++) {
+ Int_t gRunNumber = atoi(fHistVZEROChannelGainEqualizationMap->GetXaxis()->GetBinLabel(iBinX));
+ if(gRunNumber == run)
+ return fHistVZEROChannelGainEqualizationMap->GetBinContent(iBinX,channel+1);
+ }
+
+ return 1.0;
+}
+
+//________________________________________________________________________
+Double_t AliTwoParticlePIDCorr::GetEqualizationFactor(Int_t run, const char* side) {
+ //
+ if(!fHistVZEROAGainEqualizationMap) return 1.0;
+
+ TString gVZEROSide = side;
+ for(Int_t iBinX = 1; iBinX < fHistVZEROAGainEqualizationMap->GetNbinsX(); iBinX++) {
+ Int_t gRunNumber = atoi(fHistVZEROAGainEqualizationMap->GetXaxis()->GetBinLabel(iBinX));
+ //cout<<"Looking for run "<<run<<" - current run: "<<gRunNumber<<endl;
+ if(gRunNumber == run) {
+ if(gVZEROSide == "A")
+ return fHistVZEROAGainEqualizationMap->GetBinContent(iBinX);
+ else if(gVZEROSide == "C")
+ return fHistVZEROCGainEqualizationMap->GetBinContent(iBinX);
+ }
+ }
+
+ return 1.0;
+}
+//________________________________________________________________________
+Double_t AliTwoParticlePIDCorr::GetReferenceMultiplicityVZEROFromAOD(AliAODEvent *event){
+ //Function that returns the reference multiplicity from AODs (data or reco MC)
+ //Different ref. mult. implemented: V0M, V0A, V0C, TPC
+ Double_t gRefMultiplicity = 0., gRefMultiplicityTPC = 0.;
+ Double_t gRefMultiplicityVZERO = 0., gRefMultiplicityVZEROA = 0., gRefMultiplicityVZEROC = 0.;
+
+ AliAODHeader *header = dynamic_cast<AliAODHeader *>(event->GetHeader());
+ if(!header) {
+ Printf("ERROR: AOD header not available");
+ return -999;
+ }
+ Int_t gRunNumber = header->GetRunNumber();
+ Float_t bSign1=header->GetMagneticField() ;//for dca cut in ClassifyTrack(), i.e in track loop
+
+
+ for (Int_t itrk = 0; itrk < event->GetNumberOfTracks(); itrk++)
+{ //track loop starts for TObjArray(containing track and event information) filling; used for correlation function calculation
+ AliAODTrack* track = dynamic_cast<AliAODTrack*>(event->GetTrack(itrk));
+ if (!track) continue;
+ Int_t tracktype=ClassifyTrack(track,trkVtx,bSign1,kFALSE);//don't fill the histos here
+ if(tracktype!=1) continue;
+
+ if(!track) continue;//for safety
+
+ gRefMultiplicityTPC += 1.0;
+
+ }//track looop ends
+
+ //VZERO segmentation in two detectors (0-31: VZERO-C, 32-63: VZERO-A)
+ for(Int_t iChannel = 0; iChannel < 64; iChannel++) {
+ fHistVZEROSignal->Fill(iChannel,event->GetVZEROEqMultiplicity(iChannel));
+
+ if(iChannel < 32)
+ gRefMultiplicityVZEROC += event->GetVZEROEqMultiplicity(iChannel);
+ else if(iChannel >= 32)
+ gRefMultiplicityVZEROA += event->GetVZEROEqMultiplicity(iChannel);
+ }//loop over PMTs
+
+ //Equalization of gain
+ Double_t gFactorA = GetEqualizationFactor(gRunNumber,"A");
+ if(gFactorA != 0)
+ gRefMultiplicityVZEROA /= gFactorA;
+ Double_t gFactorC = GetEqualizationFactor(gRunNumber,"C");
+ if(gFactorC != 0)
+ gRefMultiplicityVZEROC /= gFactorC;
+ if((gFactorA != 0)&&(gFactorC != 0))
+ gRefMultiplicityVZERO = (gRefMultiplicityVZEROA/gFactorA)+(gRefMultiplicityVZEROC/gFactorC);
+
+
+ //EQVZERO vs TPC multiplicity
+ fHistEQVZEROvsTPCmultiplicity->Fill(gRefMultiplicityVZERO,gRefMultiplicityTPC);
+ fHistEQVZEROAvsTPCmultiplicity->Fill(gRefMultiplicityVZEROA,gRefMultiplicityTPC);
+ fHistEQVZEROCvsTPCmultiplicity->Fill(gRefMultiplicityVZEROC,gRefMultiplicityTPC);
+
+ //EQVZERO vs VZERO multiplicity
+ fHistVZEROCvsEQVZEROCmultiplicity->Fill(event->GetVZEROData()->GetMTotV0C(),gRefMultiplicityVZEROC);
+ fHistVZEROAvsEQVZEROAmultiplicity->Fill(event->GetVZEROData()->GetMTotV0A(),gRefMultiplicityVZEROA);
+
+ //VZEROC vs VZEROA multiplicity
+ fHistVZEROCvsVZEROAmultiplicity->Fill(event->GetVZEROData()->GetMTotV0C(),event->GetVZEROData()->GetMTotV0A());
+
+ //EQVZEROC vs EQVZEROA multiplicity
+ fHistEQVZEROCvsEQVZEROAmultiplicity->Fill(gRefMultiplicityVZEROC,gRefMultiplicityVZEROA);
+
+
+ if(fCentralityMethod == "TRACKS_MANUAL")
+ gRefMultiplicity = gRefMultiplicityTPC;
+ else if(fCentralityMethod == "V0M_MANUAL")
+ gRefMultiplicity = gRefMultiplicityVZERO;
+ else if(fCentralityMethod == "V0A_MANUAL")
+ gRefMultiplicity = gRefMultiplicityVZEROA;
+ else if(fCentralityMethod == "V0C_MANUAL")
+ gRefMultiplicity = gRefMultiplicityVZEROC;
+
+ //ref mult QA
+ fHistRefmult->Fill(0.,gRefMultiplicityVZEROA);
+ fHistRefmult->Fill(1.,gRefMultiplicityVZEROC);
+ fHistRefmult->Fill(2.,gRefMultiplicityVZERO);
+ fHistRefmult->Fill(3.,gRefMultiplicityTPC);
+
+
+ return gRefMultiplicity;
+}
+
+//-------------------------------------------------------------------------------------------------------
+Double_t AliTwoParticlePIDCorr::GetRefMultiOrCentrality(AliAODEvent *event, Bool_t truth){
+
+ if(!event) return -1;
+ // get centrality object and check quality
+ Double_t cent_v0=-1;
+ Double_t nooftrackstruth=0;
+
+if(fCentralityMethod=="V0M" || fCentralityMethod=="V0A" || fCentralityMethod=="V0C" || fCentralityMethod=="CL1" || fCentralityMethod=="ZNA" || fCentralityMethod=="V0AEq" || fCentralityMethod=="V0CEq" || fCentralityMethod=="V0MEq")//for PbPb, pPb, pp7TeV(still to be introduced)//data or RecoMC and also for TRUTH
+ {
+ AliCentrality *centralityObj=0;
+ AliAODHeader *header = (AliAODHeader*) event->GetHeader();
+ if(!header) return -1;
+ centralityObj = header->GetCentralityP();
+ // if (centrality->GetQuality() != 0) return ;
+
+ if(centralityObj)
+ {
+ fHistCentStats->Fill(0.,centralityObj->GetCentralityPercentile("V0A"));
+ fHistCentStats->Fill(1.,centralityObj->GetCentralityPercentile("V0C"));
+ fHistCentStats->Fill(2.,centralityObj->GetCentralityPercentile("V0M"));
+if(fSampleType=="pp") fHistCentStats->Fill(3.,centralityObj->GetCentralityPercentile("V0AEq"));//only available for LHC10d at present (Quantile info)
+if(fSampleType=="pp") fHistCentStats->Fill(4.,centralityObj->GetCentralityPercentile("V0CEq"));//only available for LHC10d at present (Quantile info)
+if(fSampleType=="pp") fHistCentStats->Fill(5.,centralityObj->GetCentralityPercentile("V0MEq"));//only available for LHC10d at present (Quantile info)
+
+if(fSampleType=="pPb" || fSampleType=="PbPb") fHistCentStats->Fill(6.,centralityObj->GetCentralityPercentile("CL1"));
+if(fSampleType=="pPb" || fSampleType=="PbPb") fHistCentStats->Fill(7.,centralityObj->GetCentralityPercentile("ZNA"));
+
+ cent_v0 = centralityObj->GetCentralityPercentile(fCentralityMethod);
+ }
+ else cent_v0= -1;
+ }//centralitymethod condition
+
+ else if(fCentralityMethod=="V0M_MANUAL" || fCentralityMethod=="V0A_MANUAL" || fCentralityMethod=="V0C_MANUAL" || fCentralityMethod=="TRACKS_MANUAL")//data or RecoMc and also for TRUTH
+ {
+ if(!truth){//for data or RecoMC
+ cent_v0 = GetReferenceMultiplicityVZEROFromAOD(event);
+ }//for data or RecoMC
+
+ if(truth){//condition for TRUTH case
+//check for TClonesArray(truth track MC information)
+fArrayMC = dynamic_cast<TClonesArray*>(event->FindListObject(AliAODMCParticle::StdBranchName()));
+ if (!fArrayMC) {
+ //AliFatal("Error: MC particles branch not found!\n");
+ return -1;
+ }
+//now process the truth particles(for both efficiency & correlation function)
+Int_t nMCTrack = fArrayMC->GetEntriesFast();
+
+for (Int_t iMC = 0; iMC < nMCTrack; iMC++)
+{//MC truth track loop starts
+
+AliAODMCParticle *partMC = (AliAODMCParticle*) fArrayMC->At(iMC);
+
+ if(!partMC){
+ AliError(Form("ERROR: Could not retrieve AODMCtrack %d",iMC));
+ continue;
+ }
+
+//consider only charged particles
+ if(partMC->Charge() == 0) continue;
+
+//consider only primary particles; neglect all secondary particles including from weak decays
+ if(fselectprimaryTruth && !partMC->IsPhysicalPrimary()) continue;
+
+
+//remove injected signals(primaries above <maxLabel>)
+ if (fInjectedSignals && partMC->GetLabel() >= skipParticlesAbove) continue;
+
+//remove duplicates
+ Bool_t isduplicate=kFALSE;
+ if (fRemoveDuplicates)
+ {
+ for (Int_t j=iMC+1; j<nMCTrack; ++j)
+ {//2nd trutuh loop starts
+AliAODMCParticle *partMC2 = (AliAODMCParticle*) fArrayMC->At(j);
+ if(!partMC2){
+ AliError(Form("ERROR: Could not retrieve AODMCtrack %d",j));
+ continue;
+ }
+ if (partMC->GetLabel() == partMC2->GetLabel())
+ {
+isduplicate=kTRUE;
+ break;
+ }
+ }//2nd truth loop ends
+ }
+ if(fRemoveDuplicates && isduplicate) continue;//remove duplicates
+
+
+ if (fCentralityMethod=="V0M_MANUAL") {
+ if(partMC->Eta() > 5.1 || partMC->Eta() < 2.8) continue;
+ if (partMC->Eta() < -3.7 || partMC->Eta() > -1.7) continue;
+}
+ else if (fCentralityMethod=="V0A_MANUAL") {
+ if(partMC->Eta() > 5.1 || partMC->Eta() < 2.8) continue;}
+ else if (fCentralityMethod=="V0C_MANUAL") {
+ if(partMC->Eta() > -1.7 || partMC->Eta() < -3.7) continue;}
+ else if (fCentralityMethod=="TRACKS_MANUAL") {
+ if (partMC->Eta() < fmineta || partMC->Eta() > fmaxeta) continue;
+ if (partMC->Pt() < fminPt || partMC->Pt() > fmaxPt) continue;
+ }
+ else{//basically returns the tracks manual case
+//give only kinematic cuts at the truth level
+ if (partMC->Eta() < fmineta || partMC->Eta() > fmaxeta) continue;
+ if (partMC->Pt() < fminPt || partMC->Pt() > fmaxPt) continue;
+ }
+
+ //To determine multiplicity in case of PP
+ nooftrackstruth+= 1;;
+
+ }//truth track loop ends
+ cent_v0=nooftrackstruth;
+
+ }//condition for TRUTH case
+
+ }//end of MANUAL method
+
+ else if ((fAnalysisType == "MCAOD") && (fCentralityMethod == "MC_b"))//TRUTH MC
+ {
+ AliAODMCHeader* header = (AliAODMCHeader*) event->GetList()->FindObject(AliAODMCHeader::StdBranchName());
+ if (!header)
+ return -1;
+
+ AliGenEventHeader* eventHeader = header->GetCocktailHeader(0); // get first MC header from either ESD/AOD (including cocktail header if available)
+ if (!eventHeader)
+ {
+ // We avoid AliFatal here, because the AOD productions sometimes have events where the MC header is missing
+ // (due to unreadable Kinematics) and we don't want to loose the whole job because of a few events
+ AliError("Event header not found. Skipping this event.");
+ return -1;
+ }
+
+ AliCollisionGeometry* collGeometry = dynamic_cast<AliCollisionGeometry*> (eventHeader);
+
+
+ if (collGeometry) cent_v0 = collGeometry->ImpactParameter();
+ else cent_v0=-1.;
+ }//end of Impact parameter method
+
+//else return -1
+ else cent_v0=-1.;
+
+ return cent_v0;
+}
+//-----------------------------------------------------------------------------------------
+Double_t AliTwoParticlePIDCorr::GetAcceptedEventMultiplicity(AliAODEvent *aod,Bool_t truth){
+
+ if(!aod) return -1;
+
+ Float_t gRefMultiplicity = -1.;
+
+ // check first event in chunk (is not needed for new reconstructions)
+ if(fCheckFirstEventInChunk){
+ AliAnalysisUtils ut;
+ if(ut.IsFirstEventInChunk(aod))
+ return -1.;
+ }
+
+ if(frejectPileUp){
+ AliAnalysisUtils ut;
+ ut.SetUseMVPlpSelection(kTRUE);
+ ut.SetUseOutOfBunchPileUp(kTRUE);
+ if(ut.IsPileUpEvent(aod))
+ return -1.;
+ }
+
+//count events after pileup selection
+ fEventCounter->Fill(3);
+
+ //vertex selection(is it fine for PP?)
+ if ( fVertextype==1){//for pPb basically if(!fAnalysisUtils->IsVertexSelected2013pA(aod)) return;
+ trkVtx = aod->GetPrimaryVertex();
+ if (!trkVtx || trkVtx->GetNContributors()<=0) return -1;
+ TString vtxTtl = trkVtx->GetTitle();
+ if (!vtxTtl.Contains("VertexerTracks")) return -1;
+ zvtx = trkVtx->GetZ();
+ const AliAODVertex* spdVtx = aod->GetPrimaryVertexSPD();
+ if (!spdVtx || spdVtx->GetNContributors()<=0) return -1;
+ TString vtxTyp = spdVtx->GetTitle();
+ Double_t cov[6]={0};
+ spdVtx->GetCovarianceMatrix(cov);
+ Double_t zRes = TMath::Sqrt(cov[5]);
+ if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return -1;
+ if (TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return -1;
+ }
+ else if(fVertextype==2) {//for pp and pb-pb case , taken from Jan's code
+ Int_t nVertex = aod->GetNumberOfVertices();
+ if( nVertex > 0 ) {
+ trkVtx = aod->GetPrimaryVertex();
+ Int_t nTracksPrim = trkVtx->GetNContributors();
+ zvtx = trkVtx->GetZ();
+ //if (fDebug > 1)AliInfo(Form(" Vertex in = %f with %d particles by %s data ...",zVertex,nTracksPrim,vertex->GetName()));
+ // Reject TPC only vertex
+ TString name(trkVtx->GetName());
+ if (name.CompareTo("PrimaryVertex") && name.CompareTo("SPDVertex"))return -1;
+
+ // Select a quality vertex by number of tracks?
+ if( nTracksPrim < fnTracksVertex ) {
+ //if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ...");
+ return -1;
+ }
+ // TODO remove vertexer Z events with dispersion > 0.02: Doesn't work for AOD at present
+ //if (strcmp(vertex->GetTitle(), "AliVertexerZ") == 0 && vertex->GetDispersion() > 0.02)
+ // return kFALSE;
+ // if (fDebug > 1) AliInfo(" Primary-vertex Selection: event ACCEPTED...");
+ }
+ else return -1;
+
+ }
+ else if(fVertextype==0){//default case
+ trkVtx = aod->GetPrimaryVertex();
+ if (!trkVtx || trkVtx->GetNContributors()<=0) return -1;//proper number of contributors
+ zvtx = trkVtx->GetZ();
+ Double32_t fCov[6];
+ trkVtx->GetCovarianceMatrix(fCov);
+ if(fCov[5] == 0) return -1;//proper vertex resolution
+ }
+ else {
+ AliInfo("Wrong Vertextype set for Primary-vertex Selection: event REJECTED ...");
+ return -1;//as there is no proper sample type
+ }
+
+fHistQA[0]->Fill((trkVtx->GetX()));fHistQA[1]->Fill((trkVtx->GetY()));fHistQA[2]->Fill((trkVtx->GetZ())); //for trkVtx only before vertex cut |zvtx|<10 cm
+
+//count events having a proper vertex
+ fEventCounter->Fill(5);
+
+ if (TMath::Abs(zvtx) > fzvtxcut) return -1;
+
+//count events after vertex cut
+ fEventCounter->Fill(7);
+
+
+ //if(!fAnalysisUtils->IsVertexSelected2013pA(aod)) return;
+
+ fHistQA[3]->Fill((trkVtx->GetX()));fHistQA[4]->Fill((trkVtx->GetY()));fHistQA[5]->Fill((trkVtx->GetZ()));//after vertex cut,for trkVtx only
+
+ //get the centrality or multiplicity
+ if(truth) {gRefMultiplicity = GetRefMultiOrCentrality(aod,kTRUE);}//kTRUE-->for Truth case(only meaningful in case of ref multiplicity)
+
+ else {gRefMultiplicity = GetRefMultiOrCentrality(aod,kFALSE);}//kFALSE-->for data and RecoMc case(only meaningful in case of ref multiplicity)
+
+ if(gRefMultiplicity<0) return -1;
+
+ // take events only within the multiplicity class mentioned in the custom binning
+ if(gRefMultiplicity < fmincentmult || gRefMultiplicity > fmaxcentmult) return -1;
+
+//count events having proper centrality/ref multiplicity
+ fEventCounter->Fill(9);
+
+
+// centrality weighting (optional for 2011 if central and semicentral triggers are used);only for data and recoMC
+ if (fCentralityWeights && !AcceptEventCentralityWeight(gRefMultiplicity))//**********************
+ {
+ AliInfo(Form("Rejecting event because of centrality weighting: %f", gRefMultiplicity));
+ return -1;
+ }
+
+//count events after rejection due to centrality weighting
+ fEventCounter->Fill(11);
+
+ return gRefMultiplicity;
+
+}
+//--------------------------------------------------------------------------------------------------------
+Double_t AliTwoParticlePIDCorr::GetEventPlane(AliAODEvent *event,Bool_t truth){
+ // Get the event plane
+
+
+ Float_t gVZEROEventPlane = -10.;
+ Float_t gReactionPlane = -10.;
+ Double_t qxTot = 0.0, qyTot = 0.0;
+
+ //MC: from reaction plane
+ if(truth)
+{
+ AliAODMCHeader* header = (AliAODMCHeader*) event->GetList()->FindObject(AliAODMCHeader::StdBranchName());
+ if (header){
+
+ AliGenEventHeader* eventHeader = header->GetCocktailHeader(0); // get first MC header from either ESD/AOD (including cocktail header if available)
+ if (eventHeader)
+ {
+
+ AliCollisionGeometry* collGeometry = dynamic_cast<AliCollisionGeometry*> (eventHeader);
+
+ if (collGeometry) gReactionPlane = collGeometry->ReactionPlaneAngle();
+ }
+ }
+ }
+ else{
+
+ AliEventplane *ep = event->GetEventplane();
+ if(ep){
+ gVZEROEventPlane = ep->CalculateVZEROEventPlane(event,10,2,qxTot,qyTot);
+ if(gVZEROEventPlane < 0.) gVZEROEventPlane += TMath::Pi();
+ //gReactionPlane = gVZEROEventPlane*TMath::RadToDeg();
+ gReactionPlane = gVZEROEventPlane;
+ }
+ }//AOD,ESD,ESDMC
+ return gReactionPlane;
+}
+
+
+
+
+
+
+//____________________________________________________________________
void AliTwoParticlePIDCorr::Terminate(Option_t *)
{
// Draw result to screen, or perform fitting, normalizations
}
//------------------------------------------------------------------
+/*
+
+ // get centrality object and check quality
+ Double_t cent_v0=0;
+
+
+if(fCentralityMethod=="V0M" || fCentralityMethod=="V0A" || fCentralityMethod=="V0C")//for PbPb, pPb, pp7TeV(still to be introduced)
+ {
+ AliCentrality *centralityObj=0;
+ if(aod)
+ AliAODHeader *header = (AliAODHeader*) aod->GetHeader();
+ if(header){
+ centralityObj = header->GetCentralityP();
+ // if (centrality->GetQuality() != 0) return ;
+
+ if(centralityObj)
+ {
+if(fSampleType=="pPb" || fSampleType=="PbPb" || fSampleType=="pp") fHistCentStats->Fill(0.,centralityObj->GetCentralityPercentile("V0M"));//only available for LHC10d at present (Quantile info)
+if(fSampleType=="pPb" || fSampleType=="PbPb") fHistCentStats->Fill(2.,centralityObj->GetCentralityPercentile("V0A"));
+if(fSampleType=="pPb" || fSampleType=="PbPb") fHistCentStats->Fill(4.,centralityObj->GetCentralityPercentile("V0C"));
+if(fSampleType=="pPb" || fSampleType=="PbPb") fHistCentStats->Fill(6.,centralityObj->GetCentralityPercentile("CL1"));
+if(fSampleType=="pPb" || fSampleType=="PbPb") fHistCentStats->Fill(8.,centralityObj->GetCentralityPercentile("ZNA"));
+
+ cent_v0 = centralityObj->GetCentralityPercentile(fCentralityMethod);
+ }
+ else
+ {
+ cent_v0= -1;
+ }
+ }//AOD header
+ }//centralitymethod condition
+
+else if(fCentralityMethod=="V0M_MANUAL" || fCentralityMethod=="V0A_MANUAL" || fCentralityMethod=="V0C_MANUAL" || fCentralityMethod=="TRACKS_MANUAL")
+ {
+ cent_v0 = GetReferenceMultiplicityVZEROFromAOD(aod);
+ fHistrefMultiplicity->Fill(cent_v0);
+ }
+ else cent_v0= -1;
+
+
+if(fSampleType=="pPb" || fSampleType=="PbPb") if (cent_v0 < 0) return;//for pp case it is the multiplicity
+
+
+
+ Float_t bSign = (aod->GetMagneticField() > 0) ? 1 : -1;//for two track efficiency cut in correlation function calculation
+ Float_t bSign1=aod->GetHeader()->GetMagneticField() ;//for dca cut in ClassifyTrack(), i.e in track loop
+
+// Pileup selection ************************************************
+ if(frejectPileUp) //applicable only for TPC only tracks,not for hybrid tracks?.
+ {
+ if (fAnalysisUtils && fAnalysisUtils->IsPileUpEvent(aod)) return;
+//count events after PileUP cut
+ fEventCounter->Fill(3);
+ }
+
+
+ //vertex selection(is it fine for PP?)
+ if ( fVertextype==1){//for pPb basically if(!fAnalysisUtils->IsVertexSelected2013pA(aod)) return;
+ trkVtx = aod->GetPrimaryVertex();
+ if (!trkVtx || trkVtx->GetNContributors()<=0) return;
+ TString vtxTtl = trkVtx->GetTitle();
+ if (!vtxTtl.Contains("VertexerTracks")) return;
+ zvtx = trkVtx->GetZ();
+ const AliAODVertex* spdVtx = aod->GetPrimaryVertexSPD();
+ if (!spdVtx || spdVtx->GetNContributors()<=0) return;
+ TString vtxTyp = spdVtx->GetTitle();
+ Double_t cov[6]={0};
+ spdVtx->GetCovarianceMatrix(cov);
+ Double_t zRes = TMath::Sqrt(cov[5]);
+ if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
+ if (TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
+ }
+ else if(fVertextype==2) {//for pp and pb-pb case , taken from Jan's code
+ Int_t nVertex = aod->GetNumberOfVertices();
+ if( nVertex > 0 ) {
+ trkVtx = aod->GetPrimaryVertex();
+ Int_t nTracksPrim = trkVtx->GetNContributors();
+ zvtx = trkVtx->GetZ();
+ //if (fDebug > 1)AliInfo(Form(" Vertex in = %f with %d particles by %s data ...",zVertex,nTracksPrim,vertex->GetName()));
+ // Reject TPC only vertex
+ TString name(trkVtx->GetName());
+ if (name.CompareTo("PrimaryVertex") && name.CompareTo("SPDVertex"))return;
+
+ // Select a quality vertex by number of tracks?
+ if( nTracksPrim < fnTracksVertex ) {
+ //if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ...");
+ return ;
+ }
+ // TODO remove vertexer Z events with dispersion > 0.02: Doesn't work for AOD at present
+ //if (strcmp(vertex->GetTitle(), "AliVertexerZ") == 0 && vertex->GetDispersion() > 0.02)
+ // return kFALSE;
+ // if (fDebug > 1) AliInfo(" Primary-vertex Selection: event ACCEPTED...");
+ }
+ else return;
+
+ }
+ else if(fVertextype==0){//default case
+ trkVtx = aod->GetPrimaryVertex();
+ if (!trkVtx || trkVtx->GetNContributors()<=0) return;//proper number of contributors
+ zvtx = trkVtx->GetZ();
+ Double32_t fCov[6];
+ trkVtx->GetCovarianceMatrix(fCov);
+ if(fCov[5] == 0) return;//proper vertex resolution
+ }
+ else {
+ AliInfo("Wrong Vertextype set for Primary-vertex Selection: event REJECTED ...");
+ return;//as there is no proper sample type
+ }
+
+ fHistQA[0]->Fill((trkVtx->GetX()));fHistQA[1]->Fill((trkVtx->GetY()));fHistQA[2]->Fill((trkVtx->GetZ())); //for trkVtx only before vertex cut |zvtx|<10 cm
+
+//count events having a proper vertex
+ fEventCounter->Fill(5);
+
+ if (TMath::Abs(zvtx) > fzvtxcut) return;
+
+//count events after vertex cut
+ fEventCounter->Fill(7);
+
+
+ //if(!fAnalysisUtils->IsVertexSelected2013pA(aod)) return;
+
+ fHistQA[3]->Fill((trkVtx->GetX()));fHistQA[4]->Fill((trkVtx->GetY()));fHistQA[5]->Fill((trkVtx->GetZ()));//after vertex cut,for trkVtx only
+
+
+ if(!aod) return; //for safety
+
+ Double_t frefMult=0;
+
+//reference multiplicity for pp 7 TeV
+ if ((fMultiplicityEstimator == "TRACKS_MANUAL") || (fMultiplicityEstimator == "V0M_MANUAL")|| (fMultiplicityEstimator == "V0A_MANUAL")||(fMultiplicityEstimator == "V0C_MANUAL")) {cent_v0=GetReferenceMultiplicityVZEROFromAOD(aod,bSign1);}
+ else {frefMult=GetReferenceMultiplicityVZEROFromAOD(aod,bSign1);}
+
+
+
+// centrality weighting (optional for 2011 if central and semicentral triggers are used)
+ if (fCentralityWeights && !AcceptEventCentralityWeight(cent_v0))
+ {
+ AliInfo(Form("Rejecting event because of centrality weighting: %f", cent_v0));
+ return;
+ }
+
+//count events after rejection due to centrality weighting
+ fEventCounter->Fill(9);
+*/
//class AliESDtrackCuts;
class TSeqCollection;
class AliPIDResponse;
+class AliPIDCombined;
class AliAODEvent;
class AliAODTrack;
class AliAODVertex;
NSigmaTPC = 0,
NSigmaTOF,
NSigmaTPCTOF, // squared sum
- NSigmaPIDType=NSigmaTPCTOF
+ Bayes
};
+ const Int_t NSigmaPIDType=NSigmaTPCTOF;//number of Nsigma PID types
enum AliDetectorType
{
void SetMaxNofMixingTracks(Int_t MaxNofMixingTracks) {fMaxNofMixingTracks=MaxNofMixingTracks;} //Check it every time
void SetCentralityEstimator(TString CentralityMethod) { fCentralityMethod = CentralityMethod;}
void SetSampleType(TString SampleType) {fSampleType=SampleType;}
+ void SetRequestEventPlane(Bool_t RequestEventPlane){fRequestEventPlane=RequestEventPlane;}
void SetAnalysisType(TString AnalysisType){fAnalysisType=AnalysisType;}
void SetFilterBit(Int_t FilterBit) {fFilterBit=FilterBit;}
void SetTrackStatus(UInt_t status) { fTrackStatus = status; }
void SetFIllPIDQAHistos(Bool_t FIllPIDQAHistos){fFIllPIDQAHistos=FIllPIDQAHistos;}
void SetRejectPileUp(Bool_t rejectPileUp) {frejectPileUp=rejectPileUp;}
+ void SetCheckFirstEventInChunk(Bool_t CheckFirstEventInChunk) {fCheckFirstEventInChunk=CheckFirstEventInChunk;}
+
void SetKinematicCuts(Float_t minPt, Float_t maxPt,Float_t mineta,Float_t maxeta)
{
fminPt=minPt;
fmineta=mineta;
fmaxeta=maxeta;
}
- void SetAsymmetricnSigmaCut( Float_t minprotonsigmacut,Float_t maxprotonsigmacut,Float_t minpionsigmacut,Float_t maxpionsigmacut)
- {
- fminprotonsigmacut=minprotonsigmacut;
- fmaxprotonsigmacut=maxprotonsigmacut;
- fminpionsigmacut=minpionsigmacut;
- fmaxpionsigmacut=maxpionsigmacut;
- }
void SetDcaCut(Bool_t dcacut,Double_t dcacutvalue)
{
fdcacut=dcacut;
TString fCentralityMethod; // Method to determine centrality
TString fSampleType; // pp,p-Pb,Pb-Pb
+ Bool_t fRequestEventPlane; //only for PbPb
Int_t fnTracksVertex; // QA tracks pointing to principal vertex
AliAODVertex* trkVtx;//!
Float_t zvtx;
UInt_t fTrackStatus; // if non-0, the bits set in this variable are required for each track
Double_t fSharedClusterCut; // cut on shared clusters (only for AOD)
Int_t fVertextype;
+ Int_t skipParticlesAbove;
Double_t fzvtxcut;
Bool_t ffilltrigassoUNID;
Bool_t ffilltrigUNIDassoID;
Bool_t fWeightPerEvent;
Bool_t fTriggerSpeciesSelection;
Bool_t fAssociatedSpeciesSelection;
+ Bool_t fRandomizeReactionPlane;
Int_t fTriggerSpecies;
Int_t fAssociatedSpecies;
TString fCustomBinning;//for setting customized binning
Bool_t fcontainPIDasso;
Int_t SetChargeAxis;
Bool_t frejectPileUp;
+ Bool_t fCheckFirstEventInChunk;
Float_t fminPt;
Float_t fmaxPt;
Float_t fmineta;
Float_t fmaxeta;
- Float_t fminprotonsigmacut;
- Float_t fmaxprotonsigmacut;
- Float_t fminpionsigmacut;
- Float_t fmaxpionsigmacut;
Bool_t fselectprimaryTruth;
Bool_t fonlyprimarydatareco;
Bool_t fdcacut;
Double_t fmaxPtComboeff;
Double_t fminPtAsso;
Double_t fmaxPtAsso;
+ Double_t fmincentmult;
+ Double_t fmaxcentmult;
TH1F *fhistcentrality;//!
TH1F *fEventCounter; //!
TH2F *fEtaSpectrasso;//!
TH2F *fEventnomeson;//!
TH2F *fhistJetTrigestimate;//!
- TH2D* fCentralityCorrelation; //! centrality vs multiplicity
+ TH2D* fCentralityCorrelation; //! centrality vs Tracks multiplicity
+ //VZERO calibration
+ TH1F *fHistVZEROAGainEqualizationMap;//VZERO calibration map
+ TH1F *fHistVZEROCGainEqualizationMap;//VZERO calibration map
+ TH2F *fHistVZEROChannelGainEqualizationMap; //VZERO calibration map
+ TH1* fCentralityWeights; // for centrality flattening
+
+ TH2F *fHistCentStats; //!centrality stats
+ TH2F *fHistRefmult;//!
+ TH2F *fHistEQVZEROvsTPCmultiplicity;//!
+ TH2F *fHistEQVZEROAvsTPCmultiplicity;//!
+ TH2F *fHistEQVZEROCvsTPCmultiplicity;//!
+ TH2F *fHistVZEROCvsEQVZEROCmultiplicity;//!
+ TH2F *fHistVZEROAvsEQVZEROAmultiplicity;//!
+ TH2F *fHistVZEROCvsVZEROAmultiplicity;//!
+ TH2F *fHistEQVZEROCvsEQVZEROAmultiplicity;//!
+ TH2F *fHistVZEROSignal;//!
+ TH2F *fHistEventPlaneReco;//!
+ TH2F *fHistEventPlaneTruth;//!
+ TH2D *fHistPsiMinusPhi;//! psi - phi QA histogram
+
TH2F* fControlConvResoncances; //! control histograms for cuts on conversions and resonances
TH2F *fHistoTPCdEdx;//!
AliTHn* fTrackHistEfficiency[6]; //! container for tracking efficiency and contamination (all particles filled including leading one): axes: eta, pT, particle species:::::::::0 pion, 1 kaon,2 proton,3 mesons,4 kaons+protons,5 all
- TH1F *fHistQA[16]; //!
+ TH1F *fHistQA[16]; //! gReactionPlane
THnSparse *effcorection[6];//!
// THnF *effmap[6];
- Int_t ClassifyTrack(AliAODTrack* track,AliAODVertex* vertex,Float_t magfield);
+ Int_t ClassifyTrack(AliAODTrack* track,AliAODVertex* vertex,Float_t magfield,Bool_t fill);
Double_t* GetBinning(const char* configuration, const char* tag, Int_t& nBins);
- void Fillcorrelation(TObjArray *trackstrig,TObjArray *tracksasso,Double_t cent,Float_t vtx,Float_t weight,Bool_t firstTime,Float_t bSign,Bool_t fPtOrder,Bool_t twoTrackEfficiencyCut,Bool_t mixcase,TString fillup);//mixcase=kTRUE in case of mixing;
+ void Fillcorrelation(Double_t gReactionPlane,TObjArray *trackstrig,TObjArray *tracksasso,Double_t cent,Float_t vtx,Float_t weight,Bool_t firstTime,Float_t bSign,Bool_t fPtOrder,Bool_t twoTrackEfficiencyCut,Bool_t mixcase,TString fillup);//mixcase=kTRUE in case of mixing;
Float_t GetTrackbyTrackeffvalue(AliAODTrack* track,Double_t cent,Float_t evzvtx, Int_t parpid);
//Mixing functions
Float_t twoTrackEfficiencyCutValue;
//Pid objects
AliPIDResponse *fPID; //! PID
+ AliPIDCombined *fPIDCombined; //! PIDCombined
+
+ //set PID Combined
+ void SetPIDCombined(AliPIDCombined *obj){fPIDCombined=obj;}
+ AliPIDCombined *GetPIDCombined(){return fPIDCombined;}
+ //set cut on beyesian probability
+ void SetBayesCut(Double_t cut){fBayesCut=cut;}
+ void SetdiffPIDcutvalues(Bool_t diffPIDcutvalues,Double_t PIDCutval1, Double_t PIDCutval2, Double_t PIDCutval3,Double_t PIDCutval4){
+ fdiffPIDcutvalues=diffPIDcutvalues;
+ fPIDCutval1=PIDCutval1;
+ fPIDCutval2=PIDCutval2;
+ fPIDCutval3=PIDCutval3;
+ fPIDCutval4=PIDCutval4;
+ }
+ void SetRandomizeReactionPlane(Bool_t RandomizeReactionPlane){fRandomizeReactionPlane=RandomizeReactionPlane;}
+ Double_t GetBayesCut(){return fBayesCut;}
+ Int_t GetIDBayes(AliAODTrack *trk, Bool_t FIllQAHistos);//calculate the PID according to bayesian PID
+ UInt_t CalcPIDCombined(AliAODTrack *track,Int_t detMask, Double_t* prob) const;
+ Bool_t* GetAllCompatibleIdentitiesNSigma(AliAODTrack * trk, Bool_t FIllQAHistos);//All the identities are true
+
+
Int_t eventno;
Float_t fPtTOFPIDmin; //lower pt bound for the TOCTOF combined circular pid
Float_t fPtTOFPIDmax; //uper pt bound for the TOCTOF combined circular pid
PIDType fPIDType; // PID type Double_t fNSigmaPID; // number of sigma for PID cut
Bool_t fFIllPIDQAHistos; //Switch for filling the nSigma histos
Double_t fNSigmaPID; // number of sigma for PID cut
+ Double_t fBayesCut; // Cut on Bayesian probability
+ Bool_t fdiffPIDcutvalues;
+ Double_t fPIDCutval1;
+ Double_t fPIDCutval2;
+ Double_t fPIDCutval3;
+ Double_t fPIDCutval4;
+
Float_t fHighPtKaonNSigmaPID;// number of sigma for PID cut for Kaons above fHighPtKaonSigma(-1 default, no cut applied)
Float_t fHighPtKaonSigma;//lower pt bound for the fHighPtKaonNSigmaPID to be set >0(i.e. to make it applicable)
Bool_t fUseExclusiveNSigma;//if true returns the identity only if no double counting(i.e not in the overlap area)
Float_t GetInvMassSquaredCheap(Float_t pt1, Float_t eta1, Float_t phi1, Float_t pt2, Float_t eta2, Float_t phi2, Float_t m0_1, Float_t m0_2);
Float_t GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1, Float_t phi2, Float_t pt2, Float_t charge2, Float_t radius, Float_t bSign);
TObjArray* CloneAndReduceTrackList(TObjArray* tracks);
-
+
+
+ void ShiftTracks(TObjArray* tracks, Double_t angle);
+ Bool_t AcceptEventCentralityWeight(Double_t centrality);
+
+ //get event plane
+ Double_t GetEventPlane(AliAODEvent *event,Bool_t truth);
+ Double_t GetAcceptedEventMultiplicity(AliAODEvent *aod,Bool_t truth);//returns centrality after event(mainly vertex) selection IsEventAccepted GetAcceptedEventMultiplicity
+
+ //get vzero equalization
+ Double_t GetEqualizationFactor(Int_t run, const char* side);
+ Double_t GetChannelEqualizationFactor(Int_t run,Int_t channel);
+ void SetVZEROCalibrationFile(const char* filename,const char* lhcPeriod);
+ void SetCentralityWeights(TH1* hist) { fCentralityWeights = hist; }
+
+ Double_t GetRefMultiOrCentrality(AliAODEvent *event, Bool_t truth);
+ Double_t GetReferenceMultiplicityVZEROFromAOD(AliAODEvent *event);//mainly important for pp 7 TeV
+
+
+
+
AliTwoParticlePIDCorr(const AliTwoParticlePIDCorr&); // not implemented
AliTwoParticlePIDCorr& operator=(const AliTwoParticlePIDCorr&); // not implemented
virtual Short_t Charge() const { return fcharge; }
Float_t geteffcorrectionval() const {return feffcorrectionval;}
virtual Bool_t IsEqual(const TObject* obj) const { return (obj->GetUniqueID() == GetUniqueID()); }
+ virtual void SetPhi(Double_t phiv) { fPhi = phiv; }
private:
-//
-// Macro designed for use with the AliAnalysisTaskDptDptQA task.
-//
-// Author: Prabhat Pujahari & Claude Pruneau, Wayne State
-//
-// system: 0: PbPb 1: pPb
+// system: 0: PbPb 1: pp
// singlesOnly: 0: full correlations 1: singles only
// useWeights: 0: no 1: yes
-// centralityMethod: 3: track count 4: V0 centrality 7: V0A centrality for pPb
-// chargeSet: 0: ++ 1: +- 2: -+ 3: --
+// centralityMethod: 3: track count 4: V0 centrality
/////////////////////////////////////////////////////////////////////////////////
-
AliAnalysisTaskDptDptQA *AddTaskDptQA
(int system = 0,
int singlesOnly = 0,
int useWeights = 0,
int centralityMethod = 4,
- int chargeSet = 1,
- int trackFilterBit = 128,
- int nClusterMin = 80,
+ int centralitySelected = 4,
double etaMin = -0.8,
- double etaMax = 0.8,
- double dcaZMin = -3.2,
- double dcaZMax = 3.2,
- double dcaXYMin = -2.4,
- double dcaXYMax = 2.4,
- int nclus = 80,
- double chi2ndf = 4,
- int nCentrality = 2,
- Bool_t trigger = kFALSE,
- const char* taskname = "dca3"
+ double etaMax = 0.8,
+ int trackFilterBit = 128,
+ char *inputHistogramFileName = "alien:///alice/cern.ch/user/p/prabhat/CalibFiles/PbPbCalib_dca1.root"
)
{
-
// Set Default Configuration of this analysis
// ==========================================
int debugLevel = 0;
int rejectPileup = 1;
int rejectPairConversion = 1;
int sameFilter = 1;
-
- //int nCentrality;
+ int nCentrality;
double minCentrality[10];
double maxCentrality[10];
if (system==0) // PbPb
{
- if (centralityMethod == 4)
- {
-
- minCentrality[0] = 0.0; maxCentrality[0] = 10.0;
- minCentrality[1] = 30.0; maxCentrality[1] = 40.;
-
- }
- else
- {
- cout << "-F- AddTaskDptQA() system:" << system << ". centralityMethod:" << centralityMethod << " Option NOT AVAILABLE. ABORT."
- return 0;
- }
- }
- else if (system==1) // pPb
- {
- if (centralityMethod == 7)
- {
- //nCentrality = 4;
- minCentrality[0] = 0; maxCentrality[0] = 20.0;
- minCentrality[1] = 20; maxCentrality[1] = 40.;
- minCentrality[2] = 40.; maxCentrality[2] = 60.;
- minCentrality[3] = 0.; maxCentrality[3] = 100.;
- }
- else
- {
- //cout << "-F- AddTaskDptDptCorrelations() system:" << system << ". centralityMethod:" << centralityMethod << " Option NOT AVAILABLE. ABORT."
- return 0;
- }
- }
- else
- {
- //cout << "-F- AddTaskDptDptCorrelations() system:" << system << ". Option NOT CURRENTLY AVAILABLE. ABORT."
- return 0;
+ if (centralityMethod == 4)
+ {
+ nCentrality = 10;
+ minCentrality[0] = 0.0; maxCentrality[0] = 5.0;
+ minCentrality[1] = 5.0; maxCentrality[1] = 10.;
+ minCentrality[2] = 10.; maxCentrality[2] = 20.;
+ minCentrality[3] = 20.; maxCentrality[3] = 30.;
+ minCentrality[4] = 30.; maxCentrality[4] = 40.;
+ minCentrality[5] = 40.; maxCentrality[5] = 50.;
+ minCentrality[6] = 50.; maxCentrality[6] = 60.;
+ minCentrality[7] = 60.; maxCentrality[7] = 70.;
+ minCentrality[8] = 70.; maxCentrality[8] = 80.;
+ minCentrality[9] = 80.; maxCentrality[9] = 90.;
+
+ }
+ else
+ {
+
+ return 0;
+ }
}
-
+
double zMin = -10.;
double zMax = 10.;
double ptMin = 0.2;
double ptMax = 2.0;
+
+ double dcaZMin = -3.0;
+ double dcaZMax = 3.0;
+ double dcaXYMin = -3.0;
+ double dcaXYMax = 3.0;
double dedxMin = 0.0;
double dedxMax = 20000.0;
+ int nClusterMin = 70;
int requestedCharge1 = 1; //default
int requestedCharge2 = -1; //default
TString baseName;
TString listName;
TString taskName;
- TString inputHistogramFileName;
TString outputHistogramFileName;
// Create the task and add subtask.
AliAnalysisDataContainer *taskInputContainer;
AliAnalysisDataContainer *taskOutputContainer;
AliAnalysisTaskDptDptQA* task;
-
- for (int iCentrality=0; iCentrality < nCentrality; ++iCentrality)
- {
- switch (chargeSet)
- {
- case 0: part1Name = "P_"; part2Name = "P_"; requestedCharge1 = 1; requestedCharge2 = 1; sameFilter = 1; break;
- case 1: part1Name = "P_"; part2Name = "M_"; requestedCharge1 = 1; requestedCharge2 = -1; sameFilter = 0; break;
- case 2: part1Name = "M_"; part2Name = "P_"; requestedCharge1 = -1; requestedCharge2 = 1; sameFilter = 0; break;
- case 3: part1Name = "M_"; part2Name = "M_"; requestedCharge1 = -1; requestedCharge2 = -1; sameFilter = 1; break;
- }
- //part1Name += int(1000*etaMin);
- part1Name += "eta";
- part1Name += int(1000*etaMax);
- part1Name += "_";
- part1Name += int(1000*ptMin);
- part1Name += "pt";
- part1Name += int(1000*ptMax);
- part1Name += "_";
- part1Name += int(1000*dcaZMin);
- part1Name += "DCA";
- part1Name += int(1000*dcaZMax);
- part1Name += "_";
-
- //part2Name += int(1000*etaMin);
- part2Name += "eta";
- part2Name += int(1000*etaMax);
- part2Name += "_";
- part2Name += int(1000*ptMin);
- part2Name += "pt";
- part2Name += int(1000*ptMax);
- part2Name += "_";
- part2Name += int(1000*dcaZMin);
- part2Name += "DCA";
- part2Name += int(1000*dcaZMax);
- part2Name += "_";
-
- eventName = "";
- eventName += int(10.*minCentrality[iCentrality] );
- eventName += "Vo";
- eventName += int(10.*maxCentrality[iCentrality] );
-
-
- baseName = prefixName;
- baseName += part1Name;
- baseName += part2Name;
- baseName += eventName;
- listName = baseName;
- taskName = baseName;
-
-
- outputHistogramFileName = baseName;
- if (singlesOnly) outputHistogramFileName += singlesOnlySuffix;
- outputHistogramFileName += ".root";
-
-
- TFile * inputFile = 0;
- TList * histoList = 0;
- TH3F * weight_1 = 0;
- TH3F * weight_2 = 0;
- if (useWeights)
- {
- TGrid::Connect("alien:");
- inputFile = TFile::Open(inputHistogramFileName,"OLD");
- if (!inputFile)
- {
- cout << "Requested file:" << inputHistogramFileName << " was not opened. ABORT." << endl;
- return;
- }
- TString nameHistoBase = "correction_";
- TString nameHisto;
- nameHistoBase += eventName;
- if (requestedCharge1 == 1)
- {
- nameHisto = nameHistoBase + "_p";
- cout << "Input Histogram named: " << nameHisto << endl;
- weight_1 = (TH3F *) inputFile->Get(nameHisto);
- }
- else
- {
- nameHisto = nameHistoBase + "_m";
- cout << "Input Histogram named: " << nameHisto << endl;
- weight_1 = (TH3F *) inputFile->Get(nameHisto);
- }
- if (!weight_1)
- {
- cout << "Requested histogram 'correction_p/m' was not found. ABORT." << endl;
- return 0;
- }
-
- if (!sameFilter)
- {
- weight_2 = 0;
- if (requestedCharge2 == 1)
- {
- nameHisto = nameHistoBase + "_p";
- cout << "Input Histogram named: " << nameHisto << endl;
- weight_2 = (TH3F *) inputFile->Get(nameHisto);
- }
- else
- {
- nameHisto = nameHistoBase + "_m";
- cout << "Input Histogram named: " << nameHisto << endl;
- weight_2 = (TH3F *) inputFile->Get(nameHisto);
- }
- if (!weight_2)
- {
- cout << "Requested histogram 'correction_p/m' was not found. ABORT." << endl;
- return 0;
- }
- }
- }
- task = new AliAnalysisTaskDptDptQA(taskName);
- //configure my task
- task->SetDebugLevel( debugLevel );
- task->SetSameFilter( sameFilter );
- task->SetSinglesOnly( singlesOnly );
- task->SetUseWeights( useWeights );
- task->SetRejectPileup( rejectPileup );
- task->SetRejectPairConversion(rejectPairConversion);
- task->SetVertexZMin( zMin );
- task->SetVertexZMax( zMax );
- task->SetVertexXYMin( -1. );
- task->SetVertexXYMax( 1. );
- task->SetCentralityMethod( centralityMethod);
- task->SetCentrality( minCentrality[iCentrality], maxCentrality[iCentrality]);
- task->SetPtMin1( ptMin );
- task->SetPtMax1( ptMax );
- task->SetEtaMin1( etaMin );
- task->SetEtaMax1( etaMax );
- task->SetPtMin2( ptMin );
- task->SetPtMax2( ptMax );
- task->SetEtaMin2( etaMin );
- task->SetEtaMax2( etaMax );
- task->SetDcaZMin( dcaZMin );
- task->SetDcaZMax( dcaZMax );
- task->SetDcaXYMin(dcaXYMin);
- task->SetDcaXYMax(dcaXYMax);
- task->SetTPCNclus(nclus);
- task->SetChi2PerNDF(chi2ndf);
+ TFile * inputFile = 0;
+ TList * histoList = 0;
+ TH3F * weight_1 = 0;
+ TH3F * weight_2 = 0;
+
+ int iCentrality = centralitySelected;
+ outputHistogramFileName = baseName;
+ if (singlesOnly) outputHistogramFileName += singlesOnlySuffix;
+ outputHistogramFileName += ".root";
- task->SetDedxMin( dedxMin );
- task->SetDedxMax( dedxMax );
- task->SetNClusterMin( nClusterMin );
- task->SetTrackFilterBit( trackFilterBit );
- task->SetRequestedCharge_1( requestedCharge1);
- task->SetRequestedCharge_2( requestedCharge2);
- task->SetWeigth_1( weight_1 );
- task->SetWeigth_2( weight_2 );
-
-
- if(trigger) task->SelectCollisionCandidates(AliVEvent::kINT7);
- else task->SelectCollisionCandidates(AliVEvent::kMB);
-
- cout << "Creating task output container" << endl;
-
- taskOutputContainer = analysisManager->CreateContainer(listName,
- TList::Class(),
- AliAnalysisManager::kOutputContainer,
- Form("%s:%s", AliAnalysisManager::GetCommonFileName(),taskname));
- cout << "Add task to analysis manager and connect it to input and output containers" << endl;
-
+ if (useWeights)
+ {
+ TGrid::Connect("alien:");
+ inputFile = TFile::Open(inputHistogramFileName,"OLD");
+ if (!inputFile)
+ {
+ cout << "Requested file:" << inputHistogramFileName << " was not opened. ABORT." << endl;
+ return;
+ }
+ }
+
+ //============================
+ // (+,+)
+ //============================
+ requestedCharge1 = 1;
+ requestedCharge2 = 1;
+ sameFilter = 1;
+ part1Name = "P_";
+ part1Name += trackFilterBit;
+ part1Name += "_";
+ part1Name += int(1000*etaMax);
+ part1Name += "_";
+ part1Name += int(1000*ptMin);
+ part1Name += "pt";
+ part1Name += int(1000*ptMax);
+ part1Name += "_";
+ part2Name = "P_";
+ part2Name += int(1000*etaMax);
+ part2Name += "_";
+ part2Name += int(1000*ptMin);
+ part2Name += "pt";
+ part2Name += int(1000*ptMax);
+ part2Name += "_";
+ eventName = "";
+ eventName += int(10.*minCentrality[iCentrality] );
+ eventName += "Vo";
+ eventName += int(10.*maxCentrality[iCentrality] );
+ baseName = prefixName;
+ baseName += part1Name;
+ baseName += part2Name;
+ baseName += eventName;
+ listName = baseName;
+ taskName = baseName;
+ if (useWeights)
+ {
+ TString nameHistoBase = "correction_";
+ TString nameHisto;
+ nameHistoBase += eventName;
+ nameHisto = nameHistoBase + "_p";
+ cout << "Input Histogram named: " << nameHisto << endl;
+ weight_1 = (TH3F *) inputFile->Get(nameHisto);
+ weight_2 = weight_1;
+ }
+ else
+ {
+ weight_1 = 0;
+ weight_2 = 0;
+ }
+ task = new AliAnalysisTaskDptDptQA(taskName);
+ //configure my task
+ task->SetDebugLevel( debugLevel );
+ task->SetSameFilter( sameFilter );
+ task->SetSinglesOnly( singlesOnly );
+ task->SetUseWeights( useWeights );
+ task->SetRejectPileup( rejectPileup );
+ task->SetRejectPairConversion(rejectPairConversion);
+ task->SetVertexZMin( zMin );
+ task->SetVertexZMax( zMax );
+ task->SetVertexXYMin( -1. );
+ task->SetVertexXYMax( 1. );
+ task->SetCentralityMethod( centralityMethod);
+ task->SetCentrality( minCentrality[iCentrality], maxCentrality[iCentrality]);
+ task->SetPtMin1( ptMin );
+ task->SetPtMax1( ptMax );
+ task->SetEtaMin1( etaMin );
+ task->SetEtaMax1( etaMax );
+ task->SetPtMin2( ptMin );
+ task->SetPtMax2( ptMax );
+ task->SetEtaMin2( etaMin );
+ task->SetEtaMax2( etaMax );
+ task->SetDcaZMin( dcaZMin );
+ task->SetDcaZMax( dcaZMax );
+ task->SetDcaXYMin( dcaXYMin );
+ task->SetDcaXYMax( dcaXYMax );
+ task->SetDedxMin( dedxMin );
+ task->SetDedxMax( dedxMax );
+ task->SetNClusterMin( nClusterMin );
+ task->SetTrackFilterBit( trackFilterBit );
+ task->SetRequestedCharge_1( requestedCharge1);
+ task->SetRequestedCharge_2( requestedCharge2);
+ task->SetWeigth_1( weight_1 );
+ task->SetWeigth_2( weight_2 );
+
+
+ cout << "Creating task output container" << endl;
+ taskOutputContainer = analysisManager->CreateContainer(listName,
+ TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ Form("%s:Histos", AliAnalysisManager::GetCommonFileName()));
+ cout << "Add task to analysis manager and connect it to input and output containers" << endl;
+ analysisManager->AddTask(task);
+ analysisManager->ConnectInput( task, 0, analysisManager->GetCommonInputContainer());
+ analysisManager->ConnectOutput(task, 0, taskOutputContainer );
+ cout << "(+,+) Task added ...." << endl;
+
+ //============================
+ // (+,-)
+ //============================
+ requestedCharge1 = 1;
+ requestedCharge2 = -1;
+ sameFilter = 0;
+ part1Name = "P_";
+ part1Name += trackFilterBit;
+ part1Name += "_";
+ part1Name += int(1000*etaMax);
+ part1Name += "_";
+ part1Name += int(1000*ptMin);
+ part1Name += "pt";
+ part1Name += int(1000*ptMax);
+ part1Name += "_";
+ part2Name = "M_";
+ part2Name += trackFilterBit;
+ part2Name += int(1000*etaMax);
+ part2Name += "_";
+ part2Name += int(1000*ptMin);
+ part2Name += "pt";
+ part2Name += int(1000*ptMax);
+ part2Name += "_";
+ eventName = "";
+ eventName += int(10.*minCentrality[iCentrality] );
+ eventName += "Vo";
+ eventName += int(10.*maxCentrality[iCentrality] );
+ baseName = prefixName;
+ baseName += part1Name;
+ baseName += part2Name;
+ baseName += eventName;
+ listName = baseName;
+ taskName = baseName;
+ if (useWeights)
+ {
+ TString nameHistoBase = "correction_";
+ TString nameHisto;
+ nameHistoBase += eventName;
+ nameHisto = nameHistoBase + "_p";
+ cout << "Input Histogram named: " << nameHisto << endl;
+ weight_1 = (TH3F *) inputFile->Get(nameHisto);
+ nameHisto = nameHistoBase + "_m";
+ cout << "Input Histogram named: " << nameHisto << endl;
+ weight_2 = (TH3F *) inputFile->Get(nameHisto);
+ }
+ else
+ {
+ weight_1 = 0;
+ weight_2 = 0;
+ }
+ task = new AliAnalysisTaskDptDptQA(taskName);
+ //configure my task
+ task->SetDebugLevel( debugLevel );
+ task->SetSameFilter( sameFilter );
+ task->SetSinglesOnly( singlesOnly );
+ task->SetUseWeights( useWeights );
+ task->SetRejectPileup( rejectPileup );
+ task->SetRejectPairConversion(rejectPairConversion);
+ task->SetVertexZMin( zMin );
+ task->SetVertexZMax( zMax );
+ task->SetVertexXYMin( -1. );
+ task->SetVertexXYMax( 1. );
+ task->SetCentralityMethod( centralityMethod);
+ task->SetCentrality( minCentrality[iCentrality], maxCentrality[iCentrality]);
+ task->SetPtMin1( ptMin );
+ task->SetPtMax1( ptMax );
+ task->SetEtaMin1( etaMin );
+ task->SetEtaMax1( etaMax );
+ task->SetPtMin2( ptMin );
+ task->SetPtMax2( ptMax );
+ task->SetEtaMin2( etaMin );
+ task->SetEtaMax2( etaMax );
+ task->SetDcaZMin( dcaZMin );
+ task->SetDcaZMax( dcaZMax );
+ task->SetDcaXYMin( dcaXYMin );
+ task->SetDcaXYMax( dcaXYMax );
+ task->SetDedxMin( dedxMin );
+ task->SetDedxMax( dedxMax );
+ task->SetNClusterMin( nClusterMin );
+ task->SetTrackFilterBit( trackFilterBit );
+ task->SetRequestedCharge_1( requestedCharge1);
+ task->SetRequestedCharge_2( requestedCharge2);
+ task->SetWeigth_1( weight_1 );
+ task->SetWeigth_2( weight_2 );
+
+
+ cout << "Creating task output container" << endl;
+ taskOutputContainer = analysisManager->CreateContainer(listName,
+ TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ Form("%s:Histos", AliAnalysisManager::GetCommonFileName()));
+ cout << "Add task to analysis manager and connect it to input and output containers" << endl;
+ analysisManager->AddTask(task);
+ analysisManager->ConnectInput( task, 0, analysisManager->GetCommonInputContainer());
+ analysisManager->ConnectOutput(task, 0, taskOutputContainer );
+ cout << "Task added ...." << endl;
- analysisManager->AddTask(task);
- analysisManager->ConnectInput( task, 0, analysisManager->GetCommonInputContainer());
- analysisManager->ConnectOutput(task, 0, taskOutputContainer );
- cout << "Task added ...." << endl;
-
- iTask++;
-
+ //============================
+ // (-,-)
+ //============================
+ requestedCharge1 = -1;
+ requestedCharge2 = -1;
+ sameFilter = 1;
+ part1Name = "M_";
+ part1Name += trackFilterBit;
+ part1Name += "_";
+ part1Name += int(1000*etaMax);
+ part1Name += "_";
+ part1Name += int(1000*ptMin);
+ part1Name += "pt";
+ part1Name += int(1000*ptMax);
+ part1Name += "_";
+ part2Name = "M_";
+ part2Name += trackFilterBit;
+ part2Name += int(1000*etaMax);
+ part2Name += "_";
+ part2Name += int(1000*ptMin);
+ part2Name += "pt";
+ part2Name += int(1000*ptMax);
+ part2Name += "_";
+ eventName = "";
+ eventName += int(10.*minCentrality[iCentrality] );
+ eventName += "Vo";
+ eventName += int(10.*maxCentrality[iCentrality] );
+ baseName = prefixName;
+ baseName += part1Name;
+ baseName += part2Name;
+ baseName += eventName;
+ listName = baseName;
+ taskName = baseName;
+ if (useWeights)
+ {
+ TString nameHistoBase = "correction_";
+ TString nameHisto;
+ nameHistoBase += eventName;
+ nameHisto = nameHistoBase + "_m";
+ cout << "Input Histogram named: " << nameHisto << endl;
+ weight_1 = (TH3F *) inputFile->Get(nameHisto);
+ weight_2 = weight_1;
+ }
+ else
+ {
+ weight_1 = 0;
+ weight_2 = 0;
}
+ task = new AliAnalysisTaskDptDptQA(taskName);
+ //configure my task
+ task->SetDebugLevel( debugLevel );
+ task->SetSameFilter( sameFilter );
+ task->SetSinglesOnly( singlesOnly );
+ task->SetUseWeights( useWeights );
+ task->SetRejectPileup( rejectPileup );
+ task->SetRejectPairConversion(rejectPairConversion);
+ task->SetVertexZMin( zMin );
+ task->SetVertexZMax( zMax );
+ task->SetVertexXYMin( -1. );
+ task->SetVertexXYMax( 1. );
+ task->SetCentralityMethod( centralityMethod);
+ task->SetCentrality( minCentrality[iCentrality], maxCentrality[iCentrality]);
+ task->SetPtMin1( ptMin );
+ task->SetPtMax1( ptMax );
+ task->SetEtaMin1( etaMin );
+ task->SetEtaMax1( etaMax );
+ task->SetPtMin2( ptMin );
+ task->SetPtMax2( ptMax );
+ task->SetEtaMin2( etaMin );
+ task->SetEtaMax2( etaMax );
+ task->SetDcaZMin( dcaZMin );
+ task->SetDcaZMax( dcaZMax );
+ task->SetDcaXYMin( dcaXYMin );
+ task->SetDcaXYMax( dcaXYMax );
+ task->SetDedxMin( dedxMin );
+ task->SetDedxMax( dedxMax );
+ task->SetNClusterMin( nClusterMin );
+ task->SetTrackFilterBit( trackFilterBit );
+ task->SetRequestedCharge_1( requestedCharge1);
+ task->SetRequestedCharge_2( requestedCharge2);
+ task->SetWeigth_1( weight_1 );
+ task->SetWeigth_2( weight_2 );
+
+ cout << "Creating task output container" << endl;
+ taskOutputContainer = analysisManager->CreateContainer(listName,
+ TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ Form("%s:Histos", AliAnalysisManager::GetCommonFileName()));
+ analysisManager->AddTask(task);
+ analysisManager->ConnectInput( task, 0, analysisManager->GetCommonInputContainer());
+ analysisManager->ConnectOutput(task, 0, taskOutputContainer );
return task;
}
// Process the event with Kine information
fesdck->SetESDSource(fESD);
fesdck->SetStackSource(fStack);
-
+ cout<<"Set Stack:"<<fStack<<endl;
fesdck->SetGenEventHeader(hdh);
fManager->ProcessEvent();
}
////////////////////////////////////////////////////////////////////////////////
#include "AliFemtoCutMonitor.h"
-inline void AliFemtoCutMonitor::EventBegin(const AliFemtoEvent* /* aEvent */ )
+void AliFemtoCutMonitor::EventBegin(const AliFemtoEvent* /* aEvent */ )
{ /* no-op */ }
-inline void AliFemtoCutMonitor::EventEnd(const AliFemtoEvent* /* aEvent */ )
+void AliFemtoCutMonitor::EventEnd(const AliFemtoEvent* /* aEvent */ )
{ /* no-op */ }
-inline void AliFemtoCutMonitor::Fill(const AliFemtoEvent* /* aEvent */) {
+void AliFemtoCutMonitor::Fill(const AliFemtoEvent* /* aEvent */) {
// cut event
#ifdef STHBTDEBUG
cout << " *** no user defined Fill(const AliFemtoEvent*), take from base class" << endl;
#endif
}
-inline void AliFemtoCutMonitor::Fill(const AliFemtoTrack* /* aTrack */) {
+void AliFemtoCutMonitor::Fill(const AliFemtoTrack* /* aTrack */) {
// cut track
#ifdef STHBTDEBUG
cout << " *** no user defined Fill(const AliFemtoTrack*), take from base class" << endl;
#endif
}
-inline void AliFemtoCutMonitor::Fill(const AliFemtoV0* /* aV0 */ ) {
+void AliFemtoCutMonitor::Fill(const AliFemtoV0* /* aV0 */ ) {
// cut V0
#ifdef STHBTDEBUG
cout << " *** no user defined Fill(const AliFemtoV0Track*), take from base class" << endl;
#endif
}
-inline void AliFemtoCutMonitor::Fill(const AliFemtoKink* /* aKink */) {
+void AliFemtoCutMonitor::Fill(const AliFemtoKink* /* aKink */) {
// cut Kink
#ifdef STHBTDEBUG
cout << " *** no user defined Fill(const AliFemtoKink*), take from base class" << endl;
}
//-----------------------------------Gael 12/04/02------------------------------------
-inline void AliFemtoCutMonitor::Fill(const AliFemtoPair* /* aPair */) {
+void AliFemtoCutMonitor::Fill(const AliFemtoPair* /* aPair */) {
// cut pair
#ifdef STHBTDEBUG
cout << " *** no user defined Fill(const AliFemtoPair*), take from base class" << endl;
#endif
}
//-----------------------------------Gael 19/06/02------------------------------------
-inline void AliFemtoCutMonitor::Fill(const AliFemtoParticleCollection* /* aCollection */) {
+void AliFemtoCutMonitor::Fill(const AliFemtoParticleCollection* /* aCollection */) {
// cut particle collection
#ifdef STHBTDEBUG
cout << " *** no user defined Fill(const AliFemtoParticleCollection*), take from base class" << endl;
#endif
}
//-----------------------------------Gael 19/06/02------------------------------------
-inline void AliFemtoCutMonitor::Fill(const AliFemtoEvent* /* aEvent */,const AliFemtoParticleCollection* /* aCollection */) {
+void AliFemtoCutMonitor::Fill(const AliFemtoEvent* /* aEvent */,const AliFemtoParticleCollection* /* aCollection */) {
// cut event and particle collection
#ifdef STHBTDEBUG
cout << " *** no user defined Fill(const AliFemtoEvent*,const AliFemtoParticleCollection*), take from base class" << endl;
#endif
}
-inline void AliFemtoCutMonitor::Fill(const AliFemtoParticleCollection* /* aCollection */,const AliFemtoParticleCollection* /* aCollection */) {
+void AliFemtoCutMonitor::Fill(const AliFemtoParticleCollection* /* aCollection */,const AliFemtoParticleCollection* /* aCollection */) {
// cut event and particle collection
#ifdef STHBTDEBUG
cout << " *** no user defined Fill(const AliFemtoParticleCollection*,const AliFemtoParticleCollection*), take from base class" << endl;
fTPCdEdx(0),
fTOFParticle(0),
fTOFTime(0x0),
- fTOFNSigma(0),
- fTPCNSigma(0),
- fTPCTOFNSigma(0)
+ fTOFNSigma(0),
+ fTPCNSigma(0),
+ fTPCTOFNSigma(0),
+ fTPCvsTOFNSigma(0)
{
// Default constructor
- fTPCdEdx = new TH2D("TPCdEdx", "TPC dEdx vs. momentum", 100, 0.0, 5.0, 250, 0.0, 500.0);
- fTOFTime = new TH2D("TOFTime", "TOF Time vs. momentum", 100, 0.1, 5.0, 400, -4000.0, 4000.0);
- fTOFNSigma = new TH2D("TOFNSigma","TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
- fTPCNSigma = new TH2D("TPCNSigma","TPC NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
- fTPCTOFNSigma = new TH2D("TPCTOFNSigma","TPC & TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, 0.0, 10.0);
+ fTPCdEdx = new TH2D("TPCdEdx", "TPC dEdx vs. momentum", 100, 0.0, 5.0, 250, 0.0, 500.0);
+ fTOFTime = new TH2D("TOFTime", "TOF Time vs. momentum", 100, 0.1, 5.0, 400, -4000.0, 4000.0);
+ fTOFNSigma = new TH2D("TOFNSigma","TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
+ fTPCNSigma = new TH2D("TPCNSigma","TPC NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
+ fTPCTOFNSigma = new TH2D("TPCTOFNSigma","TPC & TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, 0.0, 10.0);
+ fTPCvsTOFNSigma = new TH2D("TPCvsTOFNSigma","TPC vs TOF Nsigma",100, -5.0, 5.0, 100, -5.0, 5.0);
}
fTPCdEdx(0),
fTOFParticle(aTOFParticle),
fTOFTime(0x0),
- fTOFNSigma(0),
- fTPCNSigma(0),
- fTPCTOFNSigma(0)
+ fTOFNSigma(0),
+ fTPCNSigma(0),
+ fTPCTOFNSigma(0),
+ fTPCvsTOFNSigma(0)
{
// Normal constructor
char name[200];
snprintf(name, 200, "TPCdEdx%s", aName);
- // fTPCdEdx = new TH2D(name, "TPC dEdx vs. momentum", 100, 0.0, 6.0, 250, 0.0, 500.0);
- fTPCdEdx = new TH2D(name, "TPC dEdx vs. momentum", 200, 0.1, 4.0, 250, 0.0, 500.0);
+ // fTPCdEdx = new TH2D(name, "TPC dEdx vs. momentum", 100, 0.0, 6.0, 250, 0.0, 500.0);
+ fTPCdEdx = new TH2D(name, "TPC dEdx vs. momentum", 200, 0.1, 4.0, 250, 0.0, 500.0);
snprintf(name, 200, "TOFTime%s", aName);
- fTOFTime = new TH2D(name, "TOF Time vs. momentum", 100, 0.1, 5.0, 400, -4000.0, 4000.0);
+ fTOFTime = new TH2D(name, "TOF Time vs. momentum", 100, 0.1, 5.0, 400, -4000.0, 4000.0);
- snprintf(name, 200, "TOFNSigma%s", aName);
- fTOFNSigma = new TH2D(name,"TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
+ snprintf(name, 200, "TOFNSigma%s", aName);
+ fTOFNSigma = new TH2D(name,"TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
- snprintf(name, 200, "TPCNSigma%s", aName);
- fTPCNSigma = new TH2D(name,"TPC NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
+ snprintf(name, 200, "TPCNSigma%s", aName);
+ fTPCNSigma = new TH2D(name,"TPC NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
- snprintf(name, 200, "TPCTOFNSigma%s", aName);
- fTPCTOFNSigma = new TH2D(name,"TPC & TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, 0.0, 10.0);
+ snprintf(name, 200, "TPCTOFNSigma%s", aName);
+ fTPCTOFNSigma = new TH2D(name,"TPC & TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, 0.0, 10.0);
+ snprintf(name, 200, "TPCvsTOFNSigma%s", aName);
+ fTPCvsTOFNSigma = new TH2D(name,"TPC vs TOF Nsigma",100, -5.0, 5.0, 100, -5.0, 5.0);
}
AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const AliFemtoCutMonitorParticlePID &aCut):
fTPCdEdx(0),
fTOFParticle(0),
fTOFTime(0x0),
- fTOFNSigma(0),
- fTPCNSigma(0),
- fTPCTOFNSigma(0)
+ fTOFNSigma(0),
+ fTPCNSigma(0),
+ fTPCTOFNSigma(0),
+ fTPCvsTOFNSigma(0)
{
// copy constructor
if (fTOFTime) delete fTOFTime;
fTOFTime = new TH2D(*aCut.fTOFTime);
- if (fTOFNSigma) delete fTOFNSigma;
- fTOFNSigma= new TH2D(*aCut.fTOFNSigma);
+ if (fTOFNSigma) delete fTOFNSigma;
+ fTOFNSigma= new TH2D(*aCut.fTOFNSigma);
- if (fTPCNSigma) delete fTPCNSigma;
- fTPCNSigma= new TH2D(*aCut.fTPCNSigma);
+ if (fTPCNSigma) delete fTPCNSigma;
+ fTPCNSigma= new TH2D(*aCut.fTPCNSigma);
- if (fTPCTOFNSigma) delete fTPCTOFNSigma;
- fTPCTOFNSigma= new TH2D(*aCut.fTPCTOFNSigma);
+ if (fTPCTOFNSigma) delete fTPCTOFNSigma;
+ fTPCTOFNSigma= new TH2D(*aCut.fTPCTOFNSigma);
}
AliFemtoCutMonitorParticlePID::~AliFemtoCutMonitorParticlePID()
// Destructor
delete fTPCdEdx;
delete fTOFTime;
- delete fTOFNSigma;
- delete fTPCNSigma;
- delete fTPCTOFNSigma;
+ delete fTOFNSigma;
+ delete fTPCNSigma;
+ delete fTPCTOFNSigma;
+ delete fTPCvsTOFNSigma;
}
if (fTOFTime) delete fTOFTime;
fTOFTime = new TH2D(*aCut.fTOFTime);
- if(fTOFNSigma) delete fTOFNSigma;
- fTOFNSigma = new TH2D(*aCut.fTOFNSigma);
+ if(fTOFNSigma) delete fTOFNSigma;
+ fTOFNSigma = new TH2D(*aCut.fTOFNSigma);
- if(fTPCNSigma) delete fTPCNSigma;
- fTPCNSigma = new TH2D(*aCut.fTPCNSigma);
+ if(fTPCNSigma) delete fTPCNSigma;
+ fTPCNSigma = new TH2D(*aCut.fTPCNSigma);
- if(fTPCTOFNSigma) delete fTPCTOFNSigma;
- fTPCTOFNSigma = new TH2D(*aCut.fTPCTOFNSigma);
+ if(fTPCTOFNSigma) delete fTPCTOFNSigma;
+ fTPCTOFNSigma = new TH2D(*aCut.fTPCTOFNSigma);
+
+ if(fTPCvsTOFNSigma) delete fTPCvsTOFNSigma;
+ fTPCvsTOFNSigma = new TH2D(*aCut.fTPCvsTOFNSigma);
return *this;
}
if (fTOFParticle == 1) fTPCTOFNSigma->Fill(tMom, TMath::Hypot( aTrack->NSigmaTPCK(), aTrack->NSigmaTOFK() ) );
if (fTOFParticle == 2) fTPCTOFNSigma->Fill(tMom, TMath::Hypot( aTrack->NSigmaTPCP(), aTrack->NSigmaTOFP() ) );
+ if (fTOFParticle == 0) fTPCvsTOFNSigma->Fill(aTrack->NSigmaTPCPi(), aTrack->NSigmaTOFPi());
+ if (fTOFParticle == 1) fTPCvsTOFNSigma->Fill(aTrack->NSigmaTPCK(), aTrack->NSigmaTOFK());
+ if (fTOFParticle == 2) fTPCvsTOFNSigma->Fill(aTrack->NSigmaTPCP(), aTrack->NSigmaTOFP());
+
+
}
void AliFemtoCutMonitorParticlePID::Write()
// Write out the relevant histograms
fTPCdEdx->Write();
fTOFTime->Write();
- fTOFNSigma->Write();
- fTPCNSigma->Write();
- fTPCTOFNSigma->Write();
-
+ fTOFNSigma->Write();
+ fTPCNSigma->Write();
+ fTPCTOFNSigma->Write();
+ fTPCvsTOFNSigma->Write();
}
TList *AliFemtoCutMonitorParticlePID::GetOutputList()
TList *tOutputList = new TList();
tOutputList->Add(fTPCdEdx);
tOutputList->Add(fTOFTime);
- tOutputList->Add(fTOFNSigma);
- tOutputList->Add(fTPCNSigma);
- tOutputList->Add(fTPCTOFNSigma);
+ tOutputList->Add(fTOFNSigma);
+ tOutputList->Add(fTPCNSigma);
+ tOutputList->Add(fTPCTOFNSigma);
+ tOutputList->Add(fTPCvsTOFNSigma);
return tOutputList;
}
TH2D *fTPCdEdx; // TPC dEdx information
Int_t fTOFParticle; // Select TOF time hypothesis, 0-pion, 1-kaon, 2-proton
TH2D *fTOFTime; // TOF time
- TH2D *fTOFNSigma; // TOF NSigma values
- TH2D *fTPCNSigma; // TPC NSigma values
- TH2D *fTPCTOFNSigma; // TPC & TOF NSigma values
+ TH2D *fTOFNSigma; // TOF NSigma values vs mom
+ TH2D *fTPCNSigma; // TPC NSigma values vs mom
+ TH2D *fTPCTOFNSigma; // TPC^2+ TOF^2 NSigma values vs mom
+ TH2D *fTPCvsTOFNSigma; // TPC vs TOF
+
};
//getting next track
TParticle *kinetrack= fStack->Particle(i);
+
+
+
//setting multiplicity
realnofTracks++;//real number of tracks (only primary particles)
//Momentum
double pxyz[3];
- // double rxyz[3];
+ double rxyz[3];
- pxyz[0]=kinetrack->Px();
- pxyz[1]=kinetrack->Py();
- pxyz[2]=kinetrack->Pz();
+ pxyz[0]=kinetrack->Px();
+ pxyz[1]=kinetrack->Py();
+ pxyz[2]=kinetrack->Pz();
+
+ rxyz[0]=kinetrack->Vx();
+ rxyz[1]=kinetrack->Vy();
+ rxyz[2]=kinetrack->Vz();
+
+ AliFemtoModelHiddenInfo *tInfo = new AliFemtoModelHiddenInfo();
+ tInfo->SetPDGPid(kinetrack->GetPdgCode());
+ tInfo->SetTrueMomentum(pxyz[0], pxyz[1], pxyz[2]);
+ tInfo->SetMass(kinetrack->GetMass());
+ tInfo->SetEmissionPoint(rxyz[0]-fV1[0], rxyz[1]-fV1[1], rxyz[2]-fV1[2], 0.0);
+ trackCopy->SetHiddenInfo(tInfo);
+
+ trackCopy->SetTrueMomentum(pxyz[0], pxyz[1], pxyz[2]);
+ trackCopy->SetEmissionPoint(rxyz[0]-fV1[0], rxyz[1]-fV1[1], rxyz[2]-fV1[2], 0.0);
- // rxyz[0]=kinetrack->Vx();
- // rxyz[1]=kinetrack->Vy();
- // rxyz[2]=kinetrack->Vz();
if (fRotateToEventPlane) {
double tPhi = TMath::ATan2(pxyz[1], pxyz[0]);
SetTrueMomentumPos(aInfo.GetTrueMomentum());
if (aInfo.GetEmissionPoint())
SetEmissionPointPos(aInfo.GetEmissionPoint());
- fPDGPidPos = aInfo.GetPDGPid();
- fMassPos = aInfo.GetMass();
+ fPDGPid = aInfo.GetPDGPid();
+ fMass = aInfo.GetMass();
if (aInfo.GetTrueMomentumPos())
SetTrueMomentum(aInfo.GetTrueMomentumPos());
--- /dev/null
+#include "TChain.h"
+#include "TTree.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TCanvas.h"
+#include "TList.h"
+#include "TObjArray.h"
+#include "TString.h"
+#include "TParticle.h"
+
+#include "AliAnalysisTask.h"
+#include "AliAnalysisManager.h"
+#include "AliAnalysisTaskSE.h"
+#include "AliCentrality.h"
+
+#include "AliESDEvent.h"
+#include "AliESDtrackCuts.h"
+#include "AliESDInputHandler.h"
+
+#include "AliAODEvent.h"
+#include "AliAODTrack.h"
+#include "AliAODHandler.h"
+#include "AliAODInputHandler.h"
+#include "AliAODMCParticle.h"
+#include "AliAODpidUtil.h"
+#include "AliAnalysisUtils.h"
+
+#include "AliMCEvent.h"
+#include "AliStack.h"
+#include "AliInputEventHandler.h"
+
+#include "AliAnalysisTaskParticleEfficiency.h"
+
+
+ClassImp(AliAnalysisTaskParticleEfficiency)
+//ClassImp(AliAnalysisTaskParticleEfficiency)
+
+using std::cout;
+using std::endl;
+
+//_______________________________________________________
+
+AliAnalysisTaskParticleEfficiency::AliAnalysisTaskParticleEfficiency(const Char_t *partName) :
+AliAnalysisTaskSE(partName), centrality(0), fHistoList(0), fHistEv(0), fpidResponse(0)
+{
+
+ for(Int_t i = 0; i < MULTBINS*PARTTYPES; i++) {
+ fGeneratedMCPrimaries[i] = NULL;
+ fMCPrimariesThatAreReconstructed[i] = NULL;
+ fReconstructedAfterCuts[i] = NULL;
+ fReconstructedNotPrimaries[i] = NULL;
+ fReconstructedPrimaries[i] = NULL;
+ fContamination[i] = NULL;
+ }
+ for ( Int_t i = 0; i < 11; i++) {
+ fHistQA[i] = NULL;
+ if(i<3) fHistQA2D[i] = NULL;
+ }
+
+ /* init track cuts */
+ //fTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+ /*fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
+ if( !fTrackCuts ) return;
+ fTrackCuts->SetMinNClustersTPC(70);*/
+
+
+ /* create output */
+ fHistoList = new TList();
+ fHistoList->SetOwner(kTRUE);
+
+ DefineInput(0, TChain::Class());
+ DefineOutput(0, TList::Class());
+}
+
+//_______________________________________________________
+
+AliAnalysisTaskParticleEfficiency::~AliAnalysisTaskParticleEfficiency()
+{
+ /* if(centrality) delete centrality;
+s128 if(fHistoList) delete fHistoList;
+ if(vertex) delete vertex;
+ if(vtxSPD) delete vtxSPD;*/
+}
+
+//_______________________________________________________
+
+void AliAnalysisTaskParticleEfficiency::UserCreateOutputObjects()
+{
+
+ TString hname1, hname2, hname3, hname4, hname5;
+
+ TString htitle1, htitle2, htitle3, htitle4,htitle5;
+
+ TString hname1M, hname2M, hname3M, hname4M, hname5M, hname;
+
+ TString htitle1M, htitle2M, htitle3M, htitle4M, htitle5M, htitle;
+
+ TString parttypename = "None";
+
+ for(Int_t j = 0; j < PARTTYPES; j++) {
+ if (j==0) parttypename="All";
+ else if (j==1) parttypename="Pion";
+ else if (j==2) parttypename="Kaon";
+ else if (j==3) parttypename="Proton";
+
+ for(Int_t i = 0; i < MULTBINS; i++) {
+ hname1 = "hGeneratedMCPrimariesEffM"; hname1+=i; hname1+=parttypename;
+ htitle1 = "Kinematic level eta_pT (prim only) M"; htitle1+=i; htitle1+=parttypename;
+ fGeneratedMCPrimaries[i*PARTTYPES+j] = new TH2F(hname1.Data(),htitle1.Data(),50, -1.5, 1.5,1000,0.,10.0);
+
+ hname3 = "hMCPrimariesThatAreReconstructedM"; hname3+=i; hname3+=parttypename;
+ htitle3 = "Reconstructed level eta_pT (prim only) M"; htitle3+=i; htitle3+=parttypename;
+ fMCPrimariesThatAreReconstructed[i*PARTTYPES+j] = new TH2F(hname3.Data(),htitle3.Data(),50, -1.5, 1.5,1000,0.,10.0);
+
+ hname2 = "hHistoReconstructedAfterCutsM"; hname2+=i; hname2+=parttypename;
+ htitle2 = "Total Reconstructed tracks M "; htitle2+=i; htitle2+=parttypename;
+ fReconstructedAfterCuts[i*PARTTYPES+j] = new TH2F(hname2.Data(),htitle2.Data(),50, -1.5, 1.5,1000,0.,10.0);
+
+ hname4 = "hHistoReconstructedNotPrimariesM"; hname4+=i; hname4+=parttypename;
+ htitle4 = "Reconstructed level eta_pT (not primaries) M"; htitle4+=i; htitle4+=parttypename;
+ fReconstructedNotPrimaries[i*PARTTYPES+j] = new TH2F(hname4.Data(),htitle4.Data(),50, -1.5, 1.5,1000,0.,10.0);
+
+ hname4 = "hHistoReconstructedPrimariesM"; hname4+=i; hname4+=parttypename;
+ htitle4 = "Reconstructed level eta_pT (primaries) M"; htitle4+=i; htitle4+=parttypename;
+ fReconstructedPrimaries[i*PARTTYPES+j] = new TH2F(hname4.Data(),htitle4.Data(),50, -1.5, 1.5,1000,0.,10.0);
+
+ hname5 = "hContaminationM"; hname5+=i; hname5+=parttypename;
+ htitle5 = "Contamination M"; htitle5+=i; htitle5+=parttypename;
+ fContamination[i*PARTTYPES+j] = new TH2F(hname5.Data(),htitle5.Data(),6000, -3000, 3000.,1000,0.,10.0);
+
+
+ fReconstructedAfterCuts[i*PARTTYPES+j]->Sumw2();
+ fReconstructedNotPrimaries[i*PARTTYPES+j]->Sumw2();
+ fReconstructedPrimaries[i*PARTTYPES+j]->Sumw2();
+ }
+ hname = "pidTPCdEdx"; hname+=parttypename;
+ htitle = parttypename + " TPC dEdx vs. momentum";
+ fHistQAPID[0][j] = new TH2F(hname, htitle, 100, 0.0, 5.0, 250, 0.0, 500.0);
+ hname = "pidTOFTime"; hname+=parttypename;
+ htitle = parttypename + " TOF Time vs. momentum";
+ fHistQAPID[1][j] = new TH2F(hname, htitle, 100, 0.1, 5.0, 400, -4000.0, 4000.0);
+ hname = "pidTOFNSigma"; hname+=parttypename;
+ htitle = parttypename + " TOF NSigma vs. momentum";
+ fHistQAPID[2][j] = new TH2F(hname,htitle, 100, 0.0, 5.0, 100, -5.0, 5.0);
+ hname = "pidTPCNSigma"; hname+=parttypename;
+ htitle = parttypename + " TPC NSigma vs. momentum";
+ fHistQAPID[3][j] = new TH2F(hname,htitle, 100, 0.0, 5.0, 100, -5.0, 5.0);
+ hname = "pidTPCTOFNSigma"; hname+=parttypename;
+ htitle = parttypename + " TPC vs TOF NSigma";
+ fHistQAPID[4][j] = new TH2F(hname,htitle, 200, -10.0, 10.0, 200, -10.0, 10.0);
+
+ }
+
+ fHistEv = new TH1F("fHistEv", "Multiplicity", 100, 0, 100);
+ fHistoList->Add(fHistEv);
+
+ for(Int_t i = 0; i < MULTBINS; i++) {
+ hname = "fHistEventCutsM";
+ hname+= i;
+
+ fHistEvCuts[i] = new TH1F(hname,Form("Event Cuts M%d",i) , 4, 0, 5);
+ fHistEvCuts[i]->GetXaxis()->SetBinLabel(1,"All");
+ fHistEvCuts[i]->GetXaxis()->SetBinLabel(2,"NoVertex");
+ fHistEvCuts[i]->GetXaxis()->SetBinLabel(3,"PileUp");
+ fHistEvCuts[i]->GetXaxis()->SetBinLabel(4,"z-vertex>10");
+ fHistoList->Add(fHistEvCuts[i]);
+
+
+ hname = "hMisidentificationM"; hname+=i;
+ htitle = "Misidentification Fraction M"; htitle+=i;
+ fMisidentification[i] = new TH2F(hname.Data(),htitle.Data(), 3, 0.5, 3.5, 4 , 0, 4);
+ fMisidentification[i]->GetXaxis()->SetBinLabel(1,"Pions, MC");
+ fMisidentification[i]->GetXaxis()->SetBinLabel(2,"Kaons, MC");
+ fMisidentification[i]->GetXaxis()->SetBinLabel(3,"Protons, MC");
+ fMisidentification[i]->GetYaxis()->SetBinLabel(1,"Pions, Data");
+ fMisidentification[i]->GetYaxis()->SetBinLabel(2,"Kaons, Data");
+ fMisidentification[i]->GetYaxis()->SetBinLabel(3,"Protons, Data");
+ fMisidentification[i]->GetYaxis()->SetBinLabel(4,"Other, Data");
+ fHistoList->Add(fMisidentification[i]);
+
+ }
+
+ fHistQA[0] = new TH1F("fHistVtx", "Z vertex distribution", 100, -15., 15.);
+ fHistQA[1] = new TH1F("fHistnTpcCluster", "n TPC Cluster", 100, 0., 200.);
+ fHistQA[2] = new TH1F("fHistnTpcClusterF", "n TPC Cluster findable", 100, 0., 200.);
+ fHistQA[3] = new TH1F("dcaHistDcaXY1D", "DCA XY", 210, -2.1, 2.1);
+ fHistQA[4] = new TH1F("dcaHistDcaZ1D", "DCA Z", 210, -2.1, 2.1);
+ fHistQA[5] = new TH1F("fHistChi2Tpc", "Chi2 TPC", 100, 0., 8.);
+ fHistQA[6] = new TH1F("fHistpT", "pT distribution",1000,0.,10.0);
+ fHistQA[7] = new TH1F("fHistPhi", "Phi distribution" , 100, -TMath::Pi(), TMath::Pi());
+ fHistQA[8] = new TH1F("fHistEta", "Eta distribution" , 100, -2, 2);
+
+ fHistQA[9] = new TH1F("fHistEventCuts", "Event Cuts" , 4, 0, 5);
+ fHistQA[9]->GetXaxis()->SetBinLabel(1,"All");
+ fHistQA[9]->GetXaxis()->SetBinLabel(2,"NoVertex");
+ fHistQA[9]->GetXaxis()->SetBinLabel(3,"PileUp");
+ fHistQA[9]->GetXaxis()->SetBinLabel(4,"z-vertex>10");
+
+
+ fHistQA[10] = new TH1F("fHistTrackCuts", "Track Cuts" , 7, 0.5, 7.5);
+ fHistQA[10]->GetXaxis()->SetBinLabel(1,"AllTracksInEvents");
+ fHistQA[10]->GetXaxis()->SetBinLabel(2,"GetTrack");
+ fHistQA[10]->GetXaxis()->SetBinLabel(3,"Filter bit");
+ fHistQA[10]->GetXaxis()->SetBinLabel(4,"Eta");
+ fHistQA[10]->GetXaxis()->SetBinLabel(5,"Pt");
+ fHistQA[10]->GetXaxis()->SetBinLabel(6,"DCA");
+ fHistQA[10]->GetXaxis()->SetBinLabel(7,"Electron Rejection");
+
+ fHistQA2D[0] = new TH2F("dcaHistDcaXY","DCA XY",50, 0, 5,210, -2.1, 2.1);
+ fHistQA2D[1] = new TH2F("dcaHistDcaZ","DCA Z", 50, 0, 5, 210, -2.1, 2.1);
+ fHistQA2D[2] = new TH2F("fPhiEta","Eta-Phi",100, -2, 2, 100, -TMath::Pi(), TMath::Pi());
+
+
+
+ for ( Int_t i = 0; i < 11; i++)
+ {
+ fHistoList->Add(fHistQA[i]);
+ if(i<3) fHistoList->Add(fHistQA2D[i]);
+ if(i<5) {
+ for(Int_t j = 0 ; j<PARTTYPES; j++)
+ fHistoList->Add(fHistQAPID[i][j]);
+ }
+ }
+
+ for (Int_t i = 0; i < MULTBINS*PARTTYPES; i++){
+ fHistoList->Add(fGeneratedMCPrimaries[i]);
+ fHistoList->Add(fMCPrimariesThatAreReconstructed[i]);
+ fHistoList->Add(fReconstructedAfterCuts[i]);
+ fHistoList->Add(fReconstructedNotPrimaries[i]);
+ fHistoList->Add(fReconstructedPrimaries[i]);
+ fHistoList->Add(fContamination[i]);
+
+ }
+
+ //********** PID ****************
+
+ AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
+ fpidResponse = inputHandler->GetPIDResponse();
+ cout<<"*******"<< fpidResponse<<endl;
+
+ // ************************
+
+ PostData(0, fHistoList);
+}
+
+
+//_____________________________________________________________________
+
+bool IsPionNSigma(float mom, float nsigmaTPCPi, float nsigmaTOFPi)
+{
+
+ if (mom > 0.5) {
+ if (TMath::Hypot( nsigmaTOFPi, nsigmaTPCPi ) < 3)
+ return true;
+ }
+ else {
+ if (TMath::Abs(nsigmaTPCPi) < 3)
+ return true;
+ }
+/*
+ if(mom<0.65)
+ {
+ if(nsigmaTOFPi<-999.)
+ {
+ if(mom<0.35 && TMath::Abs(nsigmaTPCPi)<3.0) return true;
+ else if(mom<0.5 && mom>=0.35 && TMath::Abs(nsigmaTPCPi)<3.0) return true;
+ else if(mom>=0.5 && TMath::Abs(nsigmaTPCPi)<2.0) return true;
+ else return false;
+ }
+ else if(TMath::Abs(nsigmaTOFPi)<3.0 && TMath::Abs(nsigmaTPCPi)<3.0) return true;
+ }
+ else if(nsigmaTOFPi<-999.)
+ {
+ return false;
+ }
+ else if(mom<1.5 && TMath::Abs(nsigmaTOFPi)<3.0 && TMath::Abs(nsigmaTPCPi)<5.0) return true;
+ else if(mom>=1.5 && TMath::Abs(nsigmaTOFPi)<2.0 && TMath::Abs(nsigmaTPCPi)<5.0) return true;
+*/
+ return false;
+}
+
+bool IsKaonNSigma(float mom, float nsigmaTPCK, float nsigmaTOFK)
+{
+ if (mom > 0.5) {
+ if (TMath::Hypot( nsigmaTOFK, nsigmaTPCK ) < 3)
+ return true;
+ }
+ else {
+ if (TMath::Abs(nsigmaTPCK) < 3)
+ return true;
+ }
+
+ /* if(mom<0.4)
+ {
+ if(nsigmaTOFK<-999.)
+ {
+ if(TMath::Abs(nsigmaTPCK)<2.0) return true;
+ }
+ else if(TMath::Abs(nsigmaTOFK)<3.0 && TMath::Abs(nsigmaTPCK)<3.0) return true;
+ }
+ else if(mom>=0.4 && mom<=0.6)
+ {
+ if(nsigmaTOFK<-999.)
+ {
+ if(TMath::Abs(nsigmaTPCK)<2.0) return true;
+ }
+ else if(TMath::Abs(nsigmaTOFK)<3.0 && TMath::Abs(nsigmaTPCK)<3.0) return true;
+ }
+ else if(nsigmaTOFK<-999.)
+ {
+ return false;
+ }
+ else if(TMath::Abs(nsigmaTOFK)<3.0 && TMath::Abs(nsigmaTPCK)<3.0) return true;
+*/
+ return false;
+}
+
+bool IsProtonNSigma(float mom, float nsigmaTPCP, float nsigmaTOFP)
+{
+
+ if (mom > 0.5) {
+ if (TMath::Hypot( nsigmaTOFP, nsigmaTPCP ) < 3)
+ return true;
+ }
+ else {
+ if (TMath::Abs(nsigmaTPCP) < 3)
+ return true;
+ }
+
+ // if (mom > 0.8 && mom < 2.5) {
+ // if ( TMath::Abs(nsigmaTPCP) < 3.0 && TMath::Abs(nsigmaTOFP) < 3.0)
+ // return true;
+ // }
+ // else if (mom > 2.5) {
+ // if ( TMath::Abs(nsigmaTPCP) < 3.0 && TMath::Abs(nsigmaTOFP) < 2.0)
+ // return true;
+ // }
+ // else {
+ // if (TMath::Abs(nsigmaTPCP) < 3.0)
+ // return true;
+ // }
+
+
+ return false;
+}
+
+
+bool IsElectron(float nsigmaTPCE, float nsigmaTPCPi,float nsigmaTPCK, float nsigmaTPCP)
+{
+ if(TMath::Abs(nsigmaTPCE)<3 && TMath::Abs(nsigmaTPCPi)>3 && TMath::Abs(nsigmaTPCK)>3 && TMath::Abs(nsigmaTPCP)>3)
+ return true;
+ else
+ return false;
+}
+
+//_______________________________________________________
+
+void AliAnalysisTaskParticleEfficiency::UserExec(Option_t *)
+{
+
+
+ /***Get Event****/
+ //AliESDEvent *esdEvent = dynamic_cast<AliESDEvent *>(InputEvent());
+ AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(InputEvent());
+ if (!aodEvent) return;
+ AliAODHeader *fAODheader = aodEvent->GetHeader();
+ Double_t mult = fAODheader->GetRefMultiplicity();
+// AliCentrality* alicent= aodEvent->GetCentrality(); //in PbPb and pPb
+// Double_t mult = alicent->GetCentralityPercentile("V0A"); //in pPb
+// Double_t mult = alicent->GetCentralityPercentile("V0A"); //in PbPb
+ fHistEv->Fill(mult);
+
+
+ //******************
+ // load MC array
+ // arrayMC = (TClonesArray*)aodEvent->GetList()->FindObject(AliAODMCParticle::StdBranchName());
+ // if(!arrayMC) {
+ // printf("AliAnalysisTaskParticleEficiency::UserExec: MC particles branch not found!\n");
+ //return;
+ //}
+
+ // load MC header
+ //mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
+ //if(!mcHeader) {
+ //printf("AliAnalysisTaskSEDplusCorrelations::UserExec: MC header branch not found!\n");
+ //return;
+ // }
+ //*********************
+
+
+
+ // EVENT SELECTION ********************
+
+ fHistQA[9]->Fill(1);
+
+ // collision candidate
+ // if (!(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB)) return;
+
+
+ //****** Multiplicity selection *********
+ Int_t fcent = -999;
+ //if(mult >= 0 && mult <=20) fcent = 0;
+ //else if(mult >= 20 && mult <=39) fcent = 1;
+ //else if(mult >= 40 && mult <=59) fcent = 2;
+ //else if(mult >= 60 && mult <=90) fcent = 3;
+ //else if(mult >= 99990 && mult <=99936) fcent = 4;
+ //else if(mult >= 999937 && mult <=99944) fcent = 5;
+ //else if(mult >= 999945 && mult <=99957) fcent = 6;
+ //else if(mult >= 999958 && mult <=99149) fcent = 6;
+ //else fcent = 7;
+ //if (fcent == 7) return;
+
+ if(mult >= 2&& mult <=150) fcent = 0;
+ else if(mult >= 2 && mult <=19) fcent = 1;
+ else if(mult >= 20 && mult <=49) fcent = 2;
+ else if(mult >= 50 && mult <=150) fcent = 3;
+ else return;
+
+ if(fcent==0)fHistEvCuts[0]->Fill(1);
+ else if(fcent==1)fHistEvCuts[1]->Fill(1);
+ else if(fcent==2)fHistEvCuts[2]->Fill(1);
+ else if(fcent==3)fHistEvCuts[3]->Fill(1);
+
+ //"ESDs/pass2/AOD049/*AliAOD.root");
+ const AliAODVertex* vertex =(AliAODVertex*) aodEvent->GetPrimaryVertex();
+ if (!vertex || vertex->GetNContributors()<=0) return;
+
+ fHistQA[9]->Fill(2);
+ if(fcent==0)fHistEvCuts[0]->Fill(2);
+ else if(fcent==1)fHistEvCuts[1]->Fill(2);
+ else if(fcent==2)fHistEvCuts[2]->Fill(2);
+ else if(fcent==3)fHistEvCuts[3]->Fill(2);
+
+ AliAnalysisUtils *anaUtil=new AliAnalysisUtils();
+
+ Bool_t fpA2013 = kFALSE;
+ Bool_t fMVPlp = kFALSE;
+ Bool_t fisPileUp = kTRUE;
+ Int_t fMinPlpContribMV = 0;
+ Int_t fMinPlpContribSPD = 3;
+
+ if(fpA2013)
+ if(anaUtil->IsVertexSelected2013pA(aodEvent)==kFALSE) return;
+
+ if(fMVPlp) anaUtil->SetUseMVPlpSelection(kTRUE);
+ else anaUtil->SetUseMVPlpSelection(kFALSE);
+
+ if(fMinPlpContribMV) anaUtil->SetMinPlpContribMV(fMinPlpContribMV);
+ if(fMinPlpContribSPD) anaUtil->SetMinPlpContribSPD(fMinPlpContribSPD);
+
+ if(fisPileUp)
+ if(anaUtil->IsPileUpEvent(aodEvent)) return;
+
+ delete anaUtil;
+
+ fHistQA[9]->Fill(3);
+ if(fcent==0)fHistEvCuts[0]->Fill(3);
+ else if(fcent==1)fHistEvCuts[1]->Fill(3);
+ else if(fcent==2)fHistEvCuts[2]->Fill(3);
+ else if(fcent==3)fHistEvCuts[3]->Fill(3);
+
+ //TString vtxTtl = vertex->GetTitle();
+ //if (!vtxTtl.Contains("VertexerTracks")) return;
+ Float_t zvtx = vertex->GetZ();
+ if (TMath::Abs(zvtx) > 10) return;
+ fHistQA[0]->Fill(zvtx);
+ fHistQA[9]->Fill(4);
+ if(fcent==0)fHistEvCuts[0]->Fill(4);
+ else if(fcent==1)fHistEvCuts[1]->Fill(4);
+ else if(fcent==2)fHistEvCuts[2]->Fill(4);
+ else if(fcent==3)fHistEvCuts[3]->Fill(4);
+
+ //**** getting MC array ******
+ TClonesArray *arrayMC;
+
+ arrayMC = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+
+
+ //get stack
+ //AliStack *mcStack = mcEvent->Stack();
+ //if (!mcStack) return;
+ //***********************
+
+
+ // old vertex selection
+ /*const AliESDVertex *vertex = esdEvent->GetPrimaryVertex();
+ if (vertex->GetNContributors() < 1) return;
+
+ //z-vertex cut
+ if (TMath::Abs(vertex->GetZ()) > 10.) return;
+
+
+ const AliESDVertex *vtxSPD = esdEvent->GetPrimaryVertexSPD();*/
+ // Double_t zVertex = vtxSPD->GetZ();
+
+ //cout << "Event Z vtx ==========> " << vertex->GetZ() <<endl;
+ // centrality selection
+ //AliCentrality *centrality = aodEvent->GetHeader()->GetCentralityP();
+ //if (centrality->GetQuality() != 0) return;
+ //Double_t cent = centrality->GetCentralityPercentileUnchecked("V0M");
+ //if(cent < 0 || cent > 100.) return;
+
+
+//copying pid information for FB 128
+ int labels[20000];
+ for (int il=0; il<20000; il++) labels[il] = -1;
+
+ // looking for global tracks and saving their numbers to copy from them PID information to TPC-only tracks in the main loop over tracks
+ for (int i=0;i<aodEvent->GetNumberOfTracks();i++) {
+ const AliAODTrack *aodtrack=aodEvent->GetTrack(i);
+ if (!aodtrack->TestFilterBit(128)) {
+ if(aodtrack->GetID() < 0) continue;
+ labels[aodtrack->GetID()] = i;
+ }
+ }
+
+
+
+ //RECONSTRUCTED TRACKS
+
+ TObjArray recoParticleArray[PARTTYPES];
+
+ fHistQA[10]->Fill(1,aodEvent->GetNumberOfTracks());
+ //loop over AOD tracks
+ for (Int_t iTracks = 0; iTracks < aodEvent->GetNumberOfTracks(); iTracks++) {
+ //get track
+
+ //AliESDtrack* track = AliESDtrackCuts::GetTPCOnlyTrack(const_cast<AliESDEvent*>(esdEvent),iTracks);
+ AliAODTrack *track = aodEvent->GetTrack(iTracks);
+ if (!track)continue;
+ fHistQA[10]->Fill(2);
+
+ //UInt_t filterBit = (1 << (0));
+ UInt_t filterBit = 96;
+ if(!track->TestFilterBit(filterBit))continue;
+
+ //if(!track->IsHybridGlobalConstrainedGlobal())continue;
+ //if((track->IsHybridGlobalConstrainedGlobal())==false)continue;
+ // if(!track->IsHybridTPCConstrainedGlobal())continue;
+ // if(!track->IsTPCConstrained())continue;
+ //if(!track->IsGlobalConstrained())continue;
+ //if((track->TestFilterMask(AliAODTrack::kTrkTPCOnly)==false))continue;//cut0_BIT(0)
+
+ // if((track->IsHybridGlobalConstrainedGlobal())==false)
+ // continue;//def_BIT(272)
+
+ //if((track->TestFilterMask(AliAODTrack::kTrkGlobal)==false))continue;//cut1_BIT(5)
+
+ fHistQA[10]->Fill(3);
+
+ if(track->Eta() < -0.8 || track->Eta() > 0.8)
+ continue;
+ fHistQA[10]->Fill(4);
+
+ if (track->Pt() < 0.2 || track->Pt() > 20)
+ continue;
+ fHistQA[10]->Fill(5);
+
+ //single track cuts
+ // if(track->Chi2perNDF() > 4.0) continue;
+ // if(track->GetTPCNcls() < 70) continue;
+
+ //DCA
+
+ Double_t DCAXY;
+ Double_t DCAZ;
+ // if(filterBit==(1 << (7))){
+ DCAXY = -TMath::Abs(track->DCA());
+ DCAZ = -TMath::Abs(track->ZAtDCA());
+
+ if(!(DCAXY==-999 || DCAZ==-999)){
+ //if(TMath::Abs(DCAXY) > 0.0182 + 0.035*TMath::Power(track->Pt(), -1.01)) continue; //XY, Pt dep
+ //no DCA cut
+ //if(TMath::Abs(DCAXY) > 1000.0) {continue;} //XY
+ //if(TMath::Abs(DCAZ) > 1000.0) {continue;} //Z
+ }
+ else {
+ // code from Michael and Prabhat from AliAnalysisTaskDptDptCorrelations
+ // const AliAODVertex* vertex = (AliAODVertex*) aodEvent->GetPrimaryVertex(); (already defined above)
+ float vertexX = -999.;
+ float vertexY = -999.;
+ float vertexZ = -999.;
+
+ if(vertex) {
+ Double32_t fCov[6];
+ vertex->GetCovarianceMatrix(fCov);
+ if(vertex->GetNContributors() > 0) {
+ if(fCov[5] != 0) {
+ vertexX = vertex->GetX();
+ vertexY = vertex->GetY();
+ vertexZ = vertex->GetZ();
+
+ }
+ }
+ }
+
+ Double_t pos[3];
+ track->GetXYZ(pos);
+
+ Double_t DCAX = pos[0] - vertexX;
+ Double_t DCAY = pos[1] - vertexY;
+ DCAZ = pos[2] - vertexZ;
+ DCAXY = TMath::Sqrt((DCAX*DCAX) + (DCAY*DCAY));
+
+ //if(TMath::Abs(DCAXY) > 0.0182 + 0.035*TMath::Power(track->Pt(), -1.01)) continue; //XY, Pt dep
+ //if(TMath::Abs(impactD) > 0.44 + 0.07*TMath::Power(tPt, -1.94)) continue; //XY, Pt dep
+ //no DCA cut
+ //if(TMath::Abs(DCAXY) > 1000.0) continue;
+ //if(TMath::Abs(DCAZ) > 1000.0) continue;
+ }
+
+ fHistQA[10]->Fill(6);
+
+ AliAODTrack* aodtrackpid;
+
+ //for FB 128 - tpc only tracks
+ if(filterBit==(1 << (7)))
+ aodtrackpid = aodEvent->GetTrack(labels[-1-aodEvent->GetTrack(iTracks)->GetID()]);
+ else
+ aodtrackpid = track;
+
+
+ //PANOS--------------------------
+
+ AliMCEvent* mcEvent = MCEvent();
+ if (!mcEvent) {
+ AliError("ERROR: Could not retrieve MC event");
+ return;
+ }
+
+ Int_t nMCParticles = mcEvent->GetNumberOfTracks();
+ Int_t labelp = TMath::Abs(track->GetLabel());
+ if(labelp > nMCParticles) continue;
+
+ AliAODMCParticle *AODmcTrack = (AliAODMCParticle*) mcEvent->GetTrack(labelp);
+
+ /*
+ //contamination from secondaries without electron rejection
+ if (!AODmcTrack->IsPhysicalPrimary()) {
+ fReconstructedNotPrimaries[PARTTYPES*fcent]->Fill(track->Eta(), track->Pt());
+ }
+ else{
+ fReconstructedPrimaries[PARTTYPES*fcent]->Fill(track->Eta(), track->Pt());
+ }
+ */
+ //-------------------------
+
+ //Electron rejection
+ double nSigmaTPCPi = fpidResponse->NumberOfSigmasTPC(aodtrackpid,AliPID::kPion);
+ double nSigmaTPCK = fpidResponse->NumberOfSigmasTPC(aodtrackpid,AliPID::kKaon);
+ double nSigmaTPCP = fpidResponse->NumberOfSigmasTPC(aodtrackpid,AliPID::kProton);
+ double nSigmaTPCe = fpidResponse->NumberOfSigmasTPC(aodtrackpid,AliPID::kElectron);
+ if(IsElectron(nSigmaTPCe,nSigmaTPCPi,nSigmaTPCK,nSigmaTPCP))
+ continue;
+ fHistQA[10]->Fill(7);
+
+ fHistQA[1]->Fill(track->GetTPCClusterInfo(2,1));
+ //fHistQA[2]->Fill(track->GetTPCNclsF());
+ fHistQA[3]->Fill(DCAXY);
+ fHistQA[4]->Fill(DCAZ);
+ Float_t chi2Tpc = track->Chi2perNDF();
+ fHistQA[5]->Fill(chi2Tpc);
+ fHistQA[6]->Fill(track->Pt());
+
+ float px=track->Px(); float py=track->Py(); float ph=atan2(py,px); //track->Phi()
+ float tPt = track->Pt();
+
+ fHistQA[7]->Fill(ph);
+ fHistQA[8]->Fill(track->Eta());
+ fHistQA2D[2]->Fill(track->Eta(),ph);
+
+ fHistQA2D[0]->Fill(tPt,DCAXY);
+ fHistQA2D[1]->Fill(tPt,DCAZ);
+
+
+ //PANOS
+ //contamination from secondaries with electron rejection
+ // if (!AODmcTrack->IsPhysicalPrimary()) {
+ // fReconstructedNotPrimaries[PARTTYPES*fcent]->Fill(track->Eta(), track->Pt());
+ // }
+ // else{
+ // fReconstructedPrimaries[PARTTYPES*fcent]->Fill(track->Eta(), track->Pt());
+ // }
+
+
+ //PID monitors
+ double nSigmaTOFPi = fpidResponse->NumberOfSigmasTOF(aodtrackpid,AliPID::kPion);
+ double nSigmaTOFK = fpidResponse->NumberOfSigmasTOF(aodtrackpid,AliPID::kKaon);
+ double nSigmaTOFP = fpidResponse->NumberOfSigmasTOF(aodtrackpid,AliPID::kProton);
+
+ float tdEdx = aodtrackpid->GetTPCsignal();
+ float tTofSig = aodtrackpid->GetTOFsignal();
+ double pidTime[5]; aodtrackpid->GetIntegratedTimes(pidTime);
+
+
+ fHistQAPID[0][0]->Fill(tPt,tdEdx);
+ fHistQAPID[1][0]->Fill(tPt,tTofSig-pidTime[2]);//pion
+ fHistQAPID[2][0]->Fill(tPt,nSigmaTOFPi);
+ fHistQAPID[3][0]->Fill(tPt,nSigmaTPCPi);
+ fHistQAPID[4][0]->Fill(nSigmaTPCPi,nSigmaTOFPi);
+
+ if (IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi)){
+ fHistQAPID[0][1]->Fill(tPt,tdEdx);
+ fHistQAPID[1][1]->Fill(tPt,tTofSig-pidTime[2]);//pion
+ fHistQAPID[2][1]->Fill(tPt,nSigmaTOFPi);
+ fHistQAPID[3][1]->Fill(tPt,nSigmaTPCPi);
+ fHistQAPID[4][1]->Fill(nSigmaTPCPi,nSigmaTOFPi);
+ }
+ if (IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK)){
+ fHistQAPID[0][2]->Fill(tPt,tdEdx);
+ fHistQAPID[1][2]->Fill(tPt,tTofSig-pidTime[3]);//kaon
+ fHistQAPID[2][2]->Fill(tPt,nSigmaTOFK);
+ fHistQAPID[3][2]->Fill(tPt,nSigmaTPCK);
+ fHistQAPID[4][2]->Fill(nSigmaTPCK,nSigmaTOFK);
+ }
+ if (IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP)){
+ fHistQAPID[0][3]->Fill(tPt,tdEdx);
+ fHistQAPID[1][3]->Fill(tPt,tTofSig-pidTime[4]);//proton
+ fHistQAPID[2][3]->Fill(tPt,nSigmaTOFP);
+ fHistQAPID[3][3]->Fill(tPt,nSigmaTPCP);
+ fHistQAPID[4][3]->Fill(nSigmaTPCP,nSigmaTOFP);
+ }
+
+ fReconstructedAfterCuts[fcent]->Fill(track->Eta(), track->Pt());//Fills hist. for all reconstructed particles after cuts
+
+ if(!arrayMC){
+ continue;
+ }
+ //get coresponding MC particle
+ Int_t label = TMath::Abs(track->GetLabel());
+ AliAODMCParticle *MCtrk = (AliAODMCParticle*)arrayMC->At(label);
+
+ //getting no. of tracks for each particle species after all the cuts:
+
+ //********* PID - pions ********
+ if (IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi)){
+ fReconstructedAfterCuts[PARTTYPES*fcent+1]->Fill(track->Eta(), track->Pt());
+ if (!MCtrk) continue;
+ recoParticleArray[1].Add(MCtrk);
+ }
+ //Fills for all identified pions found after cuts (reconstructed) - numerator for Efficiency
+
+ //********* PID - kaons ********
+ if (IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK)){
+ fReconstructedAfterCuts[PARTTYPES*fcent+2]->Fill(track->Eta(), track->Pt());
+ if (!MCtrk) continue;
+ recoParticleArray[2].Add(MCtrk);
+ }
+ //Fills for all identified kaons found after cuts (reconstructed) - numerator for Efficiency
+
+ //********* PID - protons ********
+ if (IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP)){
+ fReconstructedAfterCuts[PARTTYPES*fcent+3]->Fill(track->Eta(), track->Pt());
+ if (!MCtrk) continue;
+ recoParticleArray[3].Add(MCtrk);
+ }
+
+ //Fills for all identified protos found after cuts (reconstructed) - numerator for Efficiency
+ //******************************
+
+ //get coresponding MC particle
+ // Int_t label = TMath::Abs(track->GetLabel()); //moved up
+ // if(!label) cout<<"no label"<<endl;
+ //if(label) cout<<"label = "<<label<<endl;
+
+ //AliAODMCParticle *MCtrk = (AliAODMCParticle*)arrayMC->At(label); //moved up
+ if (!MCtrk) continue;
+ if(MCtrk->Charge()==0){cout<<"!!!"<<endl; continue;}
+ recoParticleArray[0].Add(MCtrk);
+
+
+ //Fills histogram for particles that are contamination from secondaries:
+ if (!AODmcTrack->IsPhysicalPrimary()) {
+ fReconstructedNotPrimaries[PARTTYPES*fcent]->Fill(track->Eta(), track->Pt());
+ }
+ else{
+ fReconstructedPrimaries[PARTTYPES*fcent]->Fill(track->Eta(), track->Pt());
+ }
+
+ int PDGcode = MCtrk->GetPdgCode();
+
+ //And secondaries for different particle species:
+ if (!AODmcTrack->IsPhysicalPrimary() && (IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi) && PDGcode==211)) { //secondaries in pions
+ fReconstructedNotPrimaries[PARTTYPES*fcent+1]->Fill(track->Eta(), track->Pt());
+ }
+ else if(AODmcTrack->IsPhysicalPrimary() && (IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi) && PDGcode==211)) {
+ fReconstructedPrimaries[PARTTYPES*fcent+1]->Fill(track->Eta(), track->Pt());
+ }
+
+ if (!AODmcTrack->IsPhysicalPrimary() && (IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK) && PDGcode==321)) { //secondaries in kaons
+ fReconstructedNotPrimaries[PARTTYPES*fcent+2]->Fill(track->Eta(), track->Pt());
+ }
+ else if(AODmcTrack->IsPhysicalPrimary() && (IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK) && PDGcode==321)) {
+ fReconstructedPrimaries[PARTTYPES*fcent+2]->Fill(track->Eta(), track->Pt());
+ }
+
+ if (!AODmcTrack->IsPhysicalPrimary() && (IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP) && PDGcode==2212)) { //secondaries in protons
+ fReconstructedNotPrimaries[PARTTYPES*fcent+3]->Fill(track->Eta(), track->Pt());
+ }
+ else if(AODmcTrack->IsPhysicalPrimary() && (IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP) && PDGcode==2212)) {
+ fReconstructedPrimaries[PARTTYPES*fcent+3]->Fill(track->Eta(), track->Pt());
+ }
+
+ //Misidentification fraction
+ if(PDGcode==211)
+ {
+ if(IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi))
+ fMisidentification[fcent]-> Fill(1,0.5);
+ if(IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK))
+ fMisidentification[fcent]-> Fill(1,1.5);
+ if(IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP))
+ fMisidentification[fcent]-> Fill(1,2.5);
+ if(!IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi) && !IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK) && !IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP))
+ fMisidentification[fcent]-> Fill(1,3.5);
+
+
+ }
+ else if(PDGcode==321)
+ {
+ if(IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi))
+ fMisidentification[fcent]-> Fill(2,0.5);
+ if(IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK))
+ fMisidentification[fcent]-> Fill(2,1.5);
+ if(IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP))
+ fMisidentification[fcent]-> Fill(2,2.5);
+ if(!IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi) && !IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK) && !IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP))
+ fMisidentification[fcent]-> Fill(2,3.5);
+
+
+ }
+ else if(PDGcode == 2212)
+ {
+ if(IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi))
+ fMisidentification[fcent]-> Fill(3,0.5);
+ if(IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK))
+ fMisidentification[fcent]-> Fill(3,1.5);
+ if(IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP))
+ {
+ fMisidentification[fcent]-> Fill(3,2.5);
+ }
+ if(!IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi) && !IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK) && !IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP))
+ fMisidentification[fcent]-> Fill(3,3.5);
+ }
+
+
+ //Contaminations: "how many pions are in the kaons sample"? etc.
+ //Do not use for corrections: using those values will be dependant on i.e. Pi/K ratio in MC
+ //Use misidentification fraction instead
+ if(IsPionNSigma(track->P(),nSigmaTPCPi, nSigmaTOFPi))
+ {
+ fContamination[PARTTYPES*fcent+1]-> Fill(PDGcode,track->Pt()); // filling contamination histogram for pions
+ }
+ if(IsKaonNSigma(track->P(),nSigmaTPCK, nSigmaTOFK))
+ {
+ fContamination[PARTTYPES*fcent+2]-> Fill(PDGcode,track->Pt()); // filling contamination histogram for kaons
+ }
+ if(IsProtonNSigma(track->P(),nSigmaTPCP, nSigmaTOFP))
+ {
+ fContamination[PARTTYPES*fcent+3]-> Fill(PDGcode,track->Pt()); // filling contamination histogram for protons
+ }
+
+
+
+ }
+
+
+ // MONTECARLO PARTICLES
+ if(!arrayMC){
+ AliError("Array of MC particles not found");
+ return;
+ }
+ // loop over MC stack
+ for (Int_t ipart = 0; ipart < arrayMC->GetEntries(); ipart++) {
+ //cout<<"Entered MC loop"<<endl;
+
+ AliAODMCParticle *MCtrk = (AliAODMCParticle*)arrayMC->At(ipart);
+
+ if (!MCtrk) continue;
+ //cout<<"particle obtained"<<endl;
+
+ Int_t PDGcode = TMath::Abs(MCtrk->GetPdgCode());
+
+
+ if(MCtrk->Charge() == 0) continue;
+
+ //*** PID - check if pion ***
+ //if(PDGcode!=211) continue; //(PDGcode==11 || PDGcode==321 || PDGcode==2212 || PDGcode==13)
+
+ if(MCtrk->Eta() < -0.8 || MCtrk->Eta() > 0.8){
+ continue; }
+
+ if (MCtrk->Pt() < 0.2 || MCtrk->Pt() > 20){
+ continue;}
+
+ // check physical primary
+ if (MCtrk->IsPhysicalPrimary()){
+
+ // Filling histograms for MC truth particles
+ fGeneratedMCPrimaries[fcent*PARTTYPES]->Fill(MCtrk->Eta(), MCtrk->Pt());
+ if(PDGcode==211)
+ fGeneratedMCPrimaries[fcent*PARTTYPES+1]->Fill(MCtrk->Eta(), MCtrk->Pt());
+ else if(PDGcode==321)
+ fGeneratedMCPrimaries[fcent*PARTTYPES+2]->Fill(MCtrk->Eta(), MCtrk->Pt());
+ else if(PDGcode==2212)
+ fGeneratedMCPrimaries[fcent*PARTTYPES+3]->Fill(MCtrk->Eta(), MCtrk->Pt());
+
+ //Filling data from MC truth particles only for particles that were reconstruced
+ if (recoParticleArray[0].Contains(MCtrk)){ //All
+ fMCPrimariesThatAreReconstructed[fcent*PARTTYPES]->Fill(MCtrk->Eta(), MCtrk->Pt());
+ }
+ if (recoParticleArray[1].Contains(MCtrk)){ //Pions
+ if(PDGcode==211)
+ fMCPrimariesThatAreReconstructed[fcent*PARTTYPES+1]->Fill(MCtrk->Eta(), MCtrk->Pt());
+ }
+ if (recoParticleArray[2].Contains(MCtrk)){ //Kaons
+ if(PDGcode==321)
+ fMCPrimariesThatAreReconstructed[fcent*PARTTYPES+2]->Fill(MCtrk->Eta(), MCtrk->Pt());
+ }
+ if (recoParticleArray[3].Contains(MCtrk)){ //Protons
+ if(PDGcode==2212)
+ fMCPrimariesThatAreReconstructed[fcent*PARTTYPES+3]->Fill(MCtrk->Eta(), MCtrk->Pt());
+ }
+
+ }
+
+ }
+ PostData(0, fHistoList);
+}
+//-----------------------------------------------------------------
+
+//void AliAnalysisTaskParticleEfficiency::Terminate(Option_t *)
+//{}
--- /dev/null
+#ifndef ALIANALYSISTASKPARTICLEEFFICIENCY
+#define ALIANALYSISTASKPARTICLEEFFICIENCY
+
+#define MULTBINS 1
+#define PARTTYPES 4
+
+#include "AliAnalysisTaskSE.h"
+
+class AliESDtrackCuts;
+class TList;
+class TH2F;
+class TH1F;
+class AliESDEvent;
+class AliMCEvent;
+class AliStack;
+class TParticle;
+class AliESDtrackCuts;
+class AliCentrality;
+class TObjArray;
+class AliEventPoolManager;
+class AliInputEventHandler;
+class AliESDtrack;
+class AliESDVertex;
+class AliAODEvent;
+class AliAODTrack;
+class AliAODMCParticle;
+class AliAODHandler;
+class AliAODInputHandler;
+class AliPIDResponse;
+
+class AliAnalysisTaskParticleEfficiency :public AliAnalysisTaskSE{
+ public:
+ AliAnalysisTaskParticleEfficiency() : AliAnalysisTaskSE(),centrality(0), fHistoList(0), fHistEv(0), fpidResponse(0)
+ {
+
+ for(Int_t i = 0; i < MULTBINS*PARTTYPES; i++) {
+
+ fGeneratedMCPrimaries[i] = NULL;
+ fMCPrimariesThatAreReconstructed[i] = NULL;
+ fReconstructedAfterCuts[i] = NULL;
+ fReconstructedNotPrimaries[i] = NULL;
+ fReconstructedPrimaries[i] = NULL;
+ fContamination[i] = NULL;
+ }
+
+ for ( Int_t i = 0; i < 11; i++) {
+ fHistQA[i] = NULL;
+ if(i<3) fHistQA2D[i] = NULL;
+ }
+ }
+
+ AliAnalysisTaskParticleEfficiency(const Char_t *partName); // default constructor
+ virtual ~AliAnalysisTaskParticleEfficiency(); // default destructor
+ virtual void UserCreateOutputObjects(); // user create output objects
+ virtual void UserExec(Option_t *option); // user exec
+ //void Terminate(Option_t *option);
+
+ private:
+ AliAnalysisTaskParticleEfficiency(const AliAnalysisTaskParticleEfficiency &); // copy constructor
+ AliAnalysisTaskParticleEfficiency &operator=(const AliAnalysisTaskParticleEfficiency &); // operator=
+ //AliAODEvent *aodEvent;
+ AliCentrality *centrality;
+ //AliAODTrack *fTpcTracks;
+ //AliAODVertex *vertex;
+ //AliAODVertex *vtxSPD;
+ //AliAODMCParticle *MCtrk;
+ //AliESDtrackCuts *fTrackCuts; // ESD track cuts
+ TList *fHistoList; // histo list
+ //TClonesArray *arrayMC;
+ TH1F *fHistEv;
+ AliPIDResponse *fpidResponse;
+
+ TH1F *fHistQA[11];
+ TH2F *fHistQA2D[3];
+ TH2F *fHistQAPID[5][PARTTYPES];
+ TH1F* fHistEvCuts[MULTBINS];
+ //TObjArray *recoParticleArray;
+ TH2F *fGeneratedMCPrimaries[MULTBINS*PARTTYPES];
+ TH2F *fMCPrimariesThatAreReconstructed[MULTBINS*PARTTYPES];
+ TH2F *fReconstructedAfterCuts[MULTBINS*PARTTYPES];
+ TH2F *fReconstructedNotPrimaries[MULTBINS*PARTTYPES];
+ TH2F *fReconstructedPrimaries[MULTBINS*PARTTYPES];
+ TH2F *fContamination[MULTBINS*PARTTYPES];
+ TH2F *fMisidentification[MULTBINS*PARTTYPES];
+
+ ClassDef(AliAnalysisTaskParticleEfficiency, 1);
+
+};
+
+#endif /* ALIANALYSISTASKPARTICLEEFFICIENCY */
--- /dev/null
+////////////////////////////////////////////////////////////////////////////////
+// //
+// AliFemtoCorrFctnDEtaDPhiCorrections - A correlation function that analyzes //
+// two particle correlations with respect to the azimuthal angle (phi) //
+// and pseudorapidity (eta) difference //
+// //
+// Authors: Adam Kisiel Adam.Kisiel@cern.ch //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#include "AliFemtoCorrFctnDEtaDPhiCorrections.h"
+#include "AliFemtoModelHiddenInfo.h"
+//#include "AliFemtoHisto.hh"
+#include <cstdio>
+#include <TMath.h>
+
+#ifdef __ROOT__
+ClassImp(AliFemtoCorrFctnDEtaDPhiCorrections)
+#endif
+
+#define PIH 1.57079632679489656
+#define PIT 6.28318530717958623
+
+
+
+
+//____________________________
+AliFemtoCorrFctnDEtaDPhiCorrections::AliFemtoCorrFctnDEtaDPhiCorrections(char* title, const int& aPhiBins=20, const int& aEtaBins=20):
+ AliFemtoCorrFctn(),
+ fDPhiDEtaNumerator(0),
+ fDPhiDEtaDenominator(0),
+ fDPhiNumerator(0),
+ fDPhiDenominator(0),
+ fDCosNumerator(0),
+ fDCosDenominator(0),
+ fDoPtAnalysis(0),
+ fDPhiPtNumerator(0),
+ fDPhiPtDenominator(0),
+ fDCosPtNumerator(0),
+ fDCosPtDenominator(0),
+ fPhi(0),
+ fEta(0),
+ fYtYtNumerator(0),
+ fYtYtDenominator(0),
+ fIfCorrectionHist(kNone),
+ fIfCorrection(0),
+ fPtCorrectionsNum(0),
+ fPtCorrectionsDen(0),
+ fEtaCorrectionsNum(0),
+ fEtaCorrectionsDen(0),
+ fCorrFactorTab(0),
+ fpTab(0),
+ fPartType(kNoCorrection),
+ fphiL(0),
+ fphiT(0)
+{
+
+ fphiL = (-(int)(aPhiBins/4)+0.5)*2.*TMath::Pi()/aPhiBins;
+ fphiT = 2*TMath::Pi()+(-(int)(aPhiBins/4)+0.5)*2.*TMath::Pi()/aPhiBins;
+
+ // set up numerator
+ char tTitNumD[101] = "NumDPhiDEta";
+ strncat(tTitNumD,title, 100);
+ fDPhiDEtaNumerator = new TH2D(tTitNumD,title,aPhiBins,fphiL,fphiT,aEtaBins,-2.0,2.0);
+ // set up denominator
+ char tTitDenD[101] = "DenDPhiDEta";
+ strncat(tTitDenD,title, 100);
+ fDPhiDEtaDenominator = new TH2D(tTitDenD,title,aPhiBins,fphiL,fphiT,aEtaBins,-2.0,2.0);
+
+ // set up numerator
+ char tTitNumDPhi[101] = "NumDPhi";
+ strncat(tTitNumDPhi,title, 100);
+ fDPhiNumerator = new TH1D(tTitNumDPhi,title,aPhiBins*2,fphiL, fphiT);
+ // set up denominator
+ char tTitDenDPhi[101] = "DenDPhi";
+ strncat(tTitDenDPhi,title, 100);
+ fDPhiDenominator = new TH1D(tTitDenDPhi,title,aPhiBins*2,fphiL, fphiT);
+
+ // set up numerator
+ char tTitNumDCos[101] = "NumDCos";
+ strncat(tTitNumDCos,title, 100);
+ fDCosNumerator = new TH1D(tTitNumDCos,title,aPhiBins*2,-1.0,1.0);
+ // set up denominator
+ char tTitDenDCos[101] = "DenDCos";
+ strncat(tTitDenDCos,title, 100);
+ fDCosDenominator = new TH1D(tTitDenDCos,title,aPhiBins*2,-1.0,1.0);
+
+ char tTitPhi[101] = "Phi";
+ strncat(tTitPhi,title, 100);
+ fPhi = new TH1D(tTitPhi,title,90,-TMath::Pi(),TMath::Pi());
+
+ char tTitEta[101] = "Eta";
+ strncat(tTitEta,title, 100);
+ fEta = new TH1D(tTitEta,title,90,-1.2,1.2);
+
+ // set up numerator
+ char tTitYtNum[101] = "NumYtYt";
+ strncat(tTitYtNum,title, 100);
+ fYtYtNumerator = new TH2D(tTitYtNum,title,aPhiBins,1,5,aEtaBins,1,5);
+ // set up denominator
+ char tTitYtYtDen[101] = "DenYtYt";
+ strncat(tTitYtYtDen,title, 100);
+ fYtYtDenominator = new TH2D(tTitYtYtDen,title,aPhiBins,1,5,aEtaBins,1,5);
+
+
+ char tTitPtCorrectionsNum[101] = "NumpT1pT2EtaPhi";
+ strncat(tTitPtCorrectionsNum,title, 100);
+ char tTitPtCorrectionsDen[101] = "DenpT1pT2EtaPhi";
+ strncat(tTitPtCorrectionsDen,title, 100);
+
+ Int_t nbins[4] = {20,20,aPhiBins,aEtaBins};
+ Double_t xmin[4] = {0,0,-0.5*TMath::Pi(),-2.0};
+ Double_t xmax[4] = {4,4,1.5*TMath::Pi(),2.0};
+
+
+ fPtCorrectionsNum = new THnSparseF(tTitPtCorrectionsNum,title,4,nbins,xmin,xmax);
+ fPtCorrectionsDen = new THnSparseF(tTitPtCorrectionsDen,title,4,nbins,xmin,xmax);
+
+ char tTitEtaCorrectionsNum[101] = "NumEta1Eta2EtaPhi";
+ strncat(tTitEtaCorrectionsNum,title, 100);
+ char tTitEtaCorrectionsDen[101] = "DenEta1Eta2EtaPhi";
+ strncat(tTitEtaCorrectionsDen,title, 100);
+
+ Double_t xmineta[4] = {-1,1,-0.5*TMath::Pi(),-2.0};
+ Double_t xmaxeta[4] = {-1,1,1.5*TMath::Pi(),2.0};
+
+ fEtaCorrectionsNum = new THnSparseF(tTitEtaCorrectionsNum,title,4,nbins,xmineta,xmaxeta);
+ fEtaCorrectionsDen = new THnSparseF(tTitEtaCorrectionsDen,title,4,nbins,xmineta,xmaxeta);
+
+ // THnSparse(const char* name, const char* title, Int_t dim,
+ // const Int_t* nbins, const Double_t* xmin, const Double_t* xmax,
+ // Int_t chunksize);
+
+ // to enable error bar calculation...
+ fDPhiDEtaNumerator->Sumw2();
+ fDPhiDEtaDenominator->Sumw2();
+ fDPhiNumerator->Sumw2();
+ fDPhiDenominator->Sumw2();
+ fDCosNumerator->Sumw2();
+ fDCosDenominator->Sumw2();
+ fPhi->Sumw2();
+ fEta->Sumw2();
+ fYtYtNumerator->Sumw2();
+ fYtYtDenominator->Sumw2();
+ fPtCorrectionsNum->Sumw2();
+ fPtCorrectionsDen->Sumw2();
+
+
+
+}
+
+//____________________________
+AliFemtoCorrFctnDEtaDPhiCorrections::AliFemtoCorrFctnDEtaDPhiCorrections(const AliFemtoCorrFctnDEtaDPhiCorrections& aCorrFctn) :
+ AliFemtoCorrFctn(),
+ fDPhiDEtaNumerator(0),
+ fDPhiDEtaDenominator(0),
+ fDPhiNumerator(0),
+ fDPhiDenominator(0),
+ fDCosNumerator(0),
+ fDCosDenominator(0),
+ fDoPtAnalysis(0),
+ fDPhiPtNumerator(0),
+ fDPhiPtDenominator(0),
+ fDCosPtNumerator(0),
+ fDCosPtDenominator(0),
+ fPhi(0),
+ fEta(0),
+ fYtYtNumerator(0),
+ fYtYtDenominator(0),
+ fIfCorrectionHist(kNone),
+ fIfCorrection(0),
+ fPtCorrectionsNum(0),
+ fPtCorrectionsDen(0),
+ fEtaCorrectionsNum(0),
+ fEtaCorrectionsDen(0),
+ fCorrFactorTab(0),
+ fpTab(0),
+ fPartType(kNoCorrection),
+ fphiL(0),
+ fphiT(0)
+{
+ // copy constructor
+ if (aCorrFctn.fDPhiDEtaNumerator)
+ fDPhiDEtaNumerator = new TH2D(*aCorrFctn.fDPhiDEtaNumerator);
+ else
+ fDPhiDEtaNumerator = 0;
+ if (aCorrFctn.fDPhiDEtaDenominator)
+ fDPhiDEtaDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
+ else
+ fDPhiDEtaDenominator = 0;
+
+ if (aCorrFctn.fDPhiNumerator)
+ fDPhiNumerator = new TH1D(*aCorrFctn.fDPhiNumerator);
+ else
+ fDPhiNumerator = 0;
+ if (aCorrFctn.fDPhiDenominator)
+ fDPhiDenominator = new TH1D(*aCorrFctn.fDPhiDenominator);
+ else
+ fDPhiDenominator = 0;
+
+ if (aCorrFctn.fDCosNumerator)
+ fDCosNumerator = new TH1D(*aCorrFctn.fDCosNumerator);
+ else
+ fDCosNumerator = 0;
+ if (aCorrFctn.fDCosDenominator)
+ fDCosDenominator = new TH1D(*aCorrFctn.fDCosDenominator);
+ else
+ fDCosDenominator = 0;
+
+ if (aCorrFctn.fDPhiPtNumerator)
+ fDPhiPtNumerator = new TH2D(*aCorrFctn.fDPhiPtNumerator);
+ else
+ fDPhiPtNumerator = 0;
+ if (aCorrFctn.fDPhiPtDenominator)
+ fDPhiPtDenominator = new TH2D(*aCorrFctn.fDPhiPtDenominator);
+ else
+ fDPhiPtDenominator = 0;
+
+ if (aCorrFctn.fDCosPtNumerator)
+ fDCosPtNumerator = new TH2D(*aCorrFctn.fDCosPtNumerator);
+ else
+ fDCosPtNumerator = 0;
+ if (aCorrFctn.fDCosPtDenominator)
+ fDCosPtDenominator = new TH2D(*aCorrFctn.fDCosPtDenominator);
+ else
+ fDCosPtDenominator = 0;
+ if (aCorrFctn.fPhi)
+ fPhi = new TH1D(*aCorrFctn.fPhi);
+ else
+ fPhi = 0;
+ if (aCorrFctn.fEta)
+ fEta = new TH1D(*aCorrFctn.fEta);
+ else
+ fEta = 0;
+
+ if (aCorrFctn.fYtYtNumerator)
+ fYtYtNumerator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
+ else
+ fYtYtNumerator = 0;
+
+ if (aCorrFctn.fYtYtDenominator)
+ fYtYtDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
+ else
+ fYtYtDenominator = 0;
+
+ fphiL = aCorrFctn.fphiL;
+ fphiT = aCorrFctn.fphiT;
+
+ fPartType = aCorrFctn.fPartType;
+
+// if (aCorrFctn.fPtCorrectionsNum)
+// fPtCorrectionsNum = new THnSparseF(*aCorrFctn.fPtCorrectionsNum);
+// else
+// fPtCorrectionsNum = 0;
+
+// if (aCorrFctn.fPtCorrectionsDen)
+// fPtCorrectionsDen = new THnSparseF(*aCorrFctn.fPtCorrectionsDen);
+// else
+// fPtCorrectionsDen = 0;
+
+
+
+}
+//____________________________
+AliFemtoCorrFctnDEtaDPhiCorrections::~AliFemtoCorrFctnDEtaDPhiCorrections(){
+ // destructor
+ delete fDPhiDEtaNumerator;
+ delete fDPhiDEtaDenominator;
+ delete fDPhiNumerator;
+ delete fDPhiDenominator;
+ delete fDCosNumerator;
+ delete fDCosDenominator;
+ if (fDoPtAnalysis) {
+ delete fDPhiPtNumerator;
+ delete fDPhiPtDenominator;
+ delete fDCosPtNumerator;
+ delete fDCosPtDenominator;
+ }
+ delete fPhi;
+ delete fEta;
+
+ delete fYtYtNumerator;
+ delete fYtYtDenominator;
+
+ delete fPtCorrectionsNum;
+ delete fPtCorrectionsDen;
+ delete fEtaCorrectionsNum;
+ delete fEtaCorrectionsDen;
+}
+//_________________________
+AliFemtoCorrFctnDEtaDPhiCorrections& AliFemtoCorrFctnDEtaDPhiCorrections::operator=(const AliFemtoCorrFctnDEtaDPhiCorrections& aCorrFctn)
+{
+ // assignment operator
+ if (this == &aCorrFctn)
+ return *this;
+
+ if (aCorrFctn.fDPhiDEtaNumerator)
+ fDPhiDEtaNumerator = new TH2D(*aCorrFctn.fDPhiDEtaNumerator);
+ else
+ fDPhiDEtaNumerator = 0;
+ if (aCorrFctn.fDPhiDEtaDenominator)
+ fDPhiDEtaDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
+ else
+ fDPhiDEtaDenominator = 0;
+
+ if (aCorrFctn.fDPhiNumerator)
+ fDPhiNumerator = new TH1D(*aCorrFctn.fDPhiNumerator);
+ else
+ fDPhiNumerator = 0;
+ if (aCorrFctn.fDPhiDenominator)
+ fDPhiDenominator = new TH1D(*aCorrFctn.fDPhiDenominator);
+ else
+ fDPhiDenominator = 0;
+
+ if (aCorrFctn.fDCosNumerator)
+ fDCosNumerator = new TH1D(*aCorrFctn.fDCosNumerator);
+ else
+ fDCosNumerator = 0;
+ if (aCorrFctn.fDCosDenominator)
+ fDCosDenominator = new TH1D(*aCorrFctn.fDCosDenominator);
+ else
+ fDCosDenominator = 0;
+
+ if (aCorrFctn.fDPhiPtNumerator)
+ fDPhiPtNumerator = new TH2D(*aCorrFctn.fDPhiPtNumerator);
+ else
+ fDPhiPtNumerator = 0;
+ if (aCorrFctn.fDPhiPtDenominator)
+ fDPhiPtDenominator = new TH2D(*aCorrFctn.fDPhiPtDenominator);
+ else
+ fDPhiPtDenominator = 0;
+
+ if (aCorrFctn.fDCosPtNumerator)
+ fDCosPtNumerator = new TH2D(*aCorrFctn.fDCosPtNumerator);
+ else
+ fDCosPtNumerator = 0;
+ if (aCorrFctn.fDCosPtDenominator)
+ fDCosPtDenominator = new TH2D(*aCorrFctn.fDCosPtDenominator);
+ else
+ fDCosPtDenominator = 0;
+ if (aCorrFctn.fPhi)
+ fPhi = new TH1D(*aCorrFctn.fPhi);
+ else
+ fPhi = 0;
+ if (aCorrFctn.fEta)
+ fEta = new TH1D(*aCorrFctn.fEta);
+ else
+ fEta = 0;
+
+ if (aCorrFctn.fYtYtNumerator)
+ fYtYtNumerator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
+ else
+ fYtYtNumerator = 0;
+
+ if (aCorrFctn.fYtYtDenominator)
+ fYtYtDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
+ else
+ fYtYtDenominator = 0;
+
+ fIfCorrectionHist = kNone;
+ fIfCorrection = 0;
+
+ fphiL = aCorrFctn.fphiL;
+ fphiT = aCorrFctn.fphiT;
+
+ fPartType = aCorrFctn.fPartType;
+
+// if (aCorrFctn.fPtCorrectionsNum)
+// fPtCorrectionsNum = new THnSparseF(*aCorrFctn.fPtCorrectionsNum);
+// else
+// fPtCorrectionsNum = 0;
+
+// if (aCorrFctn.fPtCorrectionsDen)
+// fPtCorrectionsDen = new THnSparseF(*aCorrFctn.fPtCorrectionsDen);
+// else
+// fPtCorrectionsDen = 0;
+
+
+
+ return *this;
+}
+//_________________________
+void AliFemtoCorrFctnDEtaDPhiCorrections::Finish(){
+ // here is where we should normalize, fit, etc...
+ // we should NOT Draw() the histos (as I had done it below),
+ // since we want to insulate ourselves from root at this level
+ // of the code. Do it instead at root command line with browser.
+ // mShareNumerator->Draw();
+ //mShareDenominator->Draw();
+ //mRatio->Draw();
+
+}
+
+//____________________________
+AliFemtoString AliFemtoCorrFctnDEtaDPhiCorrections::Report(){
+ // create report
+ string stemp = "TPC Ncls Correlation Function Report:\n";
+ char ctemp[100];
+ snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fDPhiDEtaNumerator->GetEntries());
+ stemp += ctemp;
+ snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fDPhiDEtaDenominator->GetEntries());
+ stemp += ctemp;
+ // stemp += mCoulombWeight->Report();
+ AliFemtoString returnThis = stemp;
+ return returnThis;
+}
+//____________________________
+void AliFemtoCorrFctnDEtaDPhiCorrections::AddRealPair( AliFemtoPair* pair){
+ // add real (effect) pair
+ if (fPairCut)
+ if (!fPairCut->Pass(pair)) return;
+
+ /*double phi1 = pair->Track1()->Track()->P().Phi();
+ double phi2 = pair->Track2()->Track()->P().Phi();
+ double eta1 = pair->Track1()->Track()->P().PseudoRapidity();
+ double eta2 = pair->Track2()->Track()->P().PseudoRapidity();*/
+
+ double phi1 = pair->Track1()->FourMomentum().Phi();
+ double phi2 = pair->Track2()->FourMomentum().Phi();
+ double eta1 = pair->Track1()->FourMomentum().PseudoRapidity();
+ double eta2 = pair->Track2()->FourMomentum().PseudoRapidity();
+
+ double dphi = phi1 - phi2;
+ while (dphi<fphiL) dphi+=PIT;
+ while (dphi>fphiT) dphi-=PIT;
+
+ double deta = eta1 - eta2;
+
+ double px1 = pair->Track1()->Track()->P().x();
+ double py1 = pair->Track1()->Track()->P().y();
+ //double pz1 = pair->Track1()->Track()->P().z();
+
+ double px2 = pair->Track2()->Track()->P().x();
+ double py2 = pair->Track2()->Track()->P().y();
+ //double pz2 = pair->Track2()->Track()->P().z();
+
+ double pt1 = TMath::Hypot(px1, py1);
+ double pt2 = TMath::Hypot(px2, py2);
+
+ double corrweight;
+ if (fIfCorrection) corrweight = CalculateCorrectionWeight(pt1, pt2);
+/* double ptmin = pt1>pt2 ? pt2 : pt1;
+
+ double cosphi = (px1*px2 + py1*py2 + pz1*pz2)/
+ sqrt((px1*px1 + py1*py1 + pz1*pz1)*(px2*px2 + py2*py2 + pz2*pz2));
+*/
+ if (fIfCorrection)
+ fDPhiDEtaNumerator->Fill(dphi, deta, corrweight);
+ else
+ fDPhiDEtaNumerator->Fill(dphi, deta);
+
+ fDPhiNumerator->Fill(dphi);
+// fDCosNumerator->Fill(cosphi);
+
+ if (fDoPtAnalysis) {
+// fDPhiPtNumerator->Fill(dphi, ptmin);
+// fDCosPtNumerator->Fill(cosphi, ptmin);
+ }
+
+ fPhi->Fill(phi1);
+ fEta->Fill(eta1);
+
+ double PionMass = 0.13956995;
+ double yt1 = TMath::Log(sqrt(1+(pt1/PionMass)*(pt1/PionMass))+(pt1/PionMass));
+ double yt2 = TMath::Log(sqrt(1+(pt2/PionMass)*(pt2/PionMass))+(pt2/PionMass));
+ fYtYtNumerator->Fill(yt1,yt2);
+
+ if(fIfCorrectionHist)
+ {
+ if(fIfCorrectionHist == kPt){
+ Double_t val[] = {pt1,pt2,dphi,deta};
+ fPtCorrectionsNum->Fill(val);
+ }
+ if(fIfCorrectionHist == kEta){
+ Double_t val[] = {eta1,eta2,dphi,deta};
+ fEtaCorrectionsNum->Fill(val);
+ }
+
+ }
+
+}
+//____________________________
+void AliFemtoCorrFctnDEtaDPhiCorrections::AddMixedPair( AliFemtoPair* pair){
+ // add mixed (background) pair
+ if (fPairCut)
+ if (!fPairCut->Pass(pair)) return;
+
+ /*double phi1 = pair->Track1()->Track()->P().Phi();
+ double phi2 = pair->Track2()->Track()->P().Phi();
+ double eta1 = pair->Track1()->Track()->P().PseudoRapidity();
+ double eta2 = pair->Track2()->Track()->P().PseudoRapidity();*/
+
+ double phi1 = pair->Track1()->FourMomentum().Phi();
+ double phi2 = pair->Track2()->FourMomentum().Phi();
+ double eta1 = pair->Track1()->FourMomentum().PseudoRapidity();
+ double eta2 = pair->Track2()->FourMomentum().PseudoRapidity();
+
+ double dphi = phi1 - phi2;
+ while (dphi<fphiL) dphi+=PIT;
+ while (dphi>fphiT) dphi-=PIT;
+
+ double deta = eta1 - eta2;
+
+ double px1 = pair->Track1()->Track()->P().x();
+ double py1 = pair->Track1()->Track()->P().y();
+ //double pz1 = pair->Track1()->Track()->P().z();
+
+ double px2 = pair->Track2()->Track()->P().x();
+ double py2 = pair->Track2()->Track()->P().y();
+ //double pz2 = pair->Track2()->Track()->P().z();
+
+ double pt1 = TMath::Hypot(px1, py1);
+ double pt2 = TMath::Hypot(px2, py2);
+// double ptmin = pt1>pt2 ? pt2 : pt1;
+
+// double cosphi = (px1*px2 + py1*py2 + pz1*pz2)/
+// sqrt((px1*px1 + py1*py1 + pz1*pz1)*(px2*px2 + py2*py2 + pz2*pz2));
+
+
+ double corrweight=-999;
+ if (fIfCorrection) corrweight = CalculateCorrectionWeight(pt1, pt2);
+
+ if(fIfCorrection)
+ fDPhiDEtaDenominator->Fill(dphi, deta, corrweight);
+ else
+ fDPhiDEtaDenominator->Fill(dphi, deta);
+
+ fDPhiDenominator->Fill(dphi);
+// fDCosDenominator->Fill(cosphi);
+
+ //if (fDoPtAnalysis) {
+ // fDPhiPtDenominator->Fill(dphi, ptmin);
+ // fDCosPtDenominator->Fill(cosphi, ptmin);
+ //}
+
+ double PionMass = 0.13956995;
+ double yt1 = TMath::Log(sqrt(1+(pt1/PionMass)*(pt1/PionMass))+(pt1/PionMass));
+ double yt2 = TMath::Log(sqrt(1+(pt2/PionMass)*(pt2/PionMass))+(pt2/PionMass));
+ fYtYtDenominator->Fill(yt1,yt2);
+
+ if(fIfCorrectionHist)
+ {
+ if(fIfCorrectionHist == kPt){
+ Double_t val[] = {pt1,pt2,dphi,deta};
+ fPtCorrectionsDen->Fill(val);
+ }
+ if(fIfCorrectionHist == kEta){
+ Double_t val[] = {eta1,eta2,dphi,deta};
+ fEtaCorrectionsDen->Fill(val);
+ }
+ }
+
+}
+
+
+void AliFemtoCorrFctnDEtaDPhiCorrections::WriteHistos()
+{
+ // Write out result histograms
+ fDPhiDEtaNumerator->Write();
+ fDPhiDEtaDenominator->Write();
+ /*fDPhiNumerator->Write();
+ fDPhiDenominator->Write();
+ fDCosNumerator->Write();
+ fDCosDenominator->Write();
+ if (fDoPtAnalysis) {
+ fDPhiPtNumerator->Write();
+ fDPhiPtDenominator->Write();
+ fDCosPtNumerator->Write();
+ fDCosPtDenominator->Write();
+ }*/
+ fPhi->Write();
+ fEta->Write();
+
+ if(fIfCorrectionHist){
+ if(fIfCorrectionHist==kPt){
+ fPtCorrectionsNum->Write();
+ fPtCorrectionsDen->Write();}
+ if(fIfCorrectionHist==kEta){
+ fEtaCorrectionsNum->Write();
+ fEtaCorrectionsDen->Write();}
+ }
+}
+
+TList* AliFemtoCorrFctnDEtaDPhiCorrections::GetOutputList()
+{
+ // Prepare the list of objects to be written to the output
+ TList *tOutputList = new TList();
+
+ tOutputList->Add(fDPhiDEtaNumerator);
+ tOutputList->Add(fDPhiDEtaDenominator);
+ /*tOutputList->Add(fDPhiNumerator);
+ tOutputList->Add(fDPhiDenominator);
+ tOutputList->Add(fDCosNumerator);
+ tOutputList->Add(fDCosDenominator);
+ if (fDoPtAnalysis) {
+ tOutputList->Add(fDPhiPtNumerator);
+ tOutputList->Add(fDPhiPtDenominator);
+ tOutputList->Add(fDCosPtNumerator);
+ tOutputList->Add(fDCosPtDenominator);
+ }*/
+ tOutputList->Add(fPhi);
+ tOutputList->Add(fEta);
+ tOutputList->Add(fYtYtNumerator);
+ tOutputList->Add(fYtYtDenominator);
+
+ if(fIfCorrectionHist){
+ if(fIfCorrection==kPt){
+ tOutputList->Add(fPtCorrectionsNum);
+ tOutputList->Add(fPtCorrectionsDen);
+ }
+ if(fIfCorrectionHist==kEta){
+ tOutputList->Add(fEtaCorrectionsNum);
+ tOutputList->Add(fEtaCorrectionsDen);
+ }
+ }
+ return tOutputList;
+
+}
+
+void AliFemtoCorrFctnDEtaDPhiCorrections::SetDoPtAnalysis(int do2d)
+{
+ fDoPtAnalysis = do2d;
+
+ int aPhiBins = fDPhiDEtaNumerator->GetNbinsX();
+ const char *title = fDPhiDEtaNumerator->GetTitle();
+
+ // set up numerator
+ char tTitNumDPhiPt[101] = "NumDPhiPt";
+ strncat(tTitNumDPhiPt,title, 100);
+ fDPhiPtNumerator = new TH2D(tTitNumDPhiPt,title,aPhiBins*2,-0.5*TMath::Pi(),3./2.*TMath::Pi(), 30, 0.0, 3.0);
+ // set up denominator
+ char tTitDenDPhiPt[101] = "DenDPhiPt";
+ strncat(tTitDenDPhiPt,title, 100);
+ fDPhiPtDenominator = new TH2D(tTitDenDPhiPt,title,aPhiBins*2,-0.5*TMath::Pi(),3./2.*TMath::Pi(), 30, 0.0, 3.0);
+
+ // set up numerator
+ char tTitNumDCosPt[101] = "NumDCosPt";
+ strncat(tTitNumDCosPt,title, 100);
+ fDCosPtNumerator = new TH2D(tTitNumDCosPt,title,aPhiBins*2,-1.0,1.0, 30, 0.0, 3.0);
+ // set up denominator
+ char tTitDenDCosPt[101] = "DenDCosPt";
+ strncat(tTitDenDCosPt,title, 100);
+ fDCosPtDenominator = new TH2D(tTitDenDCosPt,title,aPhiBins*2,-1.0,1.0, 30, 0.0, 3.0);
+
+ fDPhiPtNumerator->Sumw2();
+ fDPhiPtDenominator->Sumw2();
+ fDCosPtNumerator->Sumw2();
+ fDCosPtDenominator->Sumw2();
+
+}
+
+void AliFemtoCorrFctnDEtaDPhiCorrections::SetDoCorrections(bool doCorr)
+{
+ fIfCorrection = doCorr;
+}
+
+void AliFemtoCorrFctnDEtaDPhiCorrections::SetDoCorrectionsHist(CorrectionType doCorr)
+{
+ fIfCorrectionHist = doCorr;
+}
+
+void AliFemtoCorrFctnDEtaDPhiCorrections::LoadCorrectionTabFromFile(const char *pTtab, const char *corrTab)
+{
+
+ double val=-10000;
+
+ ifstream ifile1;
+ ifile1.open(pTtab);
+ if(ifile1)
+ {
+ int nrEntries1;
+ ifile1>>nrEntries1;
+ fpTab = new double[nrEntries1];
+ int i=0;
+ while(ifile1>>val)
+ {
+ fpTab[i] = val;
+ i++;
+ }
+ }
+ else
+ {
+ cout<<"No pT values file open!"<<endl;
+ }
+ ifile1.close();
+
+
+ ifstream ifile2;
+ ifile2.open(corrTab);
+ if(ifile2)
+ {
+ int nrEntries2;
+ ifile2>>nrEntries2;
+ fCorrFactorTab = new double[nrEntries2];
+ int i=0;
+ while(ifile2>>val)
+ {
+ fCorrFactorTab[i] = val;
+ cout<<"fCorrFactorTab: "<<fCorrFactorTab[i]<<endl;
+ i++;
+ }
+ }
+ else
+ {
+ cout<<"No corrections file open!"<<endl;
+ }
+ ifile2.close();
+}
+
+void AliFemtoCorrFctnDEtaDPhiCorrections::SetCorrectionTab(ParticleType partType)
+{
+
+ double pttab[] = {0, 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.325, 0.35, 0.375, 0.4, 0.425, 0.45, 0.475, 0.5, 0.525, 0.55, 0.575, 0.6, 0.625, 0.65, 0.675, 0.7, 0.725, 0.75, 0.775, 0.8, 0.825, 0.85, 0.875, 0.9, 0.925, 0.95, 0.975, 1, 1.025, 1.05, 1.075, 1.1, 1.125, 1.15, 1.175, 1.2, 1.225, 1.25, 1.275, 1.3, 1.325, 1.35, 1.375, 1.4, 1.425, 1.45, 1.475, 1.5, 1.525, 1.55, 1.575, 1.6, 1.625, 1.65, 1.675, 1.7, 1.725, 1.75, 1.775, 1.8, 1.825, 1.85, 1.875, 1.9, 1.925, 1.95, 1.975, 2, 2.025, 2.05, 2.075, 2.1, 2.125, 2.15, 2.175, 2.2, 2.225, 2.25, 2.275, 2.3, 2.325, 2.35, 2.375, 2.4, 2.425, 2.45, 2.475, 2.5, 2.525, 2.55, 2.575, 2.6, 2.625, 2.65, 2.675, 2.7, 2.725, 2.75, 2.775, 2.8, 2.825, 2.85, 2.875, 2.9, 2.925, 2.95, 2.975, 3, 3.025, 3.05, 3.075, 3.1, 3.125, 3.15, 3.175, 3.2, 3.225, 3.25, 3.275, 3.3, 3.325, 3.35, 3.375, 3.4, 3.425, 3.45, 3.475, 3.5, 3.525, 3.55, 3.575, 3.6, 3.625, 3.65, 3.675, 3.7, 3.725, 3.75, 3.775, 3.8, 3.825, 3.85, 3.875, 3.9, 3.925, 3.95, 3.975, 4, 4.025, 4.05, 4.075, 4.1, 4.125, 4.15, 4.175, 4.2, 4.225, 4.25, 4.275, 4.3, 4.325, 4.35, 4.375, 4.4, 4.425, 4.45, 4.475, 4.5, 4.525, 4.55, 4.575, 4.6, 4.625, 4.65, 4.675, 4.7, 4.725, 4.75};
+
+ double pioncorrtab[] = {0, 0, 0, 0, 0, 0, 0, 1.40089, 1.40089, 1.29482, 1.29482, 1.25595, 1.22529, 1.22529, 1.23099, 1.32027, 1.32027, 1.44774, 1.44774, 1.74645, 1.8619, 1.8619, 1.82089, 1.78506, 1.78506, 1.75918, 1.75918, 1.74951, 1.74614, 1.74614, 1.74006, 1.73229, 1.73229, 1.72844, 1.72844, 1.72306, 1.71906, 1.71906, 1.71375, 1.71301, 1.71301, 1.70381, 1.70381, 1.69975, 1.69242, 1.69242, 1.69013, 1.67698, 1.67698, 1.6772, 1.6772, 1.67118, 1.66607, 1.66607, 1.66131, 1.67228, 1.67228, 1.66834, 1.66834, 1.66031, 1.6588, 1.6588, 1.6555, 1.64923, 1.64923, 1.6467, 1.6467, 1.63894, 1.63682, 1.63682, 1.6297, 1.62904, 1.62904, 1.63007, 1.63007, 1.62832, 1.62557, 1.62557, 1.62687, 1.62928, 1.62928, 1.62767, 1.62767, 1.62767, 1.62767, 1.62767, 1.62767, 1.63415, 1.63415, 1.63415, 1.63415, 1.63415, 1.63415, 1.63415, 1.64141, 1.64141, 1.64141, 1.64141, 1.64141, 1.64141, 1.65191, 1.65191, 1.65191, 1.65191, 1.65191, 1.65191, 1.65191, 1.66838, 1.66838, 1.66838, 1.66838, 1.66838, 1.66838, 1.6839, 1.6839, 1.6839, 1.6839, 1.6839, 1.6839, 1.69601, 1.69601, 1.69601, 1.69601, 1.69601, 1.69601, 1.69601, 1.70062, 1.70062, 1.70062, 1.70062, 1.70062, 1.70062, 1.68668, 1.68668, 1.68668, 1.68668, 1.68668, 1.68668, 1.68668, 1.68182, 1.68182, 1.68182, 1.68182, 1.68182, 1.68182, 1.681, 1.681, 1.681, 1.681, 1.681, 1.681, 1.67749, 1.67749, 1.67749, 1.67749, 1.67749, 1.67749, 1.67749, 1.66558, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.67223, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.66872, 1.64419};
+
+ double protoncorrtab[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 357.585, 357.585, 8.66944, 2.10995, 2.10995, 1.50443, 1.73168, 1.73168, 2.3605, 2.3605, 4.7726, 4.40359, 4.40359, 3.0307, 2.49649, 2.49649, 2.2231, 2.2231, 2.11247, 2.05862, 2.05862, 2.00703, 1.9623, 1.9623, 1.93393, 1.93393, 1.9101, 1.89334, 1.89334, 1.87734, 1.86342, 1.86342, 1.85075, 1.85075, 1.83985, 1.83684, 1.83684, 1.82915, 1.81832, 1.81832, 1.81215, 1.81215, 1.7998, 1.79524, 1.79524, 1.78568, 1.79989, 1.79989, 1.7973, 1.7973, 1.79591, 1.78468, 1.78468, 1.78037, 1.77394, 1.77394, 1.77198, 1.77198, 1.76736, 1.76875, 1.76875, 1.76221, 1.75729, 1.75729, 1.75397, 1.75397, 1.75229, 1.74918, 1.74918, 1.75064, 1.75643, 1.75643, 1.75765, 1.75765, 1.75765, 1.75765, 1.75765, 1.75765, 1.76345, 1.76345, 1.76345, 1.76345, 1.76345, 1.76345, 1.76345, 1.76901, 1.76901, 1.76901, 1.76901, 1.76901, 1.76901, 1.78291, 1.78291, 1.78291, 1.78291, 1.78291, 1.78291, 1.78291, 1.80009, 1.80009, 1.80009, 1.80009, 1.80009, 1.80009, 1.81064, 1.81064, 1.81064, 1.81064, 1.81064, 1.81064, 1.81765, 1.81765, 1.81765, 1.81765, 1.81765, 1.81765, 1.81765, 1.79549, 1.79549, 1.79549, 1.79549, 1.79549, 1.79549, 1.80455, 1.80455, 1.80455, 1.80455, 1.80455, 1.80455, 1.80455, 1.78912, 1.78912, 1.78912, 1.78912, 1.78912, 1.78912, 1.78501, 1.78501, 1.78501, 1.78501, 1.78501, 1.78501, 1.79512, 1.79512, 1.79512, 1.79512, 1.79512, 1.79512, 1.79512, 1.77138, 1.784, 1.784, 1.784, 1.784, 1.784, 1.784, 1.784, 1.784, 1.784, 1.784, 1.784, 1.784, 1.784, 1.784, 1.784, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152, 1.75152};
+
+ double kaoncorrtab[] = {0, 0, 0, 0, 0, 0, 0, 8.43268, 8.43268, 3.30657, 3.30657, 2.5102, 2.16256, 2.16256, 2.03757, 2.27166, 2.27166, 2.70432, 2.70432, 4.06234, 4.69199, 4.69199, 4.13074, 3.75139, 3.75139, 3.48381, 3.48381, 3.29762, 3.15261, 3.15261, 3.03022, 2.91874, 2.91874, 2.82421, 2.82421, 2.7388, 2.65961, 2.65961, 2.58426, 2.5174, 2.5174, 2.45378, 2.45378, 2.39687, 2.34699, 2.34699, 2.30247, 2.25299, 2.25299, 2.22443, 2.22443, 2.18303, 2.16012, 2.16012, 2.13083, 2.12806, 2.12806, 2.11376, 2.11376, 2.09566, 2.07526, 2.07526, 2.05378, 2.03252, 2.03252, 2.02466, 2.02466, 2.00531, 1.98945, 1.98945, 1.97877, 1.97226, 1.97226, 1.95475, 1.95475, 1.94838, 1.9314, 1.9314, 1.92571, 1.96346, 1.96346, 1.92849, 1.92849, 1.92849, 1.92849, 1.92849, 1.92849, 1.90949, 1.90949, 1.90949, 1.90949, 1.90949, 1.90949, 1.90949, 1.88743, 1.88743, 1.88743, 1.88743, 1.88743, 1.88743, 1.87486, 1.87486, 1.87486, 1.87486, 1.87486, 1.87486, 1.87486, 1.87785, 1.87785, 1.87785, 1.87785, 1.87785, 1.87785, 1.8757, 1.8757, 1.8757, 1.8757, 1.8757, 1.8757, 1.87948, 1.87948, 1.87948, 1.87948, 1.87948, 1.87948, 1.87948, 1.86148, 1.86148, 1.86148, 1.86148, 1.86148, 1.86148, 1.84329, 1.84329, 1.84329, 1.84329, 1.84329, 1.84329, 1.84329, 1.83105, 1.83105, 1.83105, 1.83105, 1.83105, 1.83105, 1.81955, 1.81955, 1.81955, 1.81955, 1.81955, 1.81955, 1.79944, 1.79944, 1.79944, 1.79944, 1.79944, 1.79944, 1.79944, 1.79345, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.80077, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.78333, 1.74958};
+
+ double allcorrtab[] = {0, 0, 0, 0, 0, 0, 0, 1.46883, 1.46883, 1.3528, 1.3528, 1.30939, 1.26936, 1.26936, 1.23645, 1.21359, 1.21359, 1.19759, 1.19759, 1.18565, 1.17772, 1.17772, 1.17203, 1.16739, 1.16739, 1.16398, 1.16398, 1.16201, 1.16065, 1.16065, 1.16012, 1.16009, 1.16009, 1.16044, 1.16044, 1.16104, 1.16139, 1.16139, 1.16134, 1.16278, 1.16278, 1.1631, 1.1631, 1.16227, 1.16152, 1.16152, 1.16066, 1.15984, 1.15984, 1.15932, 1.15932, 1.15912, 1.15818, 1.15818, 1.15877, 1.16754, 1.16754, 1.17075, 1.17075, 1.17047, 1.16995, 1.16995, 1.16885, 1.16845, 1.16845, 1.16824, 1.16824, 1.16771, 1.16704, 1.16704, 1.16681, 1.16723, 1.16723, 1.16819, 1.16819, 1.16811, 1.16974, 1.16974, 1.17217, 1.16759, 1.16759, 1.17376, 1.17376, 1.17376, 1.17376, 1.17376, 1.17376, 1.18247, 1.18247, 1.18247, 1.18247, 1.18247, 1.18247, 1.18247, 1.18916, 1.18916, 1.18916, 1.18916, 1.18916, 1.18916, 1.19649, 1.19649, 1.19649, 1.19649, 1.19649, 1.19649, 1.19649, 1.20315, 1.20315, 1.20315, 1.20315, 1.20315, 1.20315, 1.20984, 1.20984, 1.20984, 1.20984, 1.20984, 1.20984, 1.21236, 1.21236, 1.21236, 1.21236, 1.21236, 1.21236, 1.21236, 1.21272, 1.21272, 1.21272, 1.21272, 1.21272, 1.21272, 1.21416, 1.21416, 1.21416, 1.21416, 1.21416, 1.21416, 1.21416, 1.21308, 1.21308, 1.21308, 1.21308, 1.21308, 1.21308, 1.21332, 1.21332, 1.21332, 1.21332, 1.21332, 1.21332, 1.21204, 1.21204, 1.21204, 1.21204, 1.21204, 1.21204, 1.21204, 1.21006, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.21141, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2092, 1.2066};
+
+ fpTab = new double[190];
+ for(int i=0;i<190;i++)
+ fpTab[i]=pttab[i];
+
+ if(partType==kPion)
+ {
+ fCorrFactorTab = new double[190];
+ for(int i=0;i<190;i++)
+ fCorrFactorTab[i] = pioncorrtab[i];
+ }
+ else if(partType==kKaon)
+ {
+ fCorrFactorTab = new double[190];
+ for(int i=0;i<190;i++)
+ fCorrFactorTab[i] = kaoncorrtab[i];
+ }
+ else if(partType==kProton)
+ {
+ fCorrFactorTab = new double[190];
+ for(int i=0;i<190;i++)
+ fCorrFactorTab[i] = protoncorrtab[i];
+ }
+ else if(partType==kAll)
+ {
+ fCorrFactorTab = new double[190];
+ for(int i=0;i<190;i++)
+ fCorrFactorTab[i] = allcorrtab[i];
+ }
+}
+
+double AliFemtoCorrFctnDEtaDPhiCorrections::CalculateCorrectionWeight(double pT1, double pT2)
+{
+
+ double w1=0., w2=0.;
+ if(pT1>0 && pT1<5 && pT2>0 && pT2<5)
+ {
+ if(pT1<pT2)
+ {
+ for (int piter = 0 ; piter<200 ; piter++)
+ {
+
+ if(pT1>= fpTab[piter] && pT1< fpTab[piter+1])
+ {
+ w1=fCorrFactorTab[piter];
+ }
+ if(pT2>= fpTab[piter] && pT2< fpTab[piter+1])
+ {
+ w2=fCorrFactorTab[piter];
+ break;
+ }
+ }
+ }
+ else if(pT1>pT2)
+ {
+ for (int piter = 0 ; piter<200 ; piter++)
+ {
+ if(pT2>= fpTab[piter] && pT2< fpTab[piter+1])
+ w2=fCorrFactorTab[piter];
+ if(pT1>= fpTab[piter] && pT1< fpTab[piter+1])
+ {
+ w1=fCorrFactorTab[piter];
+ break;
+ }
+ }
+ }
+ else //pT1==pT2
+ {
+ for (int piter = 0 ; piter<200 ; piter++)
+ {
+ if(pT1>= fpTab[piter] && pT1< fpTab[piter+1])
+ {
+ w1=fCorrFactorTab[piter];
+ w2=fCorrFactorTab[piter];
+ break;
+ }
+ }
+ }
+ return w1*w2;
+ }
+ else
+ return 0;
+ return 0;
+}
--- /dev/null
+////////////////////////////////////////////////////////////////////////////////
+// //
+// AliFemtoCorrFctnDEtaDPhiCorrections - A correlation function that analyzes //
+// two particle correlations with respect to the azimuthal angle (phi) //
+// and pseudorapidity (eta) difference //
+// //
+// Authors: Adam Kisiel Adam.Kisiel@cern.ch //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef ALIFEMTOCORRFCTNDETADPHICORRECTIONS_H
+#define ALIFEMTOCORRFCTNDETADPHICORRECTIONS_H
+
+#include "TH1D.h"
+#include "TH2D.h"
+#include "THnSparse.h"
+#include "TFile.h"
+#include "AliFemtoCorrFctn.h"
+
+class AliFemtoCorrFctnDEtaDPhiCorrections : public AliFemtoCorrFctn {
+public:
+ enum CorrectionType {kNone=0, kPt=1, kEta=2};
+ enum ParticleType {kNoCorrection=0, kPion=1, kKaon=2, kProton=3, kAll=4};
+ typedef enum CorrectionType ReadCorrectionType;
+
+ AliFemtoCorrFctnDEtaDPhiCorrections(char* title, const int& aPhiBins, const int& aEtaBins);
+ AliFemtoCorrFctnDEtaDPhiCorrections(const AliFemtoCorrFctnDEtaDPhiCorrections& aCorrFctn);
+ virtual ~AliFemtoCorrFctnDEtaDPhiCorrections();
+
+ AliFemtoCorrFctnDEtaDPhiCorrections& operator=(const AliFemtoCorrFctnDEtaDPhiCorrections& aCorrFctn);
+
+ virtual AliFemtoString Report();
+ virtual void AddRealPair(AliFemtoPair* aPair);
+ virtual void AddMixedPair(AliFemtoPair* aPair);
+
+ virtual void Finish();
+ void SetDoPtAnalysis(int do2d);
+ void SetDoCorrections(bool doCorr);
+ void SetDoCorrectionsHist(CorrectionType doCorr);
+ double CalculateCorrectionWeight(double pT1, double pT2);
+ void LoadCorrectionTabFromFile(const char *pTtab, const char *corrTab);
+ void SetCorrectionTab(ParticleType partType);
+
+ void WriteHistos();
+ virtual TList* GetOutputList();
+private:
+
+ TH2D *fDPhiDEtaNumerator; // Numerator of dEta dPhi function
+ TH2D *fDPhiDEtaDenominator; // Denominator of dEta dPhi function
+
+ TH1D *fDPhiNumerator; // Numerator of dPhi correlation
+ TH1D *fDPhiDenominator; // Denominator of dPhi correlation
+
+ TH1D *fDCosNumerator; // Numerator of colinearity correlation
+ TH1D *fDCosDenominator; // Denominator of colinearity correlation
+
+ int fDoPtAnalysis; // set to 1 to do 2D Pt analysis
+
+ TH2D *fDPhiPtNumerator; // Numerator of dPhi correlation vs. Pt min
+ TH2D *fDPhiPtDenominator; // Denominator of dPhi correlation vs. Pt min
+
+ TH2D *fDCosPtNumerator; // Numerator of colinearity correlation vs. Pt min
+ TH2D *fDCosPtDenominator; // Denominator of colinearity correlation vs. Pt min
+
+ TH1D *fPhi;
+ TH1D *fEta;
+
+ TH2D *fYtYtNumerator;
+ TH2D *fYtYtDenominator;
+
+ CorrectionType fIfCorrectionHist;
+ bool fIfCorrection;
+ THnSparseF *fPtCorrectionsNum;
+ THnSparseF *fPtCorrectionsDen;
+
+ THnSparseF *fEtaCorrectionsNum;
+ THnSparseF *fEtaCorrectionsDen;
+
+ double* fCorrFactorTab;
+ double* fpTab;
+ ParticleType fPartType; // particle type for calculations of correction factor
+
+ double fphiL;
+ double fphiT;
+
+
+
+
+
+
+#ifdef __ROOT__
+ ClassDef(AliFemtoCorrFctnDEtaDPhiCorrections, 1)
+#endif
+};
+
+
+#endif
+
--- /dev/null
+////////////////////////////////////////////////////////////////////////////////
+// //
+// AliFemtoCorrFctnPairFractions - A correlation function that analyzes //
+// two particle correlations with respect to the azimuthal angle (phi) //
+// and pseudorapidity (eta) difference //
+// //
+// Authors: Malgorzata Janik, majanik@cern.ch //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#include "AliFemtoCorrFctnPairFractions.h"
+#include "AliFemtoModelHiddenInfo.h"
+//#include "AliFemtoHisto.hh"
+#include <cstdio>
+#include <TMath.h>
+
+#ifdef __ROOT__
+ClassImp(AliFemtoCorrFctnPairFractions)
+#endif
+
+#define PIH 1.57079632679489656
+#define PIT 6.28318530717958623
+
+//____________________________
+AliFemtoCorrFctnPairFractions::AliFemtoCorrFctnPairFractions(char* title):
+AliFemtoCorrFctn(),
+ fPairFractions(0),
+ fphiL(0),
+ fphiT(0)
+{
+
+ //fphiL = (-(int)(aPhiBins/4)+0.5)*2.*TMath::Pi()/aPhiBins;
+ //fphiT = 2*TMath::Pi()+(-(int)(aPhiBins/4)+0.5)*2.*TMath::Pi()/aPhiBins;
+
+ TString hname = "hPairFraction"; hname+= title;
+ TString htitle = "Pair Fraction "; htitle+= title;
+ fPairFractions = new TH1F(hname.Data(),htitle.Data(), 7, 0, 7);
+ fPairFractions->GetXaxis()->SetBinLabel(1,"#pi#pi, MC");
+ fPairFractions->GetXaxis()->SetBinLabel(2,"KK, MC");
+ fPairFractions->GetXaxis()->SetBinLabel(3,"pp, MC");
+ fPairFractions->GetXaxis()->SetBinLabel(4,"#pi K, MC");
+ fPairFractions->GetXaxis()->SetBinLabel(5,"#pi p, MC");
+ fPairFractions->GetXaxis()->SetBinLabel(6,"Kp, MC");
+ fPairFractions->GetXaxis()->SetBinLabel(7,"Other, MC");
+
+
+ // to enable error bar calculation...
+
+ fPairFractions->Sumw2();
+ fPairFractions->Sumw2();
+}
+
+//____________________________
+AliFemtoCorrFctnPairFractions::AliFemtoCorrFctnPairFractions(const AliFemtoCorrFctnPairFractions& aCorrFctn) :
+ AliFemtoCorrFctn(),
+ fPairFractions(0),
+ fphiL(0),
+ fphiT(0)
+{
+ // copy constructor
+ if (aCorrFctn.fPairFractions)
+ fPairFractions = new TH1F(*aCorrFctn.fPairFractions);
+ else
+ fPairFractions = 0;
+
+ if (aCorrFctn.fPairFractions)
+ fPairFractions = new TH1F(*aCorrFctn.fPairFractions);
+ else
+ fPairFractions = 0;
+
+ fphiL = aCorrFctn.fphiL;
+ fphiT = aCorrFctn.fphiT;
+
+
+}
+//____________________________
+AliFemtoCorrFctnPairFractions::~AliFemtoCorrFctnPairFractions(){
+ // destructor
+ delete fPairFractions;
+ delete fPairFractions;
+}
+//_________________________
+AliFemtoCorrFctnPairFractions& AliFemtoCorrFctnPairFractions::operator=(const AliFemtoCorrFctnPairFractions& aCorrFctn)
+{
+ // assignment operator
+ if (this == &aCorrFctn)
+ return *this;
+
+ if (aCorrFctn.fPairFractions)
+ fPairFractions = new TH1F(*aCorrFctn.fPairFractions);
+ else
+ fPairFractions = 0;
+
+
+ fphiL = aCorrFctn.fphiL;
+ fphiT = aCorrFctn.fphiT;
+
+ return *this;
+}
+//_________________________
+void AliFemtoCorrFctnPairFractions::Finish(){
+ // here is where we should normalize, fit, etc...
+ // we should NOT Draw() the histos (as I had done it below),
+ // since we want to insulate ourselves from root at this level
+ // of the code. Do it instead at root command line with browser.
+ // mShareNumerator->Draw();
+ // mShareDenominator->Draw();
+ // mRatio->Draw();
+
+}
+
+//____________________________
+AliFemtoString AliFemtoCorrFctnPairFractions::Report(){
+ // create report
+ string stemp = "Pair Fractions Correlation Function Report:\n";
+ char ctemp[100];
+ snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fPairFractions->GetEntries());
+ stemp += ctemp;
+ snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fPairFractions->GetEntries());
+ stemp += ctemp;
+ // stemp += mCoulombWeight->Report();
+ AliFemtoString returnThis = stemp;
+ return returnThis;
+}
+//____________________________
+void AliFemtoCorrFctnPairFractions::AddRealPair( AliFemtoPair* pair){
+ // add real (effect) pair
+
+ //Applying pair cuts
+ if (fPairCut)
+ if (!fPairCut->Pass(pair)) return;
+
+
+
+ Int_t pdg1=0;
+ AliFemtoModelHiddenInfo *info1 = ( AliFemtoModelHiddenInfo *) pair->Track1()->GetHiddenInfo();
+ if(info1)pdg1 = info1->GetPDGPid();
+
+ Int_t pdg2=0;
+ AliFemtoModelHiddenInfo *info2 = ( AliFemtoModelHiddenInfo *) pair->Track2()->GetHiddenInfo();
+ if(info2)pdg2 = info2->GetPDGPid();
+
+ if(abs(pdg1)==211 && abs(pdg2)==211) //pi pi
+ fPairFractions->Fill(0.5);
+ else if(abs(pdg1)==321 && abs(pdg2)==321)// K K
+ fPairFractions->Fill(1.5);
+ else if(abs(pdg1)==2212 && abs(pdg2)==2212)// p p
+ fPairFractions->Fill(2.5);
+ else if(abs(pdg1)==211 && abs(pdg2)==321)// pi K
+ fPairFractions->Fill(3.5);
+ else if(abs(pdg1)==211 && abs(pdg2)==2212)// pi p
+ fPairFractions->Fill(4.5);
+ else if(abs(pdg1)==321 && abs(pdg2)==2212)//K p
+ fPairFractions->Fill(5.5);
+ else //other
+ fPairFractions->Fill(6.5);
+
+ /*double phi1 = pair->Track1()->Track()->P().Phi();
+ double phi2 = pair->Track2()->Track()->P().Phi();
+ double eta1 = pair->Track1()->Track()->P().PseudoRapidity();
+ double eta2 = pair->Track2()->Track()->P().PseudoRapidity();
+
+ double phi1 = pair->Track1()->FourMomentum().Phi();
+ double phi2 = pair->Track2()->FourMomentum().Phi();
+ double eta1 = pair->Track1()->FourMomentum().PseudoRapidity();
+ double eta2 = pair->Track2()->FourMomentum().PseudoRapidity();
+
+ double dphi = phi1 - phi2;
+ while (dphi<fphiL) dphi+=PIT;
+ while (dphi>fphiT) dphi-=PIT;
+
+ double deta = eta1 - eta2;
+
+ double px1 = pair->Track1()->Track()->P().x();
+ double py1 = pair->Track1()->Track()->P().y();
+ double px2 = pair->Track2()->Track()->P().x();
+ double py2 = pair->Track2()->Track()->P().y();
+ double pt1 = TMath::Hypot(px1, py1);
+ double pt2 = TMath::Hypot(px2, py2);
+
+
+ double PionMass = 0.13956995;*/
+
+}
+//____________________________
+void AliFemtoCorrFctnPairFractions::AddMixedPair( AliFemtoPair* pair){
+ // add mixed (background) pair
+ if (fPairCut)
+ if (!fPairCut->Pass(pair)) return;
+
+}
+
+
+void AliFemtoCorrFctnPairFractions::WriteHistos()
+{
+ // Write out result histograms
+ fPairFractions->Write();
+}
+
+TList* AliFemtoCorrFctnPairFractions::GetOutputList()
+{
+ // Prepare the list of objects to be written to the output
+ TList *tOutputList = new TList();
+
+ tOutputList->Add(fPairFractions);
+
+
+ return tOutputList;
+
+}
--- /dev/null
+////////////////////////////////////////////////////////////////////////////////
+// //
+// AliFemtoCorrFctnPairFractions - A correlation function that analyzes //
+// two particle correlations with respect to the azimuthal angle (phi) //
+// and pseudorapidity (eta) difference //
+// //
+// Authors: Malgorzata Janik majanik@cern.ch //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef ALIFEMTOCORRFCTNPAIRFRACTIONS_H
+#define ALIFEMTOCORRFCTNPAIRFRACTIONS_H
+
+#include "TH1F.h"
+#include "TH2F.h"
+
+#include "AliFemtoCorrFctn.h"
+
+class AliFemtoCorrFctnPairFractions : public AliFemtoCorrFctn {
+public:
+ enum CorrectionType {kNone=0, kPt=1, kEta=2};
+ typedef enum CorrectionType ReadCorrectionType;
+
+ AliFemtoCorrFctnPairFractions(char* title);
+ AliFemtoCorrFctnPairFractions(const AliFemtoCorrFctnPairFractions& aCorrFctn);
+ virtual ~AliFemtoCorrFctnPairFractions();
+
+ AliFemtoCorrFctnPairFractions& operator=(const AliFemtoCorrFctnPairFractions& aCorrFctn);
+
+ virtual AliFemtoString Report();
+ virtual void AddRealPair(AliFemtoPair* aPair);
+ virtual void AddMixedPair(AliFemtoPair* aPair);
+
+ virtual void Finish();
+ void WriteHistos();
+ virtual TList* GetOutputList();
+
+private:
+ TH1F *fPairFractions;
+
+
+ double fphiL;
+ double fphiT;
+
+
+
+#ifdef __ROOT__
+ ClassDef(AliFemtoCorrFctnPairFractions, 1)
+#endif
+};
+
+
+#endif
+
float tEnergy = ::sqrt(track->P().Mag2()+fMass*fMass);
- float tRapidity = 0.5*::log((tEnergy+track->P().z())/(tEnergy-track->P().z()));
+ float tRapidity = 0;
+ if(tEnergy-track->P().z()!=0 && (tEnergy+track->P().z())/(tEnergy-track->P().z())>0)
+ tRapidity = 0.5*::log((tEnergy+track->P().z())/(tEnergy-track->P().z()));
float tPt = ::sqrt((track->P().x())*(track->P().x())+(track->P().y())*(track->P().y()));
float tEta = track->P().PseudoRapidity();
return false;
}
+ //****N Sigma Method -- electron rejection****
+ if(fElectronRejection)
+ if(!IsElectron(track->NSigmaTPCE(),track->NSigmaTPCPi(),track->NSigmaTPCK(), track->NSigmaTPCP()))
+ return false;
+
+
if (fMostProbable) {
int imost=0;
tMost[4] = track->PidProbProton()*PidFractionProton(track->P().Mag());
float ipidmax = 0.0;
- //****N Sigma Method -- electron rejection****
- if(fElectronRejection)
- if(!IsElectron(track->NSigmaTPCE(),track->NSigmaTPCPi(),track->NSigmaTPCK(), track->NSigmaTPCP()))
- return false;
-
//****N Sigma Method****
if(fPIDMethod==0){
// Looking for pions
else if (fMostProbable == 3) {
- if (IsKaonNSigma(track->P().Mag(), track->NSigmaTPCK(), track->NSigmaTOFK())){
+ if (IsKaonNSigma(track->P().Mag(), track->NSigmaTPCK(), track->NSigmaTOFK())){
imost = 3;
}
}
- else if (fMostProbable == 4) { // proton nsigma-PID required contour adjusting (in LHC10h)
- if ( IsProtonNSigma(track->P().Mag(), track->NSigmaTPCP(), track->NSigmaTOFP()) // && (TMath::Abs(track->NSigmaTPCP()) < TMath::Abs(track->NSigmaTPCPi())) && (TMath::Abs(track->NSigmaTPCP()) < TMath::Abs(track->NSigmaTPCK())) && (TMath::Abs(track->NSigmaTOFP()) < TMath::Abs(track->NSigmaTOFPi())) && (TMath::Abs(track->NSigmaTOFP()) < TMath::Abs(track->NSigmaTOFK()))
- // && IsProtonTPCdEdx(track->P().Mag(), track->TPCsignal())
- )
+ else if (fMostProbable == 4) { // proton nsigma-PID required contour adjusting (in LHC10h)
+ if ( IsProtonNSigma(track->P().Mag(), track->NSigmaTPCP(), track->NSigmaTOFP()) // && (TMath::Abs(track->NSigmaTPCP()) < TMath::Abs(track->NSigmaTPCPi())) && (TMath::Abs(track->NSigmaTPCP()) < TMath::Abs(track->NSigmaTPCK())) && (TMath::Abs(track->NSigmaTOFP()) < TMath::Abs(track->NSigmaTOFPi())) && (TMath::Abs(track->NSigmaTOFP()) < TMath::Abs(track->NSigmaTOFK()))
+ // && IsProtonTPCdEdx(track->P().Mag(), track->TPCsignal())
+ )
imost = 4;
}
- else if (fMostProbable == 5) { // no-protons
- if ( !IsProtonNSigma(track->P().Mag(), track->NSigmaTPCP(), track->NSigmaTOFP()) )
+ else if (fMostProbable == 5) { // no-protons
+ if ( !IsProtonNSigma(track->P().Mag(), track->NSigmaTPCP(), track->NSigmaTOFP()) )
imost = 5;
}
+ else if (fMostProbable == 6) { //pions OR kaons OR protons
+ if (IsPionNSigma(track->P().Mag(), track->NSigmaTPCPi(), track->NSigmaTOFPi()))
+ imost = 6;
+ else if (IsKaonNSigma(track->P().Mag(), track->NSigmaTPCK(), track->NSigmaTOFK()))
+ imost = 6;
+ else if (IsProtonNSigma(track->P().Mag(), track->NSigmaTPCP(), track->NSigmaTOFP()) )
+ imost = 6;
+ }
+ else if (fMostProbable == 7) { // pions OR kaons OR protons OR electrons
+ if (IsPionNSigma(track->P().Mag(), track->NSigmaTPCPi(), track->NSigmaTOFPi()))
+ imost = 7;
+ else if (IsKaonNSigma(track->P().Mag(), track->NSigmaTPCK(), track->NSigmaTOFK()))
+ imost = 7;
+ else if (IsProtonNSigma(track->P().Mag(), track->NSigmaTPCP(), track->NSigmaTOFP()) )
+ imost = 7;
+ else if (TMath::Abs(track->NSigmaTPCE())<3)
+ imost = 7;
+ }
}
//old
bool AliFemtoESDTrackCut::IsKaonNSigma(float mom, float nsigmaTPCK, float nsigmaTOFK)
{
-
- if(mom<0.4)
- {
- if(nsigmaTOFK<-999.)
- {
- if(TMath::Abs(nsigmaTPCK)<2.0) return true;
- }
- else if(TMath::Abs(nsigmaTOFK)<3.0 && TMath::Abs(nsigmaTPCK)<3.0) return true;
- }
- else if(mom>=0.4 && mom<=0.6)
- {
- if(nsigmaTOFK<-999.)
- {
- if(TMath::Abs(nsigmaTPCK)<2.0) return true;
- }
- else if(TMath::Abs(nsigmaTOFK)<3.0 && TMath::Abs(nsigmaTPCK)<3.0) return true;
+ if (fNsigmaTPCTOF) {
+ if (mom > 0.5) {
+ // if (TMath::Hypot( nsigmaTOFP, nsigmaTPCP )/TMath::Sqrt(2) < 3.0)
+ if (TMath::Hypot( nsigmaTOFK, nsigmaTPCK ) < fNsigma)
+ return true;
}
- else if(nsigmaTOFK<-999.)
- {
- return false;
+ else {
+ if (TMath::Abs(nsigmaTPCK) < fNsigma)
+ return true;
}
- else if(TMath::Abs(nsigmaTOFK)<3.0 && TMath::Abs(nsigmaTPCK)<3.0) return true;
+ }
+ else {
+ if(mom<0.4)
+ {
+ if(nsigmaTOFK<-999.)
+ {
+ if(TMath::Abs(nsigmaTPCK)<2.0) return true;
+ }
+ else if(TMath::Abs(nsigmaTOFK)<3.0 && TMath::Abs(nsigmaTPCK)<3.0) return true;
+ }
+ else if(mom>=0.4 && mom<=0.6)
+ {
+ if(nsigmaTOFK<-999.)
+ {
+ if(TMath::Abs(nsigmaTPCK)<2.0) return true;
+ }
+ else if(TMath::Abs(nsigmaTOFK)<3.0 && TMath::Abs(nsigmaTPCK)<3.0) return true;
+ }
+ else if(nsigmaTOFK<-999.)
+ {
+ return false;
+ }
+ else if(TMath::Abs(nsigmaTOFK)<3.0 && TMath::Abs(nsigmaTPCK)<3.0) return true;
+ }
return false;
}
bool AliFemtoESDTrackCut::IsPionNSigma(float mom, float nsigmaTPCPi, float nsigmaTOFPi)
{
- if(mom<0.65)
- {
- if(nsigmaTOFPi<-999.)
- {
- if(mom<0.35 && TMath::Abs(nsigmaTPCPi)<3.0) return true;
- else if(mom<0.5 && mom>=0.35 && TMath::Abs(nsigmaTPCPi)<3.0) return true;
- else if(mom>=0.5 && TMath::Abs(nsigmaTPCPi)<2.0) return true;
- else return false;
- }
- else if(TMath::Abs(nsigmaTOFPi)<3.0 && TMath::Abs(nsigmaTPCPi)<3.0) return true;
+ if (fNsigmaTPCTOF) {
+ if (mom > 0.5) {
+ // if (TMath::Hypot( nsigmaTOFP, nsigmaTPCP )/TMath::Sqrt(2) < 3.0)
+ if (TMath::Hypot( nsigmaTOFPi, nsigmaTPCPi ) < fNsigma)
+ return true;
}
- else if(nsigmaTOFPi<-999.)
- {
- return false;
+ else {
+ if (TMath::Abs(nsigmaTPCPi) < fNsigma)
+ return true;
}
- else if(mom<1.5 && TMath::Abs(nsigmaTOFPi)<3.0 && TMath::Abs(nsigmaTPCPi)<5.0) return true;
- else if(mom>=1.5 && TMath::Abs(nsigmaTOFPi)<2.0 && TMath::Abs(nsigmaTPCPi)<5.0) return true;
-
+ }
+ else {
+ if(mom<0.65)
+ {
+ if(nsigmaTOFPi<-999.)
+ {
+ if(mom<0.35 && TMath::Abs(nsigmaTPCPi)<3.0) return true;
+ else if(mom<0.5 && mom>=0.35 && TMath::Abs(nsigmaTPCPi)<3.0) return true;
+ else if(mom>=0.5 && TMath::Abs(nsigmaTPCPi)<2.0) return true;
+ else return false;
+ }
+ else if(TMath::Abs(nsigmaTOFPi)<3.0 && TMath::Abs(nsigmaTPCPi)<3.0) return true;
+ }
+ else if(nsigmaTOFPi<-999.)
+ {
+ return false;
+ }
+ else if(mom<1.5 && TMath::Abs(nsigmaTOFPi)<3.0 && TMath::Abs(nsigmaTPCPi)<5.0) return true;
+ else if(mom>=1.5 && TMath::Abs(nsigmaTOFPi)<2.0 && TMath::Abs(nsigmaTPCPi)<5.0) return true;
+ }
return false;
}
{
if (fNsigmaTPCTOF) {
- if (mom > 0.8) {
+ if (mom > 0.5) {
// if (TMath::Hypot( nsigmaTOFP, nsigmaTPCP )/TMath::Sqrt(2) < 3.0)
if (TMath::Hypot( nsigmaTOFP, nsigmaTPCP ) < fNsigma)
return true;
void SetMostProbableProton();
void SetLeastProbableProton();
void SetNoMostProbable();
+ void SetMostProbable(const int& num);
void SetPIDMethod(ReadPIDMethodType newMethod);
void SetNsigmaTPCTOF(Bool_t);
void SetNsigmaTPConly(Bool_t);
inline void AliFemtoESDTrackCut::SetMostProbableProton() { fMostProbable = 4; }
inline void AliFemtoESDTrackCut::SetLeastProbableProton() { fMostProbable = 5; }
inline void AliFemtoESDTrackCut::SetNoMostProbable() { fMostProbable = 0; }
+inline void AliFemtoESDTrackCut::SetMostProbable(const int& num) { fMostProbable = num; }
inline void AliFemtoESDTrackCut::SetMaxITSChiNdof(const float& maxchi) { fMaxITSchiNdof = maxchi; }
inline void AliFemtoESDTrackCut::SetMaxTPCChiNdof(const float& maxchi) { fMaxTPCchiNdof = maxchi; }
inline void AliFemtoESDTrackCut::SetMaxSigmaToVertex(const float& maxsig) { fMaxSigmaToVertex = maxsig; }
#define PI 3.1415927
#define G_Coeff 0.006399 // 2*pi*alpha*M_pion
-#define kappa3 0.1 // kappa3 Edgeworth coefficient (non-Gaussian features of C2)
-#define kappa4 0.5 // kappa4 Edgeworth coefficient (non-Gaussian features of C2)
+#define kappa3 0.15 // kappa3 Edgeworth coefficient (non-Gaussian features of C2)
+#define kappa4 0.32 // kappa4 Edgeworth coefficient (non-Gaussian features of C2)
// Author: Dhevan Gangadharan
fNormQPairSwitch_E1E2(),
fNormQPairSwitch_E1E3(),
fNormQPairSwitch_E2E3(),
- fMomResC2(0x0)
+ fMomResC2(0x0),
+ fWeightmuonCorrection(0x0)
{
// Default constructor
for(Int_t mb=0; mb<fMbins; mb++){
fNormQPairSwitch_E1E2(),
fNormQPairSwitch_E1E3(),
fNormQPairSwitch_E2E3(),
- fMomResC2(0x0)
+ fMomResC2(0x0),
+ fWeightmuonCorrection(0x0)
{
// Main constructor
fAODcase=kTRUE;
fNormQPairSwitch_E1E2(),
fNormQPairSwitch_E1E3(),
fNormQPairSwitch_E2E3(),
- fMomResC2(obj.fMomResC2)
+ fMomResC2(obj.fMomResC2),
+ fWeightmuonCorrection(obj.fWeightmuonCorrection)
{
// Copy Constructor
fKT3transition = obj.fKT3transition;
fKT4transition = obj.fKT4transition;
fMomResC2 = obj.fMomResC2;
+ fWeightmuonCorrection = obj.fWeightmuonCorrection;
for(Int_t i=0; i<12; i++){
fFSIss[i]=obj.fFSIss[i];
if(fTempStruct) delete [] fTempStruct;
if(fRandomNumber) delete fRandomNumber;
if(fMomResC2) delete fMomResC2;
-
+ if(fWeightmuonCorrection) delete fWeightmuonCorrection;
+
for(Int_t j=0; j<kMultLimitPbPb; j++){
if(fLowQPairSwitch_E0E0[j]) delete [] fLowQPairSwitch_E0E0[j];
if(fLowQPairSwitch_E0E1[j]) delete [] fLowQPairSwitch_E0E1[j];
//
fQupperBoundWeights = 0.2;
fQupperBoundQ2 = 2.0;
- fQupperBoundQ3 = 0.5;
- fQupperBoundQ4 = 0.5;
+ fQupperBoundQ3 = 0.6;
+ fQupperBoundQ4 = 0.6;
fQbinsQ2 = fQupperBoundQ2/0.005;
fQbinsQ3 = fQupperBoundQ3/0.005;
fQbinsQ4 = fQupperBoundQ4/0.005;
SetFSICorrelations(fLEGO);// Read in 2-particle and 3-particle FSI correlations
if(!fTabulatePairs) SetWeightArrays(fLEGO);// Set Weight Array
if(!fMCcase && !fTabulatePairs) SetMomResCorrections(fLEGO);// Read Momentum resolution file
+ if(!fMCcase && !fTabulatePairs) SetMuonCorrections(fLEGO);// Read Muon corrections
}
/////////////////////////////////////////////
// Muon correction histos
TString *nameMuonIdeal=new TString(namePC3->Data());
nameMuonIdeal->Append("_MuonIdeal");
- Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonIdeal = new TH2D(nameMuonIdeal->Data(),"", 11,0.5,11.5, fQbinsQ3,0,fQupperBoundQ3);
- if(mb==0 && edB==0) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonIdeal);
+ Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonIdeal = new TH3D(nameMuonIdeal->Data(),"", 2,0.5,2.5, 11,0.5,11.5, fQbinsQ3,0,fQupperBoundQ3);
+ if(mb==0 && edB==0 && term<4) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonIdeal);
TString *nameMuonSmeared=new TString(namePC3->Data());
nameMuonSmeared->Append("_MuonSmeared");
- Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonSmeared = new TH2D(nameMuonSmeared->Data(),"", 11,0.5,11.5, fQbinsQ3,0,fQupperBoundQ3);
- if(mb==0 && edB==0) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonSmeared);
+ Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonSmeared = new TH3D(nameMuonSmeared->Data(),"", 2,0.5,2.5, 11,0.5,11.5, fQbinsQ3,0,fQupperBoundQ3);
+ if(mb==0 && edB==0 && term<4) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonSmeared);
//
TString *nameMuonPionK3=new TString(namePC3->Data());
nameMuonPionK3->Append("_MuonPionK3");
- Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonPionK3 = new TH2D(nameMuonPionK3->Data(),"", 11,0.5,11.5, fQbinsQ3,0,fQupperBoundQ3);
- if(mb==0 && edB==0) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonPionK3);
+ Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonPionK3 = new TH3D(nameMuonPionK3->Data(),"", 2,0.5,2.5, 11,0.5,11.5, fQbinsQ3,0,fQupperBoundQ3);
+ if(mb==0 && edB==0 && term<4) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fMuonPionK3);
//
TString *namePionPionK3=new TString(namePC3->Data());
namePionPionK3->Append("_PionPionK3");
- Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fPionPionK3 = new TH2D(namePionPionK3->Data(),"", 11,0.5,11.5, fQbinsQ3,0,fQupperBoundQ3);
- if(mb==0 && edB==0) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fPionPionK3);
+ Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fPionPionK3 = new TH3D(namePionPionK3->Data(),"", 2,0.5,2.5, 11,0.5,11.5, fQbinsQ3,0,fQupperBoundQ3);
+ if(mb==0 && edB==0 && term<4) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fPionPionK3);
}// MCcase
//
nameTwoPartNorm->Append("_TwoPartNorm");
Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fTwoPartNorm = new TH2D(nameTwoPartNorm->Data(),"", kDENtypes,0.5,kDENtypes+0.5, fQbinsQ3,0,fQupperBoundQ3);
fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fTwoPartNorm);
+ //
+ TString *nameTwoPartNormErr=new TString(namePC3->Data());
+ nameTwoPartNormErr->Append("_TwoPartNormErr");
+ Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fTwoPartNormErr = new TH2D(nameTwoPartNormErr->Data(),"", kDENtypes,0.5,kDENtypes+0.5, fQbinsQ3,0,fQupperBoundQ3);
+ fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].MB[mb].EDB[edB].ThreePT[term].fTwoPartNormErr);
}// term=4
}// term_3
nameTwoPartNorm->Append("_TwoPartNorm");
Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fTwoPartNorm = new TH2D(nameTwoPartNorm->Data(),"", kDENtypes,0.5,kDENtypes+0.5, fQbinsQ4,0,fQupperBoundQ4);
fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fTwoPartNorm);
+ //
+ TString *nameTwoPartNormErr=new TString(namePC4->Data());
+ nameTwoPartNormErr->Append("_TwoPartNormErr");
+ Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fTwoPartNormErr = new TH2D(nameTwoPartNormErr->Data(),"", kDENtypes,0.5,kDENtypes+0.5, fQbinsQ4,0,fQupperBoundQ4);
+ fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fTwoPartNormErr);
}
-
+
if(fMCcase==kTRUE){
// Momentum resolution correction histos
TString *nameMomResIdeal=new TString(namePC4->Data());
// Muon correction histos
TString *nameMuonIdeal=new TString(namePC4->Data());
nameMuonIdeal->Append("_MuonIdeal");
- Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonIdeal = new TH2D(nameMuonIdeal->Data(),"", 11,0.5,11.5, fQbinsQ4,0,fQupperBoundQ4);
- if(mb==0 && edB==0) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonIdeal);
+ Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonIdeal = new TH3D(nameMuonIdeal->Data(),"", 2,0.5,2.5, 11,0.5,11.5, fQbinsQ4,0,fQupperBoundQ4);
+ if(mb==0 && edB==0 && term<12) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonIdeal);
TString *nameMuonSmeared=new TString(namePC4->Data());
nameMuonSmeared->Append("_MuonSmeared");
- Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonSmeared = new TH2D(nameMuonSmeared->Data(),"", 11,0.5,11.5, fQbinsQ4,0,fQupperBoundQ4);
- if(mb==0 && edB==0) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonSmeared);
+ Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonSmeared = new TH3D(nameMuonSmeared->Data(),"", 2,0.5,2.5, 11,0.5,11.5, fQbinsQ4,0,fQupperBoundQ4);
+ if(mb==0 && edB==0 && term<12) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonSmeared);
//
TString *nameMuonPionK4=new TString(namePC4->Data());
nameMuonPionK4->Append("_MuonPionK4");
- Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonPionK4 = new TH2D(nameMuonPionK4->Data(),"", 11,0.5,11.5, fQbinsQ4,0,fQupperBoundQ4);
- if(mb==0 && edB==0) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonPionK4);
+ Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonPionK4 = new TH3D(nameMuonPionK4->Data(),"", 2,0.5,2.5, 11,0.5,11.5, fQbinsQ4,0,fQupperBoundQ4);
+ if(mb==0 && edB==0 && term<12) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fMuonPionK4);
//
TString *namePionPionK4=new TString(namePC4->Data());
namePionPionK4->Append("_PionPionK4");
- Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fPionPionK4 = new TH2D(namePionPionK4->Data(),"", 11,0.5,11.5, fQbinsQ4,0,fQupperBoundQ4);
- if(mb==0 && edB==0) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fPionPionK4);
+ Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fPionPionK4 = new TH3D(namePionPionK4->Data(),"", 2,0.5,2.5, 11,0.5,11.5, fQbinsQ4,0,fQupperBoundQ4);
+ if(mb==0 && edB==0 && term<12) fOutputList->Add(Charge1[c1].Charge2[c2].Charge3[c3].Charge4[c4].MB[mb].EDB[edB].FourPT[term].fPionPionK4);
}// MCcase
TH2D *fAvgQ23VersusQ3 = new TH2D("fAvgQ23VersusQ3","",10,0,0.1, 20,0,0.1);
fOutputList->Add(fAvgQ23VersusQ3);
+ TH1D *fDistPionParents4 = new TH1D("fDistPionParents4","",4,0.5,4.5);
+ fOutputList->Add(fDistPionParents4);
+
////////////////////////////////////
///////////////////////////////////
Float_t Pparent4[4]={0};
Float_t weight12=0, weight13=0, weight14=0, weight23=0, weight24=0, weight34=0;
Float_t weight12Err=0, weight13Err=0, weight14Err=0, weight23Err=0, weight24Err=0, weight34Err=0;
- Float_t weight12CC=0, weight13CC=0, weight14CC=0, weight23CC=0, weight24CC=0, weight34CC=0;
+ Float_t weight12CC[3]={0};
+ Float_t weight13CC[3]={0};
+ Float_t weight14CC[3]={0};
+ Float_t weight23CC[3]={0};
+ Float_t weight24CC[3]={0};
+ Float_t weight34CC[3]={0};
+ //Float_t weight12CC_e=0, weight13CC_e=0, weight14CC_e=0, weight23CC_e=0, weight24CC_e=0, weight34CC_e=0;
Float_t weightTotal=0;//, weightTotalErr=0;
Float_t qinv12MC=0, qinv13MC=0, qinv14MC=0, qinv23MC=0, qinv24MC=0, qinv34MC=0;
Float_t parentQinv12=0, parentQinv13=0, parentQinv14=0, parentQinv23=0, parentQinv24=0, parentQinv34=0;
Bool_t pionParent1=kFALSE, pionParent2=kFALSE, pionParent3=kFALSE, pionParent4=kFALSE;
Bool_t FilledMCpair12=kFALSE, FilledMCtriplet123=kFALSE;
Bool_t GoodTripletWeights=kFALSE;
+ Float_t T12=0, T13=0, T14=0, T23=0, T24=0, T34=0;
//
AliAODMCParticle *mcParticle1=0x0;
AliAODMCParticle *mcParticle2=0x0;
fNormQPairSwitch_E1E3[i]->Set(kMultLimitPbPb,fDefaultsCharSwitch);
fNormQPairSwitch_E2E3[i]->Set(kMultLimitPbPb,fDefaultsCharSwitch);
}
- /*for(Int_t i=0; i<fMultLimit; i++) {
- for(Int_t j=0; j<fMultLimit; j++) {
- LowQPairSwitch_E0E0[i][j] = kFALSE;
- LowQPairSwitch_E0E1[i][j] = kFALSE;
- LowQPairSwitch_E0E2[i][j] = kFALSE;
- LowQPairSwitch_E0E3[i][j] = kFALSE;
- LowQPairSwitch_E1E2[i][j] = kFALSE;
- LowQPairSwitch_E1E3[i][j] = kFALSE;
- LowQPairSwitch_E2E3[i][j] = kFALSE;
- //
- NormQPairSwitch_E0E0[i][j] = kFALSE;
- NormQPairSwitch_E0E1[i][j] = kFALSE;
- NormQPairSwitch_E0E2[i][j] = kFALSE;
- NormQPairSwitch_E0E3[i][j] = kFALSE;
- NormQPairSwitch_E1E2[i][j] = kFALSE;
- NormQPairSwitch_E1E3[i][j] = kFALSE;
- NormQPairSwitch_E2E3[i][j] = kFALSE;
- }
- }
- */
+
//////////////////////////////////////////
// make low-q pair storage and normalization-pair storage
for (Int_t i=0; i<(fEvt+en1)->fNtracks; i++) {// 1st particle
for (Int_t j=i+1; j<(fEvt+en2)->fNtracks; j++) {// 2nd particle
-
+
pVect1[0]=(fEvt+en1)->fTracks[i].fEaccepted; pVect2[0]=(fEvt+en2)->fTracks[j].fEaccepted;
pVect1[1]=(fEvt+en1)->fTracks[i].fP[0]; pVect2[1]=(fEvt+en2)->fTracks[j].fP[0];
pVect1[2]=(fEvt+en1)->fTracks[i].fP[1]; pVect2[2]=(fEvt+en2)->fTracks[j].fP[1];
kT12 = sqrt(pow(pVect1[1]+pVect2[1],2) + pow(pVect1[2]+pVect2[2],2))/2.;
SetFillBins2(ch1, ch2, bin1, bin2);
- if(qinv12 < fQLowerCut) continue;// remove unwanted low-q pairs (also a type of track splitting/merging cut)
- if(ch1 == ch2 && !fGeneratorOnly){
+ if(qinv12 < fQLowerCut && !fMCcase) continue;// remove unwanted low-q pairs (also a type of track splitting/merging cut)
+ if(ch1 == ch2 && !fGeneratorOnly && !fMCcase){
if(!AcceptPair((fEvt+en1)->fTracks[i], (fEvt+en2)->fTracks[j])) {
if(en1==0 && en2==0) ((TH1F*)fOutputList->FindObject("fRejectedPairs"))->Fill(qinv12);
continue;
if((kTbin>=fKbinsT) || (kYbin>=fKbinsY)) {cout<<"problem!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl; continue;}
if(fGenerateSignal && en2==0) {
Int_t chGroup2[2]={ch1,ch2};
- Float_t WInput = MCWeight(chGroup2, fRMax, 0.7, qinv12, kT12);
+ Float_t WInput = MCWeight(chGroup2, fRMax, 0.65, qinv12, kT12);
KT[kTbin].KY[kYbin].MB[fMbin].EDB[0].TwoPT[en2].fTerms2ThreeD->Fill(fabs(qout), fabs(qside), fabs(qlong), WInput);
}else KT[kTbin].KY[kYbin].MB[fMbin].EDB[0].TwoPT[en2].fTerms2ThreeD->Fill(fabs(qout), fabs(qside), fabs(qlong));
}
//////////////////////////////////////////////////////////////////////////////
if(qinv12 <= fQcut) {
- /*if(en1==0 && en2==0) {LowQPairSwitch_E0E0[i][j] = kTRUE; PairCount[0]++;}
- if(en1==0 && en2==1) {LowQPairSwitch_E0E1[i][j] = kTRUE; PairCount[1]++;}
- if(en1==0 && en2==2) {LowQPairSwitch_E0E2[i][j] = kTRUE; PairCount[2]++;}
- if(en1==0 && en2==3) {LowQPairSwitch_E0E3[i][j] = kTRUE; PairCount[3]++;}
- if(en1==1 && en2==2) {LowQPairSwitch_E1E2[i][j] = kTRUE; PairCount[4]++;}
- if(en1==1 && en2==3) {LowQPairSwitch_E1E3[i][j] = kTRUE; PairCount[5]++;}
- if(en1==2 && en2==3) {LowQPairSwitch_E2E3[i][j] = kTRUE; PairCount[6]++;}*/
if(en1==0 && en2==0) {fLowQPairSwitch_E0E0[i]->AddAt('1',j);}
if(en1==0 && en2==1) {fLowQPairSwitch_E0E1[i]->AddAt('1',j);}
if(en1==0 && en2==2) {fLowQPairSwitch_E0E2[i]->AddAt('1',j);}
if(en1==2 && en2==3) {fLowQPairSwitch_E2E3[i]->AddAt('1',j);}
}
if((qinv12 >= fNormQcutLow) && (qinv12 < fNormQcutHigh)) {
- /*if(en1==0 && en2==0) {NormQPairSwitch_E0E0[i][j] = kTRUE; NormPairCount[0]++;}
- if(en1==0 && en2==1) {NormQPairSwitch_E0E1[i][j] = kTRUE; NormPairCount[1]++;}
- if(en1==0 && en2==2) {NormQPairSwitch_E0E2[i][j] = kTRUE; NormPairCount[2]++;}
- if(en1==0 && en2==3) {NormQPairSwitch_E0E3[i][j] = kTRUE; NormPairCount[3]++;}
- if(en1==1 && en2==2) {NormQPairSwitch_E1E2[i][j] = kTRUE; NormPairCount[4]++;}
- if(en1==1 && en2==3) {NormQPairSwitch_E1E3[i][j] = kTRUE; NormPairCount[5]++;}
- if(en1==2 && en2==3) {NormQPairSwitch_E2E3[i][j] = kTRUE; NormPairCount[6]++;}*/
if(en1==0 && en2==0) {fNormQPairSwitch_E0E0[i]->AddAt('1',j);}
if(en1==0 && en2==1) {fNormQPairSwitch_E0E1[i]->AddAt('1',j);}
if(en1==0 && en2==2) {fNormQPairSwitch_E0E2[i]->AddAt('1',j);}
ch1 = Int_t(((fEvt)->fTracks[i].fCharge + 1)/2.);
for (Int_t j=i+1; j<(fEvt+en2)->fNtracks; j++) {// 2nd particle
- //if(en2==0) {if(!NormQPairSwitch_E0E0[i][j]) continue;}
- //else {if(!NormQPairSwitch_E0E1[i][j]) continue;}
if(en2==0) {if(fNormQPairSwitch_E0E0[i]->At(j)=='0') continue;}
else {if(fNormQPairSwitch_E0E1[i]->At(j)=='0') continue;}
ch2 = Int_t(((fEvt+en2)->fTracks[j].fCharge + 1)/2.);
for (Int_t k=j+1; k<(fEvt+en3)->fNtracks; k++) {// 3rd particle
- /*if(en3==0) {
- if(!NormQPairSwitch_E0E0[i][k]) continue;
- if(!NormQPairSwitch_E0E0[j][k]) continue;
- }else if(en3==1){
- if(!NormQPairSwitch_E0E1[i][k]) continue;
- if(!NormQPairSwitch_E0E1[j][k]) continue;
- }else{
- if(!NormQPairSwitch_E0E2[i][k]) continue;
- if(!NormQPairSwitch_E1E2[j][k]) continue;
- }*/
if(en3==0) {
if(fNormQPairSwitch_E0E0[i]->At(k)=='0') continue;
if(fNormQPairSwitch_E0E0[j]->At(k)=='0') continue;
for (Int_t l=k+1; l<(fEvt+en4)->fNtracks; l++) {// 4th particle
- /*if(en4==0){
- if(!NormQPairSwitch_E0E0[i][l]) continue;
- if(!NormQPairSwitch_E0E0[j][l]) continue;
- if(!NormQPairSwitch_E0E0[k][l]) continue;
- }else if(en4==1){
- if(!NormQPairSwitch_E0E1[i][l]) continue;
- if(!NormQPairSwitch_E0E1[j][l]) continue;
- if(!NormQPairSwitch_E0E1[k][l]) continue;
- }else if(en4==2){
- if(!NormQPairSwitch_E0E2[i][l]) continue;
- if(!NormQPairSwitch_E0E2[j][l]) continue;
- if(!NormQPairSwitch_E1E2[k][l]) continue;
- }else{
- if(!NormQPairSwitch_E0E3[i][l]) continue;
- if(!NormQPairSwitch_E1E3[j][l]) continue;
- if(!NormQPairSwitch_E2E3[k][l]) continue;
- }*/
if(en4==0){
if(fNormQPairSwitch_E0E0[i]->At(l)=='0') continue;
if(fNormQPairSwitch_E0E0[j]->At(l)=='0') continue;
/////////////////////////////////////////////////////////////
for (Int_t j=i+1; j<(fEvt+en2)->fNtracks; j++) {// 2nd particle
- //if(en2==0) {if(!LowQPairSwitch_E0E0[i][j]) continue;}
- //else {if(!LowQPairSwitch_E0E1[i][j]) continue;}
if(en2==0) {if(fLowQPairSwitch_E0E0[i]->At(j)=='0') continue;}
else {if(fLowQPairSwitch_E0E1[i]->At(j)=='0') continue;}
else rForQW=2;
- Charge1[bin1].Charge2[bin2].MB[fMbin].EDB[0].TwoPT[1].fMCqinv->Fill(qinv12MC, MCWeight(chGroup2, rForQW, 0.7, qinv12MC, 0.));// was 4,5
- Charge1[bin1].Charge2[bin2].MB[fMbin].EDB[0].TwoPT[1].fMCqinvQW->Fill(qinv12MC, qinv12MC*MCWeight(chGroup2, rForQW, 0.7, qinv12MC, 0.));// was 4,5
+ Charge1[bin1].Charge2[bin2].MB[fMbin].EDB[0].TwoPT[1].fMCqinv->Fill(qinv12MC, MCWeight(chGroup2, rForQW, 0.65, qinv12MC, 0.));// was 4,5
+ Charge1[bin1].Charge2[bin2].MB[fMbin].EDB[0].TwoPT[1].fMCqinvQW->Fill(qinv12MC, qinv12MC*MCWeight(chGroup2, rForQW, 0.65, qinv12MC, 0.));// was 4,5
// pion purity
Charge1[bin1].Charge2[bin2].MB[fMbin].EDB[0].TwoPT[1].fPIDpurityDen->Fill(kT12, qinv12);
Int_t SCNumber = 1;
Float_t WInput = 1.0;
if(term==1) {
WInput = MCWeight(chGroup2, Rvalue, 1.0, parentQinv12, 0.);
+ }else{
muonPionK12 = 1.0; pionPionK12=1.0;
}
+
Charge1[bin1].Charge2[bin2].MB[0].EDB[0].TwoPT[term-1].fMuonSmeared->Fill(Rvalue, qinv12MC, WInput);
Charge1[bin1].Charge2[bin2].MB[0].EDB[0].TwoPT[term-1].fMuonIdeal->Fill(Rvalue, parentQinv12, WInput);
Charge1[bin1].Charge2[bin2].MB[0].EDB[0].TwoPT[term-1].fMuonPionK2->Fill(Rvalue, qinv12MC, muonPionK12);
// momentum resolution
for(Int_t Riter=0; Riter<fRVALUES; Riter++){
Float_t Rvalue = 5+Riter;
- Float_t WInput = MCWeight(chGroup2, Rvalue, 0.7, qinv12MC, 0.);
+ Float_t WInput = MCWeight(chGroup2, Rvalue, 0.65, qinv12MC, 0.);
Charge1[bin1].Charge2[bin2].MB[0].EDB[kTindex].TwoPT[0].fIdeal->Fill(Rvalue, qinv12MC, WInput);
Charge1[bin1].Charge2[bin2].MB[0].EDB[kTindex].TwoPT[1].fIdeal->Fill(Rvalue, qinv12MC);
Charge1[bin1].Charge2[bin2].MB[0].EDB[kTindex].TwoPT[0].fSmeared->Fill(Rvalue, qinv12, WInput);
/////////////////////////////////////////////////////////////
for (Int_t k=j+1; k<(fEvt+en3)->fNtracks; k++) {// 3rd particle
- /*if(en3==0) {
- if(!LowQPairSwitch_E0E0[i][k]) continue;
- if(!LowQPairSwitch_E0E0[j][k]) continue;
- }else if(en3==1){
- if(!LowQPairSwitch_E0E1[i][k]) continue;
- if(!LowQPairSwitch_E0E1[j][k]) continue;
- }else{
- if(!LowQPairSwitch_E0E2[i][k]) continue;
- if(!LowQPairSwitch_E1E2[j][k]) continue;
- }*/
if(en3==0) {
if(fLowQPairSwitch_E0E0[i]->At(k)=='0') continue;
if(fLowQPairSwitch_E0E0[j]->At(k)=='0') continue;
}else{
Float_t MomResCorr12=1.0, MomResCorr13=1.0, MomResCorr23=1.0;
+ Float_t MuonCorr12=1.0, MuonCorr13=1.0, MuonCorr23=1.0;
if(!fGenerateSignal && !fMCcase) {
Int_t momBin12 = fMomResC2->GetYaxis()->FindBin(qinv12);
Int_t momBin13 = fMomResC2->GetYaxis()->FindBin(qinv13);
MomResCorr12 = fMomResC2->GetBinContent(rBinForTPNMomRes, momBin12);
MomResCorr13 = fMomResC2->GetBinContent(rBinForTPNMomRes, momBin13);
MomResCorr23 = fMomResC2->GetBinContent(rBinForTPNMomRes, momBin23);
+ MuonCorr12 = fWeightmuonCorrection->GetBinContent(rBinForTPNMomRes, momBin12);
+ MuonCorr13 = fWeightmuonCorrection->GetBinContent(rBinForTPNMomRes, momBin13);
+ MuonCorr23 = fWeightmuonCorrection->GetBinContent(rBinForTPNMomRes, momBin23);
}
-
- weight12CC = ((weight12+1)*MomResCorr12 - ffcSq*FSICorr12 - (1-ffcSq));
- weight12CC /= FSICorr12*ffcSq;
- weight13CC = ((weight13+1)*MomResCorr13 - ffcSq*FSICorr13 - (1-ffcSq));
- weight13CC /= FSICorr13*ffcSq;
- weight23CC = ((weight23+1)*MomResCorr23 - ffcSq*FSICorr23 - (1-ffcSq));
- weight23CC /= FSICorr23*ffcSq;
-
- if(weight12CC < 0 || weight13CC < 0 || weight23CC < 0) {// C2^QS can never be less than unity
+ // no MRC, no Muon Correction
+ weight12CC[0] = ((weight12+1) - ffcSq*FSICorr12 - (1-ffcSq));
+ weight12CC[0] /= FSICorr12*ffcSq;
+ weight13CC[0] = ((weight13+1) - ffcSq*FSICorr13 - (1-ffcSq));
+ weight13CC[0] /= FSICorr13*ffcSq;
+ weight23CC[0] = ((weight23+1) - ffcSq*FSICorr23 - (1-ffcSq));
+ weight23CC[0] /= FSICorr23*ffcSq;
+ if(weight12CC[0] > 0 && weight13CC[0] > 0 && weight23CC[0] > 0){
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[fMbin].EDB[KT3index].ThreePT[4].fTwoPartNorm->Fill(1, q3, sqrt(weight12CC[0]*weight13CC[0]*weight23CC[0]));
+ }
+ // no Muon Correction
+ weight12CC[1] = ((weight12+1)*MomResCorr12 - ffcSq*FSICorr12 - (1-ffcSq));
+ weight12CC[1] /= FSICorr12*ffcSq;
+ weight13CC[1] = ((weight13+1)*MomResCorr13 - ffcSq*FSICorr13 - (1-ffcSq));
+ weight13CC[1] /= FSICorr13*ffcSq;
+ weight23CC[1] = ((weight23+1)*MomResCorr23 - ffcSq*FSICorr23 - (1-ffcSq));
+ weight23CC[1] /= FSICorr23*ffcSq;
+ if(weight12CC[1] > 0 && weight13CC[1] > 0 && weight23CC[1] > 0){
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[fMbin].EDB[KT3index].ThreePT[4].fTwoPartNorm->Fill(2, q3, sqrt(weight12CC[1]*weight13CC[1]*weight23CC[1]));
+ }
+ // both Corrections
+ weight12CC[2] = ((weight12+1)*MomResCorr12 - ffcSq*FSICorr12 - (1-ffcSq));
+ weight12CC[2] /= FSICorr12*ffcSq;
+ weight12CC[2] *= MuonCorr12;
+ weight13CC[2] = ((weight13+1)*MomResCorr13 - ffcSq*FSICorr13 - (1-ffcSq));
+ weight13CC[2] /= FSICorr13*ffcSq;
+ weight13CC[2] *= MuonCorr13;
+ weight23CC[2] = ((weight23+1)*MomResCorr23 - ffcSq*FSICorr23 - (1-ffcSq));
+ weight23CC[2] /= FSICorr23*ffcSq;
+ weight23CC[2] *= MuonCorr23;
+ if(weight12CC[2] < 0 || weight13CC[2] < 0 || weight23CC[2] < 0) {// C2^QS can never be less than unity
if(fMbin==0 && bin1==0) {
- ((TH1D*)fOutputList->FindObject("fTPNRejects3pion2"))->Fill(q3, sqrt(fabs(weight12CC*weight13CC*weight23CC)));
+ ((TH1D*)fOutputList->FindObject("fTPNRejects3pion2"))->Fill(q3, sqrt(fabs(weight12CC[2]*weight13CC[2]*weight23CC[2])));
}
}else{
GoodTripletWeights = kTRUE;
/////////////////////////////////////////////////////
- weightTotal = sqrt(weight12CC*weight13CC*weight23CC);
+ weightTotal = sqrt(weight12CC[2]*weight13CC[2]*weight23CC[2]);
/////////////////////////////////////////////////////
- Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[fMbin].EDB[KT3index].ThreePT[4].fTwoPartNorm->Fill(1, q3, weightTotal);
- }// 2nd r3 den check
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[fMbin].EDB[KT3index].ThreePT[4].fTwoPartNorm->Fill(3, q3, weightTotal);
+ //
+ // Full Weight reconstruction
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[fMbin].EDB[KT3index].ThreePT[4].fTwoPartNorm->Fill(4, q3, 1);
+ for(Int_t RcohIndex=0; RcohIndex<2; RcohIndex++){// Rcoh=0, then Rcoh=Rch
+ for(Int_t GIndex=0; GIndex<20; GIndex++){
+ Int_t FillBin = 5 + RcohIndex*20 + GIndex;
+ Float_t G = 0.02*GIndex;
+ if(RcohIndex==0){
+ T12 = (-2*G*(1-G) + sqrt(pow(2*G*(1-G),2) + 4*pow(1-G,2)*weight12CC[2])) / (2*pow(1-G,2));
+ T13 = (-2*G*(1-G) + sqrt(pow(2*G*(1-G),2) + 4*pow(1-G,2)*weight13CC[2])) / (2*pow(1-G,2));
+ T23 = (-2*G*(1-G) + sqrt(pow(2*G*(1-G),2) + 4*pow(1-G,2)*weight23CC[2])) / (2*pow(1-G,2));
+ weightTotal = 2*G*(1-G)*(T12 + T13 + T23) + pow(1-G,2)*(T12*T12 + T13*T13 + T23*T23);
+ weightTotal += 2*G*pow(1-G,2)*(T12*T13 + T12*T23 + T13*T23) + 2*pow(1-G,3)*T12*T13*T23;
+ }else{
+ weightTotal = (1-G*G)*(weight12CC[2] + weight13CC[2] + weight23CC[2]);
+ weightTotal += (6*G*pow(1-G,2) + 2*pow(1-G,3)) * sqrt(weight12CC[2]*weight13CC[2]*weight23CC[2]);
+ }
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[fMbin].EDB[KT3index].ThreePT[4].fTwoPartNorm->Fill(FillBin, q3, weightTotal);
+ }
+ }
+ //
+ /*weight12CC_e = weight12Err*MomResCorr12 / FSICorr12 / ffcSq * MuonCorr12;
+ weight13CC_e = weight13Err*MomResCorr13 / FSICorr13 / ffcSq * MuonCorr13;
+ weight23CC_e = weight23Err*MomResCorr23 / FSICorr23 / ffcSq * MuonCorr23;
+ if(weight12CC[2]*weight13CC[2]*weight23CC[2] > 0){
+ weightTotalErr = pow(2 * sqrt(3) * weight12CC_e*weight13CC[2]*weight23CC[2] / sqrt(weight12CC[2]*weight13CC[2]*weight23CC[2]),2);
+ }
+ weightTotalErr += pow(weight12CC_e,2) + pow(weight13CC_e,2) + pow(weight23CC_e,2);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[fMbin].EDB[KT3index].ThreePT[4].fTwoPartNormErr->Fill(4, q3, weightTotalErr);*/
+ }// 2nd r3 den check
+
+
}// 1st r3 den check
-
+
}// r3 den
((TH2D*)fOutputList->FindObject("fAvgQ13VersusQ3"))->Fill(parentQ3, parentQinv13);
((TH2D*)fOutputList->FindObject("fAvgQ23VersusQ3"))->Fill(parentQ3, parentQinv23);
- for(Int_t term=1; term<=5; term++){
+ for(Int_t term=1; term<=4; term++){
+ if(term==1) {}
+ else if(term==2) {if(!pionParent1 && !pionParent2) continue;}
+ else if(term==3) {if(!pionParent1 && !pionParent3) continue;}
+ else {if(!pionParent2 && !pionParent3) continue;}
for(Int_t Riter=0; Riter<fRVALUES; Riter++){
Float_t Rvalue = 5+Riter;
Float_t WInput = MCWeight3(term, Rvalue, 1.0, chGroup3, parentQinvGroup3, parentkTGroup3);
Float_t WInputParentFSI = MCWeightFSI3(term, Rvalue, 1.0, chGroup3, parentQinvGroup3);
Float_t WInputFSI = MCWeightFSI3(term, Rvalue, 1.0, chGroup3, QinvMCGroup3);
- Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fMuonSmeared->Fill(Rvalue, q3MC, WInput);
- Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fMuonIdeal->Fill(Rvalue, parentQ3, WInput);
- Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fMuonPionK3->Fill(Rvalue, q3MC, WInputFSI);
- Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fPionPionK3->Fill(Rvalue, parentQ3, WInputParentFSI);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fMuonSmeared->Fill(1, Rvalue, q3MC, WInput);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fMuonIdeal->Fill(1, Rvalue, parentQ3, WInput);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fMuonPionK3->Fill(1, Rvalue, q3MC, WInputFSI);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fPionPionK3->Fill(1, Rvalue, parentQ3, WInputParentFSI);
+ //
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fMuonSmeared->Fill(2, Rvalue, q3MC);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fMuonIdeal->Fill(2, Rvalue, parentQ3);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fMuonPionK3->Fill(2, Rvalue, q3MC);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[0].ThreePT[term-1].fPionPionK3->Fill(2, Rvalue, parentQ3);
}// Riter
}// term loop
for(Int_t term=1; term<=5; term++){
for(Int_t Riter=0; Riter<fRVALUES; Riter++){
Float_t Rvalue = 5+Riter;
- Float_t WInput = MCWeight3(term, Rvalue, 0.7, chGroup3, QinvMCGroup3, kTGroup3);
+ Float_t WInput = MCWeight3(term, Rvalue, 0.65, chGroup3, QinvMCGroup3, kTGroup3);
Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[KT3index].ThreePT[term-1].fIdeal->Fill(Rvalue, q3MC, WInput);
Charge1[bin1].Charge2[bin2].Charge3[bin3].MB[0].EDB[KT3index].ThreePT[term-1].fSmeared->Fill(Rvalue, q3, WInput);
}
}// 3rd particle label check
}// MCcase and ENsum==6
-
+
- /////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////
for (Int_t l=k+1; l<(fEvt+en4)->fNtracks; l++) {// 4th particle
- /*if(en4==0){
- if(!LowQPairSwitch_E0E0[i][l]) continue;
- if(!LowQPairSwitch_E0E0[j][l]) continue;
- if(!LowQPairSwitch_E0E0[k][l]) continue;
- }else if(en4==1){
- if(!LowQPairSwitch_E0E1[i][l]) continue;
- if(!LowQPairSwitch_E0E1[j][l]) continue;
- if(!LowQPairSwitch_E0E1[k][l]) continue;
- }else if(en4==2){
- if(!LowQPairSwitch_E0E2[i][l]) continue;
- if(!LowQPairSwitch_E0E2[j][l]) continue;
- if(!LowQPairSwitch_E1E2[k][l]) continue;
- }else{
- if(!LowQPairSwitch_E0E3[i][l]) continue;
- if(!LowQPairSwitch_E1E3[j][l]) continue;
- if(!LowQPairSwitch_E2E3[k][l]) continue;
- }*/
if(en4==0){
if(fLowQPairSwitch_E0E0[i]->At(l)=='0') continue;
if(fLowQPairSwitch_E0E0[j]->At(l)=='0') continue;
GetWeight(pVect3, pVect4, weight34, weight34Err);
Float_t MomResCorr14=1.0, MomResCorr24=1.0, MomResCorr34=1.0;
+ Float_t MuonCorr14=1.0, MuonCorr24=1.0, MuonCorr34=1.0;
if(!fGenerateSignal && !fMCcase) {
Int_t momBin14 = fMomResC2->GetYaxis()->FindBin(qinv14);
Int_t momBin24 = fMomResC2->GetYaxis()->FindBin(qinv24);
if(momBin14 >= 20) momBin14 = 19;
if(momBin24 >= 20) momBin24 = 19;
if(momBin34 >= 20) momBin34 = 19;
- MomResCorr14 = fMomResC2->GetBinContent(rBinForTPNMomRes, momBin14);
- MomResCorr24 = fMomResC2->GetBinContent(rBinForTPNMomRes, momBin24);
- MomResCorr34 = fMomResC2->GetBinContent(rBinForTPNMomRes, momBin34);
+ MomResCorr14 = fMomResC2->GetBinContent(rBinForTPNMomRes, momBin14);
+ MomResCorr24 = fMomResC2->GetBinContent(rBinForTPNMomRes, momBin24);
+ MomResCorr34 = fMomResC2->GetBinContent(rBinForTPNMomRes, momBin34);
+ MuonCorr14 = fWeightmuonCorrection->GetBinContent(rBinForTPNMomRes, momBin14);
+ MuonCorr24 = fWeightmuonCorrection->GetBinContent(rBinForTPNMomRes, momBin24);
+ MuonCorr34 = fWeightmuonCorrection->GetBinContent(rBinForTPNMomRes, momBin34);
}
- weight14CC = ((weight14+1)*MomResCorr14 - ffcSq*FSICorr14 - (1-ffcSq));
- weight14CC /= FSICorr14*ffcSq;
- weight24CC = ((weight24+1)*MomResCorr24 - ffcSq*FSICorr24 - (1-ffcSq));
- weight24CC /= FSICorr24*ffcSq;
- weight34CC = ((weight34+1)*MomResCorr34 - ffcSq*FSICorr34 - (1-ffcSq));
- weight34CC /= FSICorr34*ffcSq;
-
- if(weight14CC < 0 || weight24CC < 0 || weight34CC < 0) {// C2^QS can never be less than unity
- if(fMbin==0 && bin1==0) {
- ((TH1D*)fOutputList->FindObject("fTPNRejects4pion1"))->Fill(q4, sqrt(fabs(weight12CC*weight23CC*weight34CC*weight14CC)));
+
+ // no MRC, no Muon Correction
+ weight14CC[0] = ((weight14+1) - ffcSq*FSICorr14 - (1-ffcSq));
+ weight14CC[0] /= FSICorr14*ffcSq;
+ weight24CC[0] = ((weight24+1) - ffcSq*FSICorr24 - (1-ffcSq));
+ weight24CC[0] /= FSICorr24*ffcSq;
+ weight34CC[0] = ((weight34+1) - ffcSq*FSICorr34 - (1-ffcSq));
+ weight34CC[0] /= FSICorr34*ffcSq;
+ if(weight14CC[0] > 0 && weight24CC[0] > 0 && weight34CC[0] > 0 && weight12CC[0] > 0 && weight13CC[0] > 0 && weight23CC[0] > 0){
+ weightTotal = sqrt(weight12CC[0]*weight13CC[0]*weight24CC[0]*weight34CC[0]);
+ weightTotal += sqrt(weight12CC[0]*weight14CC[0]*weight23CC[0]*weight34CC[0]);
+ weightTotal += sqrt(weight13CC[0]*weight14CC[0]*weight23CC[0]*weight24CC[0]);
+ weightTotal /= 3.;
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[fMbin].EDB[KT4index].FourPT[12].fTwoPartNorm->Fill(1, q4, weightTotal);
+ }
+ // no Muon Correction
+ weight14CC[1] = ((weight14+1)*MomResCorr14 - ffcSq*FSICorr14 - (1-ffcSq));
+ weight14CC[1] /= FSICorr14*ffcSq;
+ weight24CC[1] = ((weight24+1)*MomResCorr24 - ffcSq*FSICorr24 - (1-ffcSq));
+ weight24CC[1] /= FSICorr24*ffcSq;
+ weight34CC[1] = ((weight34+1)*MomResCorr34 - ffcSq*FSICorr34 - (1-ffcSq));
+ weight34CC[1] /= FSICorr34*ffcSq;
+ if(weight14CC[1] > 0 && weight24CC[1] > 0 && weight34CC[1] > 0 && weight12CC[1] > 0 && weight13CC[1] > 0 && weight23CC[1] > 0){
+ weightTotal = sqrt(weight12CC[1]*weight13CC[1]*weight24CC[1]*weight34CC[1]);
+ weightTotal += sqrt(weight12CC[1]*weight14CC[1]*weight23CC[1]*weight34CC[1]);
+ weightTotal += sqrt(weight13CC[1]*weight14CC[1]*weight23CC[1]*weight24CC[1]);
+ weightTotal /= 3.;
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[fMbin].EDB[KT4index].FourPT[12].fTwoPartNorm->Fill(2, q4, weightTotal);
+ }
+ // both corrections
+ weight14CC[2] = ((weight14+1)*MomResCorr14 - ffcSq*FSICorr14 - (1-ffcSq));
+ weight14CC[2] /= FSICorr14*ffcSq;
+ weight14CC[2] *= MuonCorr14;
+ weight24CC[2] = ((weight24+1)*MomResCorr24 - ffcSq*FSICorr24 - (1-ffcSq));
+ weight24CC[2] /= FSICorr24*ffcSq;
+ weight24CC[2] *= MuonCorr24;
+ weight34CC[2] = ((weight34+1)*MomResCorr34 - ffcSq*FSICorr34 - (1-ffcSq));
+ weight34CC[2] /= FSICorr34*ffcSq;
+ weight34CC[2] *= MuonCorr34;
+
+ if(weight14CC[2] < 0 || weight24CC[2] < 0 || weight34CC[2] < 0) {// C2^QS can never be less than unity
+ if(fMbin==0 && bin1==0 && KT4index==0) {
+ ((TH1D*)fOutputList->FindObject("fTPNRejects4pion1"))->Fill(q4, sqrt(fabs(weight12CC[2]*weight23CC[2]*weight34CC[2]*weight14CC[2])));
}
}else{
/////////////////////////////////////////////////////
- weightTotal = sqrt(weight12CC*weight13CC*weight24CC*weight34CC) + sqrt(weight12CC*weight14CC*weight23CC*weight34CC);
- weightTotal += sqrt(weight13CC*weight14CC*weight23CC*weight24CC);
+ weightTotal = sqrt(weight12CC[2]*weight13CC[2]*weight24CC[2]*weight34CC[2]);
+ weightTotal += sqrt(weight12CC[2]*weight14CC[2]*weight23CC[2]*weight34CC[2]);
+ weightTotal += sqrt(weight13CC[2]*weight14CC[2]*weight23CC[2]*weight24CC[2]);
weightTotal /= 3.;
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[fMbin].EDB[KT4index].FourPT[12].fTwoPartNorm->Fill(3, q4, weightTotal);
/////////////////////////////////////////////////////
- Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[fMbin].EDB[KT3index].FourPT[12].fTwoPartNorm->Fill(1, q4, weightTotal);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[fMbin].EDB[KT4index].FourPT[12].fTwoPartNorm->Fill(4, q4, 1);
+ // Full Weight reconstruction
+ for(Int_t RcohIndex=0; RcohIndex<2; RcohIndex++){// Rcoh=0, then Rcoh=Rch
+ for(Int_t GIndex=0; GIndex<20; GIndex++){
+ Int_t FillBin = 5 + RcohIndex*20 + GIndex;
+ Float_t G = 0.02*GIndex;
+ if(RcohIndex==0){// Rcoh=0
+ Float_t a = pow(1-G,2);
+ Float_t b = 2*G*(1-G);
+ T12 = (-b + sqrt(pow(b,2) + 4*a*weight12CC[2])) / (2*a);
+ T13 = (-b + sqrt(pow(b,2) + 4*a*weight13CC[2])) / (2*a);
+ T14 = (-b + sqrt(pow(b,2) + 4*a*weight14CC[2])) / (2*a);
+ T23 = (-b + sqrt(pow(b,2) + 4*a*weight23CC[2])) / (2*a);
+ T24 = (-b + sqrt(pow(b,2) + 4*a*weight24CC[2])) / (2*a);
+ T34 = (-b + sqrt(pow(b,2) + 4*a*weight34CC[2])) / (2*a);
+ weightTotal = 2*G*(1-G)*(T12 + T13 + T14 + T23 + T24 + T34) + pow(1-G,2)*(T12*T12 + T13*T13 + T14*T14 + T23*T23 + T24*T24 + T34*T34);// 2-pion
+ weightTotal += 2*G*pow(1-G,3)*(T12*T34*T34 + T12*T12*T34 + T13*T24*T24 + T13*T13*T24 + T14*T23*T23 + T14*T14*T23);// 2-pair
+ weightTotal += pow(1-G,4)*(pow(T12,2)*pow(T34,2) + pow(T13,2)*pow(T24,2) + pow(T14,2)*pow(T23,2));// 2-pair fully chaotic
+ weightTotal += 2*G*pow(1-G,2)*(T12*T13 + T12*T23 + T13*T23 + T12*T14 + T12*T24 + T14*T24);// 3-pion
+ weightTotal += 2*G*pow(1-G,2)*(T13*T14 + T13*T34 + T14*T34 + T23*T24 + T23*T34 + T24*T34);// 3-pion
+ weightTotal += 2*pow(1-G,3)*(T12*T13*T23 + T12*T14*T24 + T13*T14*T34 + T23*T24*T34);// 3-pion fully chaotic
+ weightTotal += 2*G*pow(1-G,3)*(T12*T14*T34 + T12*T14*T23 + T12*T23*T34 + T14*T23*T34);// 4-pion
+ weightTotal += 2*G*pow(1-G,3)*(T12*T13*T34 + T12*T34*T24 + T12*T24*T13 + T13*T24*T34);// 4-pion
+ weightTotal += 2*G*pow(1-G,3)*(T14*T13*T23 + T14*T13*T24 + T13*T23*T24 + T14*T24*T23);// 4-pion
+ weightTotal += 2*pow(1-G,4)*(T12*T13*T24*T34 + T12*T14*T23*T34 + T13*T14*T23*T24);// 4-pion fully chaotic
+ }else{// Rcoh=Rch
+ weightTotal = (1-G*G)*(weight12CC[2] + weight13CC[2] + weight14CC[2] + weight23CC[2] + weight24CC[2] + weight34CC[2]);// 2-pion
+ weightTotal += (4*G*pow(1-G,3)+pow(1-G,4))*(weight12CC[2]*weight34CC[2] + weight13CC[2]*weight24CC[2] + weight14CC[2]*weight23CC[2]);// 2-pair
+ weightTotal += (6*G*pow(1-G,2) + 2*pow(1-G,3))*(sqrt(weight12CC[2]*weight13CC[2]*weight23CC[2]));// 3-pion
+ weightTotal += (6*G*pow(1-G,2) + 2*pow(1-G,3))*(sqrt(weight12CC[2]*weight14CC[2]*weight24CC[2]));// 3-pion
+ weightTotal += (6*G*pow(1-G,2) + 2*pow(1-G,3))*(sqrt(weight13CC[2]*weight14CC[2]*weight34CC[2]));// 3-pion
+ weightTotal += (6*G*pow(1-G,2) + 2*pow(1-G,3))*(sqrt(weight23CC[2]*weight24CC[2]*weight34CC[2]));// 3-pion
+ weightTotal += (8*G*pow(1-G,3) + 2*pow(1-G,4))*(sqrt(weight12CC[2]*weight13CC[2]*weight24CC[2]*weight34CC[2]));// 4-pion
+ weightTotal += (8*G*pow(1-G,3) + 2*pow(1-G,4))*(sqrt(weight12CC[2]*weight14CC[2]*weight23CC[2]*weight34CC[2]));// 4-pion
+ weightTotal += (8*G*pow(1-G,3) + 2*pow(1-G,4))*(sqrt(weight13CC[2]*weight14CC[2]*weight23CC[2]*weight24CC[2]));// 4-pion
+ }
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[fMbin].EDB[KT4index].FourPT[12].fTwoPartNorm->Fill(FillBin, q4, weightTotal);
+ }
+ }
+ // stat errors
+ /*weight14CC_e = weight14Err*MomResCorr14 / FSICorr14 / ffcSq * MuonCorr14;
+ weight24CC_e = weight24Err*MomResCorr24 / FSICorr24 / ffcSq * MuonCorr24;
+ weight34CC_e = weight34Err*MomResCorr34 / FSICorr34 / ffcSq * MuonCorr34;
+ if(weight12CC[2]*weight13CC[2]*weight24CC[2]*weight34CC[2] > 0){
+ weightTotalErr = pow( 6 * 2 * weight12CC_e*weight13CC[2]*weight24CC[2]*weight34CC[2] / sqrt(weight12CC[2]*weight13CC[2]*weight24CC[2]*weight34CC[2]),2);
+ }
+ if(weight12CC[2]*weight13CC[2]*weight23CC[2] > 0){
+ weightTotalErr += pow( 8 * sqrt(3) * weight12CC_e*weight13CC[2]*weight23CC[2] / sqrt(weight12CC[2]*weight13CC[2]*weight23CC[2]),2);
+ }
+ weightTotalErr += 2*(pow(weight12CC_e*weight34CC[2],2) + pow(weight13CC_e*weight24CC[2],2) + pow(weight14CC_e*weight23CC[2],2));
+ weightTotalErr += pow(weight12CC_e,2) + pow(weight13CC_e,2) + pow(weight14CC_e,2) + pow(weight23CC_e,2) + pow(weight24CC_e,2) + pow(weight34CC_e,2);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[fMbin].EDB[KT4index].FourPT[12].fTwoPartNormErr->Fill(4, q4, weightTotalErr);
+ */
}
}
/////////////////////////////////////////////////////////////
q4MC = sqrt(pow(q3MC,2) + pow(qinv14MC,2) + pow(qinv24MC,2) + pow(qinv34MC,2));
if(q4<0.1 && ch1==ch2 && ch1==ch3 && ch1==ch4) ((TH2D*)fOutputList->FindObject("fQ4Res"))->Fill(KT4, q4-q4MC);
if(ch1==ch2 && ch1==ch3 && ch1==ch4) {
- ((TH2D*)fOutputList->FindObject("DistQinvMC4pion"))->Fill(1, qinv12MC); ((TH2D*)fOutputList->FindObject("DistQinvMC4pion"))->Fill(2, qinv13MC);
- ((TH2D*)fOutputList->FindObject("DistQinvMC4pion"))->Fill(3, qinv14MC); ((TH2D*)fOutputList->FindObject("DistQinvMC4pion"))->Fill(4, qinv23MC);
+ ((TH2D*)fOutputList->FindObject("DistQinvMC4pion"))->Fill(1, qinv12MC); ((TH2D*)fOutputList->FindObject("DistQinvMC4pion"))->Fill(2, qinv13MC);
+ ((TH2D*)fOutputList->FindObject("DistQinvMC4pion"))->Fill(3, qinv14MC); ((TH2D*)fOutputList->FindObject("DistQinvMC4pion"))->Fill(4, qinv23MC);
((TH2D*)fOutputList->FindObject("DistQinvMC4pion"))->Fill(5, qinv24MC); ((TH2D*)fOutputList->FindObject("DistQinvMC4pion"))->Fill(6, qinv34MC);
}
Int_t chGroup4[4]={ch1,ch2,ch3,ch4};
if(parentQinv14 > 0.001 && parentQinv24 > 0.001 && parentQinv34 > 0.001 && parentQ4 < 0.5){
if(pionParent1 || pionParent2 || pionParent3 || pionParent4) {// want at least one pion-->muon
+ if(pionParent1) ((TH1D*)fOutputList->FindObject("fDistPionParents4"))->Fill(1);
+ if(pionParent2) ((TH1D*)fOutputList->FindObject("fDistPionParents4"))->Fill(2);
+ if(pionParent3) ((TH1D*)fOutputList->FindObject("fDistPionParents4"))->Fill(3);
+ if(pionParent4) ((TH1D*)fOutputList->FindObject("fDistPionParents4"))->Fill(4);
Float_t parentQinvGroup4[6]={parentQinv12, parentQinv13, parentQinv14, parentQinv23, parentQinv24, parentQinv34};
Float_t parentkTGroup4[6]={0};
- for(Int_t term=1; term<=13; term++){
+ for(Int_t term=1; term<=12; term++){
+ if(term==1) {}
+ else if(term==2) {if(!pionParent1 && !pionParent2 && !pionParent3) continue;}
+ else if(term==3) {if(!pionParent1 && !pionParent2 && !pionParent4) continue;}
+ else if(term==4) {if(!pionParent1 && !pionParent3 && !pionParent4) continue;}
+ else if(term==5) {if(!pionParent2 && !pionParent3 && !pionParent4) continue;}
+ else if(term==6) {if(!pionParent1 && !pionParent2) continue;}
+ else if(term==7) {if(!pionParent1 && !pionParent3) continue;}
+ else if(term==8) {if(!pionParent1 && !pionParent4) continue;}
+ else if(term==9) {if(!pionParent2 && !pionParent3) continue;}
+ else if(term==10) {if(!pionParent2 && !pionParent4) continue;}
+ else if(term==11) {if(!pionParent3 && !pionParent4) continue;}
+ else {}
for(Int_t Riter=0; Riter<fRVALUES; Riter++){
Float_t Rvalue = 5+Riter;
Float_t WInput = MCWeight4(term, Rvalue, 1.0, chGroup4, parentQinvGroup4, parentkTGroup4);
Float_t WInputParentFSI = MCWeightFSI4(term, Rvalue, 1.0, chGroup4, parentQinvGroup4);
Float_t WInputFSI = MCWeightFSI4(term, Rvalue, 1.0, chGroup4, QinvMCGroup4);
- Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fMuonSmeared->Fill(Rvalue, q4MC, WInput);
- Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fMuonIdeal->Fill(Rvalue, parentQ4, WInput);
- Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fMuonPionK4->Fill(Rvalue, q4MC, WInputFSI);
- Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fPionPionK4->Fill(Rvalue, parentQ4, WInputParentFSI);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fMuonSmeared->Fill(1, Rvalue, q4MC, WInput);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fMuonIdeal->Fill(1, Rvalue, parentQ4, WInput);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fMuonPionK4->Fill(1, Rvalue, q4MC, WInputFSI);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fPionPionK4->Fill(1, Rvalue, parentQ4, WInputParentFSI);
+ //
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fMuonSmeared->Fill(2, Rvalue, q4MC);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fMuonIdeal->Fill(2, Rvalue, parentQ4);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fMuonPionK4->Fill(2, Rvalue, q4MC);
+ Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[0].FourPT[term-1].fPionPionK4->Fill(2, Rvalue, parentQ4);
}// Riter
}// term loop
for(Int_t term=1; term<=13; term++){
for(Int_t Riter=0; Riter<fRVALUES; Riter++){
Float_t Rvalue = 5+Riter;
- Float_t WInput = MCWeight4(term, Rvalue, 0.7, chGroup4, QinvMCGroup4, kTGroup4);
+ Float_t WInput = MCWeight4(term, Rvalue, 0.65, chGroup4, QinvMCGroup4, kTGroup4);
Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[KT4index].FourPT[term-1].fIdeal->Fill(Rvalue, q4MC, WInput);
Charge1[bin1].Charge2[bin2].Charge3[bin3].Charge4[bin4].MB[0].EDB[KT4index].FourPT[term-1].fSmeared->Fill(Rvalue, q4, WInput);
}
}
//________________________________________________________________________
-Float_t AliFourPion::GamovFactor(Int_t chargeBin1, Int_t chargeBin2, Float_t qinv)
+Float_t AliFourPion::Gamov(Int_t chargeBin1, Int_t chargeBin2, Float_t qinv)
{
Float_t arg = G_Coeff/qinv;
}
//
-
- //Float_t min = fNormWeight[fKtIndexL][fMbin]->GetBinContent(fQoIndexH+1,fQsIndexH+1,fQlIndexH+1);
- Float_t minErr = fNormWeight[fKtIndexL][fMbin]->GetBinError(fQoIndexH+1,fQsIndexH+1,fQlIndexH+1);
- /*
- Float_t deltaW=0;
- // kt
- deltaW += (fNormWeight[fKtIndexH][fMbin]->GetBinContent(fQoIndexH+1, fQsIndexH+1, fQlIndexH+1) - min)*(kt-fKmeanT[fKtIndexL])/((fKstepT[fKtIndexL]+fKstepT[fKtIndexH])/2.);
- // Qo
- deltaW += (fNormWeight[fKtIndexL][fMbin]->GetBinContent(fQoIndexL+1, fQsIndexH+1, fQlIndexH+1) - min)*(qOut-fQmean[fQoIndexL])/fQstepWeights;
- // Qs
- deltaW += (fNormWeight[fKtIndexL][fMbin]->GetBinContent(fQoIndexH+1, fQsIndexL+1, fQlIndexH+1) - min)*(qSide-fQmean[fQsIndexL])/fQstepWeights;
- // Ql
- deltaW += (fNormWeight[fKtIndexL][fMbin]->GetBinContent(fQoIndexH+1, fQsIndexH+1, fQlIndexL+1) - min)*(qLong-fQmean[fQlIndexL])/fQstepWeights;
- //
- wgt = min + deltaW;
- */
-
-
+
//
// w interpolation (kt)
Float_t c000 = fNormWeight[fKtIndexL][fMbin]->GetBinContent(fQoIndexL+1, fQsIndexL+1, fQlIndexL+1)*(1-wd) + fNormWeight[fKtIndexH][fMbin]->GetBinContent(fQoIndexL+1, fQsIndexL+1, fQlIndexL+1)*wd;
////
- // Denominator errors negligible compared to numerator so do not waste cpu time below.
- //Float_t deltaWErr=0;
- // Kt
- /*
- deltaWErr += (fNormWeight[fKtIndexH][fMbin]->GetBinContent(fQoIndexH+1, fQsIndexH+1, fQlIndexH+1) - minErr)*(kt-fKmeanT[fKtIndexL])/((fKstepT[fKtIndexL]+fKstepT[fKtIndexH])/2.);
- // Qo
- deltaWErr += (fNormWeight[fKtIndexL][fMbin]->GetBinContent(fQoIndexL+1, fQsIndexH+1, fQlIndexH+1) - minErr)*(qOut-fQmean[fQoIndexL])/fQstepWeights;
- // Qs
- deltaWErr += (fNormWeight[fKtIndexL][fMbin]->GetBinContent(fQoIndexH+1, fQsIndexL+1, fQlIndexH+1) - minErr)*(qSide-fQmean[fQsIndexL])/fQstepWeights;
- // Ql
- deltaWErr += (fNormWeight[fKtIndexL][fMbin]->GetBinContent(fQoIndexH+1, fQsIndexH+1, fQlIndexL+1) - minErr)*(qLong-fQmean[fQlIndexL])/fQstepWeights;
- */
- wgtErr = minErr;
+ // simplified stat error
+ Float_t avgErr = fNormWeight[fKtIndexL][fMbin]->GetBinError(fQoIndexH+1,fQsIndexH+1,fQlIndexH+1);
+ avgErr += fNormWeight[fKtIndexH][fMbin]->GetBinError(fQoIndexL+1,fQsIndexL+1,fQlIndexL+1);
+ avgErr /= 2.;
+ //
+ wgtErr = avgErr;
}
else if(term==10) return ((1-fcSq) + fcSq*(1 + pow(EA24,2))*Kfactor24);
else return ((1-fcSq) + fcSq*(1 + pow(EA34,2))*Kfactor34);
}else if(term==12){
- Float_t C22 = ((1-fcSq) + fcSq*(1 + pow(EA12,2))*Kfactor12) - 1.0;
- C22 *= ((1-fcSq) + fcSq*(1 + pow(EA34,2))*Kfactor34) - 1.0;
+ Float_t C22 = (1-fcSq) + fcSq*(1 + pow(EA12,2))*Kfactor12;
+ C22 *= (1-fcSq) + fcSq*(1 + pow(EA34,2))*Kfactor34;
return C22;
}else return 1.0;
return C3;
}else if(term==6 || term==11){
return ((1-fcSq) + fcSq*(1 + pow(EA1,2))*Kpair1);// any SC pair will do
- }else if(term !=12 && term !=13){
+ }else if(term!=12 && term !=13){
return ((1-fcSq) + fcSq*Kpair3);// any MC pair will do
+ }else if(term==12){
+ Float_t C22 = (1-fcSq) + fcSq*(1 + pow(EA1,2))*Kpair1;
+ C22 *= (1-fcSq) + fcSq*(1 + pow(EA2,2))*Kpair2;
+ return C22;
}else return 1.0;
}
}
else if(term==10) return ((1-fcSq) + fcSq*Kfactor24);
else return ((1-fcSq) + fcSq*Kfactor34);
}else if(term==12){
- Float_t C22 = ((1-fcSq) + fcSq*Kfactor12) - 1.0;
- C22 *= ((1-fcSq) + fcSq*Kfactor34) - 1.0;
+ Float_t C22 = (1-fcSq) + fcSq*Kfactor12;
+ C22 *= (1-fcSq) + fcSq*Kfactor34;
return C22;
}else return 1.0;
return ((1-fcSq) + fcSq*Kpair1);// any SC pair will do
}else if(term !=12 && term !=13){
return ((1-fcSq) + fcSq*Kpair3);// any MC pair will do
+ }else if(term==12){
+ Float_t C22 = (1-fcSq) + fcSq*Kpair1;
+ C22 *= (1-fcSq) + fcSq*Kpair2;
+ return C22;
}else return 1.0;
}
}
Int_t qbinL = fFSIss[fFSIindex]->GetXaxis()->FindBin(qinv-fFSIss[fFSIindex]->GetXaxis()->GetBinWidth(1)/2.);
Int_t qbinH = qbinL+1;
if(qbinL <= 0) return 1.0;
- if(qbinH > fFSIss[fFSIindex]->GetNbinsX()) return 1.0;
+ if(qbinH > fFSIss[fFSIindex]->GetNbinsX()) {
+ if(charge1!=charge2) {
+ Float_t ScaleFac = (fFSIos[fFSIindex]->GetBinContent(fFSIos[fFSIindex]->GetNbinsX()-1) - 1);
+ ScaleFac /= (Gamov(charge1, charge2, fFSIos[fFSIindex]->GetXaxis()->GetBinCenter(fFSIos[fFSIindex]->GetNbinsX()-1)) - 1);
+ return ( (Gamov(charge1, charge2, qinv)-1)*ScaleFac + 1);
+ }else{
+ Float_t ScaleFac = (fFSIss[fFSIindex]->GetBinContent(fFSIss[fFSIindex]->GetNbinsX()-1) - 1);
+ ScaleFac /= (Gamov(charge1, charge2, fFSIss[fFSIindex]->GetXaxis()->GetBinCenter(fFSIss[fFSIindex]->GetNbinsX()-1)) - 1);
+ return ( (Gamov(charge1, charge2, qinv)-1)*ScaleFac + 1);
+ }
+ }
Float_t slope=0;
if(charge1==charge2){
else fFSIindex = 9;
}
}
+//________________________________________________________________________
+void AliFourPion::SetMuonCorrections(Bool_t legoCase, TH2D *tempMuon){
+ if(legoCase){
+ cout<<"LEGO call to SetMuonCorrections"<<endl;
+ fWeightmuonCorrection = (TH2D*)tempMuon->Clone();
+ fWeightmuonCorrection->SetDirectory(0);
+ }else {
+ cout<<"non LEGO call to SetMuonCorrections"<<endl;
+ TFile *MuonFile=new TFile("MuonCorrection.root","READ");
+ if(!MuonFile->IsOpen()) {
+ cout<<"No Muon file found"<<endl;
+ AliFatal("No Muon file found. Kill process.");
+ }else {cout<<"Good Muon File Found!"<<endl;}
+
+ fWeightmuonCorrection = (TH2D*)MuonFile->Get("WeightmuonCorrection");
+ fWeightmuonCorrection->SetDirectory(0);
+ //
+ MuonFile->Close();
+ }
+ cout<<"Done reading Muon file"<<endl;
+}
kQbinsWeights = 40,
kNDampValues = 16,
kRmin = 5,// EW min radii 5 fm
- kDENtypes = 3,
+ kDENtypes = 44,
};
static const Int_t fKbinsT = 4;// Set fKstep as well !!!!
void SetWeightArrays(Bool_t legoCase=kTRUE, TH3F *histos[AliFourPion::fKbinsT][AliFourPion::fCentBins]=0x0);
void SetMomResCorrections(Bool_t legoCase=kTRUE, TH2D *temp2D=0x0);
void SetFSICorrelations(Bool_t legoCase=kTRUE, TH1D *tempss[12]=0x0, TH1D *tempos[12]=0x0);
+ void SetMuonCorrections(Bool_t legoCase=kTRUE, TH2D *tempMuon=0x0);
//
void SetMCdecision(Bool_t mc) {fMCcase = mc;}
void SetTabulatePairs(Bool_t tabulate) {fTabulatePairs = tabulate;}
void ParInit();
Bool_t AcceptPair(AliFourPionTrackStruct, AliFourPionTrackStruct);
- Float_t GamovFactor(Int_t, Int_t, Float_t);
+ Float_t Gamov(Int_t, Int_t, Float_t);
void Shuffle(Int_t*, Int_t, Int_t);
Float_t GetQinv(Float_t[], Float_t[]);
void GetQosl(Float_t[], Float_t[], Float_t&, Float_t&, Float_t&);
TH2D *fIdeal; //!
TH2D *fSmeared; //!
//
- TH2D *fMuonSmeared; //!
- TH2D *fMuonIdeal; //!
- TH2D *fMuonPionK3; //!
- TH2D *fPionPionK3; //!
+ TH3D *fMuonSmeared; //!
+ TH3D *fMuonIdeal; //!
+ TH3D *fMuonPionK3; //!
+ TH3D *fPionPionK3; //!
+ //
TH2D *fTwoPartNorm; //!
+ TH2D *fTwoPartNormErr; //!
};
struct St7 {
TH3D *fTerms2OSL; //!
TH2D *fIdeal; //!
TH2D *fSmeared; //!
//
- TH2D *fMuonSmeared; //!
- TH2D *fMuonIdeal; //!
- TH2D *fMuonPionK4; //!
- TH2D *fPionPionK4; //!
+ TH3D *fMuonSmeared; //!
+ TH3D *fMuonIdeal; //!
+ TH3D *fMuonPionK4; //!
+ TH3D *fPionPionK4; //!
+ //
TH2D *fTwoPartNorm; //!
+ TH2D *fTwoPartNormErr; //!
};
struct St_EDB {
struct St5 TwoPT[2];
public:
TH2D *fMomResC2;
+ TH2D *fWeightmuonCorrection;
TH1D *fFSIss[12];
TH1D *fFSIos[12];
TH3F *fNormWeight[fKbinsT][fCentBins];
-
+
ClassDef(AliFourPion, 1);
};
--- /dev/null
+#include <iostream>
+#include <math.h>
+#include "TChain.h"
+#include "TFile.h"
+#include "TKey.h"
+#include "TObject.h"
+#include "TObjString.h"
+#include "TList.h"
+#include "TTree.h"
+#include "TH1F.h"
+#include "TH1D.h"
+#include "TH2D.h"
+#include "TH3D.h"
+#include "TCanvas.h"
+#include "TRandom3.h"
+#include "AliAnalysisTask.h"
+#include "AliAnalysisManager.h"
+#include "AliESDEvent.h"
+#include "AliESDInputHandler.h"
+#include "AliESDtrackCuts.h"
+#include "AliAODEvent.h"
+#include "AliAODInputHandler.h"
+#include "AliAODMCParticle.h"
+#include "AliAODv0.h"
+#include "AliAODRecoDecay.h"
+#include "AliAnalysisV0Lam.h"
+#include "AliAODMCHeader.h"
+#include "AliGenHijingEventHeader.h"
+#define PI 3.1415927
+
+// Analysis task for studying lambda-lambda femtoscopic correlations
+// Author: Jai Salzwedel, jai.salzwedel@cern.ch
+
+
+ClassImp(AliAnalysisV0Lam)
+
+//________________________________________________________________________
+AliAnalysisV0Lam::AliAnalysisV0Lam():
+AliAnalysisTaskSE(),
+ fAOD(0),
+ fOutputList(0),
+ fpidAOD(0)
+{
+}
+//________________________________________________________________________
+AliAnalysisV0Lam::AliAnalysisV0Lam(const char *name)
+: AliAnalysisTaskSE(name),
+ fAOD(0),
+ fOutputList(0),
+ fpidAOD(0)
+{
+ // Define output slots here
+ // Output slot #1
+ DefineOutput(1, TList::Class());
+}
+//________________________________________________________________________
+AliAnalysisV0Lam::~AliAnalysisV0Lam()
+{
+ // Destructor
+
+ for(unsigned short i=0; i<zVertexBins; i++)
+ {
+ for(unsigned short j=0; j<nCentBins; j++)
+ {
+ delete fEC[i][j];
+ }
+ delete[] fEC[i];
+ }
+ delete[] fEC;
+ delete fCutProcessor;
+ if(fOutputList) delete fOutputList; //This cleans up all output hists
+}
+//________________________________________________________________________
+void AliAnalysisV0Lam::MyInit()
+{
+ // Set global variables
+ fEventCount= 0;
+ fPDGLambda = 1.115683;
+ fPDGK0 = .497614;
+ fPDGProton = .938272;
+ fPDGPion = .1395702;
+ fEtaDaughter = 0.8; //max eta of daughter particles - default 0.8
+ fMassWindowK0 = 0.018; //accept .480-.514
+ fMassWindowLam = 0.00568; //accept 1.11003-1.121363
+ fTOFLow = 0.8; // Lower |P| limit
+ fSigmaCutTPCProton = 3.0; // max Nsigma allowed
+ fSigmaCutTPCPion = 3.0;
+ fSigmaCutTOFProton = 4.0;
+ fSigmaCutTOFPion = 4.0;
+ fIsUsingVariableAvgSepCut = kFALSE; //Relevant for two-track cuts in DoPairStudies().
+ fMaxV0Mult = 700;
+ int numberVariableAvgSepCuts = 12;
+
+
+ // Setup V0 cut processor
+ fCutProcessor = new AliAnalysisV0LamCutProcessing(fOutputList);
+ fNumberOfVariableCutValues = fCutProcessor->GetNumberOfVariableCutValues();
+ fDefaultVariableCutIndex = fCutProcessor->GetVariableCutIndex();
+ if(fIsUsingVariableAvgSepCut){
+ fNumberOfCfVariableCutValues = numberVariableAvgSepCuts;
+ }
+ else fNumberOfCfVariableCutValues = fNumberOfVariableCutValues;
+ cout<<"Number of variable cf cut values: "<<fNumberOfCfVariableCutValues<<endl;
+ fTotalLambda = 0; //tabulates number of v0s found for locally run jobs
+ fTotalAntiLambda = 0;
+
+ //setup event collection for event mixing
+ fEC = new AliAnalysisV0LamEventCollection **[zVertexBins];
+ for(unsigned short i=0; i<zVertexBins; i++)
+ {
+ fEC[i] = new AliAnalysisV0LamEventCollection *[nCentBins];
+ for(unsigned short j=0; j<nCentBins; j++)
+ {
+ fEC[i][j] = new AliAnalysisV0LamEventCollection(nEventsToMix+1, fMaxV0Mult);
+ }
+ }
+ AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+ fpidAOD = aodH->GetAODpidUtil();
+}
+//________________________________________________________________________
+void AliAnalysisV0Lam::UserCreateOutputObjects()
+{
+ // Create output histograms.
+ // Histograms are added to fOutputList
+ // When fOutputList is deleted, it automatically cleans up all
+ // associated histograms
+
+ fOutputList = new TList();
+ fOutputList->SetOwner();
+ MyInit();// Initialize my settings
+
+ fMultDistRough = new TH1F("fMultDistRough","Multiplicity Distribution",301,-.5,3001-.5);
+ fMultDistRough->GetXaxis()->SetTitle("Event Multiplicity (pions)");
+ fMultDistRough->GetYaxis()->SetTitle("# of events");
+ fOutputList->Add(fMultDistRough);
+
+ fCentrality = new TH1F("fCentrality", "Centrality Percentage of Event", 100, 0., 100.);
+ fOutputList->Add(fCentrality);
+
+ //TPC signal vs track momentum
+ fTPCVsPPosLam = new TH2F("fTPCVsPPosLam","",50,0.,2.,250,0.,500.);
+ fOutputList->Add(fTPCVsPPosLam);
+ //TPC signal vs track momentum
+ fTPCVsPNegLam = new TH2F("fTPCVsPNegLam","",50,0.,2.,250,0.,500.);
+ fOutputList->Add(fTPCVsPNegLam);
+ //TPC signal vs track momentum
+ fTPCVsPPosALam = new TH2F("fTPCVsPPosALam","",50,0.,2.,250,0.,500.);
+ fOutputList->Add(fTPCVsPPosALam);
+ //TPC signal vs track momentum
+ fTPCVsPNegALam = new TH2F("fTPCVsPNegALam","",50,0.,2.,250,0.,500.);
+ fOutputList->Add(fTPCVsPNegALam);
+
+ //V0 Shared daughter culling statistics
+ fDataCompeted = new TH1F("fDataCompeted","",26, -0.5, 25.5);
+ fOutputList->Add(fDataCompeted);
+
+ fDataCulled = new TH1F("fDataCulled","",26, -0.5, 25.5);
+ fOutputList->Add(fDataCulled);
+
+ fRemainingV0s = new TH1F("fRemainingV0s","",26, -0.5, 25.5);
+ fOutputList->Add(fRemainingV0s);
+
+ fRemainingFrac = new TH1F("fRemainingFrac","",101, -.005, 1.005);
+ fOutputList->Add(fRemainingFrac);
+
+ fRemainingFromBeginningToV0Finder = new TH2F("fRemainingFromBeginningToV0Finder","Fraction Remaining At V0Finder Stage", AliReconstructedV0::kOriginTypeMax+1, 0, AliReconstructedV0::kOriginTypeMax+1, 21, -0.025, 1.025);
+ fOutputList->Add(fRemainingFromBeginningToV0Finder);
+
+ fMCTruthOfOriginalParticles = new TH1F("fMCTruthOfOriginalParticles","MC Truth of Original Particles in Event", AliReconstructedV0::kOriginTypeMax+1, 0, AliReconstructedV0::kOriginTypeMax+1);
+ fOutputList->Add(fMCTruthOfOriginalParticles);
+
+ fMCTruthOfV0FinderParticles = new TH1F("fMCTruthOfV0FinderParticles","MC Truth of V0Finder Particles in Event", AliReconstructedV0::kOriginTypeMax+1, 0, AliReconstructedV0::kOriginTypeMax+1);
+ fOutputList->Add(fMCTruthOfV0FinderParticles);
+
+ SetBinsOnOriginHists(fRemainingFromBeginningToV0Finder);
+ SetBinsOnOriginHists(fMCTruthOfOriginalParticles);
+ SetBinsOnOriginHists(fMCTruthOfV0FinderParticles);
+ //The first dimension is the index of the variable cut value
+ fRemainingFromBeginningToRecon = new TH3F("fRemainingFromBeginningToRecon", "Fraction Remaining After Reconstruction", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, AliReconstructedV0::kOriginTypeMax+1, 0, AliReconstructedV0::kOriginTypeMax+1, 21, -0.025, 1.025);
+ fRemainingFromV0FinderToRecon = new TH3F("fRemainingFromV0FinderToRecon", "Fraction From V0Finder That Remain After Reconstruction Stage", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, AliReconstructedV0::kOriginTypeMax+1, 0, AliReconstructedV0::kOriginTypeMax+1, 21, -0.025, 1.025);
+ fMCTruthOfReconstructedParticles = new TH2F("fMCTruthOfReconstructedParticles", "MC Truth of Reconstructed Particles in Event", AliReconstructedV0::kOriginTypeMax+1, 0, AliReconstructedV0::kOriginTypeMax+1, fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5);
+
+ // Particle multiplicities
+ fMultDistLambda = new TH2F("fMultDistLambda", "Lambda multiplicity", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 21, -0.5, 21-0.5);
+ fMultDistAntiLambda = new TH2F("fMultDistAntiLambda", "AntiLambda multiplicity", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 21, -0.5, 21-0.5);
+ fMultCentLambda = new TH3F("fMultCentLambda", "Lambda multiplicity vs centrality", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, nCentBins, .5, nCentBins+.5, 21, -0.5, 21-0.5);
+ fMultCentAntiLambda = new TH3F("fMultCentAntiLambda", "AntiLambda multiplicity vs centrality", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, nCentBins, .5, nCentBins+.5, 21, -0.5, 21-0.5);
+ SetBinsOnOriginHists(fRemainingFromBeginningToRecon);
+ SetBinsOnOriginHists(fRemainingFromV0FinderToRecon);
+ SetBinsOnOriginHists(fMCTruthOfReconstructedParticles);
+ fMultDistLambda->GetXaxis()->SetTitle("Var Bin");
+ fMultDistLambda->GetYaxis()->SetTitle("Event Multiplicity (Lambdas)");
+ fMultDistAntiLambda->GetXaxis()->SetTitle("Var Bin");
+ fMultDistAntiLambda->GetXaxis()->SetTitle("Event Multiplicity (AntiLambdas)");
+ fMultCentLambda->GetXaxis()->SetTitle("Var Bin");
+ fMultCentLambda->GetYaxis()->SetTitle("Centrality");
+ fMultCentLambda->GetZaxis()->SetTitle("Event Multiplicity (Lambdas)");
+ fMultCentAntiLambda->GetXaxis()->SetTitle("Var Bin");
+ fMultCentAntiLambda->GetYaxis()->SetTitle("Centrality");
+ fMultCentAntiLambda->GetZaxis()->SetTitle("Event Multiplicity (AntiLambdas)");
+ fOutputList->Add(fRemainingFromBeginningToRecon);
+ fOutputList->Add(fRemainingFromV0FinderToRecon);
+ fOutputList->Add(fMCTruthOfReconstructedParticles);
+ fOutputList->Add(fMultDistLambda);
+ fOutputList->Add(fMultDistAntiLambda);
+ fOutputList->Add(fMultCentLambda);
+ fOutputList->Add(fMultCentAntiLambda);
+
+
+ fMCFakeParticleIdentity = new TH1F("fMCFakeParticleIdentity", "Breakdown of fake particles", 3, 0, 3);
+ fOutputList->Add(fMCFakeParticleIdentity);
+ fMCFakeParticleIdentity->GetXaxis()->SetBinLabel(1,"Fake Lambda");
+ fMCFakeParticleIdentity->GetXaxis()->SetBinLabel(2,"Fake AntiLambda");
+ fMCFakeParticleIdentity->GetXaxis()->SetBinLabel(3,"Fake K0Short");
+
+ fMCOtherV0Identity = new TH1F("fMCOtherV0Identity", "Breakdown of otherV0s particles", 3, 0, 3);
+ fOutputList->Add(fMCOtherV0Identity);
+ fMCOtherV0Identity->GetXaxis()->SetBinLabel(1,"Fake Lambda");
+ fMCOtherV0Identity->GetXaxis()->SetBinLabel(2,"Fake AntiLambda");
+ fMCOtherV0Identity->GetXaxis()->SetBinLabel(3,"Fake K0Short");
+ int kTBins = 200;
+ int maxKtBin = 10.;
+ int kStarBins = 800;
+ int maxKStar = 2.;
+ //Pair kT Tracking: Centrality bins, kT bins, k* bins
+ fKtLamLamSig = new TH3F("fKtLamLamSig", "LamLam Pair Kt Same Event", nCentBins, .5, nCentBins +.5, kTBins, 0., maxKtBin, kStarBins, 0., maxKStar);
+ fOutputList->Add(fKtLamLamSig);
+ fKtALamALamSig = new TH3F("fKtALamALamSig", "ALamALam Pair Kt Same Event", nCentBins, .5, nCentBins +.5, kTBins, 0., maxKtBin, kStarBins, 0., maxKStar);
+ fOutputList->Add(fKtALamALamSig);
+ fKtLamALamSig = new TH3F("fKtLamALamSig", "LamALam Pair Kt Same Event", nCentBins, .5, nCentBins +.5, kTBins, 0., maxKtBin, kStarBins, 0., maxKStar);
+ fOutputList->Add(fKtLamALamSig);
+ fKtLamLamBkg = new TH3F("fKtLamLamBkg", "LamLam Pair Kt Mixed Event", nCentBins, .5, nCentBins +.5, kTBins, 0., maxKtBin, kStarBins, 0., maxKStar);
+ fOutputList->Add(fKtLamLamBkg);
+ fKtALamALamBkg = new TH3F("fKtALamALamBkg", "ALamALam Pair Kt Mixed Event", nCentBins, .5, nCentBins +.5, kTBins, 0., maxKtBin, kStarBins, 0., maxKStar);
+ fOutputList->Add(fKtALamALamBkg);
+ fKtLamALamBkg = new TH3F("fKtLamALamBkg", "LamALam Pair Kt Mixed Event", nCentBins, .5, nCentBins +.5, kTBins, 0., maxKtBin, kStarBins, 0., maxKStar);
+ fOutputList->Add(fKtLamALamBkg);
+
+ //Momentum resolution (pre-)correction analysis
+ fHistPsmearingKreconVsKtruthLL = new TH2F ("fHistPsmearingKreconVsKtruthLL","Relative momentum resolution, recon vs truth LL", kStarBins, 0., maxKStar, kStarBins, 0., maxKStar);
+ fOutputList->Add(fHistPsmearingKreconVsKtruthLL);
+ fHistPsmearingKreconMinusKtruthLL = new TH1F ("fHistPsmearingKreconMinusKtruthLL","Relative momentum resolution, recon - truth LL", kStarBins, -0.5, 0.5);
+ fOutputList->Add(fHistPsmearingKreconMinusKtruthLL);
+
+ fHistPsmearingKreconVsKtruthAA = new TH2F ("fHistPsmearingKreconVsKtruthAA","Relative momentum resolution, recon vs truth AA", kStarBins, 0., maxKStar, kStarBins, 0., maxKStar);
+ fOutputList->Add(fHistPsmearingKreconVsKtruthAA);
+ fHistPsmearingKreconMinusKtruthAA = new TH1F ("fHistPsmearingKreconMinusKtruthAA","Relative momentum resolution, recon - truth AA", kStarBins, -0.5, 0.5);
+ fOutputList->Add(fHistPsmearingKreconMinusKtruthAA);
+
+ fHistPsmearingKreconVsKtruthLA = new TH2F ("fHistPsmearingKreconVsKtruthLA","Relative momentum resolution, recon vs truth LA", kStarBins, 0., maxKStar, kStarBins, 0., maxKStar);
+ fOutputList->Add(fHistPsmearingKreconVsKtruthLA);
+ fHistPsmearingKreconMinusKtruthLA = new TH1F ("fHistPsmearingKreconMinusKtruthLA","Relative momentum resolution, recon - truth LA", kStarBins, -0.5, 0.5);
+ fOutputList->Add(fHistPsmearingKreconMinusKtruthLA);
+
+ /////////Signal Distributions///////////////////
+ //First bin is variable cut value, second bin is centrality, third bin is Kstar
+ fSignalLamLam = new TH3F("fSignalLamLam","Same Event Pair Distribution", fNumberOfCfVariableCutValues, -0.5, fNumberOfCfVariableCutValues -0.5, nCentBins, .5, nCentBins+.5, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamLam);
+
+ fBkgLamLam = new TH3F("fBkgLamLam","Mixed Event Pair Distribution", fNumberOfCfVariableCutValues, -0.5, fNumberOfCfVariableCutValues -0.5, nCentBins, .5, nCentBins+.5, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamLam);
+
+ fSignalALamALam = new TH3F("fSignalALamALam","Same Event Pair Distribution", fNumberOfCfVariableCutValues, -0.5, fNumberOfCfVariableCutValues -0.5, nCentBins, .5, nCentBins+.5, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalALamALam);
+
+ fBkgALamALam = new TH3F("fBkgALamALam","Mixed Event Pair Distribution", fNumberOfCfVariableCutValues, -0.5, fNumberOfCfVariableCutValues -0.5, nCentBins, .5, nCentBins+.5, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgALamALam);
+
+ fSignalLamALam = new TH3F("fSignalLamALam","Same Event Pair Distribution", fNumberOfCfVariableCutValues, -0.5, fNumberOfCfVariableCutValues -0.5, nCentBins, .5, nCentBins+.5, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamALam);
+
+ fBkgLamALam = new TH3F("fBkgLamALam","Mixed Event Pair Distribution", fNumberOfCfVariableCutValues, -0.5, fNumberOfCfVariableCutValues -0.5, nCentBins, .5, nCentBins+.5, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamALam);
+
+ // Daughter pair separation distributions
+ // Binned according to (average separation, qinv)
+ int avgSepBins = 200;
+ double avgSepMaxValue = 20.;
+ fSignalLamLamProtSep = new TH2F ("fSignalLamLamProtSep","Proton pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamLamProtSep);
+
+ fSignalLamLamPiMinusSep = new TH2F ("fSignalLamLamPiMinusSep","PiMinus pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamLamPiMinusSep);
+
+ fSignalALamALamAntiProtSep = new TH2F ("fSignalALamALamAntiProtSep","AntiProton pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalALamALamAntiProtSep);
+
+ fSignalALamALamPiPlusSep = new TH2F ("fSignalALamALamPiPlusSep","PiPlus pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalALamALamPiPlusSep);
+
+ fSignalLamALamAntiProtPiMinusSep = new TH2F ("fSignalLamALamAntiProtPiMinusSep","Neg particle pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamALamAntiProtPiMinusSep);
+
+ fSignalLamALamProtPiPlusSep = new TH2F ("fSignalLamALamProtPiPlusSep","Pos pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamALamProtPiPlusSep);
+
+ fBkgLamLamProtSep = new TH2F ("fBkgLamLamProtSep","Proton pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamLamProtSep);
+
+ fBkgLamLamPiMinusSep = new TH2F ("fBkgLamLamPiMinusSep","PiMinus pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamLamPiMinusSep);
+
+ fBkgALamALamAntiProtSep = new TH2F ("fBkgALamALamAntiProtSep","AntiProton pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgALamALamAntiProtSep);
+
+ fBkgALamALamPiPlusSep = new TH2F ("fBkgALamALamPiPlusSep","PiPlus pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgALamALamPiPlusSep);
+
+ fBkgLamALamAntiProtPiMinusSep = new TH2F ("fBkgLamALamAntiProtPiMinusSep","Neg particle pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamALamAntiProtPiMinusSep);
+
+ fBkgLamALamProtPiPlusSep = new TH2F ("fBkgLamALamProtPiPlusSep","Pos pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamALamProtPiPlusSep);
+
+
+
+ //opposite charged pair separation
+ fSignalLamLamPlusMinusSep = new TH2F ("fSignalLamLamPlusMinusSep","Proton Pion pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamLamPlusMinusSep);
+
+ fSignalALamALamPlusMinusSep = new TH2F ("fSignalALamALamPlusMinusSep","Proton Pion pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalALamALamPlusMinusSep);
+
+ fSignalLamALamProtSep = new TH2F ("fSignalLamALamProtSep","Proton pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamALamProtSep);
+
+ fSignalLamALamPionSep = new TH2F ("fSignalLamALamPionSep","Pion pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamALamPionSep);
+
+
+ fBkgLamLamPlusMinusSep = new TH2F ("fBkgLamLamPlusMinusSep","Proton Pion pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamLamPlusMinusSep);
+
+ fBkgALamALamPlusMinusSep = new TH2F ("fBkgALamALamPlusMinusSep","Proton Pion pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgALamALamPlusMinusSep);
+
+ fBkgLamALamProtSep = new TH2F ("fBkgLamALamProtSep","Proton pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamALamProtSep);
+
+ fBkgLamALamPionSep = new TH2F ("fBkgLamALamPionSep","Pion pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamALamPionSep);
+
+
+
+
+ //primary-vertex corrected pair separation
+
+ fSignalLamLamProtSepCorrected = new TH2F ("fSignalLamLamProtSepCorrected","Proton pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamLamProtSepCorrected);
+
+ fSignalLamLamPiMinusSepCorrected = new TH2F ("fSignalLamLamPiMinusSepCorrected","PiMinus pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamLamPiMinusSepCorrected);
+
+ fSignalALamALamAntiProtSepCorrected = new TH2F ("fSignalALamALamAntiProtSepCorrected","AntiProton pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalALamALamAntiProtSepCorrected);
+
+ fSignalALamALamPiPlusSepCorrected = new TH2F ("fSignalALamALamPiPlusSepCorrected","PiPlus pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalALamALamPiPlusSepCorrected);
+
+ fSignalLamALamAntiProtPiMinusSepCorrected = new TH2F ("fSignalLamALamAntiProtPiMinusSepCorrected","Neg particle pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamALamAntiProtPiMinusSepCorrected);
+
+ fSignalLamALamProtPiPlusSepCorrected = new TH2F ("fSignalLamALamProtPiPlusSepCorrected","Pos pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamALamProtPiPlusSepCorrected);
+
+ fBkgLamLamProtSepCorrected = new TH2F ("fBkgLamLamProtSepCorrected","Proton pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamLamProtSepCorrected);
+
+ fBkgLamLamPiMinusSepCorrected = new TH2F ("fBkgLamLamPiMinusSepCorrected","PiMinus pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamLamPiMinusSepCorrected);
+
+ fBkgALamALamAntiProtSepCorrected = new TH2F ("fBkgALamALamAntiProtSepCorrected","AntiProton pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgALamALamAntiProtSepCorrected);
+
+ fBkgALamALamPiPlusSepCorrected = new TH2F ("fBkgALamALamPiPlusSepCorrected","PiPlus pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgALamALamPiPlusSepCorrected);
+
+ fBkgLamALamAntiProtPiMinusSepCorrected = new TH2F ("fBkgLamALamAntiProtPiMinusSepCorrected","Neg particle pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamALamAntiProtPiMinusSepCorrected);
+
+ fBkgLamALamProtPiPlusSepCorrected = new TH2F ("fBkgLamALamProtPiPlusSepCorrected","Pos pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamALamProtPiPlusSepCorrected);
+
+ //opposite charged pair separation corrected for primary vertex
+ fSignalLamLamPlusMinusSepCorrected = new TH2F ("fSignalLamLamPlusMinusSepCorrected","Proton Pion pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamLamPlusMinusSepCorrected);
+
+ fSignalALamALamPlusMinusSepCorrected = new TH2F ("fSignalALamALamPlusMinusSepCorrected","Proton Pion pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalALamALamPlusMinusSepCorrected);
+
+ fSignalLamALamProtSepCorrected = new TH2F ("fSignalLamALamProtSepCorrected","Proton pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamALamProtSepCorrected);
+
+ fSignalLamALamPionSepCorrected = new TH2F ("fSignalLamALamPionSepCorrected","Pion pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fSignalLamALamPionSepCorrected);
+
+
+ fBkgLamLamPlusMinusSepCorrected = new TH2F ("fBkgLamLamPlusMinusSepCorrected","Proton Pion pair sep for Lam-Lam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamLamPlusMinusSepCorrected);
+
+ fBkgALamALamPlusMinusSepCorrected = new TH2F ("fBkgALamALamPlusMinusSepCorrected","Proton Pion pair sep for ALam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgALamALamPlusMinusSepCorrected);
+
+ fBkgLamALamProtSepCorrected = new TH2F ("fBkgLamALamProtSepCorrected","Proton pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamALamProtSepCorrected);
+
+ fBkgLamALamPionSepCorrected = new TH2F ("fBkgLamALamPionSepCorrected","Pion pair sep for Lam-ALam", avgSepBins, 0., avgSepMaxValue, kStarBins, 0., maxKStar);
+ fOutputList->Add(fBkgLamALamPionSepCorrected);
+
+
+ PostData(1, fOutputList);
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::Exec(Option_t *)
+{
+ // Main loop
+ // Called for each event
+
+ //Make sure we are using the correct event triggers
+ if(!IsCorrectEventTrigger()) return;
+ // cout<<"=========== Event # "<<fEventCount+1<<" ==========="<<endl;
+ fEventCount++;
+ fAOD = dynamic_cast<AliAODEvent*> (InputEvent());
+ if (!fAOD) {Printf("ERROR: fAOD not available"); return;}
+ AliAODVertex *primaryVertexAOD;
+ double vertex[3]={0};
+ int zBin=0;
+ double zStep=2*10/double(zVertexBins), zStart=-10.;
+ //Get Monte Carlo data if available
+ TClonesArray *mcArray = 0x0;
+ mcArray = (TClonesArray*)fAOD->FindListObject(AliAODMCParticle::StdBranchName());
+ //Check for MC event headers and get # of original Hijing particles
+ //This is used later for rejecting injected signals
+ Int_t numberOfLastHijingLabel = 0;
+ AliAODMCHeader *mcHeader = (AliAODMCHeader*)fAOD->FindListObject(AliAODMCHeader::StdBranchName());
+ if(mcHeader){
+ // Get the iterator on the list of cocktail headers
+ TIter next(mcHeader->GetCocktailHeaders());
+ // Loop over the cocktail headers
+ while (const TObject *obj=next()){
+ // Check whether it's a Hijing header
+ const AliGenHijingEventHeader* hijingHeader = dynamic_cast<const AliGenHijingEventHeader*>(obj);
+ if(hijingHeader) {
+ numberOfLastHijingLabel=hijingHeader->NProduced()-1;
+ // We're done!
+ //printf("Good! Last Hijing particle label %d\n",numberOfLastHijingLabel);
+ } // End of found the hijing header
+ } // End of loop over cocktail headers
+ } // End of MC header exists
+ else if(mcArray) cerr<<"Could not find mcHeader!"<<endl;
+ if(mcArray) fIsMCEvent = kTRUE;
+ else fIsMCEvent = kFALSE;
+
+ //Centrality selection
+ AliCentrality *centrality = fAOD->GetCentrality();
+ float centralityPercentile = centrality->GetCentralityPercentile("V0M");
+ int centralityBin=0;
+ //Printf("Centrality percent = %f", centralityPercentile);
+ fCentrality->Fill(centralityPercentile);
+ AliAODVZERO *aodV0 = fAOD->GetVZEROData();
+ Float_t multV0A=aodV0->GetMTotV0A();
+ Float_t multV0C=aodV0->GetMTotV0C();
+ if(centralityPercentile < 0) {
+ //Printf("No centrality info");
+ return;}
+ else if(centralityPercentile == 0 && (multV0A + multV0C < 19500)) {
+ //Printf("No centrality info");
+ return;}
+ // Centrality info is good. Now find the correct 5% centrality bin
+ else if(centralityPercentile <= 5.) centralityBin=19;
+ else if(centralityPercentile <= 10.) centralityBin=18;
+ else if(centralityPercentile <= 15.) centralityBin=17;
+ else if(centralityPercentile <= 20.) centralityBin=16;
+ else if(centralityPercentile <= 25.) centralityBin=15;
+ else if(centralityPercentile <= 30.) centralityBin=14;
+ else if(centralityPercentile <= 35.) centralityBin=13;
+ else if(centralityPercentile <= 40.) centralityBin=12;
+ else if(centralityPercentile <= 45.) centralityBin=11;
+ else if(centralityPercentile <= 50.) centralityBin=10;
+ else if(centralityPercentile <= 55.) centralityBin=9;
+ else if(centralityPercentile <= 60.) centralityBin=8;
+ else if(centralityPercentile <= 65.) centralityBin=7;
+ else if(centralityPercentile <= 70.) centralityBin=6;
+ else if(centralityPercentile <= 75.) centralityBin=5;
+ else if(centralityPercentile <= 80.) centralityBin=4;
+ else if(centralityPercentile <= 85.) centralityBin=3;
+ else if(centralityPercentile <= 90.) centralityBin=2;
+ else if(centralityPercentile <= 95.) centralityBin=1;
+ else if(centralityPercentile <= 100.) centralityBin=0;
+ else {Printf("Skipping Peripheral Event"); return;}
+
+ //Vertexing
+ primaryVertexAOD = fAOD->GetPrimaryVertex();
+ vertex[0]=primaryVertexAOD->GetX();
+ vertex[1]=primaryVertexAOD->GetY();
+ vertex[2]=primaryVertexAOD->GetZ();
+ if(vertex[0]<10e-5 && vertex[1]<10e-5 && vertex[2]<10e-5) return;
+ if(fabs(vertex[2]) > 10) return; // Z-Vertex Cut
+ for(int i=0; i<zVertexBins; i++)
+ {
+ if((vertex[2] > zStart+i*zStep) && (vertex[2] < zStart+(i+1)*zStep))
+ {
+ zBin=i;
+ break;
+ }
+ }
+ double bfield = fAOD->GetMagneticField();
+ //Printf("Rough multiplicity = %d", fAOD->GetNumberOfTracks());
+ fMultDistRough->Fill(fAOD->GetNumberOfTracks());
+ /////////////////////////////////////////////////////////
+ //Add Event to buffer - this is for event mixing
+ fEC[zBin][centralityBin]->FifoShift();
+ fEvt = fEC[zBin][centralityBin]->fEvt;
+ fCutProcessor->SetCentralityBin(centralityBin+1);
+//////////////////////////////////////////////////////////////////
+ //v0 tester
+////////////////////////////////////////////////////////////////
+
+ int v0Count = 0;
+ vector<int> lambdaCount(fNumberOfVariableCutValues,0);
+ vector<int> antiLambdaCount(fNumberOfVariableCutValues,0);
+ TH1F *mcTruthOriginHist = nullptr;
+ if(fIsMCEvent) mcTruthOriginHist = CreateLambdaOriginHist(mcArray,numberOfLastHijingLabel); //Find MC truths of all the MC particles (before detector effects)
+ TH1F *v0OriginHist = new TH1F("v0OriginHist", "Lambda Origins", AliReconstructedV0::kOriginTypeMax+1, 0, AliReconstructedV0::kOriginTypeMax+1);
+ TH2F *v0PassedCutsOriginHist = new TH2F("v0PassedCutsOriginHist", "Lambda Origins", AliReconstructedV0::kOriginTypeMax+1, 0, AliReconstructedV0::kOriginTypeMax+1, fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5);
+ for(int i = 0; i < fAOD->GetNumberOfV0s(); i++)
+ {
+ //Loop over all the V0 candidates to look for (anti)Lambdas
+ bool hasPiPlusDaughter = kFALSE;
+ bool hasPiMinusDaughter = kFALSE;
+ bool hasProtonDaughter = kFALSE;
+ bool hasAntiProtonDaughter = kFALSE;
+ AliAODv0* v0 = fAOD->GetV0(i);
+ if(!v0) continue;
+ //Make sure the V0 satisifies a few basic criteria
+ if(v0->GetNDaughters() > 2) continue;
+ if(v0->GetNProngs() > 2) continue;
+ if(v0->GetCharge() != 0) continue;
+ if(v0->ChargeProng(0) == v0->ChargeProng(1)) continue;
+ if(v0->GetOnFlyStatus()) continue;
+ //Now look at daughter tracks
+ AliAODTrack* daughterTrackPos = (AliAODTrack*)v0->GetDaughter(0);
+ AliAODTrack* daughterTrackNeg = (AliAODTrack*)v0->GetDaughter(1);
+ if(!daughterTrackPos) continue; //Daughter tracks must exist
+ if(!daughterTrackNeg) continue;
+ daughterTrackPos->SetAODEvent(fAOD); //Need to set this for PID purposes
+ daughterTrackNeg->SetAODEvent(fAOD);
+ //Need to manually apply ITS refit cut for hybrid tracks in AOD115
+ if((daughterTrackPos->GetStatus() & AliVTrack::kTPCrefit)==0) continue;
+ if((daughterTrackNeg->GetStatus() & AliVTrack::kTPCrefit)==0) continue;
+ AliPIDResponse::EDetPidStatus statusPosTPC = fpidAOD->CheckPIDStatus(AliPIDResponse::kTPC,daughterTrackPos);
+ AliPIDResponse::EDetPidStatus statusNegTPC = fpidAOD->CheckPIDStatus(AliPIDResponse::kTPC,daughterTrackNeg);
+ if(AliPIDResponse::kDetPidOk != statusPosTPC) continue;
+ if(AliPIDResponse::kDetPidOk != statusNegTPC) continue;
+ if(daughterTrackPos->GetTPCNcls() < 80) continue;
+ if(daughterTrackNeg->GetTPCNcls() < 80) continue;
+ //Need to manually apply shared cluster cut for hybrid tracks in AOD115 and 124
+ Double_t fracSharedClustersPos = Double_t(daughterTrackPos->GetTPCnclsS()) / Double_t(daughterTrackPos->GetTPCncls());
+ Double_t fracSharedClustersNeg = Double_t(daughterTrackNeg->GetTPCnclsS()) / Double_t(daughterTrackNeg->GetTPCncls());
+ if(fracSharedClustersPos > 0.4) continue;
+ if(fracSharedClustersNeg > 0.4) continue;
+ if(daughterTrackPos->Pt() < .16) continue;
+ if(daughterTrackNeg->Pt() < .16) continue;
+ if(fabs(daughterTrackPos->Eta()) > fEtaDaughter) continue;
+ if(fabs(daughterTrackNeg->Eta()) > fEtaDaughter) continue;
+
+ //Now we'll get particle origin and momentum truth for MC particles
+ AliReconstructedV0::MCV0Origin_t mcV0Origin = AliReconstructedV0::kUnassigned;
+ double v0MomentumTruth[3] = {0.,0.,0.};
+ if(fIsMCEvent){
+ //first reject injected particles
+ if(IsInjectedParticle(v0,mcArray,numberOfLastHijingLabel)) continue;
+ mcV0Origin = DetermineV0Origin(v0, mcArray);
+ v0OriginHist->Fill(mcV0Origin);
+ GetMCParticleMomentumTruth(v0MomentumTruth, v0, mcArray);
+ }
+ //Now perform daughter track PID using TPC
+ if (daughterTrackPos->Pt() > 0.5) {// min-pt cut to fix proton PID issues in LHC10h data
+ if(fabs(fpidAOD->NumberOfSigmasTPC(daughterTrackPos,AliPID::kProton))
+ < fSigmaCutTPCProton) hasProtonDaughter = kTRUE;
+ }
+ if(fabs(fpidAOD->NumberOfSigmasTPC(daughterTrackPos,AliPID::kPion)) < fSigmaCutTPCPion) hasPiPlusDaughter = kTRUE;
+ if (daughterTrackNeg->Pt() > 0.3){
+ if(fabs(fpidAOD->NumberOfSigmasTPC(daughterTrackNeg,AliPID::kProton))
+ < fSigmaCutTPCProton) hasAntiProtonDaughter = kTRUE;
+ }
+ if(fabs(fpidAOD->NumberOfSigmasTPC(daughterTrackNeg,AliPID::kPion)) < fSigmaCutTPCPion) hasPiMinusDaughter = kTRUE;
+ //Use TOF PID info if available. This overrides TPC PID results.
+ if(daughterTrackPos->P() > fTOFLow)
+ { // positive daughter PID
+ AliPIDResponse::EDetPidStatus statusPosTOF = fpidAOD->CheckPIDStatus(AliPIDResponse::kTOF,daughterTrackPos);
+ if (AliPIDResponse::kDetPidOk == statusPosTOF) { // TOF signal is available for PID
+ Float_t probMis = fpidAOD->GetTOFMismatchProbability(daughterTrackPos);
+ if (probMis < 0.01) { // avoid TOF-TPC mismatch
+ //PiPlus
+ if(fabs(fpidAOD->NumberOfSigmasTOF(daughterTrackPos,AliPID::kPion)) < fSigmaCutTOFPion) hasPiPlusDaughter = kTRUE;
+ else hasPiPlusDaughter = kFALSE;
+ //Proton
+ if(fabs(fpidAOD->NumberOfSigmasTOF(daughterTrackPos,AliPID::kProton)) < fSigmaCutTOFProton) hasProtonDaughter = kTRUE;
+ else hasProtonDaughter = kFALSE;
+ }
+ }
+ }
+ if(daughterTrackNeg->P() > fTOFLow)
+ { //negative daughter PID
+ AliPIDResponse::EDetPidStatus statusNegTOF = fpidAOD->CheckPIDStatus(AliPIDResponse::kTOF,daughterTrackNeg);
+ if (AliPIDResponse::kDetPidOk == statusNegTOF) { // TOF signal is available for PID
+ Float_t probMis = fpidAOD->GetTOFMismatchProbability(daughterTrackNeg);
+ if (probMis < 0.01) {
+ //PiMinus
+ if(fabs(fpidAOD->NumberOfSigmasTOF(daughterTrackNeg,AliPID::kPion)) < fSigmaCutTOFPion) hasPiMinusDaughter = kTRUE;
+ else hasPiMinusDaughter = kFALSE;
+ //AntiProton
+ if(fabs(fpidAOD->NumberOfSigmasTOF(daughterTrackNeg,AliPID::kProton)) < fSigmaCutTOFProton) hasAntiProtonDaughter = kTRUE;
+ else hasAntiProtonDaughter = kFALSE;
+ }
+ }
+ }
+ //If V0 doesn't have the right daughter combinations,
+ //move on to the next candidate
+ if(!((hasProtonDaughter && hasPiMinusDaughter) || (hasAntiProtonDaughter && hasPiPlusDaughter))) continue;
+
+ //Save V0 information
+ fEvt->fReconstructedV0[v0Count].v0Momentum[0] = v0->Px();
+ fEvt->fReconstructedV0[v0Count].v0Momentum[1] = v0->Py();
+ fEvt->fReconstructedV0[v0Count].v0Momentum[2] = v0->Pz();
+ for(int pIndex = 0; pIndex <3; pIndex++)
+ {
+ fEvt->fReconstructedV0[v0Count].v0MomentumTruth[pIndex] = v0MomentumTruth[pIndex];
+ }
+ fEvt->fReconstructedV0[v0Count].v0Pt = v0->Pt();
+ fEvt->fReconstructedV0[v0Count].v0Eta = v0->Eta();
+ fEvt->fReconstructedV0[v0Count].v0Phi = v0->Phi();
+ fEvt->fReconstructedV0[v0Count].massLam = v0->MassLambda();
+ fEvt->fReconstructedV0[v0Count].massALam = v0->MassAntiLambda();
+ fEvt->fReconstructedV0[v0Count].massLamDifference = fabs(v0->MassLambda() - fPDGLambda);
+ fEvt->fReconstructedV0[v0Count].massALamDifference = fabs(v0->MassAntiLambda() - fPDGLambda);
+ fEvt->fReconstructedV0[v0Count].massK0 = v0->MassK0Short();
+ fEvt->fReconstructedV0[v0Count].lorentzGammaLam = v0->ELambda()/fPDGLambda;
+ fEvt->fReconstructedV0[v0Count].v0DCA = v0->DcaV0ToPrimVertex();
+ fEvt->fReconstructedV0[v0Count].decayLength = v0->DecayLength(primaryVertexAOD);
+ fEvt->fReconstructedV0[v0Count].decayVertexPosition[0] = v0->DecayVertexV0X();
+ fEvt->fReconstructedV0[v0Count].decayVertexPosition[1] = v0->DecayVertexV0Y();
+ fEvt->fReconstructedV0[v0Count].decayVertexPosition[2] = v0->DecayVertexV0Z();
+ fEvt->fReconstructedV0[v0Count].cosPointing = v0->CosPointingAngle(primaryVertexAOD);
+ fEvt->fReconstructedV0[v0Count].hasProtonDaughter = hasProtonDaughter;
+ fEvt->fReconstructedV0[v0Count].hasAntiProtonDaughter = hasAntiProtonDaughter;
+ fEvt->fReconstructedV0[v0Count].hasPiPlusDaughter = hasPiPlusDaughter;
+ fEvt->fReconstructedV0[v0Count].hasPiMinusDaughter = hasPiMinusDaughter;
+ fEvt->fReconstructedV0[v0Count].mcOriginType = mcV0Origin;
+ //Save Daughter information
+ fEvt->fReconstructedV0[v0Count].daughter1ID = v0->GetNegID();
+ fEvt->fReconstructedV0[v0Count].daughter2ID = v0->GetPosID();
+ fEvt->fReconstructedV0[v0Count].daughterPosMomentum[0] = v0->MomPosX();
+ fEvt->fReconstructedV0[v0Count].daughterPosMomentum[1] = v0->MomPosY();
+ fEvt->fReconstructedV0[v0Count].daughterPosMomentum[2] = v0->MomPosZ();
+ fEvt->fReconstructedV0[v0Count].daughterPosProtonE = v0->EPosProton();
+ fEvt->fReconstructedV0[v0Count].daughterPosPionE = v0->EPosPion();
+ fEvt->fReconstructedV0[v0Count].daughterNegMomentum[0] = v0->MomNegX();
+ fEvt->fReconstructedV0[v0Count].daughterNegMomentum[1] = v0->MomNegY();
+ fEvt->fReconstructedV0[v0Count].daughterNegMomentum[2] = v0->MomNegZ();
+ fEvt->fReconstructedV0[v0Count].daughterNegProtonE = v0->ENegProton();
+ fEvt->fReconstructedV0[v0Count].daughterNegPionE = v0->ENegPion();
+ fEvt->fReconstructedV0[v0Count].daughtersDCA = v0->DcaV0Daughters();
+ fEvt->fReconstructedV0[v0Count].daughterPosDCAPrimaryVertex = v0->DcaPosToPrimVertex();
+ fEvt->fReconstructedV0[v0Count].daughterNegDCAPrimaryVertex = v0->DcaNegToPrimVertex();
+ GetGlobalPositionAtGlobalRadiiThroughTPC(daughterTrackPos, bfield, fEvt->fReconstructedV0[v0Count].daughterPosGlobalPositions);// used for merging cuts later
+ GetGlobalPositionAtGlobalRadiiThroughTPC(daughterTrackNeg, bfield, fEvt->fReconstructedV0[v0Count].daughterNegGlobalPositions);
+ daughterTrackPos->GetXYZ(fEvt->fReconstructedV0[v0Count].daughterPosPositionDCA);
+ daughterTrackNeg->GetXYZ(fEvt->fReconstructedV0[v0Count].daughterNegPositionDCA);
+ daughterTrackPos->GetPxPyPz(fEvt->fReconstructedV0[v0Count].daughterPosMomentumDCA);
+ daughterTrackNeg->GetPxPyPz(fEvt->fReconstructedV0[v0Count].daughterNegMomentumDCA);
+ daughterTrackPos->GetCovarianceXYZPxPyPz(fEvt->fReconstructedV0[v0Count].daughterPosCovariance);
+ daughterTrackNeg->GetCovarianceXYZPxPyPz(fEvt->fReconstructedV0[v0Count].daughterNegCovariance);
+ for(int coord = 0; coord <3; coord++){
+ fEvt->fPrimaryVertex[coord] = vertex[coord];
+ for(int location = 0; location <9; location++) {
+ //find the track locations relative to the primary vertex location.
+ fEvt->fReconstructedV0[v0Count].daughterPosCorrectedGlobalPositions[location][coord] = fEvt->fReconstructedV0[v0Count].daughterPosGlobalPositions[location][coord] - vertex[coord];
+ fEvt->fReconstructedV0[v0Count].daughterNegCorrectedGlobalPositions[location][coord] = fEvt->fReconstructedV0[v0Count].daughterNegGlobalPositions[location][coord] - vertex[coord];
+ }
+ }
+
+ //Now analyze and histogram the V0
+ fCutProcessor->CheckIfV0PassesCuts(& fEvt->fReconstructedV0[v0Count]);
+ fCutProcessor->DoV0Histogramming(& fEvt->fReconstructedV0[v0Count]);
+ FillReconstructedV0MCOrigin(& fEvt->fReconstructedV0[v0Count], v0PassedCutsOriginHist);
+ AddV0ToMultiplicityCounts(& fEvt->fReconstructedV0[v0Count], lambdaCount, antiLambdaCount);
+ FillTPCSignalHists(& fEvt->fReconstructedV0[v0Count], daughterTrackPos->P(), daughterTrackPos->GetTPCsignal(), daughterTrackNeg->P(), daughterTrackNeg->GetTPCsignal());
+ if(fIsMCEvent) CheckForFakeV0s(& fEvt->fReconstructedV0[v0Count], fMCFakeParticleIdentity, fMCOtherV0Identity, mcV0Origin);
+
+ //Increment V0 count and check that we don't exceed size of V0 array
+ v0Count++;
+ if(fMaxV0Mult <= v0Count){
+ cerr<<"V0 Count has exceeded"<<fMaxV0Mult<<"!"<<endl;
+ break;
+ }
+ } //End of V0 loop
+ //cout<<"Finished with V0 storage. V0 candidate count is "<<v0Count<<endl;
+
+ fEvt->fNumberCandidateV0 = v0Count;
+ if(fIsMCEvent) BinOriginInformationForMCParticles(mcTruthOriginHist, v0OriginHist, v0PassedCutsOriginHist);
+
+ //The following histograms don't get used again, so clean them up
+ if(mcTruthOriginHist){
+ delete mcTruthOriginHist;
+ mcTruthOriginHist = nullptr;
+ }
+ if(v0OriginHist){
+ delete v0OriginHist;
+ v0OriginHist = nullptr;
+ }
+ if(v0PassedCutsOriginHist){
+ delete v0PassedCutsOriginHist;
+ v0PassedCutsOriginHist = nullptr;
+ }
+
+
+ DoV0JudgmentCuts(fEvt, v0Count);
+ HistogramEventMultiplicities(lambdaCount, antiLambdaCount, centralityBin);
+ fTotalLambda += lambdaCount[fDefaultVariableCutIndex];
+ fTotalAntiLambda += antiLambdaCount[fDefaultVariableCutIndex];
+ //Printf("Reconstruction Finished. Starting pair studies.");
+
+ //Now look at pairs for correlation function binning
+ DoPairStudies(fEvt, centralityBin);
+ //cout<<"Pair studies completed. Event finished"<<endl;
+
+ // Post output data.
+ PostData(1, fOutputList);
+}
+//________________________________________________________________________
+void AliAnalysisV0Lam::Terminate(Option_t *)
+{
+ // Called once at the end of the query
+ cout<<"Total Lambdas found:\t"<<fTotalLambda<<"."<<endl
+ <<"Total AntiLambdas found:\t"<<fTotalAntiLambda<<"."<<endl
+ <<"Done"<<endl;
+}
+
+
+
+
+
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::GetGlobalPositionAtGlobalRadiiThroughTPC(const AliAODTrack *track, const Float_t bfield, Float_t globalPositionsAtRadii[9][3])
+{
+ // Gets the global position of the track at nine different radii in the TPC
+ // track is the track you want to propagate
+ // bfield is the magnetic field of your event
+ //globalPositionsAtRadii is the array of global positions in the radii and xyz
+ // Initialize the array to something indicating there was no propagation
+ for(Int_t i=0;i<9;i++){
+ for(Int_t j=0;j<3;j++){
+ globalPositionsAtRadii[i][j]=-9999.;
+ }
+ }
+ // Make a copy of the track to not change parameters of the track
+ AliExternalTrackParam etp;
+ etp.CopyFromVTrack(track);
+ //printf("\nAfter CopyFromVTrack\n");
+ //etp.Print();
+ // The global position of the the track
+ Double_t xyz[3]={-9999.,-9999.,-9999.};
+ // Counter for which radius we want
+ Int_t iR=0;
+ // The radii at which we get the global positions
+ // IROC (OROC) from 84.1 cm to 132.1 cm (134.6 cm to 246.6 cm)
+ Float_t Rwanted[9]={85.,105.,125.,145.,165.,185.,205.,225.,245.};
+ // The global radius we are at
+ Float_t globalRadius=0;
+ // Propagation is done in local x of the track
+ for (Float_t x = etp.GetX();x<247.;x+=1.){ // GetX returns local coordinates
+ // Starts at the tracks fX and goes outwards. x = 245 is the outer radial
+ // limit of the TPC when the track is straight, i.e. has inifinite pt
+ // and doesn't get bent. If the track's momentum is smaller than infinite,
+ // it will develop a y-component, which adds to the global radius
+ // Stop if the propagation was not succesful. This can happen for low pt
+ // tracks that don't reach outer radii
+ if(!etp.PropagateTo(x,bfield))break;
+ etp.GetXYZ(xyz); // GetXYZ returns global coordinates
+ globalRadius = TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]); //Idea to speed up: compare squared radii
+ // Roughly reached the radius we want
+ if(globalRadius > Rwanted[iR]){
+ // Bigger loop has bad precision, we're nearly one centimeter too far, go back in small steps.
+ while (globalRadius>Rwanted[iR]){
+ x-=.1;
+ // printf("propagating to x %5.2f\n",x);
+ if(!etp.PropagateTo(x,bfield))break;
+ etp.GetXYZ(xyz); // GetXYZ returns global coordinates
+ globalRadius = TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]); //Idea to speed up: compare squared radii
+ }
+ //printf("At Radius:%05.2f (local x %5.2f). Setting position to x %4.1f y %4.1f z %4.1f\n",globalRadius,x,xyz[0],xyz[1],xyz[2]);
+ globalPositionsAtRadii[iR][0]=xyz[0];
+ globalPositionsAtRadii[iR][1]=xyz[1];
+ globalPositionsAtRadii[iR][2]=xyz[2];
+ // Indicate we want the next radius
+ iR+=1;
+ }
+ if(iR>=8){
+ // TPC edge reached
+ return;
+ }
+ }
+}
+
+
+
+//________________________________________________________________________
+double AliAnalysisV0Lam::GetAverageSeparation(Float_t globalPositions1st[9][3], Float_t globalPositions2nd[9][3])
+{
+ //Compute the separation of two daughter tracks, averaged over 9 different positions
+ double avgSeparation = 0;
+ for(int RadiusNumber = 0; RadiusNumber <9; RadiusNumber++){
+ double sumsquare=0;
+ for(int Component = 0; Component <3; Component++){
+ sumsquare+= pow(globalPositions1st[RadiusNumber][Component]-globalPositions2nd[RadiusNumber][Component],2);
+ }
+ avgSeparation+=sqrt(sumsquare);
+ }
+ return avgSeparation/9.;
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::DoV0JudgmentCuts(const AliAnalysisV0LamEvent * const event, const int totalV0s)
+{
+ // Looks at all V0s in a given event, and selectively removes V0s such
+ // that each daughter track is claimed by no more than one V0. This is
+ // done by making judgment cuts. The judgment cut compares a
+ // characteristic (e.g. cosine of pointing angle) of two V0s that share a
+ // daughter. The V0 closer to the ideal value (e.g. cos(pointing) = 1) is
+ // kept, while the other V0 is removed.
+
+ // Occasionally several V0s will share a single daughter, or several V0s
+ // will share several daughters. Because of this, the possibility
+ // exists for a V0 to be removed, and subsequently the V0 that it
+ // competed with is also removed. In that case the original V0 should be
+ // "restored". This DoV0JudgmentCuts method includes an iterative process
+ // which first removes V0s that fail the judgment cuts, and then
+ // subsequently restores V0s which no longer compete with any other V0s.
+ // This process of removing and restoring V0s continues until the
+ // process stabilizes or 20 iterations occurs.
+
+ //"Removed" V0s have a boolean flag "isDeemedUnworthy" which is set to
+ // true. Those V0s do not get used in correlation function pairs.
+
+ // The selectionCriterion is used to set which of V0 DCA, daughter DCA to
+ // each other, V0 cosine of pointing angle, or V0 mass is used as the
+ // judgment cut.
+ const int selectionCriterion = 0;
+ // Start by looping over variable reconstruction cuts. There will be
+ // different lists of V0s for each reconstruction cut value, which may
+ // lead to different sets of V0s competing over daughters.
+ for (int cutIndex = 0; cutIndex < fNumberOfVariableCutValues; cutIndex++){
+ bool converged;
+ int iterations = 0;
+ do { //Loop until the judgment cuts converge or 20 iterations pass
+ converged = kTRUE;
+ iterations++;
+ for (int currentV0Number = 0; currentV0Number <totalV0s; currentV0Number++) { // Loop over each V0 in event
+ // Mark V0s as bad if they are worse than other V0s with shared
+ // daughters
+ if(!(event->fReconstructedV0[currentV0Number].isLamCenter[cutIndex] || event->fReconstructedV0[currentV0Number].isALamCenter[cutIndex])) continue;
+ // Don't bother if the current v0 isn't a center V0 (a center V0 has an m_inv inside the accepted mass window)
+ if(event->fReconstructedV0[currentV0Number].isDeemedUnworthy[cutIndex]) continue;
+ for (int comparisonV0Number = 0; comparisonV0Number <totalV0s; comparisonV0Number++)
+ { // Loop over all other V0s in event.
+ if(comparisonV0Number == currentV0Number) continue;
+ if(!(event->fReconstructedV0[comparisonV0Number].isLamCenter[cutIndex] || event->fReconstructedV0[comparisonV0Number].isALamCenter[cutIndex])) continue; //Don't bother if the comparison V0 isn't a center v0
+ if(!((event->fReconstructedV0[currentV0Number].daughter1ID == event->fReconstructedV0[comparisonV0Number].daughter1ID) || (event->fReconstructedV0[currentV0Number].daughter2ID == event->fReconstructedV0[comparisonV0Number].daughter2ID))) continue; //Don't bother if they don't share daughters
+ if(event->fReconstructedV0[comparisonV0Number].isDeemedUnworthy[cutIndex]) continue;
+ // If we reach this point in the loop, then these V0s compete
+ // over a daughter. Compare them and determine which V0 needs
+ // to be removed.
+ int worseV0 = DetermineWhichV0IsWorse(event, currentV0Number, comparisonV0Number, selectionCriterion, cutIndex);
+ if (worseV0 != -1) event->fReconstructedV0[worseV0].isDeemedUnworthy[cutIndex] = kTRUE;
+ // A V0 has been removed, so process has not converged.
+ converged = kFALSE;
+ if(event->fReconstructedV0[currentV0Number].isDeemedUnworthy[cutIndex]) break;
+ } //End loop over comparison V0s
+ }// End V0 removal
+ // Now Restore V0s if they no long compete over a daughter OR if they
+ // compete and are judged to be good.
+ for (int currentV0Number = 0; currentV0Number <totalV0s; currentV0Number++) { // Loop over each V0 in event
+ if(!event->fReconstructedV0[currentV0Number].isDeemedUnworthy[cutIndex]) continue; //Only look at V0s that have been removed
+ bool stillCompeting = kFALSE; // Assume that they no longer compete
+ for (int comparisonV0Number = 0; comparisonV0Number < totalV0s; comparisonV0Number++)
+ { // Loop over all other V0s
+ if(comparisonV0Number == currentV0Number) continue;
+ if(!(event->fReconstructedV0[comparisonV0Number].isLamCenter[cutIndex] || event->fReconstructedV0[comparisonV0Number].isALamCenter[cutIndex])) continue; //Don't bother if the V0 is a center V0
+ if(event->fReconstructedV0[comparisonV0Number].isDeemedUnworthy[cutIndex]) continue; //Only compare with V0s that HAVE NOT been removed
+ if(!((event->fReconstructedV0[currentV0Number].daughter1ID == event->fReconstructedV0[comparisonV0Number].daughter1ID) || (event->fReconstructedV0[currentV0Number].daughter2ID == event->fReconstructedV0[comparisonV0Number].daughter2ID))) continue; //Don't bother if they don't share daughters
+ // If we reach this point in the loop, then these V0s compete
+ // over a daughter. Compare them and determine which V0 needs
+ // to be removed.
+ int worseV0 = DetermineWhichV0IsWorse(event, currentV0Number, comparisonV0Number, selectionCriterion, cutIndex);
+ if(worseV0 == -1)
+ {
+ //Something has gone wrong.
+ cerr<<"Could not determine which V0 is worse"<<endl;
+ }
+ else if (worseV0 == currentV0Number)
+ {
+ // The V0 is still competing with another V0, and it has failed
+ // the judgment cut, so it stays removed.
+ stillCompeting = kTRUE;
+ break; //No need to keep comparing with other V0s
+ }
+ else {
+ //The comparison V0 is worse. However, do nothing here.
+ //The comparison V0 will be removed in the removal loop
+ //if it still competes at that time.
+ }
+ } //end comparison V0 loop
+ if(!stillCompeting)
+ {
+ //The V0 no longer fails any judgment cuts. Restore it.
+ event->fReconstructedV0[currentV0Number].isDeemedUnworthy[cutIndex] = kFALSE;
+ converged = kFALSE;
+ }
+ }//End V0 restoration.
+ } while ((converged == kFALSE) && (iterations < 20));
+ } //End loop over variable reconstruction cuts.
+ return;
+}
+
+//________________________________________________________________________
+int AliAnalysisV0Lam::DetermineWhichV0IsWorse(const AliAnalysisV0LamEvent * const event, const int V01, const int V02, const int Criterion, const int cutIndex)
+{
+ // Performs a judgment cut on two V0 by comparing characteristics of those V0
+ // and looking to see which of those V0 is further from the ideal value.
+ // Cut is only performed on two V0 that claim the same daughter track.
+ int worseV0 = -1;
+ if (Criterion == 0)//compare using DCA to primary vertex
+ {
+ if (event->fReconstructedV0[V01].v0DCA <
+ event->fReconstructedV0[V02].v0DCA) worseV0=V02;
+ else worseV0=V01;
+ }
+ else if (Criterion == 1)//compare using DCA of daughters
+ {
+ if(event->fReconstructedV0[V01].daughtersDCA <
+ event->fReconstructedV0[V02].daughtersDCA) worseV0 = V02;
+ else worseV0 = V01;
+ }
+ else if (Criterion == 2)//compare using cos(pointing) of V0s
+ {
+ if(event->fReconstructedV0[V01].cosPointing >
+ event->fReconstructedV0[V02].cosPointing) worseV0 = V02;
+ else worseV0 = V01;
+ }
+
+ else if (Criterion == 3)//compare using Minv
+ {
+ double deltaM1=500.;
+ double deltaM2=500.;
+ if(event->fReconstructedV0[V01].isLamCenter[cutIndex]){
+ deltaM1 = event->fReconstructedV0[V01].massLamDifference;
+ }
+ else if(event->fReconstructedV0[V01].isALamCenter[cutIndex]){
+ deltaM1 = event->fReconstructedV0[V01].massALamDifference;
+ }
+ if(event->fReconstructedV0[V02].isLamCenter[cutIndex]){
+ deltaM2 = event->fReconstructedV0[V02].massLamDifference;
+ }
+ else if(event->fReconstructedV0[V02].isALamCenter[cutIndex]){
+ deltaM2 = event->fReconstructedV0[V02].massALamDifference;
+ }
+ if(deltaM1 <= deltaM2) worseV0 = V02;
+ else worseV0 = V01;
+ }
+ else cerr<<"Invalid judgment cut criterion selected: "<<Criterion<<endl;
+ return worseV0;
+}
+
+//________________________________________________________________________
+TH1F *AliAnalysisV0Lam::CreateLambdaOriginHist(TClonesArray *mcArray, Int_t numberOfLastHijingLabel)
+{
+ //Create a histogram of the MC truth origin of each (anti)Lambda in the event
+ //This allows us to see how many primary and secondary lambda there are in the
+ //event. We'll count again after all reconstruction is done to get an idea
+ //of our reconstruction efficiency.
+ TH1F *mcTruthOriginHist = new TH1F("mcTruthOriginHist", "Lambda Origins", AliReconstructedV0::kOriginTypeMax+1, 0, AliReconstructedV0::kOriginTypeMax+1);
+ for (int i=0; i < mcArray->GetEntriesFast(); i++){
+ AliAODMCParticle *mcParticle = (AliAODMCParticle*)mcArray->At(i);
+ if(mcParticle->GetNDaughters() != 2) continue;
+ //Reject injected particles. Injected particles have a label greater
+ //than numberOfLastHijingLabel. Many secondary particles also have a label
+ //greater than numberOfLastHijingLabel. So first check if a particle has a
+ //parent. If it does, check if that parent is "original". If not
+ //original, reject that particle (e.g. this will reject lambdas with
+ //injected cascade parents). If a particle has no parent and it has
+ //a label greater than numberOfLastHijingLabel, reject it (because it is
+ //injected)
+ if(mcParticle->GetMother() > -1){ // This MCParticle has a mother
+ AliAODMCParticle *mcMother = (AliAODMCParticle*)mcArray->At(mcParticle->GetMother());
+ if(!mcMother) continue;
+ //Reject this MCParticle if its mother is injected
+ if(mcMother->GetLabel() > numberOfLastHijingLabel) continue;
+ }
+ //If this MCParticle has no mother but it has a label > LastHijingLabel,
+ //reject it
+ else if(mcParticle->GetLabel() > numberOfLastHijingLabel) continue;
+ AliAODMCParticle *mcDaughter1 = (AliAODMCParticle*)mcArray->At(mcParticle->GetDaughter(0));
+ AliAODMCParticle *mcDaughter2 = (AliAODMCParticle*)mcArray->At(mcParticle->GetDaughter(1));
+ //We won't count any MC Particles that have daughters outside the acceptance
+ //region
+ if(fabs(mcDaughter1->Eta()) > fEtaDaughter) continue;
+ if(fabs(mcDaughter2->Eta()) > fEtaDaughter) continue;
+ if(mcDaughter1->Pt() < 0.16) continue;
+ if(mcDaughter2->Pt() < 0.16) continue;
+ //Finally, get the PDG code of the MCParticle (or of its parent in the case
+ //of secondary particles)
+ AliReconstructedV0::MCV0Origin_t mcParticleOrigin = DeterminePdgCodeOfMcParticle(mcParticle,mcArray);
+ mcTruthOriginHist->Fill(mcParticleOrigin);
+ }
+ return mcTruthOriginHist;
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::FillReconstructedV0MCOrigin(const AliReconstructedV0 * v0, TH2F *histPassedCutsOrigin)
+{
+ //Make a histogram showing the MCTruth particle type of reconstructed V0s
+ //(or the type of the mother particle if the V0 is secondary).
+ for(int i = 0; i < fNumberOfVariableCutValues; i++){
+ if(v0->isLamCenter[i]
+ && (AliReconstructedV0::kFake == v0->mcOriginType))
+ {
+ histPassedCutsOrigin->Fill(AliReconstructedV0::kFakeLambda,i);
+ }
+ else if(v0->isLamCenter[i]){
+ histPassedCutsOrigin->Fill(v0->mcOriginType,i);
+ }
+ if(v0->isALamCenter[i]
+ && (AliReconstructedV0::kFake == v0->mcOriginType))
+ {
+ histPassedCutsOrigin->Fill(AliReconstructedV0::kFakeAntiLambda,i);
+ }
+ else if(v0->isALamCenter[i]){
+ histPassedCutsOrigin->Fill(v0->mcOriginType,i);
+ }
+ }
+}
+
+//________________________________________________________________________
+AliReconstructedV0::MCV0Origin_t AliAnalysisV0Lam::DetermineV0Origin(AliAODv0 *v0, TClonesArray *mcArray)
+{
+ // Determines the particle type (identity of it or of its parent particle)
+ // from MC truth information
+ AliReconstructedV0::MCV0Origin_t mcV0Origin = AliReconstructedV0::kUnassigned;
+ //Get the MCParticle index for the V0
+ int v0Id = GetV0MCParticleID(v0,mcArray);
+ if (v0Id > 0){ // A real MC particle exists for this V0
+ AliAODMCParticle* mcV0 = (AliAODMCParticle*)mcArray->At(v0Id);
+ // Get the PDG code for this particle (or get the PDG code of its
+ // mother in the case of secondary particles).
+ // The PDG code gets converted into an MCV0Origin_t object
+ mcV0Origin = DeterminePdgCodeOfMcParticle(mcV0,mcArray);
+ }
+ else{ // No MC truth exists for this V0. It is fake.
+ mcV0Origin = AliReconstructedV0::kFake;
+ }
+ return mcV0Origin;
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::GetMCParticleMomentumTruth(double *v0Momentum, AliAODv0 *v0, TClonesArray *mcArray)
+{
+ // Get the MC truth of the 3D momentum of a V0. That info is copied into
+ // v0Momentum
+ int v0Id = GetV0MCParticleID(v0,mcArray);
+ if (v0Id > 0){
+ AliAODMCParticle* mcV0 = (AliAODMCParticle*)mcArray->At(v0Id);
+ if(!mcV0->PxPyPz(v0Momentum)) cout<<"Err copying momentum truth"<<endl;
+ }
+}
+
+//________________________________________________________________________
+int AliAnalysisV0Lam::GetV0MCParticleID(AliAODv0 *v0, TClonesArray *mcArray)
+{
+ // Returns the MCParticle index of a V0. Do this by finding the
+ // corresponding MCParticles of the daughter tracks. If those daughter
+ // MCParticles have the same mother, return the MCParticle index of that
+ // mother. If they don't have the same mother (or if both tracks are
+ // primary) the V0 is a fake. In that case, return -1.
+ AliAODTrack* daughterTrackPos = (AliAODTrack*)v0->GetDaughter(0);
+ AliAODTrack* daughterTrackNeg = (AliAODTrack*)v0->GetDaughter(1);
+ daughterTrackPos->SetAODEvent(fAOD);
+ daughterTrackNeg->SetAODEvent(fAOD);
+ AliAODMCParticle* mcParticlePos = (AliAODMCParticle*)mcArray->At(abs(daughterTrackPos->GetLabel()));
+ AliAODMCParticle* mcParticleNeg = (AliAODMCParticle*)mcArray->At(abs(daughterTrackNeg->GetLabel()));
+ if(!(mcParticlePos) || !(mcParticleNeg)){
+ //if either of these does not exist, V0 is fake.
+ return -1;
+ }
+ //mcparticle->GetMother() will return a "-1" if the particle doesn't have a true mother (i.e. it's a fake track or primary)
+ int motherOfPosID = mcParticlePos->GetMother();
+ int motherOfNegID = mcParticleNeg->GetMother();
+ if ((motherOfPosID > 0) && (motherOfPosID == motherOfNegID)){
+ // Both daughter tracks refer to the same mother. Return the MCParticle
+ // index of that mother.
+ return motherOfPosID;
+ }
+ else return -1; //Mother does not exist, or they refer to different
+ // mothers. So this V0 is a fake
+}
+
+//________________________________________________________________________
+AliReconstructedV0::MCV0Origin_t AliAnalysisV0Lam::DeterminePdgCodeOfMcParticle(AliAODMCParticle *mcParticle, TClonesArray *mcArray)
+{
+ // Get the PDG code for this particle (or get the PDG code of its
+ // mother in the case of secondary particles)
+ // The PDG code gets converted into an MCV0Origin_t object
+ AliReconstructedV0::MCV0Origin_t mcParticleOrigin = AliReconstructedV0::kUnassigned;
+ int v0PDG = mcParticle->GetPdgCode();
+ //find if it has a parent and note the parent's pdg code
+ int motherOfV0ID = mcParticle->GetMother();
+
+ if(3122 == v0PDG){ //V0 is a Lambda
+ if (motherOfV0ID <= 0) mcParticleOrigin = AliReconstructedV0::kPrimaryLambda;
+ else { //V0 has a mother
+ AliAODMCParticle* mcMotherOfV0 = (AliAODMCParticle*)mcArray->At(motherOfV0ID);
+ int motherOfV0PDG = mcMotherOfV0->GetPdgCode();
+ if(3212 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kPrimarySigmaZero;
+ else if(3322 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kPrimaryCascadeZero;
+ else if(3312 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kPrimaryCascadeMinus;
+ else if(3334 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kPrimaryOmega;
+ else if(3224 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kExcitedSigma;
+ else if(3214 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kExcitedSigma;
+ else if(3114 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kExcitedSigma;
+ else {
+ mcParticleOrigin = AliReconstructedV0::kOtherOriginLambda;
+ }
+ }
+ }
+ else if(-3122 == v0PDG){ // V0 is an Antilambda
+ if (motherOfV0ID <= 0) mcParticleOrigin = AliReconstructedV0::kPrimaryAntiLambda;
+ else { // V0 has a mother
+ AliAODMCParticle* mcMotherOfV0 = (AliAODMCParticle*)mcArray->At(motherOfV0ID);
+ int motherOfV0PDG = mcMotherOfV0->GetPdgCode();
+ if(-3212 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kPrimaryAntiSigmaZero;
+ else if(-3322 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kPrimaryAntiCascadeZero;
+ else if(-3312 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kPrimaryAntiCascadePlus;
+ else if(-3334 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kPrimaryAntiOmega;
+ else if(-3224 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kExcitedAntiSigma;
+ else if(-3214 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kExcitedAntiSigma;
+ else if(-3114 == motherOfV0PDG) mcParticleOrigin = AliReconstructedV0::kExcitedAntiSigma;
+ else {
+ mcParticleOrigin = AliReconstructedV0::kOtherOriginAntiLambda;
+ }
+ }
+ }
+ else if(310 == mcParticle->GetPdgCode()) mcParticleOrigin = AliReconstructedV0::kKZeroShort;
+ return mcParticleOrigin;
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::BinOriginInformationForMCParticles(TH1F *mcOriginalV0Hist, TH1F *mcV0FinderHist, TH2F *mcV0PassedCutsHist)
+{
+ //Bin number of particles of each V0 type (e.g. primary lambda, lambda from Xi decay, etc.)
+ //Also bin fraction of particles of each type still remaining at different stages
+ SetBinsOnOriginHists(mcOriginalV0Hist); //Put labels on these histograms
+ SetBinsOnOriginHists(mcV0FinderHist);
+ SetBinsOnOriginHists(mcV0PassedCutsHist);
+ TH1F *originalToV0Ratio = (TH1F*)mcV0FinderHist->Clone("originalToV0Ratio");
+ originalToV0Ratio->Divide(mcOriginalV0Hist);
+ for(int i = 0; i < AliReconstructedV0::kOriginTypeMax+1; i++){
+ if(mcOriginalV0Hist->GetBinContent(i+1) >= 1){
+ //Bin fraction of particles remaining at the V0 Finder stage
+ //Only fill bin if original V0 distribution had content in that bin.
+ //This avoids divide by zero problems
+ fRemainingFromBeginningToV0Finder->Fill(i,originalToV0Ratio->GetBinContent(i+1));
+ }
+ }
+ //Add yield results into output histograms
+ fMCTruthOfOriginalParticles->Add(mcOriginalV0Hist);
+ fMCTruthOfV0FinderParticles->Add(mcV0FinderHist);
+ fMCTruthOfReconstructedParticles->Add(mcV0PassedCutsHist);
+ delete originalToV0Ratio;
+ for(int i = 0; i < fNumberOfVariableCutValues; i++){
+ //Need to use a loop here because different variable cuts lead
+ //to different distributions of reconstructed particles
+ TH1F *originalToReconstructedRatio = (TH1F*)mcV0PassedCutsHist->ProjectionX("originalToReconstructedRatio",i+1,i+1);
+ TH1F *v0FinderToReconstructedRatio = (TH1F*)mcV0PassedCutsHist->ProjectionX("v0FinderToReconstructedRatio",i+1,i+1);
+ originalToReconstructedRatio->Divide(mcOriginalV0Hist);
+ v0FinderToReconstructedRatio->Divide(mcV0FinderHist);
+ for(int j = 0; j < AliReconstructedV0::kOriginTypeMax+1; j++){
+ // Bin fraction of particles remaining after all reconstruction cuts
+ // have been applied. Only report a fraction remaining as zero if
+ // the original event had one or more particles of that type
+ if(mcOriginalV0Hist->GetBinContent(j+1) >= 1){
+ fRemainingFromBeginningToRecon->Fill(i,j,originalToReconstructedRatio->GetBinContent(j+1));
+ }
+ if(mcV0FinderHist->GetBinContent(j+1) >= 1){
+ fRemainingFromV0FinderToRecon->Fill(i,j,v0FinderToReconstructedRatio->GetBinContent(j+1));
+ }
+ }
+ delete originalToReconstructedRatio;
+ delete v0FinderToReconstructedRatio;
+ }
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::SetBinsOnOriginHists(TH1 *mcHist)
+{
+ mcHist->GetXaxis()->SetBinLabel(1,"OtherV0");
+ mcHist->GetXaxis()->SetBinLabel(2,"Fake");
+ mcHist->GetXaxis()->SetBinLabel(3,"Fake #Lambda");
+ mcHist->GetXaxis()->SetBinLabel(4,"#Lambda");
+ mcHist->GetXaxis()->SetBinLabel(5,"#Sigma0");
+ mcHist->GetXaxis()->SetBinLabel(6,"#Sigma*");
+ mcHist->GetXaxis()->SetBinLabel(7,"#Xi0");
+ mcHist->GetXaxis()->SetBinLabel(8,"#Xi-");
+ mcHist->GetXaxis()->SetBinLabel(9,"#Omega");
+ mcHist->GetXaxis()->SetBinLabel(10,"Other #Lambda");
+ mcHist->GetXaxis()->SetBinLabel(11,"Fake #bar{#Lambda}");
+ mcHist->GetXaxis()->SetBinLabel(12,"#bar{#Lambda}");
+ mcHist->GetXaxis()->SetBinLabel(13,"#bar{#Sigma}0");
+ mcHist->GetXaxis()->SetBinLabel(14,"#bar{#Sigma}*");
+ mcHist->GetXaxis()->SetBinLabel(15,"#bar{#Xi}0");
+ mcHist->GetXaxis()->SetBinLabel(16,"#bar{#Xi}+");
+ mcHist->GetXaxis()->SetBinLabel(17,"#bar{#Omega}");
+ mcHist->GetXaxis()->SetBinLabel(18,"Other #bar{#Lambda}");
+ mcHist->GetXaxis()->SetBinLabel(19,"K0s");
+ return;
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::SetBinsOnOriginHists(TH3 *mcHist)
+{
+ mcHist->GetYaxis()->SetBinLabel(1,"OtherV0");
+ mcHist->GetYaxis()->SetBinLabel(2,"Fake");
+ mcHist->GetYaxis()->SetBinLabel(3,"Fake #Lambda");
+ mcHist->GetYaxis()->SetBinLabel(4,"#Lambda");
+ mcHist->GetYaxis()->SetBinLabel(5,"#Sigma0");
+ mcHist->GetYaxis()->SetBinLabel(6,"#Sigma*");
+ mcHist->GetYaxis()->SetBinLabel(7,"#Xi0");
+ mcHist->GetYaxis()->SetBinLabel(8,"#Xi-");
+ mcHist->GetYaxis()->SetBinLabel(9,"#Omega");
+ mcHist->GetYaxis()->SetBinLabel(10,"Other #Lambda");
+ mcHist->GetYaxis()->SetBinLabel(11,"Fake #bar{#Lambda}");
+ mcHist->GetYaxis()->SetBinLabel(12,"#bar{#Lambda}");
+ mcHist->GetYaxis()->SetBinLabel(13,"#bar{#Sigma}0");
+ mcHist->GetYaxis()->SetBinLabel(14,"#bar{#Sigma}*");
+ mcHist->GetYaxis()->SetBinLabel(15,"#bar{#Xi}0");
+ mcHist->GetYaxis()->SetBinLabel(16,"#bar{#Xi}+");
+ mcHist->GetYaxis()->SetBinLabel(17,"#bar{#Omega}");
+ mcHist->GetYaxis()->SetBinLabel(18,"Other #bar{#Lambda}");
+ mcHist->GetYaxis()->SetBinLabel(19,"K0s");
+ return;
+}
+
+//________________________________________________________________________
+bool AliAnalysisV0Lam::IsInjectedParticle(AliAODv0 *v0, TClonesArray *mcArray, Int_t numberOfLastHijingLabel)
+{
+ //Check if a Monte Carlo particle comes from the base MC event, or if it
+ //was injected. Primary particles are injected if they have an
+ //AliAODMCParticle::GetLabel() greater than AliGenHijingEventHeader::NProduced()-1
+ bool isInjected = false;
+ Int_t v0ID = GetV0MCParticleID(v0,mcArray);
+ if(v0ID > -1){ //if the v0 comes from an actual MC particle V0
+ AliAODMCParticle *mcParticle = (AliAODMCParticle*)mcArray->At(v0ID);
+ if(mcParticle->GetMother() > -1){ //if it has a mother
+ AliAODMCParticle *mcMother = (AliAODMCParticle*)mcArray->At(mcParticle->GetMother());
+ if(!mcMother) return true; // if this doesn't exist, there was an error
+ if(mcMother->GetLabel() > numberOfLastHijingLabel) isInjected = true;
+ }
+ else if(mcParticle->GetLabel() > numberOfLastHijingLabel) isInjected = true;
+ }
+ return isInjected;
+}
+
+//________________________________________________________________________
+bool AliAnalysisV0Lam::IsCorrectEventTrigger()
+{
+ //Pick out Central, SemiCentral, and MinBias events. False if not using one of those event triggers.
+ Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & (AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral));
+ return isSelected;
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::AddV0ToMultiplicityCounts(AliReconstructedV0 *v0, vector<int> & lambdaCount, vector<int> & antiLambdaCount)
+{
+ //If a V0 is a Lambda or an Antilambda, add one to the respective V0
+ //yields for this event. Depending on the variable cut value, the V0
+ //may or may not get categorized as a (anti)Lambda.
+ //This information is used for histogramming event multiplicities.
+ for(int i = 0; i < fNumberOfVariableCutValues; i++){
+ if(v0->isLamCenter[i]) lambdaCount[i]++;
+ if(v0->isALamCenter[i]) antiLambdaCount[i]++;
+ }
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::HistogramEventMultiplicities(vector<int> & lambdaCount, vector<int> & antiLambdaCount, int centralityBin)
+{
+ //Add the event yields to the output yield histograms
+ for(int i = 0; i < fNumberOfVariableCutValues; i++){
+ //Centrality integrated histograms
+ fMultDistLambda->Fill(i, lambdaCount[i]);
+ fMultDistAntiLambda->Fill(i, antiLambdaCount[i]);
+ //Centrality differential histograms
+ fMultCentLambda->Fill(i, centralityBin+1, lambdaCount[i]);
+ fMultCentAntiLambda->Fill(i, centralityBin+1, antiLambdaCount[i]);
+ }
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::FillTPCSignalHists(const AliReconstructedV0 *v0, const double posDaughterP, const double posDaughterTPCSignal, const double negDaughterP, const double negDaughterTPCSignal)
+{
+ //Histogram P vs TPCsignal for V0 daughters
+ if(v0->isLamCenter[fDefaultVariableCutIndex])
+ {
+ fTPCVsPPosLam->Fill(posDaughterP,posDaughterTPCSignal);
+ fTPCVsPNegLam->Fill(negDaughterP,negDaughterTPCSignal);
+ }
+ if(v0->isALamCenter[fDefaultVariableCutIndex])
+ {
+ fTPCVsPPosALam->Fill(posDaughterP,posDaughterTPCSignal);
+ fTPCVsPNegALam->Fill(negDaughterP,negDaughterTPCSignal);
+ }
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::CheckForFakeV0s(const AliReconstructedV0 *v0, TH1F *mcFakeParticleIdentity, TH1F *mcOtherV0Identity, const AliReconstructedV0::MCV0Origin_t mcV0Origin)
+{
+ // Used in MC studies to determine how many reconstructed Lambdas and
+ // Antilambdas are actually fake. For simplicity, this is only done for
+ // the default value of the variable reconstruction cut.
+ if(v0->isLamCenter[fDefaultVariableCutIndex]
+ || v0->isALamCenter[fDefaultVariableCutIndex])
+ {
+ if(AliReconstructedV0::kFake == mcV0Origin){
+ //These V0s are fake
+ if(v0->isLamCenter[fDefaultVariableCutIndex]) mcFakeParticleIdentity->Fill(0);
+ if(v0->isALamCenter[fDefaultVariableCutIndex]) mcFakeParticleIdentity->Fill(1);
+ }
+ if(AliReconstructedV0::kUnassigned == mcV0Origin){
+ // These V0s correspond to actual MC particles, but they aren't
+ // Lambdas, Antilambdas, or K0s.
+ if(v0->isLamCenter[fDefaultVariableCutIndex]) mcOtherV0Identity->Fill(0);
+ if(v0->isALamCenter[fDefaultVariableCutIndex]) mcOtherV0Identity->Fill(1);
+ }
+ }
+}
+
+//________________________________________________________________________
+double AliAnalysisV0Lam::CalculateKstar(double momentum1[3], double momentum2[3], double mass1, double mass2)
+{
+ // Calculate k* for any pair of particles, regardless of whether the
+ // particles have the same mass.
+ double kstar = 0.;
+ double e1 = 0.;
+ double e2 = 0.;
+ for(int i = 0; i < 3; i++){
+ kstar -= pow(momentum1[i]-momentum2[i],2);
+ e1 += pow(momentum1[i],2);
+ e2 += pow(momentum2[i],2);
+ }
+ e1 += pow(mass1,2);
+ e1 = sqrt(e1);
+ e2 += pow(mass2,2);
+ e2 = sqrt(e2);
+
+ kstar += pow(e1-e2,2);
+
+ double totalMomentumSquared = 0;
+ for(int i = 0; i < 3; i++){
+ totalMomentumSquared -= pow(momentum1[i]+momentum2[i],2);
+ }
+ totalMomentumSquared += pow(e1+e2,2);
+ kstar -= pow((pow(mass1,2)-pow(mass2,2)),2)/totalMomentumSquared;
+
+ kstar *= -1.;
+ kstar = sqrt(kstar); //At this point, we've actually calculated Qinv
+ kstar *= 0.5; // kstar is 0.5*Qinv
+ return kstar;
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::BinMomentumSmearing(double *v01MomentumRecon, double *v01MomentumTruth, double *v02MomentumRecon, double *v02MomentumTruth, int pairType)
+{
+ // Used in MC studies to determine the amount of pair-wise relative-
+ // momentum smearing. For a given pair of V0s, fills output histograms
+ // with reconstructed k* vs true k*. Separate histograms are filled
+ // for each pair type
+ double v01PMag = sqrt( pow(v01MomentumTruth[0],2) + pow(v01MomentumTruth[1],2) + pow(v01MomentumTruth[2],2) );
+ if(v01PMag < 0.0001) return; //Not a real V0
+ double v02PMag = sqrt( pow(v02MomentumTruth[0],2) + pow(v02MomentumTruth[1],2) + pow(v02MomentumTruth[2],2) );
+ if(v02PMag < 0.0001) return; //Not a real V0
+ double reconKstar = CalculateKstar(v01MomentumRecon,v02MomentumRecon, fPDGLambda, fPDGLambda);
+ double truthKstar = CalculateKstar(v01MomentumTruth,v02MomentumTruth, fPDGLambda, fPDGLambda);
+ if(0 == pairType){ //Lambda-Lambda
+ fHistPsmearingKreconVsKtruthLL->Fill(reconKstar,truthKstar);
+ fHistPsmearingKreconMinusKtruthLL->Fill(reconKstar-truthKstar);
+ }
+ if(1 == pairType){ //Antilambda-Antilambda
+ fHistPsmearingKreconVsKtruthAA->Fill(reconKstar,truthKstar);
+ fHistPsmearingKreconMinusKtruthAA->Fill(reconKstar-truthKstar);
+ }
+ if(2 == pairType){ //Lambda-Antilambda
+ fHistPsmearingKreconVsKtruthLA->Fill(reconKstar,truthKstar);
+ fHistPsmearingKreconMinusKtruthLA->Fill(reconKstar-truthKstar);
+ }
+}
+
+//________________________________________________________________________
+void AliAnalysisV0Lam::DoPairStudies(const AliAnalysisV0LamEvent *event, const int centralityBin)
+{
+ //Loop over same- and mixed-event pairs and bin correlation function
+ //numerators and denominators.
+
+ //Default cut values used for the average separation cuts
+ double avgSepIdenticalProtonCut = 3.; // used for same-charge prot avg sep
+ double avgSepIdenticalPionCut = 4.; // used for same-charge pi-pi
+ double avgSepNonIdenticalCut = 3.5; //used for same-charge pion-proton avg sep
+ double &variableAvgSepValue = avgSepIdenticalPionCut; //the identical
+ //pion cut will be the variable cut in this run. This needs to be changed
+ //by hand if one wants to study a different cut
+
+ // These values are used for the average separation cuts of the
+ // daughter tracks. When the average separation cut is being studied,
+ // we can loop over many different cut values to see how those different
+ // cuts affect the correlation function results
+ double avgSepCutArray[12] = {0.,1.,2.,2.5,3.,3.5,4.,4.5,5.,6.,7.,10.};
+
+ int numberOfAvgSepCutIndices; //this is the size of the avgSepCutArray
+ if(fIsUsingVariableAvgSepCut) numberOfAvgSepCutIndices = sizeof(avgSepCutArray) / sizeof (avgSepCutArray[0]);
+ else numberOfAvgSepCutIndices = 1;
+
+ int defaultVariableAvgSepCutIndex = 0;
+ if(fIsUsingVariableAvgSepCut) {
+ for(int i = 0; i < numberOfAvgSepCutIndices; i++){
+ // If variable avg sep cuts are being used, this find the default
+ // value for the avg sep cut currently being studied.
+ if (fabs(variableAvgSepValue - avgSepCutArray[i]) < 0.1) defaultVariableAvgSepCutIndex = i;
+ }
+ }
+ for(int cutIndex = 0; cutIndex < fNumberOfVariableCutValues; cutIndex++)
+ { // Start looping over all variable cut values
+ for(int i=0; i < event->fNumberCandidateV0; i++)
+ { //Start looping over reconstructed V0s in this event
+ bool center1Lam = event->fReconstructedV0[i].isLamCenter[cutIndex];
+ bool center1ALam = event->fReconstructedV0[i].isALamCenter[cutIndex];
+ // Disregard V0 if it wasn't reconstructed as a center (anti)Lambda
+ if(!(center1Lam || center1ALam)) continue;
+ // Disregard V0 if it was removed via the judgment cuts
+ if(event->fReconstructedV0[i].isDeemedUnworthy[cutIndex]) continue;
+ for(int eventNumber=0; eventNumber<nEventsToMix+1; eventNumber++)
+ { // Event buffer loop: eventNumber=0 is the current event, all other eventNumbers are past events
+ int startBin=0;
+ // For same event pairs, start 2nd V0 loop at i+1 V0 to avoid
+ // double counting
+ if(eventNumber==0) startBin=i+1;
+ for(int j=startBin; j<(event+eventNumber)->fNumberCandidateV0; j++)
+ { // Second V0 loop (from past or current event)
+ if(eventNumber==0)
+ { // Don't make pairs of V0s if they shared daughter tracks.
+ // This is redundant if the judgment cut is already employed
+ if(event->fReconstructedV0[i].daughter1ID
+ == (event+eventNumber)->fReconstructedV0[j].daughter1ID) continue;
+ if(event->fReconstructedV0[i].daughter1ID
+ == (event+eventNumber)->fReconstructedV0[j].daughter2ID) continue;
+ if(event->fReconstructedV0[i].daughter2ID
+ == (event+eventNumber)->fReconstructedV0[j].daughter1ID) continue;
+ if(event->fReconstructedV0[i].daughter2ID
+ == (event+eventNumber)->fReconstructedV0[j].daughter2ID) continue;
+ }
+ //Disregard second V0 if it was removed via judgment cuts
+ if((event+eventNumber)->fReconstructedV0[j].isDeemedUnworthy[cutIndex]) continue;
+ // A central V0 has a mass that falls within the accepted inv
+ // mass range. Only make pairs with central V0s
+ bool center2Lam = (event+eventNumber)->fReconstructedV0[j].isLamCenter[cutIndex];
+ bool center2ALam = (event+eventNumber)->fReconstructedV0[j].isALamCenter[cutIndex];
+ if(!(center2Lam || center2ALam)) continue;
+ // Now we calculate a bunch of values that are used later during
+ // histogramming.
+ double pairKt = pow(event->fReconstructedV0[i].v0Momentum[0] + (event+eventNumber)->fReconstructedV0[j].v0Momentum[0],2.);
+ pairKt+= pow(event->fReconstructedV0[i].v0Momentum[1] + (event+eventNumber)->fReconstructedV0[j].v0Momentum[1],2.);
+ pairKt = sqrt(pairKt)/2.;
+ //Calculate k* for V0s and daughters using different mass assumptions
+ double pairKstarLam = CalculateKstar(event->fReconstructedV0[i].v0Momentum, (event+eventNumber)->fReconstructedV0[j].v0Momentum, fPDGLambda,fPDGLambda);
+ double pairKstarProtPlus = CalculateKstar(event->fReconstructedV0[i].daughterPosMomentum,(event+eventNumber)->fReconstructedV0[j].daughterPosMomentum, fPDGProton,fPDGProton);
+ double pairKstarProtMinus = CalculateKstar(event->fReconstructedV0[i].daughterNegMomentum,(event+eventNumber)->fReconstructedV0[j].daughterNegMomentum, fPDGProton,fPDGProton);
+ double pairKstarPiPlus = CalculateKstar(event->fReconstructedV0[i].daughterPosMomentum,(event+eventNumber)->fReconstructedV0[j].daughterPosMomentum, fPDGPion,fPDGPion);
+ double pairKstarPiMinus = CalculateKstar(event->fReconstructedV0[i].daughterNegMomentum,(event+eventNumber)->fReconstructedV0[j].daughterNegMomentum, fPDGPion,fPDGPion);
+ //used for lambda-antilambda daughter kstar
+ double pairKstarProtPlusPiPlus = 0;
+ double pairKstarProtMinusPiMinus = 0;
+ double pairKstarProtPlusProtMinus = 0;
+ double pairKstarPiPlusPiMinus = 0;
+
+ // Need to be careful when calculating the k* of daughter tracks
+ // of non-identical V0s
+ if(center1Lam && center2ALam){
+ pairKstarProtPlusPiPlus = CalculateKstar(event->fReconstructedV0[i].daughterPosMomentum,(event+eventNumber)->fReconstructedV0[j].daughterPosMomentum, fPDGProton,fPDGPion);
+ pairKstarProtMinusPiMinus = CalculateKstar(event->fReconstructedV0[i].daughterNegMomentum,(event+eventNumber)->fReconstructedV0[j].daughterNegMomentum, fPDGPion,fPDGProton);
+ pairKstarProtPlusProtMinus = CalculateKstar(event->fReconstructedV0[i].daughterPosMomentum,(event+eventNumber)->fReconstructedV0[j].daughterNegMomentum, fPDGProton,fPDGProton);
+ pairKstarPiPlusPiMinus = CalculateKstar(event->fReconstructedV0[i].daughterNegMomentum,(event+eventNumber)->fReconstructedV0[j].daughterPosMomentum, fPDGPion,fPDGPion);
+ }
+ else if(center1ALam && center2Lam){
+ pairKstarProtPlusPiPlus = CalculateKstar(event->fReconstructedV0[i].daughterPosMomentum,(event+eventNumber)->fReconstructedV0[j].daughterPosMomentum, fPDGPion,fPDGProton);
+ pairKstarProtMinusPiMinus = CalculateKstar(event->fReconstructedV0[i].daughterNegMomentum,(event+eventNumber)->fReconstructedV0[j].daughterNegMomentum, fPDGProton,fPDGPion);
+ pairKstarProtPlusProtMinus = CalculateKstar(event->fReconstructedV0[i].daughterNegMomentum,(event+eventNumber)->fReconstructedV0[j].daughterPosMomentum, fPDGProton,fPDGProton);
+ pairKstarPiPlusPiMinus = CalculateKstar(event->fReconstructedV0[i].daughterPosMomentum,(event+eventNumber)->fReconstructedV0[j].daughterNegMomentum, fPDGPion,fPDGPion);
+ }
+ double pairKstarProtPlusPiMinus1 = CalculateKstar(event->fReconstructedV0[i].daughterPosMomentum,(event+eventNumber)->fReconstructedV0[j].daughterNegMomentum, fPDGProton,fPDGPion); // only relevant for LamLam
+ double pairKstarProtPlusPiMinus2 = CalculateKstar(event->fReconstructedV0[i].daughterNegMomentum,(event+eventNumber)->fReconstructedV0[j].daughterPosMomentum, fPDGPion,fPDGProton); // only relevant for LamLam
+
+ double pairKstarProtMinusPiPlus1 = CalculateKstar(event->fReconstructedV0[i].daughterNegMomentum,(event+eventNumber)->fReconstructedV0[j].daughterPosMomentum, fPDGProton,fPDGPion); // only relevant for ALamALam
+ double pairKstarProtMinusPiPlus2 = CalculateKstar(event->fReconstructedV0[i].daughterPosMomentum,(event+eventNumber)->fReconstructedV0[j].daughterNegMomentum, fPDGPion, fPDGProton); // only relevant for ALamALam
+ //Now find the average separation distance between daughter pairs. Used to make a merging/splitting cut.
+ double avgSepPos = GetAverageSeparation(event->fReconstructedV0[i].daughterPosGlobalPositions, (event+eventNumber)->fReconstructedV0[j].daughterPosGlobalPositions);
+ double avgSepNeg = GetAverageSeparation(event->fReconstructedV0[i].daughterNegGlobalPositions, (event+eventNumber)->fReconstructedV0[j].daughterNegGlobalPositions);
+ double avgSepNegPos = GetAverageSeparation(event->fReconstructedV0[i].daughterNegGlobalPositions, (event+eventNumber)->fReconstructedV0[j].daughterPosGlobalPositions);
+ double avgSepPosNeg = GetAverageSeparation(event->fReconstructedV0[i].daughterPosGlobalPositions, (event+eventNumber)->fReconstructedV0[j].daughterNegGlobalPositions);
+ double correctedAvgSepPos = GetAverageSeparation(event->fReconstructedV0[i].daughterPosCorrectedGlobalPositions, (event+eventNumber)->fReconstructedV0[j].daughterPosCorrectedGlobalPositions);
+ double correctedAvgSepNeg = GetAverageSeparation(event->fReconstructedV0[i].daughterNegCorrectedGlobalPositions, (event+eventNumber)->fReconstructedV0[j].daughterNegCorrectedGlobalPositions);
+ double correctedAvgSepNegPos = GetAverageSeparation(event->fReconstructedV0[i].daughterNegCorrectedGlobalPositions, (event+eventNumber)->fReconstructedV0[j].daughterPosCorrectedGlobalPositions);
+ double correctedAvgSepPosNeg = GetAverageSeparation(event->fReconstructedV0[i].daughterPosCorrectedGlobalPositions, (event+eventNumber)->fReconstructedV0[j].daughterNegCorrectedGlobalPositions);
+
+ //Now we get to the actual pair histogramming
+ if(eventNumber==0) //Same event pair histogramming
+ {
+ //We do separate binning for each pair type
+ if(center1Lam && center2Lam){
+ // Some histograms we only fill when default variable cut
+ // values have been used
+ if(cutIndex == fDefaultVariableCutIndex){
+ //same sign tracks
+ fSignalLamLamProtSep->Fill(avgSepPos, pairKstarProtPlus);
+ fSignalLamLamPiMinusSep->Fill(avgSepNeg, pairKstarPiMinus);
+ fSignalLamLamProtSepCorrected->Fill(correctedAvgSepPos, pairKstarProtPlus);
+ fSignalLamLamPiMinusSepCorrected->Fill(correctedAvgSepNeg, pairKstarPiMinus);
+ //opposite sign tracks
+ fSignalLamLamPlusMinusSep->Fill(avgSepPosNeg,pairKstarProtPlusPiMinus1);
+ fSignalLamLamPlusMinusSep->Fill(avgSepNegPos,pairKstarProtPlusPiMinus2);
+ fSignalLamLamPlusMinusSepCorrected->Fill(correctedAvgSepPosNeg,pairKstarProtPlusPiMinus1);
+ fSignalLamLamPlusMinusSepCorrected->Fill(correctedAvgSepNegPos,pairKstarProtPlusPiMinus2);
+ }
+ for(int sepCutIndex = 0; sepCutIndex < numberOfAvgSepCutIndices; sepCutIndex++){ //looping over different avg sep cut values (if applicable)
+ if(fIsUsingVariableAvgSepCut) variableAvgSepValue = avgSepCutArray[sepCutIndex];
+ if((avgSepIdenticalProtonCut < correctedAvgSepPos)
+ && (avgSepIdenticalPionCut < correctedAvgSepNeg))
+ {
+ fSignalLamLam->Fill(sepCutIndex, centralityBin+1, pairKstarLam);
+ if(defaultVariableAvgSepCutIndex == sepCutIndex){
+ //This implementation doesn't work properly
+ fKtLamLamSig->Fill(centralityBin+1,pairKt,pairKstarLam);
+ }
+ }
+ }
+ }
+ if(center1ALam && center2ALam){
+ if(cutIndex == fDefaultVariableCutIndex){
+ //same sign tracks
+ fSignalALamALamAntiProtSep->Fill(avgSepNeg, pairKstarProtMinus);
+ fSignalALamALamPiPlusSep->Fill(avgSepPos, pairKstarPiPlus);
+ fSignalALamALamAntiProtSepCorrected->Fill(correctedAvgSepNeg, pairKstarProtMinus);
+ fSignalALamALamPiPlusSepCorrected->Fill(correctedAvgSepPos, pairKstarPiPlus);
+
+ //opposite sign tracks
+ fSignalALamALamPlusMinusSep->Fill(avgSepPosNeg,pairKstarProtMinusPiPlus1);
+ fSignalALamALamPlusMinusSep->Fill(avgSepNegPos,pairKstarProtMinusPiPlus2);
+ fSignalALamALamPlusMinusSepCorrected->Fill(correctedAvgSepPosNeg,pairKstarProtMinusPiPlus1);
+ fSignalALamALamPlusMinusSepCorrected->Fill(correctedAvgSepNegPos,pairKstarProtMinusPiPlus2);
+ }
+ for(int sepCutIndex = 0; sepCutIndex < numberOfAvgSepCutIndices; sepCutIndex++){
+ if(fIsUsingVariableAvgSepCut) variableAvgSepValue = avgSepCutArray[sepCutIndex];
+ if((avgSepIdenticalPionCut < correctedAvgSepPos)
+ && (avgSepIdenticalProtonCut < correctedAvgSepNeg))
+ {
+ fSignalALamALam->Fill(sepCutIndex, centralityBin+1, pairKstarLam);
+ if(defaultVariableAvgSepCutIndex == sepCutIndex){
+ //This implementation doesn't work properly
+ fKtALamALamSig->Fill(centralityBin+1,pairKt,pairKstarLam);
+ }
+ }
+ }
+ }
+ if((center1Lam && center2ALam) || (center1ALam && center2Lam)){
+ if(cutIndex == fDefaultVariableCutIndex){
+ fSignalLamALamProtPiPlusSep->Fill(avgSepPos, pairKstarProtPlusPiPlus);
+ fSignalLamALamAntiProtPiMinusSep->Fill(avgSepNeg, pairKstarProtMinusPiMinus);
+ fSignalLamALamProtPiPlusSepCorrected->Fill(correctedAvgSepPos, pairKstarProtPlusPiPlus);
+ fSignalLamALamAntiProtPiMinusSepCorrected->Fill(correctedAvgSepNeg, pairKstarProtMinusPiMinus);
+ //opposite charge tracks
+ if(center1Lam)
+ {
+ fSignalLamALamProtSep->Fill(avgSepPosNeg, pairKstarProtPlusProtMinus);
+ fSignalLamALamPionSep->Fill(avgSepNegPos, pairKstarPiPlusPiMinus);
+ fSignalLamALamProtSepCorrected->Fill(correctedAvgSepPosNeg, pairKstarProtPlusProtMinus);
+ fSignalLamALamPionSepCorrected->Fill(correctedAvgSepNegPos, pairKstarPiPlusPiMinus);
+ }
+ else
+ {
+ fSignalLamALamProtSep->Fill(avgSepNegPos, pairKstarProtPlusProtMinus);
+ fSignalLamALamPionSep->Fill(avgSepPosNeg, pairKstarPiPlusPiMinus);
+ fSignalLamALamProtSepCorrected->Fill(correctedAvgSepNegPos, pairKstarProtPlusProtMinus);
+ fSignalLamALamPionSepCorrected->Fill(correctedAvgSepPosNeg, pairKstarPiPlusPiMinus);
+ }
+ }
+ for(int sepCutIndex = 0; sepCutIndex < numberOfAvgSepCutIndices; sepCutIndex++){
+ if(fIsUsingVariableAvgSepCut) variableAvgSepValue = avgSepCutArray[sepCutIndex];
+ if((avgSepNonIdenticalCut < correctedAvgSepPos)
+ && (avgSepNonIdenticalCut < correctedAvgSepNeg))
+ {
+ fSignalLamALam->Fill(sepCutIndex, centralityBin+1, pairKstarLam);
+ if(defaultVariableAvgSepCutIndex == sepCutIndex){
+ //This implementation doesn't work properly
+ fKtLamALamSig->Fill(centralityBin+1,pairKt,pairKstarLam);
+ }
+ }
+ }
+ }
+ } //end same event pair histogramming
+ else //Mixed event pair histogramming
+ {
+ if(center1Lam && center2Lam){
+ if(cutIndex == fDefaultVariableCutIndex){
+ fBkgLamLamProtSep->Fill(avgSepPos, pairKstarProtPlus);
+ fBkgLamLamPiMinusSep->Fill(avgSepNeg, pairKstarPiMinus);
+ fBkgLamLamProtSepCorrected->Fill(correctedAvgSepPos, pairKstarProtPlus);
+ fBkgLamLamPiMinusSepCorrected->Fill(correctedAvgSepNeg, pairKstarPiMinus);
+ //opposite sign tracks
+ fBkgLamLamPlusMinusSep->Fill(avgSepPosNeg,pairKstarProtPlusPiMinus1);
+ fBkgLamLamPlusMinusSep->Fill(avgSepNegPos,pairKstarProtPlusPiMinus2);
+ fBkgLamLamPlusMinusSepCorrected->Fill(correctedAvgSepPosNeg,pairKstarProtPlusPiMinus1);
+ fBkgLamLamPlusMinusSepCorrected->Fill(correctedAvgSepNegPos,pairKstarProtPlusPiMinus2);
+ if(fIsMCEvent)
+ { //collect momentum smearing information
+ int pairType = 0;
+ BinMomentumSmearing(event->fReconstructedV0[i].v0Momentum, event->fReconstructedV0[i].v0MomentumTruth, (event+eventNumber)->fReconstructedV0[j].v0Momentum, (event+eventNumber)->fReconstructedV0[j].v0MomentumTruth,pairType);
+ }
+ }
+ for(int sepCutIndex = 0; sepCutIndex < numberOfAvgSepCutIndices; sepCutIndex++){
+ if(fIsUsingVariableAvgSepCut) variableAvgSepValue = avgSepCutArray[sepCutIndex];
+ if((avgSepIdenticalProtonCut < correctedAvgSepPos)
+ && (avgSepIdenticalPionCut < correctedAvgSepNeg))
+ {
+ fBkgLamLam->Fill(sepCutIndex, centralityBin+1, pairKstarLam);
+ if(defaultVariableAvgSepCutIndex == sepCutIndex){
+ //This implementation doesn't work properly
+ fKtLamLamBkg->Fill(centralityBin+1,pairKt,pairKstarLam);
+ }
+ }
+ }
+ }
+ if(center1ALam && center2ALam){
+ if(cutIndex == fDefaultVariableCutIndex){
+ fBkgALamALamAntiProtSep->Fill(avgSepNeg, pairKstarProtMinus);
+ fBkgALamALamPiPlusSep->Fill(avgSepPos, pairKstarPiPlus);
+ fBkgALamALamAntiProtSepCorrected->Fill(correctedAvgSepNeg, pairKstarProtMinus);
+ fBkgALamALamPiPlusSepCorrected->Fill(correctedAvgSepPos, pairKstarPiPlus);
+ //opposite sign tracks
+ fBkgALamALamPlusMinusSep->Fill(avgSepPosNeg,pairKstarProtMinusPiPlus1);
+ fBkgALamALamPlusMinusSep->Fill(avgSepNegPos,pairKstarProtMinusPiPlus2);
+ fBkgALamALamPlusMinusSepCorrected->Fill(correctedAvgSepPosNeg,pairKstarProtMinusPiPlus1);
+ fBkgALamALamPlusMinusSepCorrected->Fill(correctedAvgSepNegPos,pairKstarProtMinusPiPlus2);
+ if(fIsMCEvent)
+ { //collect momentum smearing information
+ int pairType = 1;
+ BinMomentumSmearing(event->fReconstructedV0[i].v0Momentum, event->fReconstructedV0[i].v0MomentumTruth, (event+eventNumber)->fReconstructedV0[j].v0Momentum, (event+eventNumber)->fReconstructedV0[j].v0MomentumTruth,pairType);
+ }
+ }
+ for(int sepCutIndex = 0; sepCutIndex < numberOfAvgSepCutIndices; sepCutIndex++){
+ if(fIsUsingVariableAvgSepCut) variableAvgSepValue = avgSepCutArray[sepCutIndex];
+ if((avgSepIdenticalPionCut < correctedAvgSepPos)
+ && (avgSepIdenticalProtonCut < correctedAvgSepNeg))
+ {
+ fBkgALamALam->Fill(sepCutIndex, centralityBin+1, pairKstarLam);
+ if(defaultVariableAvgSepCutIndex == sepCutIndex){
+ //This implementation doesn't work properly
+ fKtALamALamBkg->Fill(centralityBin+1,pairKt,pairKstarLam);
+ }
+ }
+ }
+ }
+ if((center1Lam && center2ALam) || (center1ALam && center2Lam)){
+ if(cutIndex == fDefaultVariableCutIndex){
+ fBkgLamALamProtPiPlusSep->Fill(avgSepPos, pairKstarProtPlusPiPlus);
+ fBkgLamALamAntiProtPiMinusSep->Fill(avgSepNeg, pairKstarProtMinusPiMinus);
+ fBkgLamALamProtPiPlusSepCorrected->Fill(correctedAvgSepPos, pairKstarProtPlusPiPlus);
+ fBkgLamALamAntiProtPiMinusSepCorrected->Fill(correctedAvgSepNeg, pairKstarProtMinusPiMinus);
+ //opposite charge tracks
+ if(center1Lam)
+ {
+ fBkgLamALamProtSep->Fill(avgSepPosNeg, pairKstarProtPlusProtMinus);
+ fBkgLamALamPionSep->Fill(avgSepNegPos, pairKstarPiPlusPiMinus);
+ fBkgLamALamProtSepCorrected->Fill(correctedAvgSepPosNeg, pairKstarProtPlusProtMinus);
+ fBkgLamALamPionSepCorrected->Fill(correctedAvgSepNegPos, pairKstarPiPlusPiMinus);
+ }
+ else
+ {
+ fBkgLamALamProtSep->Fill(avgSepNegPos, pairKstarProtPlusProtMinus);
+ fBkgLamALamPionSep->Fill(avgSepPosNeg, pairKstarPiPlusPiMinus);
+ fBkgLamALamProtSepCorrected->Fill(correctedAvgSepNegPos, pairKstarProtPlusProtMinus);
+ fBkgLamALamPionSepCorrected->Fill(correctedAvgSepPosNeg, pairKstarPiPlusPiMinus);
+ }
+ if(fIsMCEvent)
+ { //collect momentum smearing information
+ int pairType = 2;
+ BinMomentumSmearing(event->fReconstructedV0[i].v0Momentum, event->fReconstructedV0[i].v0MomentumTruth, (event+eventNumber)->fReconstructedV0[j].v0Momentum, (event+eventNumber)->fReconstructedV0[j].v0MomentumTruth,pairType);
+ }
+ }
+ for(int sepCutIndex = 0; sepCutIndex < numberOfAvgSepCutIndices; sepCutIndex++){
+ if(fIsUsingVariableAvgSepCut) variableAvgSepValue = avgSepCutArray[sepCutIndex];
+ if((avgSepNonIdenticalCut < correctedAvgSepPos)
+ && (avgSepNonIdenticalCut < correctedAvgSepNeg))
+ {
+ fBkgLamALam->Fill(sepCutIndex, centralityBin+1, pairKstarLam);
+ if(defaultVariableAvgSepCutIndex == sepCutIndex){
+ //This implementation doesn't work properly
+ fKtLamALamBkg->Fill(centralityBin+1,pairKt,pairKstarLam);
+ }
+ }
+ }//end loop over sepCutIndex
+ }//end Lam-ALam pair binning
+ }//end mixed event pair histogramming
+ }//end past event
+ }//end event buffer
+ }//end current event
+ }//end variable cut loop
+}//end DoPairStudies()
+
+
--- /dev/null
+#include "AliAnalysisV0LamCutProcessing.h"
+
+
+
+AliAnalysisV0LamCut::AliAnalysisV0LamCut(std::vector<double> variableCutValues, bool isUpperBound)
+{
+ //Contructor for the cut class
+ fIsAnUpperLimit = isUpperBound;
+ fNumberOfCutValues = variableCutValues.size();
+ fCutValues = variableCutValues;
+}
+
+AliAnalysisV0LamCut::~AliAnalysisV0LamCut()
+{
+ //default destructor
+}
+
+
+
+AliAnalysisV0LamCutProcessing::AliAnalysisV0LamCutProcessing(TList *const outputList)
+{
+ //Constructor for the cut processing class.
+ //Sets up the cuts that will be used for V0 reconstruction. Also initializes
+ //output histograms that will store information about the V0s.
+
+ //New recontruction cuts should be put in here.
+ fOutputList = outputList; //Get the output list from the main analysis task
+ fNumberOfCutTypes = 10; //Manually set this to the number of recon cuts
+ double valueDCAPrimProton[] = {0.1}; //default 0.1
+ double valueDCAPrimPion[] = {0.3};//default 0.3
+ double valueDCADaughters[] = {0.4};//default 0.4
+ double valueProperDecayLength[] = {60.}; //default 60
+ double valueEta[] = {0.8};//default 0.8
+ double valueCosPointing[] = {0.9993};//default 0.9993
+ double valueV0DCA[] = {0.5};//default 0.5
+ double valuePt[] = {0.4};//default 0.4
+ double valueMassLamDiff[] = {0.0038}; // default 0.0038
+ double valueMassALamDiff[] = {0.0038};// default 0.0038
+ std::vector< vector<double> > cutValues(10);
+ //for each "assign", manually set second term to +1 or +N, where N is number
+ //of variable cuts
+ cutValues[0].assign(valueDCAPrimProton, valueDCAPrimProton+1);
+ cutValues[1].assign(valueDCAPrimPion, valueDCAPrimPion+1);
+ cutValues[2].assign(valueDCADaughters, valueDCADaughters+1);
+ cutValues[3].assign(valueProperDecayLength, valueProperDecayLength+1);
+ cutValues[4].assign(valueEta, valueEta+1);
+ cutValues[5].assign(valueCosPointing, valueCosPointing+1);
+ cutValues[6].assign(valueV0DCA, valueV0DCA+1);
+ cutValues[7].assign(valuePt, valuePt+1);
+ cutValues[8].assign(valueMassLamDiff, valueMassLamDiff+1);
+ cutValues[9].assign(valueMassALamDiff, valueMassALamDiff+1);
+ fNumberOfVariableCutValues = 1;//needs to be manually set if values change
+ fDefaultVariableCutIndex = 0; //needs to be manually set if values change
+ //Make cut objects for each cut type
+ fCuts[0] = new AliAnalysisV0LamCut(cutValues[0], false); //v0->daughterPosDCAPrimaryVertex;
+ fCuts[1] = new AliAnalysisV0LamCut(cutValues[1], false); //v0->daughterNegDCAPrimaryVertex;
+ fCuts[2] = new AliAnalysisV0LamCut(cutValues[2], true); //v0->daughtersDCA;
+ fCuts[3] = new AliAnalysisV0LamCut(cutValues[3], true); //v0->decayLength;
+ fCuts[4] = new AliAnalysisV0LamCut(cutValues[4], true); //v0->v0Eta;
+ fCuts[5] = new AliAnalysisV0LamCut(cutValues[5], false); //v0->cosPointing;
+ fCuts[6] = new AliAnalysisV0LamCut(cutValues[6], true); //v0->v0DCA;
+ fCuts[7] = new AliAnalysisV0LamCut(cutValues[7], false); //v0->Pt;
+ fCuts[8] = new AliAnalysisV0LamCut(cutValues[8], true); //v0->massLamDifference;
+ fCuts[9] = new AliAnalysisV0LamCut(cutValues[9], true); //v0->massALamDifference;
+ InitHistograms();
+}
+
+AliAnalysisV0LamCutProcessing::~AliAnalysisV0LamCutProcessing()
+{
+ //Destructor for the cut processor. Cleans up the cut objects
+ for (int i = 0; i < fNumberOfCutTypes; i++){
+ if(fCuts[i]) delete fCuts[i];
+ fCuts[i] = NULL;
+ }
+}
+
+void AliAnalysisV0LamCutProcessing::ProcessCut(AliReconstructedV0 *v0, int index, bool isLambdaCandidate)
+{
+ //This function processes a single reconstruction cut of a V0. If the cut in
+ //question is a variable cut, the function loops over each value of that cut
+ //and stores whether the V0 passes or fails each particular value.
+ //If isLambdaCandidate is false, the V0 is an Antilambda candidate
+
+ //First we get the relevant V0 information that will be tested by this cut.
+ double v0Value;
+ if (0 == index){ //Get the proton DCA to primary
+ if(isLambdaCandidate) v0Value = v0->daughterPosDCAPrimaryVertex;
+ else v0Value = v0->daughterNegDCAPrimaryVertex;
+ }
+ else if(1 == index){ //Get the pion DCA to primary
+ if(isLambdaCandidate) v0Value = v0->daughterNegDCAPrimaryVertex;
+ else v0Value = v0->daughterPosDCAPrimaryVertex;
+ }
+ else if(2 == index) v0Value = v0->daughtersDCA;
+ else if(3 == index){
+ if(v0->lorentzGammaLam >0) v0Value = (v0->decayLength / v0->lorentzGammaLam);
+ else v0Value = 1000; // something is wrong if gamma <=0, so set to a fail val
+ }
+ else if(4 == index) v0Value = v0->v0Eta;
+ else if(5 == index) v0Value = v0->cosPointing;
+ else if(6 == index) v0Value = v0->v0DCA;
+ else if(7 == index) v0Value = v0->v0Pt;
+ else if(8 == index) v0Value = v0->massLamDifference;
+ else if(9 == index) v0Value = v0->massALamDifference;
+ else cerr<<"ERROR: No cut for this index value \n";
+ //Find how many cut values are associated with this cut
+ int numberOfCutValues = fCuts[index]->fNumberOfCutValues;
+ if(0 == numberOfCutValues) cerr<<"ERROR: Must have at least one cut value \n";
+ else {
+ for(int i = 0; i < numberOfCutValues; i++){
+ //check if v0 passes each cut value and set v0 bools accordingly
+ //Cut can either be an upper bound or a lower bound.
+ if(fCuts[index]->fIsAnUpperLimit){ //upper bound cuts
+ if(fCuts[index]->fCutValues[i] > v0Value )
+ {
+ //v0 passed cut. Set v0 bool accordingly
+ v0->hasPassedCut[index][i] = kTRUE;
+ }
+ }
+ else { //lower bound cuts
+ if(fCuts[index]->fCutValues[i] < v0Value )
+ {
+ //v0 passed cut. Set v0 bool accordingly
+ v0->hasPassedCut[index][i] = kTRUE;
+ }
+ }
+ }
+ } //end numberOfCutValues > 1
+}
+
+void AliAnalysisV0LamCutProcessing::CheckIfV0PassesCuts(AliReconstructedV0 *v0)
+{
+ // Called by the Analysis Task
+ // Function which checks if V0 passes cuts.
+ // First the code processes each cut.
+ // If the candidate passes all the cuts, DetermineIfTrueV0 sets
+ // isLamCenter or isALamCenter to true
+
+ for(int cutTypeIndex = 0; cutTypeIndex < fNumberOfCutTypes; cutTypeIndex++)
+ {
+ //First default these to false
+ v0->isLamCenter[cutTypeIndex] = kFALSE;
+ v0->isALamCenter[cutTypeIndex] = kFALSE;
+ v0->isDeemedUnworthy[cutTypeIndex] = kFALSE;
+ for(int varCutIndex = 0; varCutIndex < fNumberOfVariableCutValues; varCutIndex++){
+ v0->hasPassedCut[cutTypeIndex][varCutIndex]=kFALSE;
+ }
+ }
+ //At this point, a V0 could simultaneously be a lambda candidate and an
+ //antilambda candidates (based only on the PID of the daughters). It is
+ //necessary to check both cases separately.
+
+ //Process cuts for lambda candidates
+ if(v0->hasProtonDaughter && v0->hasPiMinusDaughter){
+ bool isLambdaCandidate = kTRUE;
+ for(int cutIndex = 0; cutIndex < 8; cutIndex++) ProcessCut(v0,cutIndex,isLambdaCandidate); //General cuts
+ ProcessCut(v0,8,isLambdaCandidate); //Lambda specific cut
+ AliAnalysisV0LamCutProcessing::DetermineIfTrueV0(v0,isLambdaCandidate);
+ }
+ //Process cuts for antilambda candidates
+ if(v0->hasAntiProtonDaughter && v0->hasPiPlusDaughter){
+ bool isLambdaCandidate = kFALSE;
+ for(int cutIndex = 0; cutIndex < 8; cutIndex++) ProcessCut(v0,cutIndex,isLambdaCandidate); //General cuts
+ ProcessCut(v0,9,isLambdaCandidate); //AntiLambda specific cut
+ AliAnalysisV0LamCutProcessing::DetermineIfTrueV0(v0,isLambdaCandidate);
+ }
+}
+
+void AliAnalysisV0LamCutProcessing::DetermineIfTrueV0(AliReconstructedV0 *v0, bool isLambda)
+{
+ //Checks to see if the V0 passed all the standard cuts and any of the
+ //variable cuts. The function either checks if the v0 look like a Lambda
+ //or looks like an antiLambda, as set by the isLambda input variable.
+ vector<bool> passedCut(fNumberOfVariableCutValues,kTRUE);
+ bool hasFailedStandardCut = kFALSE;
+ //Check which cuts the V0 passed and failed
+ for(int cutIndex = 0; cutIndex < fNumberOfCutTypes; cutIndex++){
+ int numberOfCutValues = fCuts[cutIndex]->fNumberOfCutValues; //find how many cut values
+ for(int i = 0; i < numberOfCutValues; i++){
+ if(8 > cutIndex /* update this if number of cuts changes*/){ //check generic V0 cuts
+ if(!v0->hasPassedCut[cutIndex][i]){
+ if(1 == numberOfCutValues) hasFailedStandardCut = kTRUE;
+ else passedCut[i] = kFALSE;
+ }
+ }
+ if((8 == cutIndex) && isLambda){ //Only check for Lambda case
+ if(!v0->hasPassedCut[cutIndex][i]){
+ if(1 == numberOfCutValues) hasFailedStandardCut = kTRUE;
+ else passedCut[i] = kFALSE;
+ }
+ }
+ if((9 == cutIndex) && !isLambda){ //Only check for AntiLambda case
+ if(!v0->hasPassedCut[cutIndex][i]){
+ if(1 == numberOfCutValues) hasFailedStandardCut = kTRUE;
+ else passedCut[i] = kFALSE;
+ }
+ }
+ }
+ }
+ if(hasFailedStandardCut){
+ //if it failed any standard (i.e. non-variable cuts) cuts, set all
+ //passedCut values to failed
+ for(int i = 0; i < fNumberOfVariableCutValues; i++){
+ passedCut[i] = kFALSE;
+ }
+ }
+ for(int i = 0; i < fNumberOfVariableCutValues; i++){
+ //Now, for each candidate that passed cuts, determine if Lam or antiLam
+ if(passedCut[i]){ //if this is true at this point, the v0 has passed ALL the
+ //standard cuts AND the ith variable cut
+ if(isLambda) v0->isLamCenter[i]=kTRUE;
+ else v0->isALamCenter[i]=kTRUE;
+ } //Otherwise isLamCenter and isALamCenter are false by default
+ }
+}
+
+
+
+
+void AliAnalysisV0LamCutProcessing::DoV0Histogramming(AliReconstructedV0 *v0)
+{
+ //Called by the analysis task. Histograms the V0's reconstruction parameters.
+ //Does separate histogramming for lambda and antilambda cases
+ if(v0->hasProtonDaughter && v0->hasPiMinusDaughter){
+ SortAndFillCutHistograms(v0, true);
+ }
+ if(v0->hasAntiProtonDaughter && v0->hasPiPlusDaughter){
+ SortAndFillCutHistograms(v0,false);
+ }
+}
+
+void AliAnalysisV0LamCutProcessing::SortAndFillCutHistograms(AliReconstructedV0 *v0, bool isLambda)
+{
+ //Loops through each cut type to attempt to histogram it. If all the *other*
+ //cuts pass, then the V0's value for this cut is histogrammed. FillHist is
+ //called to handle the filling of the histogram
+ //e.g. Only fill Minv hist if V0 passed decaylength, DCA, etc.
+ for(int cutTypeIndex = 0; cutTypeIndex < fNumberOfCutTypes; cutTypeIndex++)
+ { //Loop over each cut type
+ bool passesOtherCuts = true;
+ //Ignore irrelevant species specific cuts
+ if(isLambda && (9 == cutTypeIndex)) continue; //ignore antilambda cut
+ if(!isLambda && (8 == cutTypeIndex)) continue; //ignore lambda cut
+ vector<bool> passesOtherVariableCuts(fNumberOfVariableCutValues, true);
+ for(int variableCutIndex = 0; variableCutIndex < fNumberOfVariableCutValues; variableCutIndex++)
+ { //Loop over number of variable cut values
+ if(!passesOtherCuts) break; //If it fails a cut, don't need to histogram it
+ for(int otherCutTypeIndex =0; otherCutTypeIndex < fNumberOfCutTypes; otherCutTypeIndex++)
+ {
+ if(cutTypeIndex == otherCutTypeIndex) continue; //only need to pass the OTHER cuts
+ //Again, ignore irrelevant species specific cuts
+ if(isLambda && (9 == otherCutTypeIndex)) continue;
+ if(!isLambda && (8 == otherCutTypeIndex)) continue;
+ if(fCuts[otherCutTypeIndex]->fNumberOfCutValues > 1){
+ if(!v0->hasPassedCut[otherCutTypeIndex][variableCutIndex]) {
+ passesOtherVariableCuts[variableCutIndex] = false;
+ break;
+ }
+ }
+ else if(!v0->hasPassedCut[otherCutTypeIndex][0]){
+ passesOtherCuts = false;
+ break;
+ }
+ }
+ //Finally, if it passes all standard cuts and the current variable cut,
+ //fill the histogram for that cut type.
+ if(passesOtherCuts && passesOtherVariableCuts[variableCutIndex]){
+ FillHist(v0,cutTypeIndex,variableCutIndex,isLambda);
+ }
+ }
+ }
+}
+
+void AliAnalysisV0LamCutProcessing::InitHistograms()
+{
+ //Initilizes histograms for V0 characteristics
+ TString nameDaughterPosDcaToPrimLam = "fHistDaughterPosDcaToPrimLam";
+ TString nameDaughterPosDcaToPrimALam = "fHistDaughterPosDcaToPrimALam";
+ TString nameDaughterNegDcaToPrimLam = "fHistDaughterNegDcaToPrimLam";
+ TString nameDaughterNegDcaToPrimALam = "fHistDaughterNegDcaToPrimALam";
+ TString nameDaughtersDcaLam = "fHistDaughtersDcaLam";
+ TString nameDaughtersDcaALam = "fHistDaughtersDcaALam";
+ TString nameDecayLengthLam = "fHistDecayLengthLam";
+ TString nameDecayLengthALam = "fHistDecayLengthALam";
+ TString nameProperDecayLengthLam = "fHistProperDecayLengthLam";
+ TString nameProperDecayLengthALam = "fHistProperDecayLengthALam";
+ TString nameEtaLam = "fHistEtaLam";
+ TString nameEtaALam = "fHistEtaALam";
+ TString nameCosPointingLam = "fHistCosPointingLam";
+ TString nameCosPointingALam = "fHistCosPointingALam";
+ TString nameDcaLam = "fHistDcaLam";
+ TString nameDcaALam = "fHistDcaALam";
+ TString namePtLam = "fHistPtLam";
+ TString namePtALam = "fHistPtALam";
+ TString nameMassLam = "fHistMassLam";
+ TString nameMassALam = "fHistMassALam";
+ TString nameMassCentralityLam = "fHistMassCentralityLam";
+ TString nameMassCentralityALam = "fHistMassCentralityALam";
+ fHistDaughterPosDcaToPrimLam = new TH2F((nameDaughterPosDcaToPrimLam).Data(),"DCA of proton daughter to primary vertex", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, 0., 10.);
+ fHistDaughterPosDcaToPrimALam = new TH2F((nameDaughterPosDcaToPrimALam).Data(),"DCA of piplus daughter to primary vertex", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, 0., 10.);
+ fHistDaughterNegDcaToPrimLam = new TH2F((nameDaughterNegDcaToPrimLam).Data(),"DCA of piminus daughter to primary vertex", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, 0., 10.);
+ fHistDaughterNegDcaToPrimALam = new TH2F((nameDaughterNegDcaToPrimALam).Data(),"DCA of antiproton daughter to primary vertex", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, 0., 10.);
+ fHistDaughtersDcaLam = new TH2F((nameDaughtersDcaLam).Data(), "DCA of Lambda daughters to each other", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, 0., 1.5);
+ fHistDaughtersDcaALam = new TH2F((nameDaughtersDcaALam).Data(), "DCA of AntiLambda daughters to each other", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, 0., 1.5);
+ fHistDecayLengthLam = new TH2F((nameDecayLengthLam).Data(), "Lambda decay length", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 500, 0., 100.);
+ fHistDecayLengthALam = new TH2F((nameDecayLengthALam).Data(), "AntiLambda decay length", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 500, 0., 100.);
+ fHistProperDecayLengthLam = new TH2F((nameProperDecayLengthLam).Data(), "Lambda proper decay length", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 500, 0., 100.);
+ fHistProperDecayLengthALam = new TH2F((nameProperDecayLengthALam).Data(), "AntiLambda proper decay length", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 500, 0., 100.);
+ fHistEtaLam = new TH2F((nameEtaLam).Data(), "Eta distribution of Lambdas", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, 0.0, 1.);
+ fHistEtaALam = new TH2F((nameEtaALam).Data(), "Eta distribution of AntiLambdas", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, 0.0, 1.);
+ fHistCosPointingLam = new TH2F((nameCosPointingLam).Data(), "Cosine(pointing angle) of Lambdas", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5,100, .97, 1.);
+ fHistCosPointingALam = new TH2F((nameCosPointingALam).Data(), "Cosine(pointing angle) of AntiLambdas", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, .97, 1.);
+ fHistDcaLam = new TH2F((nameDcaLam).Data(), "DCA of Lambdas to primary vertex", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, 0., 5.);
+ fHistDcaALam = new TH2F((nameDcaALam).Data(), "DCA of AntiLambdas to primary vertex", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 100, 0., 5.);
+ fHistPtLam = new TH2F((namePtLam).Data(), "Lambda pT distribution", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 500, 0., 10.);
+ fHistPtALam = new TH2F((namePtALam).Data(), "AntiLambda pT distribution", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 500, 0., 10.);
+ fHistMassLam = new TH2F((nameMassLam).Data(), "Lambda Minv", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 600,1.04,1.19);
+ fHistMassALam = new TH2F((nameMassALam).Data(), "AntiLambda Minv", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 600,1.04,1.19);
+ fHistMassCentralityLam = new TH3F((nameMassCentralityLam).Data(), "Lambda Minv vs Centrality", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 20, .5, 20+.5, 600, 1.04,1.19);
+ fHistMassCentralityALam = new TH3F((nameMassCentralityALam).Data(), "AntiLambda Minv vs Centrality", fNumberOfVariableCutValues, -0.5, fNumberOfVariableCutValues -0.5, 20, .5, 20+.5, 600, 1.04,1.19);
+ fOutputList->Add(fHistDaughterPosDcaToPrimLam);
+ fOutputList->Add(fHistDaughterPosDcaToPrimALam);
+ fOutputList->Add(fHistDaughterNegDcaToPrimLam);
+ fOutputList->Add(fHistDaughterNegDcaToPrimALam);
+ fOutputList->Add(fHistDaughtersDcaLam);
+ fOutputList->Add(fHistDaughtersDcaALam);
+ fOutputList->Add(fHistDecayLengthLam);
+ fOutputList->Add(fHistDecayLengthALam);
+ fOutputList->Add(fHistProperDecayLengthLam);
+ fOutputList->Add(fHistProperDecayLengthALam);
+ fOutputList->Add(fHistEtaLam);
+ fOutputList->Add(fHistEtaALam);
+ fOutputList->Add(fHistCosPointingLam);
+ fOutputList->Add(fHistCosPointingALam);
+ fOutputList->Add(fHistDcaLam);
+ fOutputList->Add(fHistDcaALam);
+ fOutputList->Add(fHistPtLam);
+ fOutputList->Add(fHistPtALam);
+ fOutputList->Add(fHistMassLam);
+ fOutputList->Add(fHistMassALam);
+ fOutputList->Add(fHistMassCentralityLam);
+ fOutputList->Add(fHistMassCentralityALam);
+ //Don't need to call PostData here, since PostData will be called by
+ //the main analysis task
+}
+
+void AliAnalysisV0LamCutProcessing::FillHist(AliReconstructedV0 *v0, int cutTypeIndex, int variableCutIndex, bool isLambda)
+{
+ //Maps each cutTypeIndex to a different histogram and fills the associated value from the v0.
+ //If isLambda is false, the V0 is an antilambda
+ if(0 == cutTypeIndex){
+ if(isLambda) fHistDaughterPosDcaToPrimLam->Fill(variableCutIndex, v0->daughterPosDCAPrimaryVertex);
+ else fHistDaughterNegDcaToPrimALam->Fill(variableCutIndex, v0->daughterNegDCAPrimaryVertex);
+ }
+ if(1 == cutTypeIndex){
+ if(isLambda) fHistDaughterNegDcaToPrimLam->Fill(variableCutIndex, v0->daughterNegDCAPrimaryVertex);
+ else fHistDaughterPosDcaToPrimALam->Fill(variableCutIndex, v0->daughterPosDCAPrimaryVertex);
+ }
+ if(2 == cutTypeIndex){
+ if(isLambda) fHistDaughtersDcaLam->Fill(variableCutIndex, v0->daughtersDCA);
+ else fHistDaughtersDcaALam->Fill(variableCutIndex, v0->daughtersDCA);
+ }
+ if(3 == cutTypeIndex){
+ if(isLambda){
+ fHistDecayLengthLam->Fill(variableCutIndex, v0->decayLength);
+ if(v0->lorentzGammaLam > 0){
+ fHistProperDecayLengthLam->Fill(variableCutIndex, v0->decayLength/v0->lorentzGammaLam);
+ }
+ }
+ else{
+ fHistDecayLengthALam->Fill(variableCutIndex, v0->decayLength);
+ if(v0->lorentzGammaLam > 0){
+ fHistProperDecayLengthALam->Fill(variableCutIndex, v0->decayLength/v0->lorentzGammaLam);
+ }
+ }
+ }
+ if(4 == cutTypeIndex){
+ if(isLambda) fHistEtaLam->Fill(variableCutIndex, v0->v0Eta);
+ else fHistEtaALam->Fill(variableCutIndex, v0->v0Eta);
+ }
+ if(5 == cutTypeIndex){
+ if(isLambda) fHistCosPointingLam->Fill(variableCutIndex, v0->cosPointing);
+ else fHistCosPointingALam->Fill(variableCutIndex, v0->cosPointing);
+ }
+ if(6 == cutTypeIndex){
+ if(isLambda) fHistDcaLam->Fill(variableCutIndex, v0->v0DCA);
+ else fHistDcaALam->Fill(variableCutIndex, v0->v0DCA);
+ }
+ if(7 == cutTypeIndex){
+ if(isLambda) fHistPtLam->Fill(variableCutIndex, v0->v0Pt);
+ else fHistPtALam->Fill(variableCutIndex, v0->v0Pt);
+ }
+ if(8 == cutTypeIndex){
+ if(isLambda){ //only do this histogramming for Lambdas
+ fHistMassLam->Fill(variableCutIndex, v0->massLam);
+ fHistMassCentralityLam->Fill(variableCutIndex, fCurrentCentralityBin+1,v0->massLam);
+ }
+ }
+ if(9 == cutTypeIndex){
+ if(!isLambda){ //Only do this histogramming for AntiLambdas
+ fHistMassALam->Fill(variableCutIndex, v0->massALam);
+ fHistMassCentralityALam->Fill(variableCutIndex, fCurrentCentralityBin+1,v0->massALam);
+ }
+ }
+}
--- /dev/null
+#ifndef AliAnalysisV0LamCutProcessing_cxx
+#define AliAnalysisV0LamCutProcessing_cxx
+
+#include "AliAnalysisV0LamEventCollection.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TH3F.h"
+#include "TList.h"
+
+class AliAnalysisV0LamCut
+{
+ public:
+ AliAnalysisV0LamCut(std::vector<double> variableCutValues, bool isUpperBound);
+ ~AliAnalysisV0LamCut();
+ int fNumberOfCutValues;
+ bool fIsAnUpperLimit; //if this is false, the cut is a lower limit
+ std::vector<double> fCutValues;
+};
+
+class AliAnalysisV0LamCutProcessing
+{
+ //created and used in AliAnalysisV0Lam::init
+public:
+ AliAnalysisV0LamCutProcessing(TList *const outputList);
+ ~AliAnalysisV0LamCutProcessing();
+ void CheckIfV0PassesCuts(AliReconstructedV0 *v0);
+ void DoV0Histogramming(AliReconstructedV0 *v0);
+ int GetNumberOfVariableCutValues() const {return fNumberOfVariableCutValues;}
+ void SetCentralityBin(int centBin) {fCurrentCentralityBin = centBin;}
+ int GetVariableCutIndex() {return fDefaultVariableCutIndex;}
+private:
+ void InitHistograms();
+ void SortAndFillCutHistograms(AliReconstructedV0 *v0, bool isLambda);
+ void ProcessCut(AliReconstructedV0 *v0, int index, bool isLambdaCandidate);
+ void DetermineIfTrueV0(AliReconstructedV0 *v0, bool isLambda);
+ void FillHist(AliReconstructedV0 *v0, int cutTypeIndex, int variableCutIndex, bool isLambda);
+ AliAnalysisV0LamCut* fCuts[10];
+ int fNumberOfCutTypes;
+ int fNumberOfVariableCutValues;
+ int fCurrentCentralityBin;
+ int fDefaultVariableCutIndex;
+ TList *fOutputList; //! Compact output list where histograms are written
+ //These hists are filled during the V0 reconstruction process
+ TH2F *fHistDaughterPosDcaToPrimLam;
+ TH2F *fHistDaughterPosDcaToPrimALam;
+ TH2F *fHistDaughterNegDcaToPrimLam;
+ TH2F *fHistDaughterNegDcaToPrimALam;
+ TH2F *fHistDaughtersDcaLam;
+ TH2F *fHistDaughtersDcaALam;
+ TH2F *fHistDecayLengthLam;
+ TH2F *fHistDecayLengthALam;
+ TH2F *fHistProperDecayLengthLam;
+ TH2F *fHistProperDecayLengthALam;
+ TH2F *fHistEtaLam;
+ TH2F *fHistEtaALam;
+ TH2F *fHistCosPointingLam;
+ TH2F *fHistCosPointingALam;
+ TH2F *fHistDcaLam;
+ TH2F *fHistDcaALam;
+ TH2F *fHistPtLam;
+ TH2F *fHistPtALam;
+ TH2F *fHistMassLam;
+ TH2F *fHistMassALam;
+ TH3F *fHistMassCentralityLam;
+ TH3F *fHistMassCentralityALam;
+};
+
+#endif
--- /dev/null
+#include "AliAnalysisV0LamEventCollection.h"
+//_____________________________________________________________________________
+AliAnalysisV0LamEventCollection::~AliAnalysisV0LamEventCollection(){
+ for(int i = 0; i < fifo; i++){
+ if((fEvt + i)->fReconstructedV0 != NULL){
+ delete [] (fEvt + i)->fReconstructedV0;
+ }
+ }
+ delete [] fEvt;
+}
+//_____________________________________________________________________________
+AliAnalysisV0LamEventCollection::AliAnalysisV0LamEventCollection(){}
+//_____________________________________________________________________________
+AliAnalysisV0LamEventCollection::AliAnalysisV0LamEventCollection(short eventBuffSize, int maxV0Mult){
+ SetBuffSize(eventBuffSize);
+ fEvt = new AliAnalysisV0LamEvent[fifo]; //allocate pointer array of AliAnalysisV0LamEvents
+ for(int ii = 0; ii < fifo; ii++){ //Initialize particle table pointers to NULL
+ (fEvt + ii)->fReconstructedV0 = NULL;
+ (fEvt + ii)->fNumberCandidateV0 = 0;
+ (fEvt + ii)->fReconstructedV0 = new AliReconstructedV0[maxV0Mult];
+ for(int j=0; j < 3; j++){
+ (fEvt + ii)->fPrimaryVertex[j] = 0.;
+ }
+ }
+}
+//_____________________________________________________________________________
+void AliAnalysisV0LamEventCollection::FifoShift(){ //Shift elements in FIFO by one and clear last element in FIFO
+ for(unsigned short i=fifo-1 ; i > 0; i--){
+ for(int j=0; j<(fEvt + i-1)->fNumberCandidateV0; j++){
+ (fEvt + i)->fReconstructedV0[j] = (fEvt + i-1)->fReconstructedV0[j];
+ }
+ (fEvt + i)->fNumberCandidateV0 = (fEvt + i-1)->fNumberCandidateV0;
+ for(int j=0; j<3; j++){
+ (fEvt + i)->fPrimaryVertex[j] = (fEvt + i-1)->fPrimaryVertex[j];
+ }
+ }
+ (fEvt)->fNumberCandidateV0=0;
+ for(int j=0; j<3; j++){
+ (fEvt)->fPrimaryVertex[j] = 0.;
+ }
+}
+
+//_____________________________________________________________________________
+AliReconstructedV0::AliReconstructedV0()
+{
+}
+
+//_____________________________________________________________________________
+AliReconstructedV0::~AliReconstructedV0()
+{
+}
--- /dev/null
+#ifndef AliAnalysisV0LamEventCollection_cxx
+#define AliAnalysisV0LamEventCollection_cxx
+
+#include <iostream>
+#include <string>
+#include "TH1.h"
+#include "TH2.h"
+using namespace std;
+
+class AliReconstructedV0 // Reconstructed V0s
+{
+ public:
+ AliReconstructedV0();
+ ~AliReconstructedV0();
+ enum MCV0Origin_t {kUnassigned, kFake, kFakeLambda, kPrimaryLambda, kPrimarySigmaZero, kExcitedSigma, kPrimaryCascadeZero, kPrimaryCascadeMinus, kPrimaryOmega, kOtherOriginLambda, kFakeAntiLambda, kPrimaryAntiLambda, kPrimaryAntiSigmaZero, kExcitedAntiSigma, kPrimaryAntiCascadeZero, kPrimaryAntiCascadePlus, kPrimaryAntiOmega, kOtherOriginAntiLambda, kKZeroShort, kOriginTypeMax = kKZeroShort};
+ double v0Momentum[3]; // reconstructed momentum
+ double v0MomentumTruth[3]; //true momentum, used in momentum smearing analysis
+ double v0Pt;
+ double v0Eta;
+ double v0Phi;
+ double massLam;
+ double massALam;
+ double massLamDifference;
+ double massALamDifference;
+ double massK0;
+ double lorentzGammaLam;
+ double decayLength;
+ short daughter1ID;
+ short daughter2ID;
+ double v0DCA;
+ double decayVertexPosition[3]; //position of the V0 decay vertex
+ double cosPointing;
+ bool hasProtonDaughter;
+ bool hasAntiProtonDaughter;
+ bool hasPiPlusDaughter;
+ bool hasPiMinusDaughter;
+ bool isLamCenter[10];
+ bool isALamCenter[10];
+ bool isDeemedUnworthy[10];
+ //vector<vector<bool> > hasPassedCut;
+ bool hasPassedCut[10][10];
+ bool isPassingAllReconstructionCuts;
+ MCV0Origin_t mcOriginType;
+ double daughterPosMomentum[3]; //momentum of the positive daughter
+ double daughterNegMomentum[3]; //momentum of the negative daughter
+ /* double daughterPosMomentumTruth[3]; //used in momentum smearing analysis */
+ /* double doughterNegMomentumTruth[3]; */
+ double daughterPosProtonE; //energy of the positive daughter
+ double daughterPosPionE; //energy of the positive daughter
+ double daughterNegProtonE; //energy of the negative daughter
+ double daughterNegPionE; //energy of the negative daughter
+ double daughtersDCA;
+ double daughterPosDCAPrimaryVertex;
+ double daughterNegDCAPrimaryVertex;
+ double daughterPosPositionDCA[3]; //position of the positive daughter at DCA to primary
+ double daughterNegPositionDCA[3]; //position of the negative daughter at DCA to primary
+ double daughterPosMomentumDCA[3]; //momentum of the positive daughter at DCA to primary
+ double daughterNegMomentumDCA[3]; //momentum of the negative daughter at DCA to primary
+ double daughterPosCovariance[21]; //covariance matrix of the positive daughter
+ double daughterNegCovariance[21]; //covariance matrix of the negative daughter
+ Float_t daughterPosGlobalPositions[9][3];
+ Float_t daughterNegGlobalPositions[9][3];
+ Float_t daughterPosCorrectedGlobalPositions[9][3];
+ Float_t daughterNegCorrectedGlobalPositions[9][3];
+};
+
+class AliAnalysisV0LamEvent
+{
+ public:
+ int fNumberCandidateV0;
+ double fPrimaryVertex[3]; //Location of the primary vertex
+ AliReconstructedV0 *fReconstructedV0;
+};
+
+class AliAnalysisV0LamEventCollection
+{
+ public:
+ AliAnalysisV0LamEventCollection();
+ AliAnalysisV0LamEventCollection(short eventBuffSize,int maxV0Mult);
+ ~AliAnalysisV0LamEventCollection();
+ void FifoShift();
+ AliAnalysisV0LamEvent *fEvt;
+ private:
+ short fifo; //Size of the Event Storage buffer
+ void SetBuffSize(short eventBuffSize){fifo = eventBuffSize;}
+};
+#endif
+
Float_t SigmaCutTOF=2.0,
TString StWeightName="alien:///alice/cern.ch/user/d/dgangadh/WeightFile_FourPion.root",
TString StMomResName="alien:///alice/cern.ch/user/d/dgangadh/MomResFile_FourPion.root",
- TString StKName="alien:///alice/cern.ch/user/d/dgangadh/KFile_FourPion.root"
- ) {
+ TString StKName="alien:///alice/cern.ch/user/d/dgangadh/KFile_FourPion.root",
+ TString StMuonName="alien:///alice/cern.ch/user/d/dgangadh/MuonCorrection_FourPion.root"
+ ) {
//===========================================================================
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
momResHisto2D = (TH2D*)inputFileMomRes->Get("MRC_C2_SC");
FourPionTask->SetMomResCorrections( kTRUE, momResHisto2D);
////////////////////////////////////////////////////
+
+ // Muon corrections
+ inputFileMuon = TFile::Open(StMuonName,"OLD");
+ if (!inputFileMuon){
+ cout << "Requested file:" << inputFileMuon << " was not opened. ABORT." << endl;
+ return NULL;
+ }
+ TH2D *muonHisto2D = 0;
+ muonHisto2D = (TH2D*)inputFileMuon->Get("WeightmuonCorrection");
+ FourPionTask->SetMuonCorrections( kTRUE, muonHisto2D);
+
}// MCcase and TabulatePairs check
dtc1etaphitpc[aniter]->SetEta(-0.8,0.8);
//PID method
- dtc1etaphitpc[aniter]->SetMass(KaonMass);
- dtc1etaphitpc[aniter]->SetMostProbableKaon();
+ dtc1etaphitpc[aniter]->SetMass(PionMass);
+ dtc1etaphitpc[aniter]->SetMostProbablePion();
//dtc1etaphitpc[aniter]->SetPIDMethod(1);//contour
//dtc1etaphitpc[aniter]->SetNsigmaTPCTOF(kTRUE);
//dtc1etaphitpc[aniter]->SetPIDMethod(AliFemtoESDTrackCut::kContour);
ktm = aniter*7 + ikt;
ktpcuts[ktm] = new AliFemtoKTPairCut(ktrng[ikt], ktrng[ikt+1]);
-
+cqinvkttpc[ktm] = new AliFemtoQinvCorrFctn(Form("cqinv%stpcM%ikT%i", chrgs[ichg], imult, ikt),nbinssh,0.0, shqmax);
+ cqinvkttpc[ktm]->SetPairSelectionCut(ktpcuts[ktm]);
+ anetaphitpc[aniter]->AddCorrFctn(cqinvkttpc[ktm]);
if (run3d) {
--- /dev/null
+//=============================================================================
+//
+// *** AddTaskFemto.C ***
+//
+// This macro initialize a complete AnalysisTask object for femtoscopy.
+//
+//=============================================================================
+
+AliAnalysisTaskFemto *AddTaskFemto(TString *configMacroName="ConfigFemtoAnalysis.C", TString containerName="femtolist", const char *configMacroParameters="")
+{
+// Creates a proton analysis task and adds it to the analysis manager.
+
+ // A. Get the pointer to the existing analysis manager via the static access method.
+ //==============================================================================
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ Error("AddTaskFemto", "No analysis manager to connect to.");
+ return NULL;
+ }
+
+ // B. Check the analysis type using the event handlers connected to the analysis
+ // manager. The availability of MC handler cann also be checked here.
+ //==============================================================================
+ if (!mgr->GetInputEventHandler()) {
+ ::Error("AddTaskFemto", "This task requires an input event handler");
+ return NULL;
+ }
+ TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+ cout << "Found " <<type << " event handler" << endl;
+
+ // C. Create the task, add it to manager.
+ //===========================================================================
+// gSystem->SetIncludePath("-I$ROOTSYS/include -I./PWG2AOD/AOD -I./PWG2femtoscopy/FEMTOSCOPY/AliFemto -I./PWG2femtoscopyUser/FEMTOSCOPY/AliFemtoUser -I$ALICE_ROOT/include");
+
+ if (TProofMgr::GetListOfManagers()->GetEntries()) {
+// if (dynamic_cast<TProofLite *> gProof) {
+// char *macrocommand[10000];
+// sprintf(macrocommand, ".L %s", configMacroName);
+// gProof->Exec(macrocommand);
+// }
+// else
+ gProof->Load(configMacroName);
+ }
+ // gROOT->LoadMacro("ConfigFemtoAnalysis.C++");
+
+ AliAnalysisTaskFemto *taskfemto = new AliAnalysisTaskFemto("TaskFemto","$ALICE_ROOT/"+configMacroName,Form("\"%s\"",configMacroParameters));
+ mgr->AddTask(taskfemto);
+
+ // D. Configure the analysis task. Extra parameters can be used via optional
+ // arguments of the AddTaskXXX() function.
+ //===========================================================================
+
+ // E. Create ONLY the output containers for the data produced by the task.
+ // Get and connect other common input/output containers via the manager as below
+ //==============================================================================
+ TString outputfile = AliAnalysisManager::GetCommonFileName();
+ outputfile += ":PWG2FEMTO";
+ AliAnalysisDataContainer *cout_femto = mgr->CreateContainer(containerName, TList::Class(),
+ AliAnalysisManager::kOutputContainer,outputfile);
+
+
+ mgr->ConnectInput(taskfemto, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(taskfemto, 0, cout_femto);
+
+ // Return task pointer at the end
+ return taskfemto;
+}
--- /dev/null
+/*********************************************************************
+ * *
+ * Configfemtoanalysis.C - configuration macro for the femtoscopic *
+ * analysis, meant as a QA process for two-particle effects *
+ * *
+ * Author: Adam Kisiel (Adam.Kisiel@cern.ch) *
+ * *
+ *********************************************************************/
+
+#if !defined(__CINT__) || defined(__MAKECINT_)
+#include "AliFemtoManager.h"
+#include "AliFemtoEventReaderESDChain.h"
+#include "AliFemtoEventReaderESDChainKine.h"
+#include "AliFemtoEventReaderAODChain.h"
+#include "AliFemtoSimpleAnalysis.h"
+#include "AliFemtoBasicEventCut.h"
+#include "AliFemtoESDTrackCut.h"
+#include "AliFemtoCorrFctn.h"
+#include "AliFemtoCutMonitorParticleYPt.h"
+#include "AliFemtoCutMonitorParticleVertPos.h"
+#include "AliFemtoCutMonitorParticleMomRes.h"
+#include "AliFemtoCutMonitorParticlePID.h"
+#include "AliFemtoCutMonitorEventMult.h"
+#include "AliFemtoCutMonitorEventVertex.h"
+#include "AliFemtoShareQualityTPCEntranceSepPairCut.h"
+#include "AliFemtoPairCutAntiGamma.h"
+#include "AliFemtoPairCutRadialDistance.h"
+#include "AliFemtoQinvCorrFctn.h"
+#include "AliFemtoCorrFctnNonIdDR.h"
+#include "AliFemtoShareQualityCorrFctn.h"
+#include "AliFemtoTPCInnerCorrFctn.h"
+#include "AliFemtoVertexMultAnalysis.h"
+#include "AliFemtoCorrFctn3DSpherical.h"
+#include "AliFemtoChi2CorrFctn.h"
+#include "AliFemtoCorrFctnTPCNcls.h"
+#include "AliFemtoBPLCMS3DCorrFctn.h"
+#include "AliFemtoCorrFctn3DLCMSSym.h"
+#include "AliFemtoModelBPLCMSCorrFctn.h"
+#include "AliFemtoModelCorrFctn3DSpherical.h"
+#include "AliFemtoModelGausLCMSFreezeOutGenerator.h"
+#include "AliFemtoModelGausRinvFreezeOutGenerator.h"
+#include "AliFemtoModelManager.h"
+#include "AliFemtoModelWeightGeneratorBasic.h"
+#include "AliFemtoModelWeightGeneratorLednicky.h"
+#include "AliFemtoCorrFctnDirectYlm.h"
+#include "AliFemtoModelCorrFctnDirectYlm.h"
+#include "AliFemtoModelCorrFctnSource.h"
+#include "AliFemtoCutMonitorParticlePtPDG.h"
+#include "AliFemtoKTPairCut.h"
+#include "AliFemtoPairCutPt.h"
+#endif
+
+//________________________________________________________________________
+AliFemtoManager* ConfigFemtoAnalysis(const char* params="") {
+
+ double PionMass = 0.13956995;
+ double KaonMass = 0.493677;
+ double ProtonMass = 0.938272013;
+
+ const int numOfMultBins = 5;
+ const int numOfChTypes = 13;
+ const int numOfkTbins = 3;
+
+
+
+ char *parameter[10];
+ if(strlen(params)!=0)
+ {
+ parameter[0] = strtok(params, ","); // Splits spaces between words in params
+ cout<<"Parameter [0] (filterbit):"<<parameter[0]<<endl; // Writes first parameter
+ parameter[1] = strtok(NULL, ",");
+ cout<<"Parameter [1] (ktdep):"<<parameter[1]<<" "<<endl;
+ parameter[2] = strtok(NULL, ",");
+ cout<<"Parameter [2] (multdep):"<<parameter[2]<<" "<<endl;
+ parameter[3] = strtok(NULL, ",");
+ cout<<"Parameter [3]: (MinPlpContribSPD)"<<parameter[3]<<" "<<endl;
+ }
+
+ int runmultdep = atoi(parameter[2]);
+
+ int runmults[numOfMultBins] = {0, 0, 0, 0, 1};
+ if(runmultdep) { runmults[0]=1; runmults[1]=1; runmults[2]=1; }
+ int multbins[numOfMultBins+1] = {2, 20, 50,150,2,150};
+
+
+ int runch[numOfChTypes] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
+ const char *chrgs[numOfChTypes] = { "PP", "aPaP", "PaP", "KpKp", "KmKm", "KpKm", "PIpPIp", "PImPIm", "PIpPIm", "all", "plus", "minus", "mixed" };
+
+
+ int runktdep = atoi(parameter[1]);
+ double ktrng[numOfkTbins+1] = {0.0, 0.75, 2.0, 100.0};
+
+ int runqinv = 1;
+ int runshlcms = 1;// 0:PRF(PAP), 1:LCMS(PP,APAP)
+
+ int runtype = 0; // Types 0 - global, 1 - ITS only, 2 - TPC Inner //global tracks ->mfit ITS+TPC
+ int owncuts = 0;
+ int owndca = 0;
+
+ int gammacut = 1; // cut na ee z gamma
+
+ double shqmax = 0.5;
+ int nbinssh = 100;
+
+ //AliFemtoEventReaderESDChain *Reader = new AliFemtoEventReaderESDChain();
+ //Reader->SetUseMultiplicity(AliFemtoEventReaderESDChain::kGlobalCount);
+
+
+ AliFemtoEventReaderAODChain *Reader = new AliFemtoEventReaderAODChain();
+ Reader->SetFilterMask(atoi(parameter[0]));
+ Reader->SetDCAglobalTrack(kTRUE); //false for FB7, true for the rest //we do not use DCA at all
+ Reader->SetUseMultiplicity(AliFemtoEventReaderAOD::kReference);
+ Reader->SetMinPlpContribSPD(atoi(parameter[3]));
+ Reader->SetIsPileUpEvent(kTRUE);
+
+ AliFemtoManager* Manager = new AliFemtoManager();
+ Manager->SetEventReader(Reader);
+
+ AliFemtoVertexMultAnalysis *anetaphitpc[320];
+ AliFemtoBasicEventCut *mecetaphitpc[320];
+ AliFemtoCutMonitorEventMult *cutPassEvMetaphitpc[320];
+ AliFemtoCutMonitorEventMult *cutFailEvMetaphitpc[320];
+ AliFemtoCutMonitorEventVertex *cutPassEvVetaphitpc[320];
+ AliFemtoCutMonitorEventVertex *cutFailEvVetaphitpc[320];
+ AliFemtoESDTrackCut *dtc1etaphitpc[320];
+ AliFemtoESDTrackCut *dtc2etaphitpc[320];
+ AliFemtoESDTrackCut *dtc3etaphitpc[320];
+ AliFemtoCutMonitorParticleYPt *cutPass1YPtetaphitpc[320];
+ AliFemtoCutMonitorParticleYPt *cutFail1YPtetaphitpc[320];
+ AliFemtoCutMonitorParticlePID *cutPass1PIDetaphitpc[320];
+ AliFemtoCutMonitorParticlePID *cutFail1PIDetaphitpc[320];
+ AliFemtoCutMonitorParticleYPt *cutPass2YPtetaphitpc[320];
+ AliFemtoCutMonitorParticleYPt *cutFail2YPtetaphitpc[320];
+ AliFemtoCutMonitorParticlePID *cutPass2PIDetaphitpc[320];
+ AliFemtoCutMonitorParticlePID *cutFail2PIDetaphitpc[320];
+ AliFemtoCutMonitorParticleYPt *cutPass3YPtetaphitpc[320];
+ AliFemtoCutMonitorParticleYPt *cutFail3YPtetaphitpc[320];
+ AliFemtoCutMonitorParticlePID *cutPass3PIDetaphitpc[320];
+ AliFemtoCutMonitorParticlePID *cutFail3PIDetaphitpc[320];
+ // AliFemtoShareQualityTPCEntranceSepPairCut *sqpcetaphitpcsame[320];
+ //AliFemtoPairCutAntiGamma *sqpcetaphitpc[320];
+ //AliFemtoPairCutRadialDistance *sqpcetaphitpc[320];
+ AliFemtoShareQualityPairCut *sqpcetaphitpc[320];
+ // AliFemtoChi2CorrFctn *cchiqinvetaphitpc[320];
+ AliFemtoPairCutPt *ktpcuts[320];
+ AliFemtoQinvCorrFctn *cqinvkttpc[320];
+ AliFemtoQinvCorrFctn *cqinvtpc[320];
+ AliFemtoCorrFctnDEtaDPhi *cdedpetaphi[320];
+
+
+
+ // *** Third QA task - HBT analysis with all pair cuts off, TPC only ***
+ // *** Begin pion-pion (positive) analysis ***
+ int aniter = 0;
+
+ for (int imult = 0; imult < numOfMultBins; imult++)
+ {
+ if (runmults[imult])
+ {
+ for (int ichg = 0; ichg < numOfChTypes; ichg++)
+ {
+ if (runch[ichg])
+ {
+
+ aniter = ichg * numOfMultBins + imult;
+ anetaphitpc[aniter] = new AliFemtoVertexMultAnalysis(10, -10.0, 10.0, 30, multbins[imult], multbins[imult+1]);
+ anetaphitpc[aniter]->SetNumEventsToMix(10);
+ anetaphitpc[aniter]->SetMinSizePartCollection(1);
+
+ //*** Event cut ***
+ mecetaphitpc[aniter] = new AliFemtoBasicEventCut();
+ mecetaphitpc[aniter]->SetEventMult(0.001,100000);
+ mecetaphitpc[aniter]->SetVertZPos(-10,10);//cm
+
+ //****** event monitors **********
+ cutPassEvMetaphitpc[aniter] = new AliFemtoCutMonitorEventMult(Form("cutPass%stpcM%i", chrgs[ichg], imult));
+ cutFailEvMetaphitpc[aniter] = new AliFemtoCutMonitorEventMult(Form("cutFail%stpcM%i", chrgs[ichg], imult));
+ mecetaphitpc[aniter]->AddCutMonitor(cutPassEvMetaphitpc[aniter], cutFailEvMetaphitpc[aniter]);
+
+ cutPassEvVetaphitpc[aniter] = new AliFemtoCutMonitorEventVertex(Form("cutPass%stpcM%i", chrgs[ichg], imult));
+ cutFailEvVetaphitpc[aniter] = new AliFemtoCutMonitorEventVertex(Form("cutFail%stpcM%i", chrgs[ichg], imult));
+ mecetaphitpc[aniter]->AddCutMonitor(cutPassEvVetaphitpc[aniter], cutFailEvVetaphitpc[aniter]);
+
+
+ // ***** single particle track cuts *********
+ dtc1etaphitpc[aniter] = new AliFemtoESDTrackCut();
+ dtc2etaphitpc[aniter] = new AliFemtoESDTrackCut();
+ dtc3etaphitpc[aniter] = new AliFemtoESDTrackCut();
+
+ dtc1etaphitpc[aniter]->SetNsigmaTPCTOF(kTRUE);
+ dtc2etaphitpc[aniter]->SetNsigmaTPCTOF(kTRUE);
+ dtc3etaphitpc[aniter]->SetNsigmaTPCTOF(kTRUE);
+ dtc1etaphitpc[aniter]->SetNsigma(3.0);
+ dtc2etaphitpc[aniter]->SetNsigma(3.0);
+ dtc3etaphitpc[aniter]->SetNsigma(3.0);
+
+ dtc1etaphitpc[aniter]->SetCharge(1.0);
+ dtc2etaphitpc[aniter]->SetCharge(-1.0);
+
+ dtc1etaphitpc[aniter]->SetEta(-0.8,0.8);
+ dtc2etaphitpc[aniter]->SetEta(-0.8,0.8);
+ dtc3etaphitpc[aniter]->SetEta(-0.8,0.8);
+
+ dtc1etaphitpc[aniter]->SetElectronRejection(true);
+ dtc2etaphitpc[aniter]->SetElectronRejection(true);
+ dtc3etaphitpc[aniter]->SetElectronRejection(true);
+
+ if (ichg == 0 ||ichg == 1 ||ichg == 2)//protons 0-2
+ {
+ dtc1etaphitpc[aniter]->SetPt(0.5,4);
+ dtc2etaphitpc[aniter]->SetPt(0.5,4);
+
+ dtc1etaphitpc[aniter]->SetMass(ProtonMass);
+ dtc1etaphitpc[aniter]->SetMostProbableProton();
+ dtc2etaphitpc[aniter]->SetMass(ProtonMass);
+ dtc2etaphitpc[aniter]->SetMostProbableProton();
+ }
+
+ if (ichg == 3 ||ichg == 4 ||ichg == 5)//kaons 3-5
+ {
+ dtc1etaphitpc[aniter]->SetPt(0.3,4);
+ dtc2etaphitpc[aniter]->SetPt(0.3,4);
+
+ dtc1etaphitpc[aniter]->SetMass(KaonMass);
+ dtc1etaphitpc[aniter]->SetMostProbableKaon();
+ dtc2etaphitpc[aniter]->SetMass(KaonMass);
+ dtc2etaphitpc[aniter]->SetMostProbableKaon();
+
+ }
+ if (ichg == 6 ||ichg == 7 ||ichg == 8)//pions 6-8
+ {
+ dtc1etaphitpc[aniter]->SetPt(0.2,4);
+ dtc2etaphitpc[aniter]->SetPt(0.2,4);
+
+ dtc1etaphitpc[aniter]->SetMass(PionMass);
+ dtc1etaphitpc[aniter]->SetMostProbablePion();
+ dtc2etaphitpc[aniter]->SetMass(PionMass);
+ dtc2etaphitpc[aniter]->SetMostProbablePion();
+ }
+ if (ichg == 9)//all
+ {
+ dtc3etaphitpc[aniter]->SetPt(0.2,4);
+ }
+ if (ichg == 10 ||ichg == 11 ||ichg == 12)//plus,minus,mixed
+ {
+ dtc1etaphitpc[aniter]->SetPt(0.2,4);
+ dtc2etaphitpc[aniter]->SetPt(0.2,4);
+ }
+
+ //****** DCA ******
+
+ if(owndca){
+ dtc1etaphitpc[aniter]->SetMaxImpactXYPtDep(0.018, 0.035, -1.01); // DCA xy
+ //dtc1etaphitpc[aniter]->SetMaxImpactXYPtDep(0.0182, 0.0350, -1.01);
+ dtc1etaphitpc[aniter]->SetMaxImpactZ(2); //DCA Z
+ dtc2etaphitpc[aniter]->SetMaxImpactXYPtDep(0.018, 0.035, -1.01); // DCA xy
+ dtc2etaphitpc[aniter]->SetMaxImpactZ(2); //DCA Z
+ dtc3etaphitpc[aniter]->SetMaxImpactXYPtDep(0.018, 0.035, -1.01); // DCA xy
+ dtc3etaphitpc[aniter]->SetMaxImpactZ(2); //DCA Z
+ }
+ //****** Track quality cuts ******
+
+ if(owncuts){
+
+ dtc1etaphitpc[aniter]->SetStatus(AliESDtrack::kTPCrefit|AliESDtrack::kITSrefit);
+ dtc1etaphitpc[aniter]->SetminTPCncls(70);
+ dtc1etaphitpc[aniter]->SetRemoveKinks(kTRUE);
+ dtc1etaphitpc[aniter]->SetLabel(kFALSE);
+ // dtc1etaphitpc[aniter]->SetMaxITSChiNdof(6.0);
+ dtc1etaphitpc[aniter]->SetMaxTPCChiNdof(4.0); // pisac
+ //dtc1etaphitpc[aniter]->SetMaxSigmaToVertex(6.0);
+
+ dtc2etaphitpc[aniter]->SetStatus(AliESDtrack::kTPCrefit|AliESDtrack::kITSrefit);
+ dtc2etaphitpc[aniter]->SetminTPCncls(70);
+ dtc2etaphitpc[aniter]->SetRemoveKinks(kTRUE);
+ dtc2etaphitpc[aniter]->SetLabel(kFALSE);
+ // dtc2etaphitpc[aniter]->SetMaxITSChiNdof(6.0);
+ dtc2etaphitpc[aniter]->SetMaxTPCChiNdof(4.0);
+ // dtc2etaphitpc[aniter]->SetMaxSigmaToVertex(6.0);
+
+ dtc3etaphitpc[aniter]->SetStatus(AliESDtrack::kTPCrefit|AliESDtrack::kITSrefit);
+ dtc3etaphitpc[aniter]->SetminTPCncls(70);
+ dtc3etaphitpc[aniter]->SetRemoveKinks(kTRUE);
+ dtc3etaphitpc[aniter]->SetLabel(kFALSE);
+ // dtc3etaphitpc[aniter]->SetMaxITSChiNdof(6.0);
+ dtc3etaphitpc[aniter]->SetMaxTPCChiNdof(4.0);
+ // dtc3etaphitpc[aniter]->SetMaxSigmaToVertex(6.0);
+
+ }
+ //**************** track Monitors ***************
+
+
+ if(1)//ichg>8)
+ {
+ cutPass3YPtetaphitpc[aniter] = new AliFemtoCutMonitorParticleYPt(Form("cutPass%stpcM%i", chrgs[ichg], imult),PionMass);
+ cutFail3YPtetaphitpc[aniter] = new AliFemtoCutMonitorParticleYPt(Form("cutFail%stpcM%i", chrgs[ichg], imult),PionMass);
+ if(ichg==9) dtc3etaphitpc[aniter]->AddCutMonitor(cutPass3YPtetaphitpc[aniter], cutFail3YPtetaphitpc[aniter]);
+ if(ichg==0||ichg==3||ichg==6||ichg==10) dtc1etaphitpc[aniter]->AddCutMonitor(cutPass3YPtetaphitpc[aniter], cutFail3YPtetaphitpc[aniter]);
+ if(ichg==1||ichg==4||ichg==7||ichg==11) dtc2etaphitpc[aniter]->AddCutMonitor(cutPass3YPtetaphitpc[aniter], cutFail3YPtetaphitpc[aniter]);
+
+ if(ichg<3){
+ cutPass3PIDetaphitpc[aniter] = new AliFemtoCutMonitorParticlePID(Form("cutPass%stpcM%i", chrgs[ichg], imult),2);//0-pion,1-kaon,2-proton
+ cutFail3PIDetaphitpc[aniter] = new AliFemtoCutMonitorParticlePID(Form("cutFail%stpcM%i", chrgs[ichg], imult),2);
+ }
+ else if(ichg>=3 && ichg<=5){
+ cutPass3PIDetaphitpc[aniter] = new AliFemtoCutMonitorParticlePID(Form("cutPass%stpcM%i", chrgs[ichg], imult),1);//0-pion,1-kaon,2-proton
+ cutFail3PIDetaphitpc[aniter] = new AliFemtoCutMonitorParticlePID(Form("cutFail%stpcM%i", chrgs[ichg], imult),1);
+ }
+ else{
+ cutPass3PIDetaphitpc[aniter] = new AliFemtoCutMonitorParticlePID(Form("cutPass%stpcM%i", chrgs[ichg], imult),0);//0-pion,1-kaon,2-proton
+ cutFail3PIDetaphitpc[aniter] = new AliFemtoCutMonitorParticlePID(Form("cutFail%stpcM%i", chrgs[ichg], imult),0);
+
+ }
+ if(ichg==9) dtc3etaphitpc[aniter]->AddCutMonitor(cutPass3PIDetaphitpc[aniter], cutFail3PIDetaphitpc[aniter]);
+ if(ichg==0||ichg==3||ichg==6||ichg==10) dtc1etaphitpc[aniter]->AddCutMonitor(cutPass3PIDetaphitpc[aniter], cutFail3PIDetaphitpc[aniter]);
+ if(ichg==1||ichg==4||ichg==7||ichg==11) dtc2etaphitpc[aniter]->AddCutMonitor(cutPass3PIDetaphitpc[aniter], cutFail3PIDetaphitpc[aniter]);
+ }
+
+ //******** Two - track cuts ************
+ //sqpcetaphitpc[aniter] = new AliFemtoPairCutAntiGamma();
+ //sqpcetaphitpc[aniter] = new AliFemtoPairCutRadialDistance();
+ sqpcetaphitpc[aniter] = new AliFemtoShareQualityPairCut();
+
+ sqpcetaphitpc[aniter]->SetShareQualityMax(0.0); // two track cuts on splitting and merging //1- wylaczany 0 -wlaczany
+ sqpcetaphitpc[aniter]->SetShareFractionMax(0.05); // ile moga miec wspolnych klastrow //1 - wylaczany, 0.05 - wlaczany
+ sqpcetaphitpc[aniter]->SetRemoveSameLabel(kFALSE);
+ /*sqpcetaphitpc[aniter]->SetMaximumRadius(2.51);
+ sqpcetaphitpc[aniter]->SetMinimumRadius(0.8);
+ sqpcetaphitpc[aniter]->SetPhiStarDifferenceMinimum(0.02);
+ sqpcetaphitpc[aniter]->SetEtaDifferenceMinimum(0.2);
+
+ if (gammacut == 0)
+ {
+ sqpcetaphitpc[aniter]->SetMaxEEMinv(0.0);
+ sqpcetaphitpc[aniter]->SetMaxThetaDiff(0.0);
+ }
+ else if (gammacut == 1)
+ {
+ sqpcetaphitpc[aniter]->SetMaxEEMinv(0.002);
+ sqpcetaphitpc[aniter]->SetMaxThetaDiff(0.008);
+ }*/
+
+ // sqpcetaphitpc[aniter]->SetTPCEntranceSepMinimum(1.5);
+ // sqpcetaphitpc[aniter]->SetRadialDistanceMinimum(0.12, 0.03);
+ // sqpcetaphitpc[aniter]->SetEtaDifferenceMinimum(0.02);
+
+
+
+
+ //***** Setting cuts ***********
+
+
+ // setting event cut
+ anetaphitpc[aniter]->SetEventCut(mecetaphitpc[aniter]);
+ //setting single track cuts
+ if(ichg==0 || ichg==3 || ichg==6 || ichg==10) //positive like-sign
+ {
+ anetaphitpc[aniter]->SetFirstParticleCut(dtc1etaphitpc[aniter]);
+ anetaphitpc[aniter]->SetSecondParticleCut(dtc1etaphitpc[aniter]);
+ }
+ if(ichg==1 || ichg==4 || ichg==7 || ichg==11)//negative like-sign
+ {
+ anetaphitpc[aniter]->SetFirstParticleCut(dtc2etaphitpc[aniter]);
+ anetaphitpc[aniter]->SetSecondParticleCut(dtc2etaphitpc[aniter]);
+ }
+ if(ichg==2 || ichg==5 || ichg==8 || ichg==12)//unlike-sign
+ {
+ anetaphitpc[aniter]->SetFirstParticleCut(dtc1etaphitpc[aniter]);
+ anetaphitpc[aniter]->SetSecondParticleCut(dtc2etaphitpc[aniter]);
+ }
+ if(ichg==9) //all
+ {
+ anetaphitpc[aniter]->SetFirstParticleCut(dtc3etaphitpc[aniter]);
+ anetaphitpc[aniter]->SetSecondParticleCut(dtc3etaphitpc[aniter]);
+ }
+
+ //setting two-track cuts
+ anetaphitpc[aniter]->SetPairCut(sqpcetaphitpc[aniter]);
+
+
+ //**** Correlation functions *******
+
+ cdedpetaphi[aniter] = new AliFemtoCorrFctnDEtaDPhi(Form("cdedp%stpcM%i", chrgs[ichg], imult),35, 35);
+ anetaphitpc[aniter]->AddCorrFctn(cdedpetaphi[aniter]);
+
+
+ if (runktdep)
+ {
+ int ktm;
+ for (int ikt=0; ikt<numOfkTbins; ikt++)
+ {
+ ktm = aniter * numOfkTbins + ikt;
+ ktpcuts[ktm] = new AliFemtoPairCutPt(ktrng[ikt], ktrng[ikt+1]);
+
+ //cqinvkttpc[ktm] = new AliFemtoQinvCorrFctn(Form("cqinv%stpcM%ikT%i", chrgs[ichg], imult, ikt),nbinssh,0.0,(imult>6)?shqmax*2.5:shqmax);
+ //cqinvkttpc[ktm]->SetPairSelectionCut(ktpcuts[ktm]);
+ //anetaphitpc[aniter]->AddCorrFctn(cqinvkttpc[ktm]);
+
+ cdedpetaphi[ktm] = new AliFemtoCorrFctnDEtaDPhi(Form("cdedp%stpcM%ipT%i", chrgs[ichg], imult,ikt),35, 35);
+ cdedpetaphi[ktm]->SetPairSelectionCut(ktpcuts[ktm]);
+ anetaphitpc[aniter]->AddCorrFctn(cdedpetaphi[ktm]);
+
+ }
+ }
+ Manager->AddAnalysis(anetaphitpc[aniter]);
+ }
+ }
+ }
+ }
+ return Manager;
+}
--- /dev/null
+//=============================================================================
+//
+// *** AddTaskFemto.C ***
+//
+// This macro initialize a complete AnalysisTask object for femtoscopy.
+//
+//=============================================================================
+
+AliAnalysisTaskFemto *AddTaskFemto(TString configMacroName, TString containerName="femtolist", TString configMacroParameters="" )
+{
+// Creates a proton analysis task and adds it to the analysis manager.
+
+ // A. Get the pointer to the existing analysis manager via the static access method.
+ //==============================================================================
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ Error("AddTaskFemto", "No analysis manager to connect to.");
+ return NULL;
+ }
+
+ // B. Check the analysis type using the event handlers connected to the analysis
+ // manager. The availability of MC handler cann also be checked here.
+ //==============================================================================
+ if (!mgr->GetInputEventHandler()) {
+ ::Error("AddTaskFemto", "This task requires an input event handler");
+ return NULL;
+ }
+ TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+ cout << "Found " <<type << " event handler" << endl;
+
+ // C. Create the task, add it to manager.
+ //===========================================================================
+// gSystem->SetIncludePath("-I$ROOTSYS/include -I./PWG2AOD/AOD -I./PWG2femtoscopy/FEMTOSCOPY/AliFemto -I./PWG2femtoscopyUser/FEMTOSCOPY/AliFemtoUser -I$ALICE_ROOT/include");
+
+ if (TProofMgr::GetListOfManagers()->GetEntries()) {
+// if (dynamic_cast<TProofLite *> gProof) {
+// char *macrocommand[10000];
+// sprintf(macrocommand, ".L %s", configMacroName);
+// gProof->Exec(macrocommand);
+// }
+// else
+ gProof->Load(configMacroName);
+ }
+ // gROOT->LoadMacro("ConfigFemtoAnalysis.C++");
+
+ AliAnalysisTaskFemto *taskfemto = new AliAnalysisTaskFemto("TaskFemto",configMacroName,configMacroParameters,kFALSE);
+ mgr->AddTask(taskfemto);
+
+ // D. Configure the analysis task. Extra parameters can be used via optional
+ // arguments of the AddTaskXXX() function.
+ //===========================================================================
+
+ // E. Create ONLY the output containers for the data produced by the task.
+ // Get and connect other common input/output containers via the manager as below
+ //==============================================================================
+ TString outputfile = AliAnalysisManager::GetCommonFileName();
+ outputfile += ":PWG2FEMTO";
+ AliAnalysisDataContainer *cout_femto = mgr->CreateContainer(containerName, TList::Class(),
+ AliAnalysisManager::kOutputContainer,outputfile);
+
+
+ mgr->ConnectInput(taskfemto, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(taskfemto, 0, cout_femto);
+
+ // Return task pointer at the end
+ return taskfemto;
+}
--- /dev/null
+AliAnalysisTaskParticleEfficiency *AddTaskQAPartEff(const char* outfilename="AnalysisResults.root")
+{
+ // Get the pointer to the existing analysis manager via the static access method.
+ //==============================================================================
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ ::Error("AddTaskPhiCorrelations", "No analysis manager to connect to.");
+ return NULL;
+ }
+
+ //==============================================================================
+ if (!mgr->GetInputEventHandler()) {
+ ::Error("AddTaskFemto", "This task requires an input event handler");
+ return NULL;
+ }
+ TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+ cout << "Found " <<type << " event handler" << endl;
+
+
+
+ // Create the task and configure it.
+ //===========================================================================
+ AliAnalysisTaskParticleEfficiency* ana = new AliAnalysisTaskParticleEfficiency("MyTask");
+
+ if (!outfilename)
+ outfilename = AliAnalysisManager::GetCommonFileName();
+
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("MyList", TList::Class(),AliAnalysisManager::kOutputContainer,outfilename);
+
+ mgr->AddTask(ana);
+
+
+ mgr->ConnectInput (ana, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput (ana, 0, coutput1 );
+
+ return ana;
+
+}
--- /dev/null
+void runBatch(int Nevents=20000000, const char* outfilename="AnalysisResults.root", bool batchmode=kTRUE, const char* collectionfile="collection.xml") {
+ TStopwatch timer;
+ timer.Start();
+
+ printf("*** Connect to AliEn ***\n");
+ TGrid::Connect("alien://");
+
+ gSystem->Load("libTree.so");
+ gSystem->Load("libGeom.so");
+ gSystem->Load("libVMC.so");
+ gSystem->Load("libPhysics.so");
+ //____________________________________________________//
+ //_____________Setting up required packages___________//
+ //____________________________________________________//
+ gSystem->Load("libSTEERBase.so");
+ gSystem->Load("libESD.so");
+ gSystem->Load("libAOD.so");
+ gSystem->Load("libANALYSIS.so");
+ gSystem->Load("libANALYSISalice.so");
+ gROOT->ProcessLine(".include $ALICE_ROOT/include");
+ //ANALYSIS PART
+ // gROOT->LoadMacro("AliAnalysisCheck.cxx+g");
+
+gROOT->LoadMacro("AliAnalysisTaskParticleEfficiency.cxx+g");
+
+ //gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
+
+
+
+ TChain *chain = new TChain("aodTree");
+
+ const char *collectionfile="wn.xml";
+ ifstream *istr = new ifstream(collectionfile);
+
+ char fname[2000];
+ char pname[2000];
+ while (!istr->eof()) {
+ fname[0] = '\0';
+ (*istr) >> fname;
+ if (strlen(fname) > 10) {
+ sprintf(pname, "alien://%s", fname);
+ chain->Add(pname);
+ }
+ }
+
+
+ //chain->Add("../../data/AOD/PbPb/AOD95/AliAOD.root");
+ //chain->Add("/opt/alice/workdir/TestConfig/data/Pythia/AOD/1/AliAOD.root");
+ //chain->Add("/opt/alice/workdir/TestConfig/data/AOD/PbPb/PbPb.LHC10h/AOD86/1/AliAOD.root");
+ //chain->Add("/opt/alice/workdir/TestConfig/data/AOD/PbPb/PbPb.LHC10h/AOD86/2/AliAOD.root");
+ // chain->Add("/opt/alice/workdir/TestConfig/data/AOD/PbPb/PbPb.LHC10h/AOD86/3/AliAOD.root");
+ //chain->Add("/opt/alice/workdir/TestConfig/data/AOD/PbPb/PbPb.LHC10h/AOD86/4/AliAOD.root");
+ // chain->Add("../../data/AOD/PbPb/New.PbPb.2012.01/AliAOD.root");
+ //chain->Add("../../data/AOD/PbPb/New.PbPb.2012.01.2/AliAOD.root");
+// else {
+
+
+// chain = CreateChainFromCollection(collectionfile, "esdTree");
+ // }
+
+
+ //____________________________________________//
+ // Make the analysis manager
+ AliAnalysisManager *mgr = new AliAnalysisManager("TestManager");
+
+ AliAODInputHandler* aodH = new AliAODInputHandler;
+ mgr->SetInputEventHandler(aodH);
+ //____________________________________________//
+ // 1st Pt task
+
+
+ //AddTaskPIDResponse
+ gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
+ Bool_t isMC=kTRUE; Bool_t tuneOnData = kTRUE; // kTRUE in case of MC
+ AddTaskPIDResponse(isMC,kTRUE,tuneOnData);
+
+ //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C");
+ //AddTaskPIDqa();
+
+ AliAnalysisTaskParticleEfficiency *myTask = new AliAnalysisTaskParticleEfficiency("MyTask");
+ if(!myTask) exit(-1);
+ mgr->AddTask(myTask);
+
+ // Create containers for input/output
+ AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
+ AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("MyList", TList::Class(),AliAnalysisManager::kOutputContainer,outfilename);
+
+ //____________________________________________//
+ mgr->ConnectInput(myTask,0,cinput);
+ mgr->ConnectOutput(myTask,1,coutput2);
+
+ if (!mgr->InitAnalysis()) return;
+ mgr->PrintStatus();
+ mgr->StartAnalysis("local",chain, Nevents);
+
+ timer.Stop();
+ timer.Print();
+}
+
+//______________________________________________________________________________
+TChain *CreateChainFromCollection(const char* xmlfile, const char *treeName="esdTree")
+{
+// Create a chain from an alien collection.
+ TAlienCollection * myCollection = TAlienCollection::Open(xmlfile);
+
+ if (!myCollection) {
+ ::Error("CreateChainSingle", "Cannot create an AliEn collection from %s", xmlfile) ;
+ return NULL ;
+ }
+
+ TChain* chain = new TChain(treeName);
+ myCollection->Reset() ;
+ while ( myCollection->Next() ) chain->Add(myCollection->GetTURL("")) ;
+ chain->ls();
+ return chain;
+}
-\documentclass[a5paper]{book}
+\documentclass[a4paper]{book}
\usepackage[nottoc,numbib]{tocbibind}
\usepackage[english]{babel}
\usepackage[pdftex]{graphics} %enable pdfgraphics support necessary for pdflatex
Now we have all the ingredients to our first flow analysis
\begin{lstlisting}
+// make an event with mult particles
+AliFlowEventSimple* event = new AliFlowEventSimple(mult,AliFlowEventSimple::kGenerate);
+// modify the tracks adding the flow value v2
+event->AddV2(diffv2);
for(Int_t i=0; i<nEvts; i++) {
- // make an event with mult particles
- AliFlowEventSimple* event = new AliFlowEventSimple(mult,AliFlowEventSimple::kGenerate);
- // modify the tracks adding the flow value v2
- event->AddV2(diffv2);
// select the particles for the reference flow
event->TagRP(cutsRP);
// select the particles for differential flow
// do flow analysis with various methods:
mcep->Make(event);
qc->Make(event);
+ // reset the event so we can re-use the allocated memory
+ event->ClearFast();
+ // fill the event with a fresh set of tracks
+ event->Generate(mult);
} \end{lstlisting}
\item To fill the histograms which contain the final results we have to call Finish for each method:
\begin{lstlisting}
\section{A simple flow analysis in ALICE using Tasks}
The macro \texttt{Documentation/examples/runFlowTaskExample.C} \index{runFlowTaskExample.C}is an example how to setup a flow analysis using the full \texttt{ALICE} Analysis Framework.
-\chapter{The Flow Event}
-\label{flowevent}
-Here we describe the flowevent, flowtracks, general cuts and cuts for RPs POIs.
-OntheFly, AfterBurner. Filling with ESD, AOD, Ntuples, etc.
\chapter{The Program}
-\label{The Program}
+The basic idea behind the flow package is that from whatever input you have, a \emph{flow event} is constructed, which is then passed to one or more flow analysis methods (e.g. the scalar product method or Q-cumulant method). The flow event is a collection of \emph{flow tracks}, which are simple objects carrying only the kinematic information that is necessary to do flow analysis. By setting up the flow package in this way, the flow analysis methods can analyze input from various sources, be it ALICE data, Monte Carlo events, STAR data, etc, etc, as long as the flow event is properly filled. This might all sound a bit abstract at this point; this chapter however will explain all details and relevant classes in detail. For those who are impatient and prefer seeing the flow package in action, section \ref{sec:example} gives a step-by-step example of doing a $\pi^{\pm}$ $v_2$ analysis in the \texttt{AliROOT} analysis framework.
+
+\section{Overview}
+\begin{figure}
\begin{center}
- \includegraphics[width=1.\textwidth]{figs/flowChart.png}
+\includegraphics[width=.75\textwidth]{figs/flowChart.png}
+\caption{Schematic presentation of the organization of the flow package. Input, which can come from any kind of source, is converted to a generic \texttt{AliFlowEventSimple} object, which in turn is passed to the analysis methods.}
+\label{fig:flowchart}
\end{center}
-Here we describe the program.
-%-----------------------------------------------------------------------
+\end{figure}
+Figure \ref{fig:flowchart} gives a simple schematic representation of the flow package. Input events (in the case of the figure this is either ESDs or AODs) pass a set of event cuts (the common cuts) and are then converted to a flow event (stored as an \texttt{AliFlowEventSimple} object). This flow event holds a collection of flow tracks (\texttt{AliFlowTrackSimple} objects) which are passed to flow analysis methods. The only steps of this flow chart which depend on \texttt{AliROOT} libraries are the ones handling \textt{ALICE} data types (the ESDs or AODs). The rest of the analysis chain (the \texttt{AliFlowEventSimle} and the analysis methods) have no specific \texttt{AliROOT} dependence and are just simple \texttt{c++} objects. Therefore, the flow package is split into two libraries
+\begin{description}
+\item [libPWGflowBase] The base library, which has no specific \texttt{AliROOT} dependencies. This library holds objects such as the \texttt{AliFlowEventSimple} and \texttt{AliFlowTrackSimple}, and analysis methods classes. The analysis methods classes follow the naming scheme: \texttt{AliFlowAnalysisWith$\ast$} where $\ast$ denotes a specific analysis method. All classes which end up in the \text{libPWGflowBase.so} shared object can be found in \texttt{\$ALICE\_ROOT/PWG/FLOW/Base};
+\item [libPWGflowTasks] The tasks library, which has specific \texttt{AliROOT} dependencies. Contrary to what the name suggests, this library does not just hold tasks, but actually comprises all classes of the flow package which need to include \texttt{AliROOT} specific classes. This ranges from classes to read the AOD or ESD input data (important examples are the \texttt{AliFlowEvent} and \texttt{AliFlowTrackCuts}, which will be discussed later on in this chapter) and the \texttt{AliAnalysisTask$\ast$} classes, which are analysis tasks, derived from \texttt{AliAnalysisTaskSE} which can be used in the \texttt{AliROOT} analysis framework and are actually just interface classes to the underlying flow analysis methods of libPWGflowBase. The \text{libPWGflowTasks.so} shared object can be found in \texttt{\$ALICE\_ROOT/PWG/FLOW/Tasks};
+\end{description}
+
+
+\section{Flow Event}
+Every flow analysis in the flow package starts with the flow event. As mentioned earlier, the flow event is a simple container class which holds a collection of flow tracks, which are in turn fed to the flow analysis methods.
+\subsection{Input data}
+Before passing the flow event to the flow analysis methods, it needs to be filled with a set of flow tracks. In general, a distinction is made between \emph{reference particles} (or \emph{RP's}), which are particles that are used to build the \textbf{Q} vector(s), and \emph{particles of interest} (or \emph{POI's}), which are the particles of which you'll calculate the differential flow. The flow event and the flow analysis methods are designed to keep track of which flow tracks are POI's, RP's (or even both at the same time), which is important to avoid auto-correlation effects which can distort the $v_n$ measurement. The user of the flow package however is responsible for properly setting up the analysis!
+
+The flow event can be filled with input from many sources. In the second chapter of this manual, a simple method has been shown where the flow event (the \texttt{AliFlowEventSimple} object) fills itself by generating a set of Monte Carlo tracks by sampling kinematic variables from supplied p.d.f.'s. Using this method is a very effective tool for testing and developing new flow analysis methods (if you generate events with a certain $v_2(p_t)$ and then retrieve the same $v_2(p_t)$ from your flow analysis method, you can use that as a tool to proof the validation of your analysis method) but if you want to do a data analysis, a somewhat more advanced - but not difficult - approach is necessary.
+
+Filling a flow event from data can be performed either `by-hand' (which is covered in section \ref{sec:exotic} on more exotic analyses), but the most commonly used method of filling a flow event in the \texttt{AliROOT} analysis framework is using the dedicated task \texttt{AliAnalysisTaskFlowEvent}.
+
+
+
+or by using the class \texttt{AliFlowEvent}. \texttt{AliFlowEvent} is a derived class. Its base class, \texttt{AliFlowEventSimple}
+
+
+\section{Track cuts and the track cuts object}
+\subsection{ESD tracks as data source}
+\subsection{AOD tracks as data source}
+\subsection{Additional options}
+\subsubsection{Identified particles}
+\subsubsection{VZERO}
+
+Calibration specifics - different for 10h and 11h!
+\begin{description}
+\item [LHC10h]
+\begin{itemize}
+\item Re-weighting of vzero signal per tile
+\item Re-centering of q-vectors
+\item Needs aodb
+\end{itemize}
+\item [LHC11h]
+\begin{itemize}
+\item Dedicated VZERO-EP task
+\item Q-vectors are read from event header
+\item Needs dedicated task
+\end{itemize}
+\end{description}
+Calibration procedure is selected by AliFlowEvent depending on runnumber
+\begin{itemize}
+\item User is responsible for enabling VZERO-EP task in case of 11h data!
+\end{itemize}
+See comments at AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts2011()
+\begin{description}
+\item [What is re-weighting ?]
+\begin{itemize}
+\item Take a TProfile with average multiplicity per cell (for each run)
+\item Fit a constant line per disc (or ring) $x = a$ (see next slide for example)
+\item The track weight for each VZERO cell is now calculated in a second iteration as
+\end{itemize}
+\begin{equation}
+\mbox{track weight} = \frac{\mbox{cell multiplicity} * a}{\mbox{average multiplicity in a cell}} \nonumber
+\end{equation}
+\item [What is re-centering ?]
+\begin{itemize}
+\item Store the $Q$-vectors (component-wise) of a run in a TProfile
+\item The corrected $Q$-vectors can now be obtained by doing
+\begin{equation}
+Q_n \longrightarrow \frac{Q_n - \langle Q_n \rangle }{\sigma_{Q_n}} \nonumber
+\end{equation}
+where brackets denote the one-run average, and $\sigma_{Q_n}$ the standard deviation of $Q_n$ in the sample
+\end{itemize}
+\end{description}
+
+Several options for VZERO signal calibration in 10h system
+\begin{itemize}
+\item Per ring re-weighting (instead of full-disc reweighting) \\
+\alert{AliFlowTrackCuts::SetV0gainEqualizationPerRing(bool)}
+\end{itemize}
+\begin{center}
+\includegraphics[width=.4\textwidth]{figs/eg_disc.pdf}
+\includegraphics[width=.4\textwidth]{figs/eg_ring.pdf}
+\end{center}
+\begin{itemize}
+\item Toggle on or off the additional q-vector recentering \\
+AliFlowTrackCuts::SetApplyRecentering(bool)
+\item Toggle: disable or enable offending rings from the entire computation (will break re-centering) \\
+AliFlowTrackCuts::SetUseVZERORing(int, bool)
+\end{itemize}
+In 11h, none of these options are available, \alert{everything is done in the VZERO-EP task}!
+
+
+\section{The flow package in the ALICE analysis framework}
+\subsection{AliAnalysisTaskSE}
+\subsection{Analysis methods}
+
+\begin{itemize}
+\item AliFlowAnalysisWithCumulants.h
+\item AliFlowAnalysisWithMixedHarmonics.h
+\item AliFlowAnalysisWithFittingQDistribution.h \item AliFlowAnalysisWithMultiparticleCorrelations.h
+\item AliFlowAnalysisWithLeeYangZeros.h
+\item AliFlowAnalysisWithNestedLoops.h
+\item AliFlowAnalysisWithLYZEventPlane.h
+\item AliFlowAnalysisWithQCumulants.h
+\item AliFlowAnalysisWithMCEventPlane.h
+\item AliFlowAnalysisWithScalarProduct.h
+\end{itemize}
+
+
+\subsection{Example: $\pi^{\pm}$ $v_2$}\label{sec:example}
+As an example of how to do a flow analysis using the flow package within the \texttt{AliROOT} analysis framework, this section will guide you through the process of measuring $\pi^{\pm}$ $v_2$ step-by-step. Generally, doing an analysis in the \texttt{AliROOT} is a two-file process, where one runs a run.C script in \texttt{AliROOT}, which sets up the analysis framework and takes care of the interface to the analysis \texttt{GRID}, and calls an \texttt{AddTask$\ast$.C} macro which in turn creates and configures instances of the relevant analysis tasks. In this example, the distinction will not be so clear, but mentioned in the text. In practice of course, you would copy these steps into macros and launch the macros from the \texttt{AliROOT} command line when doing analysis. We will not run this test on \texttt{GRID}, but assume that you have some \texttt{AliAOD.root} files available on your local system. Note that this example is a guideline, there are many ways leading to Rome, and many ways of setting up an analysis.
+
+\begin{description}
+\item [Preparing the session] First, we need to prepare the framework and root session (these steps would go into your run.C macro). Launch \texttt{AliROOT} and load the necessary libraries
+\begin{lstlisting}
+ // load libraries
+ gSystem->Load("libCore.so");
+ gSystem->Load("libGeom.so");
+ gSystem->Load("libVMC.so");
+ gSystem->Load("libPhysics.so");
+ gSystem->Load("libTree.so");
+ gSystem->Load("libSTEERBase.so");
+ gSystem->Load("libESD.so");
+ gSystem->Load("libAOD.so");
+ gSystem->Load("libANALYSIS.so");
+ gSystem->Load("libANALYSISalice.so");
+ gSystem->Load("libEventMixing.so");
+ gSystem->Load("libCORRFW.so");
+ gSystem->Load("libPWGTools.so");
+ gSystem->Load("libPWGCFebye.so");
+ gSystem->Load("libPWGflowBase.so");
+ gSystem->Load("libPWGflowTasks.so"); \end{lstlisting}
+Create an analysis manager and create a \texttt{TChain} which we will point to the data you have stored locally on your machine
+\begin{lstlisting}
+ // create the analysis manager
+ AliAnalysisManager* mgr = new AliAnalysisManager("MyManager");
+ // create a tchain which will point to an aod tree
+ TChain* chain = new TChain("aodTree");
+ // add a few files to the chain
+ chain->Add("/home/rbertens/Documents/CERN/ALICE_DATA/data/2010/LHC10h/000139510/ESDs/pass2/AOD086/0003/AliAOD.root");
+ chain->Add("/home/rbertens/Documents/CERN/ALICE_DATA/data/2010/LHC10h/000139510/ESDs/pass2/AOD086/0003/AliAOD.root");
+ chain->Add("/home/rbertens/Documents/CERN/ALICE_DATA/data/2010/LHC10h/000139510/ESDs/pass2/AOD086/0004/AliAOD.root");
+ chain->Add("/home/rbertens/Documents/CERN/ALICE_DATA/data/2010/LHC10h/000139510/ESDs/pass2/AOD086/0005/AliAOD.root");
+ chain->Add("/home/rbertens/Documents/CERN/ALICE_DATA/data/2010/LHC10h/000139510/ESDs/pass2/AOD086/0006/AliAOD.root");
+ chain->Add("/home/rbertens/Documents/CERN/ALICE_DATA/data/2010/LHC10h/000139510/ESDs/pass2/AOD086/0007/AliAOD.root");
+ chain->Add("/home/rbertens/Documents/CERN/ALICE_DATA/data/2010/LHC10h/000139510/ESDs/pass2/AOD086/0008/AliAOD.root");
+ chain->Add("/home/rbertens/Documents/CERN/ALICE_DATA/data/2010/LHC10h/000139510/ESDs/pass2/AOD086/0009/AliAOD.root");
+ chain->Add("/home/rbertens/Documents/CERN/ALICE_DATA/data/2010/LHC10h/000139510/ESDs/pass2/AOD086/0010/AliAOD.root");
+ // create an input handler
+ AliVEventHandler* inputH = new AliAODInputHandler();
+ // and connect it to the manager
+ mgr->SetInputEventHandler(inputH);\end{lstlisting}
+Great, at this point we have created an analysis manager, which will read events from a chain of AliAOD.root files.
+
+The next step will be adding specific analyses to the analysis manager. This is usually done by calling an \texttt{AddTask$\ast$.C} macro, which creates instances of analysis tasks, connects input (events from the analysis manager) to these tasks, and then connects output from the task back to the analysis manager (which will take care of writing the analysis to a common output file). These next steps show what would be in your \texttt{AddTask$\ast$.C} macro.
+
+The heart of our flow analysis will be the flow event. To fill a flow event from the input AOD events, we will use the \texttt{AliAnalysisTaskFlowEvent} class. The AOD input events have to be supplied by the analysis manager, so first things first, retrieve the manager to which you will connect your flow analysis tasks:
+
+\begin{lstlisting}
+ // the manager is static, so get the existing manager via the static method
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ printf("No analysis manager to connect to!\n");
+ return NULL;
+ }
+
+ // just to see if all went well, check if the input event handler has been connected
+ if (!mgr->GetInputEventHandler()) {
+ printf("This task requires an input event handler!\n");
+ return NULL;
+ }\end{lstlisting}
+
+The manager and input data are present, so we can create the flow event task and do some basic configuration
+\begin{lstlisting}
+ // create instance of the class
+ AliAnalysisTaskFlowEvent* taskFE = new AliAnalysisTaskFlowEvent("FlowEventTask");
+ // enable QA plots (will give you more insight into what you're doing)
+ taskFE->SetQAOn(kTRUE);
+ // set the trigger selection
+ taskFE->SelectCollisionCandidates(AliVEvent::kMB);
+\end{lstlisting}
+Note that in the last step you have set the trigger configuration. Always make sure that you run on a trigger that makes sense for your analysis. A general remark is that the non-uniform acceptance correction methods that are implemented in the flow package, assume a flat \textbf{Q} vector distribution. Specific triggers (e.g. EMCal triggers) result in a \textbf{Q} vector bias which should \emph{not} be corrected as they invalidate that assumption\footnote{The actual event selection based on triggers is done in the \texttt{AliAnalysisTaskSE} class (to be specific, the trigger is checked in \texttt{AliAnalysisTaskSE::Exec()}) from which the \texttt{AliAnalysisTaskFlowEvent} is derived. The full set of available triggers can be found in the virtual event header \texttt{AliVEvent.h}. }.
+
+In addition to the trigger selection, one might want to do some more event selection. The flow package has a common event selection class, which we will add to your flow event
+
+\begin{lstlisting}
+ // define the event cuts object
+ AliFlowEventCuts* cutsEvent = new AliFlowEventCuts("EventCuts");
+ // configure some event cuts, starting with centrality
+ cutsEvent->SetCentralityPercentileRange(20., 30.);
+ // method used for centrality determination
+ cutsEvent->SetCentralityPercentileMethod(AliFlowEventCuts::kV0);
+ // vertex-z cut
+ cutsEvent->SetPrimaryVertexZrange(-10.,10.);
+ // enable the qa plots
+ cutsEvent->SetQA(doQA);
+ // explicit multiplicity outlier cut
+ cutsEvent->SetCutTPCmultiplicityOutliersAOD(kTRUE);
+ cutsEvent->SetLHC10h(kTRUE);
+
+
+ // and, last but not least, pass these cuts to your flow event task
+ taskFE->SetCutsEvent(cutsEvent);\end{lstlisting}
+
+Now that the flow event task has been created and some basic configuration has been done, it's time to specify the POI and RP selection. This is done by defining sets of track selection criteria for both POI's and RP's: tracks in an event that pass the track selection criteria are used as POI or RP. The track selection is defined in \texttt{AliFlowTrackCuts} objects which are passed to the \texttt{AliAnalysisTaskFlowEvent} task which does the actual selection based on the passed criteria. So, let's create some track selection objects!
+
+Starting with the RP's, for which we'll just use a uniform selection of charged tracks,
+\begin{lstlisting}
+ //create the track cuts object using a static function of AliFlowTrackCuts
+ AliFlowTrackCuts* cutsRP = AliFlowTrackCuts::GetAODTrackCutsForFilterBit(1);
+ // specify the pt range
+ cutsRP->SetPtRange(0.2, 5.);
+ // specify eta range
+ cutsRP->SetEtaRange(-0.8, 0.8);
+ // specify track type
+ cutsRP->SetParamType(kAOD);\end{lstlisting}
+
+The particles of which we want to measure the differential $v_2$ are the charted pions. The \texttt{AliFlowTrackCuts} will do the particle identification.
+
+\begin{lstlisting}
+ //create the track cuts object using a static function of AliFlowTrackCuts
+ AliFlowTrackCuts* cutsPOI = AliFlowTrackCuts::GetAODTrackCutsForFilterBit(1);
+
+ // specify the track type
+ cutsPOI->SetParamType(kAOD);\end{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+\begin{lstlisting}
+
+\end{lstlisting}
+
+
+
+\begin{lstlisting}
+
+\end{lstlisting}
+
+
+\end{description}
\chapter{Methods}
\label{Methods}
The structure of this chapter is as follows: of each of the available methods a short description is given in the \texttt{theory} subsection (for more detailed information, see the papers listed above) followed by details which are specific to the implementation in the subsection \texttt{implementation}. Caveats, possible issues, etc, are listed in the \texttt{caveats} subsections.
%-----------------------------------------------------------------------
-\section{The Monte-Carlo Truth}
-\label{MC}
-Here we describe the implementation of the monte-carlo truth.
-%-----------------------------------------------------------------------
+\section{AliFlowAnalysisWithCumulants}
+\subsection{Theory}
+\subsection{Implementation}
+\begin{lstlisting}
+
+\end{lstlisting}
+
+\section{AliFlowAnalysisWithMixedHarmonics}
+\subsection{Theory}
+\subsection{Implementation}
+\begin{lstlisting}
+
+\end{lstlisting}
+
+\section{AliFlowAnalysisWithFittingQDistribution}
+\subsection{Theory}
+\subsection{Implementation}
+\begin{lstlisting}
+
+\end{lstlisting}
+
+
+\section{AliFlowAnalysisWithMultiparticleCorrelations}
+\subsection{Theory}
+\subsection{Implementation}
+\begin{lstlisting}
+
+\end{lstlisting}
+
+
+\section{AliFlowAnalysisWithLeeYangZeros}
+\subsection{Theory}
+\subsection{Implementation}
+\begin{lstlisting}
+
+\end{lstlisting}
+
+
+\section{AliFlowAnalysisWithNestedLoops}
+\subsection{Theory}
+\subsection{Implementation}
+\begin{lstlisting}
+
+\end{lstlisting}
+
+
+\section{AliFlowAnalysisWithLYZEventPlane}
+\subsection{Theory}
+\subsection{Implementation}
+\begin{lstlisting}
+
+\end{lstlisting}
+
+
+\section{AliFlowAnalysisWithQCumulants}
+
+ \label{qvc}
+ \subsection{Theory}
+ The Q-cumulant (QC) method\footnote{The overview given in this section is inspired by \cite{bilandzic-2011-83}, for further reading the reader is referred there. A full derivation of results that are relevant in this study is given in appendix \ref{qcapp}.} uses multi-particle correlations to estimate $v_n$ estimates for RP's and POI's, but does not limit itself to two-particle correlations. Although higher-order Q-cumulant calculations are available, this section will discuss the method using two- and four-particle correlations.
+
+ %\paragraph{Multiparticle correlations and anisotropic flow}
+ Multi-particle correlations in the QC method are expressed in terms of cumulants, which are the the expectation values of correlation terms in joint probability density functions. Consider the following: if two observables $f$ for particles $x_i$ and $x_j$ are correlated, the joint probability $f(x_i, x_j)$ is the sum of the factorization of the constituent probabilities and a covariance term:
+ \begin{equation}
+ f(x_i, x_j) = f(x_i)f(x_j) + f_c (x_i, x_j)
+ \end{equation}
+ When taking as an observable azimuthal dependence,
+ \begin{align}
+ x_i \equiv e^{i n \phi_i}, \hspace{.5in} x_j \equiv e^{i n \phi_j}
+ \end{align}
+ the two-particle cumulant is expressed as the covariance of the expectation value:
+ \begin{equation}
+ E_C(e^{i n[\phi_i - \phi_j]}) = E(e^{[i n(\phi_i - \phi_j]}) - E(e^{in[\phi_i]})E(e^{in[- \phi_j]}).
+ \end{equation}
+ Symmetry arguments (along the lines of those given in appendix \ref{sec:harmonic_derivation}) dictate that the product of separate expectation values is equals zero, from which a familiar expression for the two-particle correlation is obtained:
+ \begin{align}
+ E_C(e^{i n[\phi_i - \phi_j]}) & = E(e^{in[\phi_i]})E(e^{in[- \phi_j]}) \\
+ & = \left< e^{in[\phi_i]}\right> \left< e^{in[- \phi_j]} \right> \nonumber \\
+ & = \left< e^{in[\phi_i - \phi_j]} \right> \nonumber \\
+ & = \left< 2 \right>, \nonumber
+ \end{align}
+ the all-event average of which is denoted by
+ \begin{equation}\label{twocul}
+ c_n\{2\} = \left< \left< 2 \right> \right>
+ \end{equation}
+ where $c_n\{2\}$ is called the two-particle cumulant. For the four-particle case, one proceeds likewise:
+ \begin{align}
+ E_c(e^{in[\phi_i + \phi_j - \phi_k -\phi_l]}) & = E(e^{in[\phi_i + \phi_j - \phi_k -\phi_l]}) \\
+ & - E(e^{in[\phi_i - \phi_k]})E(e^{in[\phi_j - \phi_l]})\nonumber \\
+ & - E(e^{in[\phi_i - \phi_l]})E(e^{in[\phi_j - \phi_k]}). \nonumber
+ \end{align}
+ The four-particle cumulant can be expressed in terms of two- and four-particle correlations as well,
+ \begin{equation}\label{fourcul}
+ c_n\{4\} = \left< \left< 4 \right> \right> - 2 \left< \left< 2 \right> \right>^2.
+ \end{equation}
+ From \ref{twocul} and \ref{fourcul} it follows that $v_n$ harmonics are related to cumulants following
+ \begin{align}\label{refFlowFromCumulants2nd}
+ v_n\{2\} & = \sqrt{c_n\{2\}} \\
+ v_n\{4\} & = \sqrt[4]{-c_n\{4\}} \nonumber.
+ \end{align}
+ where $v_n\{2\}$, $v_n\{4\}$ denote flow estimates obtained from two- and four-particle correlations.
+
+ In a fashion similar to that explained in the previous subsection, the Q-cumulant method uses reference flow to obtain a statistically stable estimate of the differential flow of POI's. Differential POI flow, for the two- and four-particle case, can be expressed as
+ \begin{align}
+ d_n\{2\} & = \left< \left< 2^{\prime} \right> \right> \\
+ d_n\{4\} & = \left< \left< 4^{\prime} \right> \right> - 2\cdotp \left< \left< 2^{\prime} \right> \right>\left< \left< 2 \right> \right>\nonumber
+ \end{align}
+ where $d_n\{2\}, d_n\{4\}$ denotes the two-, four-particle differential flow and the $^{\prime}$ is used as an indicator for differential (p$_t$ dependent) results. Disentangling from this the reference flow contributions, one is left with the final expression for the estimate of differential $v_n$ for POI's:
+ \begin{align}
+ v_n^{\prime}\{2\} & = \frac{d_n\{2\}}{\sqrt{c_n\{2\}}} \\
+ v_n^{\prime}\{4\} & = - \frac{d_n\{4\}}{(-c_n\{2\})^{3/4}}.\nonumber
+ \end{align}
+
+ \subsection{Implementation}
+A how-to of the QC method in the flow-package is written by the author of the analysis software and is available on the FLOW-PAG twiki page (\href{https://twiki.cern.ch/twiki/bin/view/ALICE/FlowPackageHowto}{https://twiki.cern.ch/twiki/bin/view/ALICE/FlowPackageHowto}). This section is copied from the twiki page.
+
+ To get the first feeling how the FLOW package and QC output are organized, perhaps you can just trivially execute one 'on-the-fly' example
+
+ Essentially, you have to do two things:
+ \begin{lstlisting}
+cp $ALICE_ROOT/PWGCF/FLOW/macros/runFlowAnalysisOnTheFly.C
+aliroot runFlowAnalysisOnTheFly.C \end{lstlisting}
+
+ In the analysis on-the-fly particles are sampled from hardwired Fourier-like p.d.f, so input vn harmonics are completely under control. Please have a look at the steering macro runFlowAnalysisOnTheFly.C and corresponding class AliFlowEventSimpleMakerOnTheFly.cxx in the FLOW package, which are easily written (no fancy C++ features in my code!), and well documented.
+
+ If you have landed successfully, you will get an output AnalysisResults.root, where the results from each method are structured in directories.
+
+ To make a size of the file lighter (which matters a lot during merging!), you may want not to use all the methods. You can make your selection of the methods via:
+ \begin{lstlisting}
+Bool_t MCEP = kTRUE; // Monte Carlo Event Plane
+Bool_t SP = kTRUE; // Scalar Product (a.k.a 'flow analysis with eta gaps')
+Bool_t GFC = kTRUE; // Generating Function Cumulants
+Bool_t QC = kTRUE; // Q-cumulants
+Bool_t FQD = kTRUE; // Fitted q-distribution
+Bool_t LYZ1SUM = kTRUE; // Lee-Yang Zero (sum generating function), first pass over the data
+Bool_t LYZ1PROD = kTRUE; // Lee-Yang Zero (product generating function), first pass over the data
+Bool_t LYZ2SUM = kFALSE; // Lee-Yang Zero (sum generating function), second pass over the data
+Bool_t LYZ2PROD = kFALSE; // Lee-Yang Zero (product generating function), second pass over the data
+Bool_t LYZEP = kFALSE; // Lee-Yang Zero Event Plane
+Bool_t MH = kFALSE; // Mixed Harmonics (used for strong parity violation studies)
+Bool_t NL = kFALSE; // Nested Loops (neeed for debugging, only for developers) \end{lstlisting}
+ Next important remark, if you want to browse through AnalysisResults.root, make sure that in AliROOT prompt you have loaded the FLOW library:
+ \begin{lstlisting}
+root [0] gSystem->Load("libPWGflowBase"); \end{lstlisting}
+ In the AnalysisResults.root, the QC output is stored in "outputQCanalysis". Just browse there, browse in "cobjQC", and you will see the directory structure.
+ "Integrated Flow" => contains all results needed for reference flow. Browse in, and explore the directory (in fact, TList) "Results". The names of the histos should be self-explanatory;
+ "Differential Flow" => browse further into "Results", and you will find a bunch of things that you can explore. For instance, in the directory "Differential Q-cumulants (POI,p$_{T}$)" you will find histos holding differential QC\{2\} vs pt, QC\{4\} vs p$_{T}$, etc. On the other hand, the flow estimates themselves, namely differential vn\{2\} vs pt, vn\{4\} vs pt you can fetch from TList "Differential Flow (POI,p$_{T}$)"
+ I hope that the names for all other things you might need are self-explanatory.
+ You configure QC method in the steering macro via setters:
+ \begin{lstlisting}
+qc->SetHarmonic(2);
+qc->SetCalculateDiffFlow(kTRUE);
+qc->SetCalculate2DDiffFlow(kFALSE); // vs (pt,eta)
+qc->SetApplyCorrectionForNUA(kFALSE);
+qc->SetFillMultipleControlHistograms(kFALSE);
+qc->SetMultiplicityWeight("combinations"); // default (other supported options are "unit" and "multiplicity")
+qc->SetCalculateCumulantsVsM(kFALSE);
+qc->SetCalculateAllCorrelationsVsM(kFALSE); // calculate all correlations in mixed harmonics "vs M"
+qc->SetnBinsMult(10000);
+qc->SetMinMult(0);
+qc->SetMaxMult(10000);
+qc->SetBookOnlyBasicCCH(kFALSE); // book only basic common control histograms
+qc->SetCalculateDiffFlowVsEta(kTRUE); // if you set kFALSE only differential flow vs pt is calculated
+qc->SetCalculateMixedHarmonics(kFALSE); // calculate all multi-partice mixed-harmonics correlators \end{lstlisting}
+ You can make QC output lighter by setting
+ \begin{lstlisting}
+qc->SetBookOnlyBasicCCH(kTRUE); \end{lstlisting}
+(to book only basic control histograms, and disabling lot of 2D beasts), and
+ \begin{lstlisting}
+qc->SetCalculateDiffFlowVsEta(kFALSE); \end{lstlisting}
+(if not interested in differential flow vs eta => this will make the final output smaller)
+ In the "cobjQC" you might also consider "AliFlowCommonHistQC" to be useful thing, which contains a lot of trivial but still important control histograms (eg multiplicity distribution of RPs, POIs, etc).
+ I think this is the best and fastest way for you to get familiar with the FLOW package => once you send the QC code over the real data, you get the output organized in the very same way. I will send you shortly an example set of macros which get be used for the analysis on Grid over the real data.
+ Differential QC\{2\} and QC\{4\} implementation is generic. You can tag as RP and POI whatever you want, and it will give you results automatically decoupled from any autocorrelation effects. For this reason, it is important that if you have certain particles which is classified both as RP and POI, to be explicitly tagged also as RPs and POI once you are building the "flow event".
+ The basic feature in the FLOW package is that from whichever input you start, we have to build the same intermediate step called "flow event", with which than we feed all methods (SP, QC, etc) in the very same way.
+ To see what "flow event" does, and what does it need as an input, you may want to consult task AliAnalysisTaskFlowEvent.cxx and classes needed there-in.
-\section{Scalar Product Method}
+
+
+\section{AliFlowAnalysisWithMCEventPlane}
+\subsection{Theory}
+\subsection{Implementation}
+\begin{lstlisting}
+
+\end{lstlisting}
+
+
+
+\section{AliFlowAnalysisWithScalarProduct}
\label{SP}
\subsection{Theory}
\subsubsection{The scalar product method}
\end{align}
where cyclic permutation of $a, b, c$ (in analogy to the switching of indices in \ref{3evsp} gives the estimates of $v_n^b$ and $v_n^c$.\textcolor{red}{[insert some discussion here: is this result actually true, and some light on va, vb, (vc)]}
-\subsection{Implementation}
-
\subsubsection{Extension to Event Plane method}
As explained earlier, the event plane analysis results in this study are actually obtained by normalizing the Q-vectors in the scalar product by their length $\vert Q_n \vert$. Consider the following:
\begin{equation}\label{phase}
\sqrt{\left< \frac{Q_a}{\vert Q_a\vert} \cdotp \frac{Q_b^*}{\vert Q_b^* \vert \right>}} = \sqrt{\left< e^{in[\Psi_{Q_{n_a}} - \Psi_{Q_{n_b}}}\right>} = \sqrt{\left< \cos(n[\Psi_{Q_{n_a}} - \Psi_{Q_{n_b}}]\right>)}
\end{equation}
from which the event plane resolution can be calculated using \ref{emeancos} or \ref{halfeventresolution}.
+
+\subsection{Implementation}
+\begin{lstlisting}
+ void SetHarmonic(Int_t iHarmonic) { fHarmonic = iHarmonic; }
+ void SetApplyCorrectionForNUA(Bool_t iVal) { fApplyCorrectionForNUA = iVal?1:0; }
+ void SetNormalizationType(Int_t iVal) { fNormalizationType = iVal; }
+ void SetDebug(Bool_t bVal) { fDebug = bVal; }
+ void SetBookOnlyBasicCCH(Bool_t bVal) { fMinimalBook = bVal; }
+ void SetTotalQvector(Int_t iVal) { fTotalQvector = iVal; }
+ void SetUsePhiWeights(Bool_t bVal) { fUsePhiWeights = bVal; }
+ void SetWeightsList(TList* const aWeightsList) { fWeightsList = (TList*)aWeightsList->Clone(); }\end{lstlisting}
+
+ \subsubsection{VZERO scalar product}
+The VZEROA and VZEROC detectors have different $\eta$ coverage w.r.t the TPC, so to evaluate $v_2$ from VZERO-SP, do
+\begin{equation}
+v_n = \sqrt{\frac{\langle u_i \cdotp Q_A \rangle }{\sqrt{\langle Q_A \cdotp Q_B \rangle}} \cdotp \frac{\langle u_j \cdotp Q_B \rangle }{\sqrt{\langle Q_A \cdotp Q_B \rangle}}}
+\nonumber
+\end{equation}
+\begin{itemize}
+\item $Q_A$ and $Q_B$ are the VZEROC and VZEROA RP's
+\end{itemize}
+There has been some disscussion ...
+\begin{itemize}
+\item Take $u$ = full TPC = $u_j$ = $u_i$, or do $u_j$ = $\eta < 0$, $u_i$ = $\eta > 0$ ?
+\end{itemize}
+We should have a common approach to ensure uniform analyses and physics message!
+Majority vote has yielded the following:
+\begin{itemize}
+\item $u$ = full TPC = $u_j$ = $u_i$
+\end{itemize}
+\begin{equation}
+v_n = \sqrt{\frac{\langle u \cdotp Q_A \rangle }{\sqrt{\langle Q_A \cdotp Q_B \rangle}} \cdotp \frac{\langle u \cdotp Q_B \rangle }{\sqrt{\langle Q_A \cdotp Q_B \rangle}}}
+\nonumber
+\end{equation}
+This means we should think about the \alert{correlation} between terms in this equation!
\subsubsection{Caveats}
- %-----------------------------------------------------------------------
-
- \section{Generating Function Cumulant Method}
- \label{GFC}
- Here we describe the generating function cumulant method and how it is implemented.
- %-----------------------------------------------------------------------
- \section{Q-vector Cumulant Method}
- \label{qvc}
- \subsection{Theory}
- The Q-cumulant (QC) method\footnote{The overview given in this section is inspired by \cite{bilandzic-2011-83}, for further reading the reader is referred there. A full derivation of results that are relevant in this study is given in appendix \ref{qcapp}.} uses multi-particle correlations to estimate $v_n$ estimates for RP's and POI's, but does not limit itself to two-particle correlations. Although higher-order Q-cumulant calculations are available, this section will discuss the method using two- and four-particle correlations.
-
- %\paragraph{Multiparticle correlations and anisotropic flow}
- Multi-particle correlations in the QC method are expressed in terms of cumulants, which are the the expectation values of correlation terms in joint probability density functions. Consider the following: if two observables $f$ for particles $x_i$ and $x_j$ are correlated, the joint probability $f(x_i, x_j)$ is the sum of the factorization of the constituent probabilities and a covariance term:
- \begin{equation}
- f(x_i, x_j) = f(x_i)f(x_j) + f_c (x_i, x_j)
- \end{equation}
- When taking as an observable azimuthal dependence,
- \begin{align}
- x_i \equiv e^{i n \phi_i}, \hspace{.5in} x_j \equiv e^{i n \phi_j}
- \end{align}
- the two-particle cumulant is expressed as the covariance of the expectation value:
- \begin{equation}
- E_C(e^{i n[\phi_i - \phi_j]}) = E(e^{[i n(\phi_i - \phi_j]}) - E(e^{in[\phi_i]})E(e^{in[- \phi_j]}).
- \end{equation}
- Symmetry arguments (along the lines of those given in appendix \ref{sec:harmonic_derivation}) dictate that the product of separate expectation values is equals zero, from which a familiar expression for the two-particle correlation is obtained:
- \begin{align}
- E_C(e^{i n[\phi_i - \phi_j]}) & = E(e^{in[\phi_i]})E(e^{in[- \phi_j]}) \\
- & = \left< e^{in[\phi_i]}\right> \left< e^{in[- \phi_j]} \right> \nonumber \\
- & = \left< e^{in[\phi_i - \phi_j]} \right> \nonumber \\
- & = \left< 2 \right>, \nonumber
- \end{align}
- the all-event average of which is denoted by
- \begin{equation}\label{twocul}
- c_n\{2\} = \left< \left< 2 \right> \right>
- \end{equation}
- where $c_n\{2\}$ is called the two-particle cumulant. For the four-particle case, one proceeds likewise:
- \begin{align}
- E_c(e^{in[\phi_i + \phi_j - \phi_k -\phi_l]}) & = E(e^{in[\phi_i + \phi_j - \phi_k -\phi_l]}) \\
- & - E(e^{in[\phi_i - \phi_k]})E(e^{in[\phi_j - \phi_l]})\nonumber \\
- & - E(e^{in[\phi_i - \phi_l]})E(e^{in[\phi_j - \phi_k]}). \nonumber
- \end{align}
- The four-particle cumulant can be expressed in terms of two- and four-particle correlations as well,
- \begin{equation}\label{fourcul}
- c_n\{4\} = \left< \left< 4 \right> \right> - 2 \left< \left< 2 \right> \right>^2.
- \end{equation}
- From \ref{twocul} and \ref{fourcul} it follows that $v_n$ harmonics are related to cumulants following
- \begin{align}\label{refFlowFromCumulants2nd}
- v_n\{2\} & = \sqrt{c_n\{2\}} \\
- v_n\{4\} & = \sqrt[4]{-c_n\{4\}} \nonumber.
- \end{align}
- where $v_n\{2\}$, $v_n\{4\}$ denote flow estimates obtained from two- and four-particle correlations.
-
- In a fashion similar to that explained in the previous subsection, the Q-cumulant method uses reference flow to obtain a statistically stable estimate of the differential flow of POI's. Differential POI flow, for the two- and four-particle case, can be expressed as
- \begin{align}
- d_n\{2\} & = \left< \left< 2^{\prime} \right> \right> \\
- d_n\{4\} & = \left< \left< 4^{\prime} \right> \right> - 2\cdotp \left< \left< 2^{\prime} \right> \right>\left< \left< 2 \right> \right>\nonumber
- \end{align}
- where $d_n\{2\}, d_n\{4\}$ denotes the two-, four-particle differential flow and the $^{\prime}$ is used as an indicator for differential (p$_t$ dependent) results. Disentangling from this the reference flow contributions, one is left with the final expression for the estimate of differential $v_n$ for POI's:
- \begin{align}
- v_n^{\prime}\{2\} & = \frac{d_n\{2\}}{\sqrt{c_n\{2\}}} \\
- v_n^{\prime}\{4\} & = - \frac{d_n\{4\}}{(-c_n\{2\})^{3/4}}.\nonumber
- \end{align}
-
- \subsection{Implementation}
-
- Here we describe the Q-vector cumulant method and how it is implemented.
- %-----------------------------------------------------------------------
-
- \section{Lee-Yang Zero Method}
- \label{LYZ}
- Here we describe the Lee-Yang Zero method and how it is implemented.
- %-----------------------------------------------------------------------
-
- \section{Lee-Yang Zero Method}
- \label{LYZ}
- Here we describe the Lee-Yang Zero method and how it is implemented.
- %-----------------------------------------------------------------------
-
- \section{Fitting the Q-vector Distribution}
- \label{qfit}
- Here we describe how the fitting of the Q-vector distribution is implemented.
- %-----------------------------------------------------------------------
+\chapter{More exotic uses}\ref{sec:exotic}
+\section{Flow analysis of resonances}
+
+
+Reconstructing decayed particles
+%\item Invariant mass reconstruction, e.g.
+\begin{equation}
+\boxed{ \mbox{\Lambda} \longrightarrow \pi + \mbox{p} } \nonumber
+\end{equation}
+\begin{itemize}
+\item Take all the $\pi + \mbox{p}$ pairs in an event and plot their invariant mass
+\item Extract the signal yield \alert{$N^S$} and total yield \alert{$N^T$} from this distribution
+\item Measure $v_2$ of all $\pi + \mbox{p}$ pairs
+\end{itemize}
+Under the assumption that signal and background flow are additive, we can disentangle the two
+\begin{align}
+v_2^{T}(m_{inv}) = & \alert{v_2^{S}} \frac{N^{S} }{N^{S} + N^{B}}(m_{inv}) \nonumber \\
+& + v_2^{B}(m_{inv}) \frac{ N^{B}}{N^{S} + N^{B}}(m_{inv})\nonumber
+\end{align}
+\column{.5\textwidth}
+\includegraphics[width=.9\textwidth]{figs/2012-Jul-25-oneOFtwo_16_18.pdf}\\
+\includegraphics[width=.9\textwidth]{figs/2012-Jul-25-twoOFtwo_16_18.pdf}
+\end{columns}
+\end{frame}
+
+\section{Flow analysis in the LEGO framework: re-tagging your POI and RP selections}
+\subsection{The problem at hand}
+\subsection{Re-tagging POI and RP selections}
\chapter{Summary}
\label{Summary}
\end{thebibliography}
%-----------------------------------------------------------------------
- \chapter*{Appendix I}
- \label{appendix1}
- Here we put short pieces of code.
+% \chapter*{Appendix I}
+% \label{appendix1}
+% Here we put short pieces of code.
%-----------------------------------------------------------------------
\printindex
\end{document}
#pragma link C++ class AliFemtoModelCorrFctnDirectYlm;
#pragma link C++ class AliFemtoCorrFctnTPCNcls;
#pragma link C++ class AliFemtoCorrFctnDEtaDPhi;
+#pragma link C++ class AliFemtoCorrFctnDEtaDPhiCorrections;
#pragma link C++ class AliFemtoCutMonitorParticlePtPDG;
#pragma link C++ class AliFemtoCutMonitorParticlePtPDGV0;
#pragma link C++ class AliFemtoCutMonitorParticleEtCorr;
#pragma link C++ class AliFemtoAnalysisAzimuthalPbPb;
#pragma link C++ class AliFemtoPairCutRadialDistanceLM;
#pragma link C++ class AliFemtoPicoEventRP;
+#pragma link C++ class AliFemtoCorrFctnPairFractions;
+#pragma link C++ class AliAnalysisTaskParticleEfficiency+;
if(!obj) continue;
for(int j=0;j<obj->GetEntriesFast();j++){
AliDielectronPair *pairObj = (AliDielectronPair*)obj->UncheckedAt(j);
- Int_t id1 = ((AliVTrack*)pairObj->GetFirstDaughter())->GetID();
- Int_t id2 = ((AliVTrack*)pairObj->GetSecondDaughter())->GetID();
+ Int_t id1 = ((AliVTrack*)pairObj->GetFirstDaughterP())->GetID();
+ Int_t id2 = ((AliVTrack*)pairObj->GetSecondDaughterP())->GetID();
for(Int_t it=0;it<aod->GetNumberOfTracks();it++){
if(aod->GetTrack(it)->GetID() == id1) pairObj->SetRefFirstDaughter(aod->GetTrack(it));
Double_t lxy = ((vtxSec[0]-vtxPrim[0])*(pairObj->Px()) + (vtxSec[1]-vtxPrim[1])*(pairObj->Py()))/pairObj->Pt();
Double_t psProperDecayLength = lxy*(TDatabasePDG::Instance()->GetParticle(443)->Mass())/pairObj->Pt();
- AliAODTrack *trk = (AliAODTrack*)pairObj->GetFirstDaughter();
- AliAODTrack *trk1 = (AliAODTrack*)pairObj->GetSecondDaughter();
+ AliAODTrack *trk = (AliAODTrack*)pairObj->GetFirstDaughterP();
+ AliAODTrack *trk1 = (AliAODTrack*)pairObj->GetSecondDaughterP();
if(!trk || !trk1) {printf("ERROR: daughter tracks not available\n"); continue;}
//check in case of MC analysis if candidate is a true J/psi->ee
// !!! hardcoded flag for dielectron id
reducedParticle->fCandidateId = (iDie==0 ? AliReducedPair::kJpsiToEE : AliReducedPair::kPhiToKK);
reducedParticle->fPairType = (Char_t)values[AliDielectronVarManager::kPairType];
- reducedParticle->fLegIds[0] = (UShort_t)(static_cast<AliVTrack*>(pair->GetFirstDaughter()))->GetID();
- reducedParticle->fLegIds[1] = (UShort_t)(static_cast<AliVTrack*>(pair->GetSecondDaughter()))->GetID();
+ reducedParticle->fLegIds[0] = (UShort_t)(static_cast<AliVTrack*>(pair->GetFirstDaughterP()))->GetID();
+ reducedParticle->fLegIds[1] = (UShort_t)(static_cast<AliVTrack*>(pair->GetSecondDaughterP()))->GetID();
reducedParticle->fMass[0] = values[AliDielectronVarManager::kM];
reducedParticle->fMass[1] = -999.;
reducedParticle->fMass[2] = -999.;
//fill leg information, don't fill the information twice
if (legClass){
- AliVParticle *d1=pair->GetFirstDaughter();
- AliVParticle *d2=pair->GetSecondDaughter();
+ AliVParticle *d1=pair->GetFirstDaughterP();
+ AliVParticle *d2=pair->GetSecondDaughterP();
if (!arrLegs.FindObject(d1)){
AliDielectronVarManager::Fill(d1, values);
fHistos->FillClass(className2, AliDielectronVarManager::kNMaxValues, values);
}
if (legClass){
- AliVParticle *d1=pair->GetFirstDaughter();
+ AliVParticle *d1=pair->GetFirstDaughterP();
AliDielectronVarManager::Fill(d1, values);
fHistos->FillClass(className2, AliDielectronVarManager::kNMaxValues, values);
- AliVParticle *d2=pair->GetSecondDaughter();
+ AliVParticle *d2=pair->GetSecondDaughterP();
AliDielectronVarManager::Fill(d2, values);
fHistos->FillClass(className2, AliDielectronVarManager::kNMaxValues, values);
}
}
//fill leg information, both + and - in the same histo
if (legClass){
- AliDielectronVarManager::Fill(pair->GetFirstDaughter(),values);
+ AliDielectronVarManager::Fill(pair->GetFirstDaughterP(),values);
fHistos->FillClass(className2, AliDielectronVarManager::kNMaxValues, values);
- AliDielectronVarManager::Fill(pair->GetSecondDaughter(),values);
+ AliDielectronVarManager::Fill(pair->GetSecondDaughterP(),values);
fHistos->FillClass(className2, AliDielectronVarManager::kNMaxValues, values);
}
} //is signal
//fill leg information, don't fill the information twice
if (legClass){
- AliVParticle *d1=pair->GetFirstDaughter();
- AliVParticle *d2=pair->GetSecondDaughter();
+ AliVParticle *d1=pair->GetFirstDaughterP();
+ AliVParticle *d2=pair->GetSecondDaughterP();
if (!arrLegs.FindObject(d1)){
AliDielectronVarManager::Fill(d1, values);
fHistos->FillClass(className2, AliDielectronVarManager::kNMaxValues, values);
if (fNVarsLeg>0){
Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues]={0};
- AliDielectronVarManager::Fill(particle->GetFirstDaughter(),valuesLeg1);
+ AliDielectronVarManager::Fill(particle->GetFirstDaughterP(),valuesLeg1);
Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues]={0};
- AliDielectronVarManager::Fill(particle->GetSecondDaughter(),valuesLeg2);
+ AliDielectronVarManager::Fill(particle->GetSecondDaughterP(),valuesLeg2);
for (Int_t iVar=0; iVar<fNVarsLeg; ++iVar){
Int_t var=fVariablesLeg[iVar];
}
if (!fStreamer) fStreamer=new TTreeSRedirector(fFileName.Data());
- Int_t id1=static_cast<AliVTrack*>(pair->GetFirstDaughter())->GetID();
- Int_t id2=static_cast<AliVTrack*>(pair->GetSecondDaughter())->GetID();
+ Int_t id1=static_cast<AliVTrack*>(pair->GetFirstDaughterP())->GetID();
+ Int_t id2=static_cast<AliVTrack*>(pair->GetSecondDaughterP())->GetID();
//Fill Event information
(*fStreamer) << "Pair"
<< "File.=" << &fileName
if (fNVarsLeg>0){
//leg1
- AliDielectronVarManager::Fill(pair->GetFirstDaughter(),valuesLeg1);
+ AliDielectronVarManager::Fill(pair->GetFirstDaughterP(),valuesLeg1);
//leg2
- AliDielectronVarManager::Fill(pair->GetSecondDaughter(),valuesLeg2);
+ AliDielectronVarManager::Fill(pair->GetSecondDaughterP(),valuesLeg2);
for (Int_t i=0; i<fNVarsLeg; ++i){
var=fVariablesLeg[i];
// get leg variables (TODO: do not fill for the moment since leg cuts are not opened)
Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues]={0};
- if(fVarCutType->CountBits()) AliDielectronVarManager::Fill(particle->GetFirstDaughter(),valuesLeg1);
+ if(fVarCutType->CountBits()) AliDielectronVarManager::Fill(particle->GetFirstDaughterP(),valuesLeg1);
Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues]={0};
- if(fVarCutType->CountBits()) AliDielectronVarManager::Fill(particle->GetSecondDaughter(),valuesLeg2);
+ if(fVarCutType->CountBits()) AliDielectronVarManager::Fill(particle->GetSecondDaughterP(),valuesLeg2);
// fill
UInt_t valType[20] = {0};
valType[0]=valTypeX; valType[1]=valTypeY; valType[2]=valTypeZ; valType[3]=valTypeP;
StoreVariables(hist, valType);
- hist->SetUniqueID(valTypeW); // store weighting variable
+ // (this is overwrites the profile varaiable, no weighting at the moment for TProfile3D)
+ // hist->SetUniqueID(valTypeW); // store weighting variable
// store which variables are used
for(Int_t i=0; i<4; i++) fUsedVars->SetBitNumber(valType[i],kTRUE);
//
// legs (daughters)
- const AliVParticle * mcD1 = pair->GetFirstDaughter();
- const AliVParticle * mcD2 = pair->GetSecondDaughter();
+ const AliVParticle * mcD1 = pair->GetFirstDaughterP();
+ const AliVParticle * mcD2 = pair->GetSecondDaughterP();
Int_t labelD1 = (mcD1 ? TMath::Abs(mcD1->GetLabel()) : -1);
Int_t labelD2 = (mcD2 ? TMath::Abs(mcD2->GetLabel()) : -1);
Int_t d1Pdg = GetPdgFromLabel(labelD1);
// Check whether two particles have the same mother
//
- const AliVParticle * daughter1 = pair->GetFirstDaughter();
- const AliVParticle * daughter2 = pair->GetSecondDaughter();
+ const AliVParticle * daughter1 = pair->GetFirstDaughterP();
+ const AliVParticle * daughter2 = pair->GetSecondDaughterP();
if (!daughter1 || !daughter2) return 0;
AliVParticle *mcDaughter1=GetMCTrackFromMCEvent(daughter1->GetLabel());
// "1" for secondary jpsi (from beauty)
// "2" for background
if(!HaveSameMother(pair)) return 2;
- AliVParticle *mcDaughter1=GetMCTrackFromMCEvent((pair->GetFirstDaughter())->GetLabel());
+ AliVParticle *mcDaughter1=GetMCTrackFromMCEvent((pair->GetFirstDaughterP())->GetLabel());
Int_t labelMother=-1;
if (mcDaughter1->IsA()==AliMCParticle::Class()){
//
inline Bool_t AliDielectronMC::IsMotherPdg(const AliDielectronPair* pair, Int_t pdgMother)
{
- return IsMotherPdg(pair->GetFirstDaughter(),pair->GetSecondDaughter(),pdgMother);
+ return IsMotherPdg(pair->GetFirstDaughterP(),pair->GetSecondDaughterP(),pdgMother);
}
//___________________________________________________________
inline Bool_t AliDielectronMC::IsMotherPdg(const AliVParticle *particle1, const AliVParticle *particle2, Int_t pdgMother){
}
//___________________________________________________________
inline Int_t AliDielectronMC::GetLabelMotherWithPdg(const AliDielectronPair* pair, Int_t pdgMother){
- return GetLabelMotherWithPdg(pair->GetFirstDaughter(),pair->GetSecondDaughter(),pdgMother);
+ return GetLabelMotherWithPdg(pair->GetFirstDaughterP(),pair->GetSecondDaughterP(),pdgMother);
}
#endif
void SetRefFirstDaughter(AliVParticle * const track) {fRefD1 = track;}
void SetRefSecondDaughter(AliVParticle * const track) {fRefD2 = track;}
- AliVParticle* GetFirstDaughter() const { return dynamic_cast<AliVParticle*>(fRefD1.GetObject()); }
- AliVParticle* GetSecondDaughter() const { return dynamic_cast<AliVParticle*>(fRefD2.GetObject()); }
+ AliVParticle* GetFirstDaughterP() const { return dynamic_cast<AliVParticle*>(fRefD1.GetObject()); }
+ AliVParticle* GetSecondDaughterP() const { return dynamic_cast<AliVParticle*>(fRefD2.GetObject()); }
void SetKFUsage(Bool_t KFUsage) {fKFUsage = KFUsage;}
Bool_t GetKFUsage() const {return fKFUsage;}
if (!pair) return kFALSE;
//get both legs
- AliVParticle *leg1=pair->GetFirstDaughter();
- AliVParticle *leg2=pair->GetSecondDaughter();
+ AliVParticle *leg1=pair->GetFirstDaughterP();
+ AliVParticle *leg2=pair->GetSecondDaughterP();
//mask used to require that all cuts are fulfilled
UInt_t selectedMaskLeg1=(1<<fFilterLeg1.GetCuts()->GetEntries())-1;
values[AliDielectronVarManager::kPseudoProperTimeResolution] = -1e10;
// values[AliDielectronVarManager::kPseudoProperTimePull] = -1e10;
if(samemother && fgEvent) {
- if(pair->GetFirstDaughter()->GetLabel() > 0) {
+ if(pair->GetFirstDaughterP()->GetLabel() > 0) {
const AliVParticle *motherMC = 0x0;
- if(fgEvent->IsA() == AliESDEvent::Class()) motherMC = (AliMCParticle*)mc->GetMCTrackMother((AliESDtrack*)pair->GetFirstDaughter());
- else if(fgEvent->IsA() == AliAODEvent::Class()) motherMC = (AliAODMCParticle*)mc->GetMCTrackMother((AliAODTrack*)pair->GetFirstDaughter());
+ if(fgEvent->IsA() == AliESDEvent::Class()) motherMC = (AliMCParticle*)mc->GetMCTrackMother((AliESDtrack*)pair->GetFirstDaughterP());
+ else if(fgEvent->IsA() == AliAODEvent::Class()) motherMC = (AliAODMCParticle*)mc->GetMCTrackMother((AliAODTrack*)pair->GetFirstDaughterP());
Double_t vtxX, vtxY, vtxZ;
if(motherMC && mc->GetPrimaryVertex(vtxX,vtxY,vtxZ)) {
Int_t motherLbl = motherMC->GetLabel();
if (fgTRDpidEff[0][0]){
Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues];
Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues];
- AliVParticle* leg1 = pair->GetFirstDaughter();
- AliVParticle* leg2 = pair->GetSecondDaughter();
+ AliVParticle* leg1 = pair->GetFirstDaughterP();
+ AliVParticle* leg2 = pair->GetSecondDaughterP();
if (leg1 && leg2){
Fill(leg1, valuesLeg1);
Fill(leg2, valuesLeg2);
}//if (mc->HasMC())
- AliVParticle* leg1 = pair->GetFirstDaughter();
- AliVParticle* leg2 = pair->GetSecondDaughter();
+ AliVParticle* leg1 = pair->GetFirstDaughterP();
+ AliVParticle* leg2 = pair->GetSecondDaughterP();
if (leg1)
values[AliDielectronVarManager::kMomAsymDau1] = (values[AliDielectronVarManager::kP] != 0)? leg1->P() / values[AliDielectronVarManager::kP]: 0;
else
PHOSTasks/PHOS_PbPb/AliAnalysisTaskPi0FlowMC.cxx
PHOSTasks/PHOS_PbPb/AliAnalysisTaskPi0FlowMCAOD.cxx
PHOSTasks/PHOS_PbPb/AliAnalysisTaskPi0FlowMCHijing.cxx
+ PHOSTasks/PHOS_PbPb/AliAnalysisTaskPi0FlowMCParamWeights.cxx
PHOSTasks/PHOS_PbPb/AliPHOSTenderTask.cxx
PHOSTasks/PHOS_PbPb_MC/AliPHOSHijingEfficiency.cxx
PHOSTasks/PHOS_embedding/AliPHOSEmbedding.cxx
track->GetUsedForVtxFit(),
track->GetUsedForPrimVtxFit(),
(AliAODTrack::AODTrk_t) track->GetType(),
- track->GetFilterMap(),
- track->Chi2perNDF());
+ track->GetFilterMap());
aodTrack->SetPIDForTracking(track->GetPIDForTracking());
//Switches
fFillAllCellTimeHisto(kTRUE),
-fFillAllPosHisto(kFALSE), fFillAllPosHisto2(kTRUE),
-fFillAllTH12(kFALSE), fFillAllTH3(kTRUE),
+fFillAllPosHisto(kFALSE), fFillAllPosHisto2(kTRUE),
+fFillAllTH3(kFALSE),
fFillAllTMHisto(kTRUE), fFillAllPi0Histo(kTRUE),
fCorrelate(kTRUE), fStudyBadClusters(kFALSE),
fStudyClustersAsymmetry(kFALSE), fStudyExotic(kFALSE),
fNModules(12), fNRCU(2),
fNMaxCols(48), fNMaxRows(24),
fTimeCutMin(-10000), fTimeCutMax(10000),
-fEMCALCellAmpMin(0), fPHOSCellAmpMin(0),
+fCellAmpMin(0), fEMCALCellAmpMin(0),
+fPHOSCellAmpMin(0), fMinInvMassECut(0),
// Exotic
fExoNECrossCuts(0), fExoECrossCuts(),
fhDeltaCellClusterYE(0), fhDeltaCellClusterZE(0),
// Cells
-fhNCells(0), fhAmplitude(0),
-fhAmpId(0), fhEtaPhiAmp(0),
+fhNCells(0), fhNCellsCutAmpMin(0),
+fhAmplitude(0), fhAmpId(0), fhEtaPhiAmp(0),
fhTime(0), fhTimeVz(0),
fhTimeId(0), fhTimeAmp(0),
fhCellECross(0),
// Weight studies
fhECellClusterRatio(0), fhECellClusterLogRatio(0),
fhEMaxCellClusterRatio(0), fhEMaxCellClusterLogRatio(0),
+fhECellTotalRatio(0), fhECellTotalLogRatio(0),
+fhECellTotalRatioMod(0), fhECellTotalLogRatioMod(0),
fhExoL0ECross(0), fhExoL1ECross(0),
//Default Ctor
//Weight studies
- for(Int_t i =0; i < 14; i++){
+ for(Int_t i =0; i < 12; i++){
fhLambda0ForW0[i] = 0;
//fhLambda1ForW0[i] = 0;
// MC
- for(Int_t i = 0; i < 6; i++){
-
+ for(Int_t i = 0; i < 6; i++)
+ {
fhRecoMCE[i][0] = 0; fhRecoMCE[i][1] = 0;
fhRecoMCPhi[i][0] = 0; fhRecoMCPhi[i][1] = 0;
fhRecoMCEta[i][0] = 0; fhRecoMCEta[i][1] = 0;
fhRecoMCDeltaE[i][0] = 0; fhRecoMCDeltaE[i][1] = 0;
fhRecoMCRatioE[i][0] = 0; fhRecoMCRatioE[i][1] = 0;
fhRecoMCDeltaPhi[i][0] = 0; fhRecoMCDeltaPhi[i][1] = 0;
- fhRecoMCDeltaEta[i][0] = 0; fhRecoMCDeltaEta[i][1] = 0;
-
+ fhRecoMCDeltaEta[i][0] = 0; fhRecoMCDeltaEta[i][1] = 0;
}
//Initialize parameters
//______________________________________________________________________________________________________________________
void AliAnaCalorimeterQA::BadClusterHistograms(AliVCluster* clus, const TObjArray *caloClusters, AliVCaloCells * cells,
Int_t absIdMax, Double_t maxCellFraction, Float_t eCrossFrac,
- Double_t tmax, Double_t timeAverages[2] )
+ Double_t tmax)
{
//Bad cluster histograms
//Clusters in event time differencem bad minus good
- for(Int_t iclus2 = 0; iclus2 < caloClusters->GetEntriesFast(); iclus2++ ){
-
+ for(Int_t iclus2 = 0; iclus2 < caloClusters->GetEntriesFast(); iclus2++ )
+ {
AliVCluster* clus2 = (AliVCluster*)caloClusters->At(iclus2);
if(clus->GetID()==clus2->GetID()) continue;
Float_t maxCellFraction2 = 0.;
Int_t absIdMax2 = GetCaloUtils()->GetMaxEnergyCell(cells, clus2,maxCellFraction2);
- if(IsGoodCluster(absIdMax2,cells)){
+ if(IsGoodCluster(absIdMax2,cells))
+ {
Double_t tof2 = clus2->GetTOF()*1.e9;
fhBadClusterPairDiffTimeE ->Fill(clus->E(), (tof-tof2));
}
// Max cell compared to other cells in cluster
if(fFillAllCellTimeHisto)
{
+ // Get some time averages
+ Double_t timeAverages[2] = {0.,0.};
+ CalculateAverageTime(clus, cells, timeAverages);
+
fhBadClusterMaxCellDiffAverageTime ->Fill(clus->E(),tmax-timeAverages[0]);
fhBadClusterMaxCellDiffWeightedTime ->Fill(clus->E(),tmax-timeAverages[1]);
}
ampMax = amp;
// absIdMax = id;
}
-
} // energy loop
// Calculate average time of cells in cluster and weighted average
Int_t id =-1;
Double_t w = 0;
Int_t ncells = clus->GetNCells();
+
for (Int_t ipos = 0; ipos < ncells; ipos++)
{
id = clus ->GetCellsAbsId()[ipos];
// Plot histograms related to cells only
Int_t ncells = cells->GetNumberOfCells();
+ if( ncells > 0 ) fhNCells->Fill(ncells) ;
+
+ Int_t ncellsCut = 0;
+ Float_t ecellsCut = 0;
- if(GetDebug() > 0)
+ if( GetDebug() > 0 )
printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - %s cell entries %d\n", fCalorimeter.Data(), ncells );
//Init arrays and used variables
- Int_t *nCellsInModule = new Int_t[fNModules];
- for(Int_t imod = 0; imod < fNModules; imod++ ) nCellsInModule[imod] = 0;
+ Int_t *nCellsInModule = new Int_t [fNModules];
+ Float_t *eCellsInModule = new Float_t[fNModules];
+
+ for(Int_t imod = 0; imod < fNModules; imod++ )
+ {
+ nCellsInModule[imod] = 0 ;
+ eCellsInModule[imod] = 0.;
+ }
Int_t icol = -1;
Int_t irow = -1;
Float_t recalF = 1.;
Int_t bc = GetReader()->GetInputEvent()->GetBunchCrossNumber();
- for (Int_t iCell = 0; iCell < cells->GetNumberOfCells(); iCell++) {
+ for (Int_t iCell = 0; iCell < cells->GetNumberOfCells(); iCell++)
+ {
if(GetDebug() > 2)
printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Cell : amp %f, absId %d \n", cells->GetAmplitude(iCell), cells->GetCellNumber(iCell));
+
Int_t nModule = GetModuleNumberCellIndexes(cells->GetCellNumber(iCell),fCalorimeter, icol, irow, iRCU);
if(GetDebug() > 2)
printf("\t module %d, column %d, row %d \n", nModule,icol,irow);
if(nModule < fNModules)
{
//Check if the cell is a bad channel
- if(GetCaloUtils()->IsBadChannelsRemovalSwitchedOn()){
+ if(GetCaloUtils()->IsBadChannelsRemovalSwitchedOn())
+ {
if(fCalorimeter=="EMCAL")
{
if(GetCaloUtils()->GetEMCALChannelStatus(nModule,icol,irow)) continue;
if(fCalorimeter=="EMCAL" &&
GetCaloUtils()->GetEMCALRecoUtils()->IsExoticCell(id, cells, bc)) continue;
-
fhAmplitude->Fill(amp);
fhAmpId ->Fill(amp,id);
fhAmpMod ->Fill(amp,nModule);
- if ((fCalorimeter=="EMCAL" && amp > fEMCALCellAmpMin) ||
- (fCalorimeter=="PHOS" && amp > fPHOSCellAmpMin ) )
+ //E cross for exotic cells
+ if(amp > 0.05)
{
-
- //E cross for exotic cells
- if(amp > 0.01) fhCellECross->Fill(amp,1-GetECross(id,cells)/amp);
-
- nCellsInModule[nModule]++ ;
+ fhCellECross->Fill(amp,1-GetECross(id,cells)/amp);
+ ecellsCut+=amp ;
+ eCellsInModule[nModule]+=amp ;
+ }
+
+ if ( amp > fCellAmpMin )
+ {
+ ncellsCut++ ;
+ nCellsInModule[nModule]++ ;
Int_t icols = icol;
Int_t irows = irow;
}//PHOS cells
}//fill cell position histograms
- if (fCalorimeter=="EMCAL" && amp > fEMCALCellAmpMin) ncells ++ ;
- else if(fCalorimeter=="PHOS" && amp > fPHOSCellAmpMin) ncells ++ ;
- //else
- // printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - no %s CELLS passed the analysis cut\n",fCalorimeter.Data());
}//nmodules
}//cell loop
- if(ncells > 0 )fhNCells->Fill(ncells) ; //fill the cells after the cut
+ if( ncellsCut > 0 ) fhNCellsCutAmpMin->Fill(ncellsCut) ; //fill the cells after the cut on min amplitude and bad/exotic channels
//Number of cells per module
- for(Int_t imod = 0; imod < fNModules; imod++ ) {
-
+ for(Int_t imod = 0; imod < fNModules; imod++ )
+ {
if(GetDebug() > 1)
printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - module %d calo %s cells %d\n", imod, fCalorimeter.Data(), nCellsInModule[imod]);
fhNCellsMod->Fill(nCellsInModule[imod],imod) ;
-
}
+ // Check energy distribution in calorimeter for selected cells
+ if(fStudyWeight)
+ {
+ for (Int_t iCell = 0; iCell < cells->GetNumberOfCells(); iCell++)
+ {
+ if(GetDebug() > 2)
+ printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Cell : amp %f, absId %d \n", cells->GetAmplitude(iCell), cells->GetCellNumber(iCell));
+
+ Int_t nModule = GetModuleNumberCellIndexes(cells->GetCellNumber(iCell),fCalorimeter, icol, irow, iRCU);
+ if(GetDebug() > 2)
+ printf("\t module %d, column %d, row %d \n", nModule,icol,irow);
+
+ if(nModule < fNModules)
+ {
+ //Check if the cell is a bad channel
+ if(GetCaloUtils()->IsBadChannelsRemovalSwitchedOn())
+ {
+ if(fCalorimeter=="EMCAL")
+ {
+ if(GetCaloUtils()->GetEMCALChannelStatus(nModule,icol,irow)) continue;
+ }
+ else
+ {
+ if(GetCaloUtils()->GetPHOSChannelStatus(nModule,icol,irow) ) continue;
+ }
+ } // use bad channel map
+
+ amp = cells->GetAmplitude(iCell)*recalF;
+ time = cells->GetTime(iCell);
+ id = cells->GetCellNumber(iCell);
+
+ // Amplitude recalibration if set
+ GetCaloUtils()->RecalibrateCellAmplitude(amp, fCalorimeter, id);
+
+ // Time recalibration if set
+ GetCaloUtils()->RecalibrateCellTime (time, fCalorimeter, id, GetReader()->GetInputEvent()->GetBunchCrossNumber());
+
+ //Transform time to ns
+ time *= 1.0e9;
+
+ if(time < fTimeCutMin || time > fTimeCutMax)
+ {
+ if(GetDebug() > 0 )
+ printf("AliAnaCalorimeterQA - Remove cell with Time %f\n",time);
+ continue;
+ }
+
+ // Remove exotic cells, defined only for EMCAL
+ if(fCalorimeter=="EMCAL" &&
+ GetCaloUtils()->GetEMCALRecoUtils()->IsExoticCell(id, cells, bc)) continue;
+
+ //E cross for exotic cells
+ if(amp > 0.05)
+ {
+ if(ecellsCut > 0)
+ {
+ Float_t ratio = amp/ecellsCut;
+ fhECellTotalRatio ->Fill(ecellsCut, ratio );
+ fhECellTotalLogRatio ->Fill(ecellsCut,TMath::Log(ratio));
+ }
+
+ if(eCellsInModule[nModule] > 0)
+ {
+ Float_t ratioMod = amp/eCellsInModule[nModule];
+ fhECellTotalRatioMod [nModule]->Fill(eCellsInModule[nModule], ratioMod );
+ fhECellTotalLogRatioMod[nModule]->Fill(eCellsInModule[nModule],TMath::Log(ratioMod));
+ }
+ }// amp > 0.5
+ }// nMod > 0 < Max
+ } // cell loop
+ } // weight studies
+
delete [] nCellsInModule;
+ delete [] eCellsInModule;
}
{
// Fill histograms releated to cell position
-
Int_t nCaloCellsPerCluster = clus->GetNCells();
UShort_t * indexList = clus->GetCellsAbsId();
Float_t pos[3];
Float_t clEnergy = clus->E();
//Loop on cluster cells
- for (Int_t ipos = 0; ipos < nCaloCellsPerCluster; ipos++) {
-
+ for (Int_t ipos = 0; ipos < nCaloCellsPerCluster; ipos++)
+ {
// printf("Index %d\n",ipos);
Int_t absId = indexList[ipos];
fhDeltaCellClusterRE ->Fill(r-rcell, clEnergy) ;
}//EMCAL and its matrices are available
- else if(fCalorimeter=="PHOS" && GetCaloUtils()->IsPHOSGeoMatrixSet()){
+ else if(fCalorimeter=="PHOS" && GetCaloUtils()->IsPHOSGeoMatrixSet())
+ {
TVector3 xyz;
Int_t relId[4], module;
Float_t xCell, zCell;
// Study the shape of the cluster in cell units terms
//No use to study clusters with less than 4 cells
- if(clus->GetNCells() <=3 ) return;
+ if( clus->GetNCells() <= 3 ) return;
Int_t dIeta = 0;
Int_t dIphi = 0;
if(dIphi < TMath::Abs(iphi-iphiMax)) dIphi = TMath::Abs(iphi-iphiMax);
- if(smMax==sm){
+ if(smMax==sm)
+ {
if(dIeta < TMath::Abs(ieta-ietaMax)) dIeta = TMath::Abs(ieta-ietaMax);
}
- else {
+ else
+ {
Int_t ietaShift = ieta;
Int_t ietaMaxShift = ietaMax;
if (ieta > ietaMax) ietaMaxShift+=48;
// Origin of clusters
Int_t nLabel = clus->GetNLabels();
Int_t* labels = clus->GetLabels();
- if(IsDataMC()){
+ if(IsDataMC())
+ {
Int_t tag = GetMCAnalysisUtils()->CheckOrigin(labels,nLabel, GetReader());
if( GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPhoton) &&
!GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) &&
//__________________________________________________________________________________________________________________
void AliAnaCalorimeterQA::ClusterHistograms(AliVCluster* clus, const TObjArray *caloClusters, AliVCaloCells * cells,
Int_t absIdMax, Double_t maxCellFraction, Float_t eCrossFrac,
- Double_t tmax, Double_t timeAverages[2])
+ Double_t tmax)
{
//Fill CaloCluster related histograms
if(fStudyClustersAsymmetry) ClusterAsymmetryHistograms(clus,absIdMax,kTRUE);
//Clusters in event time difference
- for(Int_t iclus2 = 0; iclus2 < caloClusters->GetEntriesFast(); iclus2++ ){
-
+ for(Int_t iclus2 = 0; iclus2 < caloClusters->GetEntriesFast(); iclus2++ )
+ {
AliVCluster* clus2 = (AliVCluster*) caloClusters->At(iclus2);
- if(clus->GetID()==clus2->GetID()) continue;
+ if( clus->GetID() == clus2->GetID() ) continue;
- if(clus->GetM02() > 0.01 && clus2->GetM02() > 0.01)
+ if( clus->GetM02() > 0.01 && clus2->GetM02() > 0.01 )
{
Double_t tof2 = clus2->GetTOF()*1.e9;
fhClusterPairDiffTimeE ->Fill(clus->E(), tof-tof2);
Int_t nModule = GetModuleNumber(clus);
Int_t nCaloCellsPerCluster = clus->GetNCells();
- if(nCaloCellsPerCluster > 1){
-
+ if(nCaloCellsPerCluster > 1)
+ {
// check time of cells respect to max energy cell
if(fFillAllCellTimeHisto)
{
+ // Get some time averages
+ Double_t timeAverages[2] = {0.,0.};
+ CalculateAverageTime(clus, cells, timeAverages);
+
fhClusterMaxCellDiffAverageTime ->Fill(clus->E(),tmax-timeAverages[0]);
fhClusterMaxCellDiffWeightedTime ->Fill(clus->E(),tmax-timeAverages[1]);
}
for (Int_t ipos = 0; ipos < nCaloCellsPerCluster; ipos++)
{
Int_t absId = clus->GetCellsAbsId()[ipos];
- if(absId == absIdMax || cells->GetCellAmplitude(absIdMax) < 0.01) continue;
+ if( absId == absIdMax || cells->GetCellAmplitude(absIdMax) < 0.01 ) continue;
Float_t frac = cells->GetCellAmplitude(absId)/cells->GetCellAmplitude(absIdMax);
fhClusterMaxCellCloseCellRatio->Fill(clus->E(),frac);
}//check time and energy of cells respect to max energy cell if cluster of more than 1 cell
-
// Get vertex for photon momentum calculation and event selection
Double_t v[3] = {0,0,0}; //vertex ;
//GetReader()->GetVertex(v); //
fhE ->Fill(e);
if(nModule >=0 && nModule < fNModules) fhEMod->Fill(e,nModule);
- if(fFillAllTH12){
- fhPt ->Fill(pt);
- fhPhi ->Fill(phi);
- fhEta ->Fill(eta);
- }
+
+ fhPt ->Fill(pt);
+ fhPhi ->Fill(phi);
+ fhEta ->Fill(eta);
if(fFillAllTH3)
fhEtaPhiE->Fill(eta,phi,e);
fhNCellsPerCluster ->Fill(e, nCaloCellsPerCluster);
//Position
- if(fFillAllPosHisto2){
-
+ if(fFillAllPosHisto2)
+ {
Float_t pos[3] ;
clus->GetPosition(pos);
fhRNCells->Fill(rxyz ,nCaloCellsPerCluster);
}
- if(nModule >=0 && nModule < fNModules) fhNCellsPerClusterMod[nModule]->Fill(e, nCaloCellsPerCluster);
+ if( nModule >= 0 && nModule < fNModules ) fhNCellsPerClusterMod[nModule]->Fill(e, nCaloCellsPerCluster);
}
printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - In %s there are %d clusters \n", fCalorimeter.Data(), nCaloClusters);
// Loop over CaloClusters
- for(Int_t iclus = 0; iclus < nCaloClusters; iclus++){
-
+ for(Int_t iclus = 0; iclus < nCaloClusters; iclus++)
+ {
if(GetDebug() > 0)
printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - cluster: %d/%d, data %d \n",
iclus+1,nCaloClusters,GetReader()->GetDataType());
//Cut on time of clusters
Double_t tof = clus->GetTOF()*1.e9;
- if(tof < fTimeCutMin || tof > fTimeCutMax)
+ if( tof < fTimeCutMin || tof > fTimeCutMax )
{
if(GetDebug() > 0 )printf("AliAnaCalorimeterQA - Remove cluster with TOF %f\n",tof);
continue;
// Cluster mathed with track?
matched = GetCaloPID()->IsTrackMatched(clus,GetCaloUtils(), GetReader()->GetInputEvent());
- // Get some time averages
- Double_t averTime[4] = {0.,0.,0.,0.};
- CalculateAverageTime(clus, cells, averTime);
-
//Get time of max cell
Double_t tmax = cells->GetCellTime(absIdMax);
GetCaloUtils()->RecalibrateCellTime(tmax, fCalorimeter, absIdMax,GetReader()->GetInputEvent()->GetBunchCrossNumber());
// Fill histograms related to single cluster
-
// Fill some histograms before applying the exotic cell / bad map cut
fhNCellsPerClusterNoCut ->Fill(clus->E(), nCaloCellsPerCluster);
if(nModule >=0 && nModule < fNModules) fhNCellsPerClusterModNoCut[nModule]->Fill(clus->E(), nCaloCellsPerCluster);
if(!goodCluster)
{
BadClusterHistograms(clus, caloClusters, cells, absIdMax,
- maxCellFraction, eCrossFrac, tmax, averTime);
+ maxCellFraction, eCrossFrac, tmax);
continue;
}
ClusterHistograms(clus, caloClusters, cells, absIdMax,
- maxCellFraction, eCrossFrac, tmax, averTime);
+ maxCellFraction, eCrossFrac, tmax);
nCaloClustersAccepted++;
nModule = GetModuleNumber(clus);
- if(nModule >=0 && nModule < fNModules)
- {
- if (fCalorimeter=="EMCAL" && mom.E() > 2*fEMCALCellAmpMin) nClustersInModule[nModule]++;
- else if(fCalorimeter=="PHOS" && mom.E() > 2*fPHOSCellAmpMin ) nClustersInModule[nModule]++;
- }
+ if(nModule >=0 && nModule < fNModules && mom.E() > 2*fCellAmpMin)
+ nClustersInModule[nModule]++;
// Cluster weights
if(fStudyWeight) WeightHistograms(clus, cells);
// in cluster and remove low energy clusters
if(fFillAllPi0Histo && nCaloClusters > 1 && nCaloCellsPerCluster > 1 &&
GetCaloUtils()->GetNumberOfLocalMaxima(clus,cells) == 1 &&
- clus->GetM02() < 0.5 && clus->E() > 0.3)
+ clus->GetM02() < 0.5 && clus->E() > fMinInvMassECut)
InvariantMassHistograms(iclus, mom, nModule, caloClusters,cells);
}//cluster loop
return kFALSE;
}
- Int_t pdg0 =-1;Int_t status = -1; Int_t iMother = -1; Int_t iParent = -1;
- Float_t vxMC= 0; Float_t vyMC = 0;
- Float_t eMC = 0; //Float_t ptMC= 0;
- Float_t phiMC =0; Float_t etaMC = 0;
- Int_t charge = 0;
+ Int_t pdg0 =-1; Int_t status = -1; Int_t iMother = -1; Int_t iParent = -1;
+ Float_t vxMC = 0; Float_t vyMC = 0;
+ Float_t eMC = 0; //Float_t ptMC= 0;
+ Float_t phiMC = 0; Float_t etaMC = 0;
+ Int_t charge = 0;
//Check the origin.
Int_t tag = GetMCAnalysisUtils()->CheckOrigin(labels,nLabels, GetReader());
vyMC = aodprimary->Yv();
iParent = aodprimary->GetMother();
- if(GetDebug() > 1 )
+ if( GetDebug() > 1 )
{
printf("AliAnaCalorimeterQA::ClusterHistograms() - Cluster most contributing mother: \n");
printf("\t Mother label %d, pdg %d, Primary? %d, Physical Primary? %d, parent %d \n",
}
//Get final particle, no conversion products
- if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion))
+ if( GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion) )
{
- if(GetDebug() > 1 )
+ if( GetDebug() > 1 )
printf("AliAnaCalorimeterQA::ClusterHistograms() - Converted cluster!. Find before conversion: \n");
//Get the parent
aodprimary = (AliAODMCParticle*)(GetReader()->GetAODMCParticles())->At(iParent);
// If gone too back and non stable, assign the decay photon/electron
// there are other possible decays, ignore them for the moment
- if(pdg==111 || pdg==221)
+ if( pdg == 111 || pdg == 221 )
{
aodprimary = (AliAODMCParticle*)(GetReader()->GetAODMCParticles())->At(iMotherOrg);
break;
}
- if(iParent < 0 )
+ if( iParent < 0 )
{
iParent = iMother;
break;
}
- if(GetDebug() > 1 )
+ if( GetDebug() > 1 )
printf("\t pdg %d, index %d, Primary? %d, Physical Primary? %d \n",
pdg, iMother, aodprimary->IsPrimary(), aodprimary->IsPhysicalPrimary());
}
- if(GetDebug() > 1 )
+ if( GetDebug() > 1 )
{
printf("AliAnaCalorimeterQA::ClusterHistograms() - Converted Cluster mother before conversion: \n");
printf("\t Mother label %d, pdg %d, parent %d, Primary? %d, Physical Primary? %d \n",
iMother, pdg, iParent, aodprimary->IsPrimary(), aodprimary->IsPhysicalPrimary());
}
-
}
//Overlapped pi0 (or eta, there will be very few), get the meson
GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta))
{
if(GetDebug() > 1 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Overlapped Meson decay!, Find it: PDG %d, mom %d \n",pdg, iMother);
+
while(pdg != 111 && pdg != 221)
{
iMother = iParent;
iParent = aodprimary->GetMother();
pdg = TMath::Abs(aodprimary->GetPdgCode());
- if(iParent < 0 ) break;
+ if( iParent < 0 ) break;
- if(GetDebug() > 1 ) printf("\t pdg %d, index %d\n",pdg, iMother);
+ if( GetDebug() > 1 ) printf("\t pdg %d, index %d\n",pdg, iMother);
if(iMother==-1)
{
//Float_t vz = primary->Vz();
Float_t rVMC = TMath::Sqrt(vxMC*vxMC + vyMC*vyMC);
- if((pdg == 22 || TMath::Abs(pdg)==11) && status!=1)
+ if( ( pdg == 22 || TMath::Abs(pdg) == 11 ) && status != 1 )
{
fhEMVxyz ->Fill(vxMC,vyMC);//,vz);
fhEMR ->Fill(e,rVMC);
fhHaR ->Fill(e,rVMC);
}
- if(primary || aodprimary) return kTRUE ;
- else return kFALSE;
+ if( primary || aodprimary ) return kTRUE ;
+ else return kFALSE;
}
Float_t eta = mom.Eta();
Float_t phi = mom.Phi();
if(phi < 0) phi +=TMath::TwoPi();
-
- if(fFillAllTH12)
- {
- fhECharged ->Fill(e);
- fhPtCharged ->Fill(pt);
- fhPhiCharged ->Fill(phi);
- fhEtaCharged ->Fill(eta);
- }
+
+ fhECharged ->Fill(e);
+ fhPtCharged ->Fill(pt);
+ fhPhiCharged ->Fill(phi);
+ fhEtaCharged ->Fill(eta);
//Study the track and matched cluster if track exists.
if(track && positive)
{
-
fhTrackMatchedDEtaPos->Fill(e,deta);
fhTrackMatchedDPhiPos->Fill(e,dphi);
if(e > 0.5) fhTrackMatchedDEtaDPhiPos->Fill(deta,dphi);
}
}//DataMC
- if(dR < 0.02 && eOverP > 0.6 && eOverP< 1.2
+ if(dR < 0.02 && eOverP > 0.6 && eOverP < 1.2
&& clus->GetNCells() > 1 && nITS > 3 && nTPC > 20)
{
fh2EledEdx->Fill(tmom,dedx);
parList+=onePar ;
snprintf(onePar,buffersize,"PHOS Cell Amplitude > %2.2f GeV, EMCAL Cell Amplitude > %2.2f GeV \n",fPHOSCellAmpMin, fEMCALCellAmpMin) ;
parList+=onePar ;
+ snprintf(onePar,buffersize,"Inv. Mass E1, E2 > %2.2f GeV \n",fMinInvMassECut) ;
+ parList+=onePar ;
+
//Get parameters set in base class.
//parList += GetBaseParametersList() ;
fNRCU = 4 ;
}
- fhE = new TH1F ("hE","E reconstructed clusters ", nptbins*5,ptmin,ptmax*5);
- fhE->SetXTitle("E (GeV)");
+ fhE = new TH1F ("hE","#it{E} reconstructed clusters ", nptbins*5,ptmin,ptmax*5);
+ fhE->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhE);
- if(fFillAllTH12)
- {
- fhPt = new TH1F ("hPt","p_{T} reconstructed clusters", nptbins,ptmin,ptmax);
- fhPt->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPt);
-
- fhPhi = new TH1F ("hPhi","#phi reconstructed clusters ",nphibins,phimin,phimax);
- fhPhi->SetXTitle("#phi (rad)");
- outputContainer->Add(fhPhi);
-
- fhEta = new TH1F ("hEta","#eta reconstructed clusters ",netabins,etamin,etamax);
- fhEta->SetXTitle("#eta ");
- outputContainer->Add(fhEta);
- }
+ fhPt = new TH1F ("hPt","#it{p}_{T} reconstructed clusters", nptbins,ptmin,ptmax);
+ fhPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ outputContainer->Add(fhPt);
+
+ fhPhi = new TH1F ("hPhi","#phi reconstructed clusters ",nphibins,phimin,phimax);
+ fhPhi->SetXTitle("#phi (rad)");
+ outputContainer->Add(fhPhi);
+
+ fhEta = new TH1F ("hEta","#eta reconstructed clusters ",netabins,etamin,etamax);
+ fhEta->SetXTitle("#eta ");
+ outputContainer->Add(fhEta);
+
if(fFillAllTH3)
{
netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
fhEtaPhiE->SetXTitle("#eta ");
fhEtaPhiE->SetYTitle("#phi (rad)");
- fhEtaPhiE->SetZTitle("E (GeV) ");
+ fhEtaPhiE->SetZTitle("#it{E} (GeV) ");
outputContainer->Add(fhEtaPhiE);
}
fhClusterTimeEnergy = new TH2F ("hClusterTimeEnergy","energy vs TOF, reconstructed clusters",
nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
- fhClusterTimeEnergy->SetXTitle("E (GeV) ");
+ fhClusterTimeEnergy->SetXTitle("#it{E} (GeV) ");
fhClusterTimeEnergy->SetYTitle("TOF (ns)");
outputContainer->Add(fhClusterTimeEnergy);
fhClusterPairDiffTimeE = new TH2F("hClusterPairDiffTimeE","cluster pair time difference vs E, only good clusters",
nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
- fhClusterPairDiffTimeE->SetXTitle("E_{cluster} (GeV)");
- fhClusterPairDiffTimeE->SetYTitle("#Delta t (ns)");
+ fhClusterPairDiffTimeE->SetXTitle("#it{E}_{cluster} (GeV)");
+ fhClusterPairDiffTimeE->SetYTitle("#Delta #it{t} (ns)");
outputContainer->Add(fhClusterPairDiffTimeE);
fhLambda0 = new TH2F ("hLambda0","shower shape, #lambda^{2}_{0} vs E",
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
- fhLambda0->SetXTitle("E_{cluster}");
+ fhLambda0->SetXTitle("#it{E}_{cluster}");
fhLambda0->SetYTitle("#lambda^{2}_{0}");
outputContainer->Add(fhLambda0);
fhLambda1 = new TH2F ("hLambda1","shower shape, #lambda^{2}_{1} vs E for bad cluster ",
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
- fhLambda1->SetXTitle("E_{cluster}");
+ fhLambda1->SetXTitle("#it{E}_{cluster}");
fhLambda1->SetYTitle("#lambda^{2}_{1}");
outputContainer->Add(fhLambda1);
fhDispersion = new TH2F ("hDispersion","shower shape, Dispersion^{2} vs E for bad cluster ",
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
- fhDispersion->SetXTitle("E_{cluster}");
+ fhDispersion->SetXTitle("#it{E}_{cluster}");
fhDispersion->SetYTitle("Dispersion");
outputContainer->Add(fhDispersion);
fhClusterMaxCellCloseCellRatio = new TH2F ("hClusterMaxCellCloseCellRatio","energy vs ratio of max cell / neighbour cell, reconstructed clusters",
nptbins,ptmin,ptmax, 100,0,1.);
- fhClusterMaxCellCloseCellRatio->SetXTitle("E_{cluster} (GeV) ");
- fhClusterMaxCellCloseCellRatio->SetYTitle("E_{cell i}/E_{cell max}");
+ fhClusterMaxCellCloseCellRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhClusterMaxCellCloseCellRatio->SetYTitle("#it{E}_{cell i}/#it{E}_{cell max}");
outputContainer->Add(fhClusterMaxCellCloseCellRatio);
fhClusterMaxCellCloseCellDiff = new TH2F ("hClusterMaxCellCloseCellDiff","energy vs ratio of max cell / neighbour cell, reconstructed clusters",
nptbins,ptmin,ptmax, 500,0,100.);
- fhClusterMaxCellCloseCellDiff->SetXTitle("E_{cluster} (GeV) ");
- fhClusterMaxCellCloseCellDiff->SetYTitle("E_{cell max}-E_{cell i} (GeV)");
+ fhClusterMaxCellCloseCellDiff->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhClusterMaxCellCloseCellDiff->SetYTitle("#it{E}_{cell max}-#it{E}_{cell i} (GeV)");
outputContainer->Add(fhClusterMaxCellCloseCellDiff);
fhClusterMaxCellDiff = new TH2F ("hClusterMaxCellDiff","energy vs difference of cluster energy - max cell energy / cluster energy, good clusters",
nptbins,ptmin,ptmax, 500,0,1.);
- fhClusterMaxCellDiff->SetXTitle("E_{cluster} (GeV) ");
- fhClusterMaxCellDiff->SetYTitle("(E_{cluster} - E_{cell max})/ E_{cluster}");
+ fhClusterMaxCellDiff->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhClusterMaxCellDiff->SetYTitle("(#it{E}_{cluster} - #it{E}_{cell max})/ #it{E}_{cluster}");
outputContainer->Add(fhClusterMaxCellDiff);
fhClusterMaxCellDiffNoCut = new TH2F ("hClusterMaxCellDiffNoCut","energy vs difference of cluster energy - max cell energy / cluster energy",
nptbins,ptmin,ptmax, 500,0,1.);
- fhClusterMaxCellDiffNoCut->SetXTitle("E_{cluster} (GeV) ");
- fhClusterMaxCellDiffNoCut->SetYTitle("(E_{cluster} - E_{cell max})/ E_{cluster}");
+ fhClusterMaxCellDiffNoCut->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhClusterMaxCellDiffNoCut->SetYTitle("(#it{E}_{cluster} - #it{E}_{cell max})/ #it{E}_{cluster}");
outputContainer->Add(fhClusterMaxCellDiffNoCut);
fhClusterMaxCellECross = new TH2F ("hClusterMaxCellECross","1 - Energy in cross around max energy cell / max energy cell vs cluster energy, good clusters",
nptbins,ptmin,ptmax, 400,-1,1.);
- fhClusterMaxCellECross->SetXTitle("E_{cluster} (GeV) ");
- fhClusterMaxCellECross->SetYTitle("1- E_{cross}/E_{cell max}");
+ fhClusterMaxCellECross->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhClusterMaxCellECross->SetYTitle("1- #it{E}_{cross}/#it{E}_{cell max}");
outputContainer->Add(fhClusterMaxCellECross);
fhNCellsPerClusterNoCut = new TH2F ("hNCellsPerClusterNoCut","# cells per cluster vs energy, no bad clusters cut",
nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
- fhNCellsPerClusterNoCut->SetXTitle("E (GeV)");
- fhNCellsPerClusterNoCut->SetYTitle("n cells");
+ fhNCellsPerClusterNoCut->SetXTitle("#it{E} (GeV)");
+ fhNCellsPerClusterNoCut->SetYTitle("#it{n}_{cells}");
outputContainer->Add(fhNCellsPerClusterNoCut);
fhNCellsPerCluster = new TH2F ("hNCellsPerCluster","# cells per cluster vs energy",nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
- fhNCellsPerCluster->SetXTitle("E (GeV)");
- fhNCellsPerCluster->SetYTitle("n cells");
+ fhNCellsPerCluster->SetXTitle("#it{E} (GeV)");
+ fhNCellsPerCluster->SetYTitle("#it{n}_{cells}");
outputContainer->Add(fhNCellsPerCluster);
fhNClusters = new TH1F ("hNClusters","# clusters", nclbins,nclmin,nclmax);
- fhNClusters->SetXTitle("number of clusters");
+ fhNClusters->SetXTitle("#it{n}_{clusters}");
outputContainer->Add(fhNClusters);
if(fStudyBadClusters)
{
fhBadClusterEnergy = new TH1F ("hBadClusterEnergy","Bad cluster energy", nptbins,ptmin,ptmax);
- fhBadClusterEnergy->SetXTitle("E_{cluster} (GeV) ");
+ fhBadClusterEnergy->SetXTitle("#it{E}_{cluster} (GeV) ");
outputContainer->Add(fhBadClusterEnergy);
fhBadClusterMaxCellCloseCellRatio = new TH2F ("hBadClusterMaxCellCloseCellRatio","energy vs ratio of max cell / neighbour cell constributing cell, reconstructed bad clusters",
nptbins,ptmin,ptmax, 100,0,1.);
- fhBadClusterMaxCellCloseCellRatio->SetXTitle("E_{cluster} (GeV) ");
+ fhBadClusterMaxCellCloseCellRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
fhBadClusterMaxCellCloseCellRatio->SetYTitle("ratio");
outputContainer->Add(fhBadClusterMaxCellCloseCellRatio);
fhBadClusterMaxCellCloseCellDiff = new TH2F ("hBadClusterMaxCellCloseCellDiff","energy vs ratio of max cell - neighbour cell constributing cell, reconstructed bad clusters",
nptbins,ptmin,ptmax, 500,0,100);
- fhBadClusterMaxCellCloseCellDiff->SetXTitle("E_{cluster} (GeV) ");
- fhBadClusterMaxCellCloseCellDiff->SetYTitle("E_{cell max} - E_{cell i} (GeV)");
+ fhBadClusterMaxCellCloseCellDiff->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhBadClusterMaxCellCloseCellDiff->SetYTitle("#it{E}_{cell max} - #it{E}_{cell i} (GeV)");
outputContainer->Add(fhBadClusterMaxCellCloseCellDiff);
fhBadClusterMaxCellDiff = new TH2F ("hBadClusterMaxCellDiff","energy vs difference of cluster energy - max cell energy / cluster energy for bad clusters",
nptbins,ptmin,ptmax, 500,0,1.);
- fhBadClusterMaxCellDiff->SetXTitle("E_{cluster} (GeV) ");
- fhBadClusterMaxCellDiff->SetYTitle("(E_{cluster} - E_{cell max}) / E_{cluster}");
+ fhBadClusterMaxCellDiff->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhBadClusterMaxCellDiff->SetYTitle("(#it{E}_{cluster} - #it{E}_{cell max}) / #it{E}_{cluster}");
outputContainer->Add(fhBadClusterMaxCellDiff);
fhBadClusterTimeEnergy = new TH2F ("hBadClusterTimeEnergy","energy vs TOF of reconstructed bad clusters",
nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
- fhBadClusterTimeEnergy->SetXTitle("E_{cluster} (GeV) ");
- fhBadClusterTimeEnergy->SetYTitle("TOF (ns)");
+ fhBadClusterTimeEnergy->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhBadClusterTimeEnergy->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhBadClusterTimeEnergy);
fhBadClusterPairDiffTimeE = new TH2F("hBadClusterPairDiffTimeE","cluster pair time difference (bad - good) vs E from bad cluster",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
- fhBadClusterPairDiffTimeE->SetXTitle("E_{bad cluster} (GeV)");
- fhBadClusterPairDiffTimeE->SetYTitle("#Delta t (ns)");
+ fhBadClusterPairDiffTimeE->SetXTitle("#it{E}_{bad cluster} (GeV)");
+ fhBadClusterPairDiffTimeE->SetYTitle("#Delta #it{t} (ns)");
outputContainer->Add(fhBadClusterPairDiffTimeE);
- fhBadClusterMaxCellECross = new TH2F ("hBadClusterMaxCellECross","1 - Energy in cross around max energy cell / max energy cell vs cluster energy, bad clusters",
+ fhBadClusterMaxCellECross = new TH2F ("hBadClusterMaxCellECross","1 - #it{E}_{+} around max energy cell / max energy cell vs cluster energy, bad clusters",
nptbins,ptmin,ptmax, 400,-1,1.);
- fhBadClusterMaxCellECross->SetXTitle("E_{cluster} (GeV) ");
- fhBadClusterMaxCellECross->SetYTitle("1- E_{cross}/E_{cell max}");
+ fhBadClusterMaxCellECross->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhBadClusterMaxCellECross->SetYTitle("1- #it{E}_{cross}/#it{E}_{cell max}");
outputContainer->Add(fhBadClusterMaxCellECross);
if(fFillAllCellTimeHisto)
{
- fhBadCellTimeSpreadRespectToCellMax = new TH2F ("hBadCellTimeSpreadRespectToCellMax","t_{cell max}-t_{cell i} from bad cluster", nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
- fhBadCellTimeSpreadRespectToCellMax->SetXTitle("E (GeV)");
- fhBadCellTimeSpreadRespectToCellMax->SetYTitle("#Delta t_{cell max - i} (ns)");
+ fhBadCellTimeSpreadRespectToCellMax = new TH2F ("hBadCellTimeSpreadRespectToCellMax","#it{t}_{cell max}-#it{t}_{cell i} from bad cluster", nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
+ fhBadCellTimeSpreadRespectToCellMax->SetXTitle("#it{E} (GeV)");
+ fhBadCellTimeSpreadRespectToCellMax->SetYTitle("#Delta #it{t}_{cell max - i} (ns)");
outputContainer->Add(fhBadCellTimeSpreadRespectToCellMax);
- fhBadClusterMaxCellDiffAverageTime = new TH2F ("hBadClusterMaxCellDiffAverageTime","t_{cell max}-t_{average} from bad cluster", nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
- fhBadClusterMaxCellDiffAverageTime->SetXTitle("E (GeV)");
- fhBadClusterMaxCellDiffAverageTime->SetYTitle("#Delta t_{cell max - average} (ns)");
+ fhBadClusterMaxCellDiffAverageTime = new TH2F ("hBadClusterMaxCellDiffAverageTime","#it{t}_{cell max}-#it{t}_{average} from bad cluster", nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
+ fhBadClusterMaxCellDiffAverageTime->SetXTitle("#it{E} (GeV)");
+ fhBadClusterMaxCellDiffAverageTime->SetYTitle("#Delta #it{t}_{cell max - average} (ns)");
outputContainer->Add(fhBadClusterMaxCellDiffAverageTime);
- fhBadClusterMaxCellDiffWeightedTime = new TH2F ("hBadClusterMaxCellDiffWeightedTime","t_{cell max}-t_{weighted} from bad cluster", nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
- fhBadClusterMaxCellDiffWeightedTime->SetXTitle("E (GeV)");
- fhBadClusterMaxCellDiffWeightedTime->SetYTitle("#Delta t_{cell max - weighted} (ns)");
+ fhBadClusterMaxCellDiffWeightedTime = new TH2F ("hBadClusterMaxCellDiffWeightedTime","#it{t}_{cell max}-#it{t}_{weighted} from bad cluster", nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
+ fhBadClusterMaxCellDiffWeightedTime->SetXTitle("#it{E} (GeV)");
+ fhBadClusterMaxCellDiffWeightedTime->SetYTitle("#Delta #it{t}_{cell max - weighted} (ns)");
outputContainer->Add(fhBadClusterMaxCellDiffWeightedTime);
}
if(fStudyExotic)
{
fhExoL0ECross = new TH2F("hExoL0_ECross",
- "#lambda^{2}_{0} vs 1-E_{+}/E_{max} for E > 5 GeV",
+ "#lambda^{2}_{0} vs 1-#it{E}_{+}/#it{E}_{max} for E > 5 GeV",
400,0,1,ssbins,ssmin,ssmax);
- fhExoL0ECross ->SetXTitle("1-E_{+}/E_{cell max}");
+ fhExoL0ECross ->SetXTitle("1-#it{E}_{+}/#it{E}_{cell max}");
fhExoL0ECross ->SetYTitle("#lambda^{2}_{0}");
outputContainer->Add(fhExoL0ECross) ;
fhExoL1ECross = new TH2F("hExoL1_ECross",
- "#lambda^{2}_{1} vs 1-E_{+}/E_{max} for E > 5 GeV",
+ "#lambda^{2}_{1} vs 1-#it{E}_{+}/#it{E}_{max} for E > 5 GeV",
400,0,1,ssbins,ssmin,ssmax);
- fhExoL1ECross ->SetXTitle("1-E_{+}/E_{cell max}");
+ fhExoL1ECross ->SetXTitle("1-#it{E}_{+}/#it{E}_{cell max}");
fhExoL1ECross ->SetYTitle("#lambda^{2}_{1}");
outputContainer->Add(fhExoL1ECross) ;
{
fhExoDTime[ie] = new TH2F(Form("hExoDTime_ECross%d",ie),
- Form("#Delta time = t_{max}-t_{cells} vs E_{cluster} for exotic, 1-E_{+}/E_{max} < %2.2f",fExoECrossCuts[ie]),
+ Form("#Delta time = t_{max}-t_{cells} vs #it{E}_{cluster} for exotic, 1-#it{E}_{+}/#it{E}_{max} < %2.2f",fExoECrossCuts[ie]),
nptbins,ptmin,ptmax,tdbins,tdmin,tdmax);
- fhExoDTime[ie] ->SetYTitle("#Delta t (ns)");
- fhExoDTime[ie] ->SetXTitle("E (GeV)");
+ fhExoDTime[ie] ->SetYTitle("#Delta #it{t} (ns)");
+ fhExoDTime[ie] ->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhExoDTime[ie]) ;
for(Int_t idt = 0; idt < fExoNDTimeCuts; idt++)
{
fhExoNCell[ie][idt] = new TH2F(Form("hExoNCell_ECross%d_DT%d",ie,idt),
- Form("N cells per cluster vs E cluster, 1-E_{+}/E_{max} < %2.2f, #Delta t < %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
+ Form("N cells per cluster vs E cluster, 1-#it{E}_{+}/#it{E}_{max} < %2.2f, #Delta t < %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
nptbins,ptmin,ptmax,nceclbins,nceclmin,nceclmax);
- fhExoNCell[ie][idt] ->SetYTitle("N cells");
- fhExoNCell[ie][idt] ->SetXTitle("E (GeV)");
+ fhExoNCell[ie][idt] ->SetYTitle("#it{n}_cells");
+ fhExoNCell[ie][idt] ->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhExoNCell[ie][idt]) ;
fhExoL0 [ie][idt] = new TH2F(Form("hExoL0_ECross%d_DT%d",ie,idt),
- Form("#lambda^{2}_{0} vs E cluster for exotic, 1-E_{+}/E_{max} < %2.2f, #Delta t = %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
+ Form("#lambda^{2}_{0} vs E cluster for exotic, 1-#it{E}_{+}/#it{E}_{max} < %2.2f, #Delta t = %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhExoL0 [ie][idt] ->SetYTitle("#lambda^{2}_{0}");
- fhExoL0 [ie][idt] ->SetXTitle("E (GeV)");
+ fhExoL0 [ie][idt] ->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhExoL0[ie][idt]) ;
fhExoL1 [ie][idt] = new TH2F(Form("hExoL1_ECross%d_DT%d",ie,idt),
- Form("#lambda^{2}_{1} vs E cluster for exotic, 1-E_{+}/E_{max} < %2.2f, #Delta t = %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
+ Form("#lambda^{2}_{1} vs E cluster for exotic, 1-#it{E}_{+}/#it{E}_{max} < %2.2f, #Delta t = %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhExoL1 [ie][idt] ->SetYTitle("#lambda^{2}_{1}");
- fhExoL1 [ie][idt] ->SetXTitle("E (GeV)");
+ fhExoL1 [ie][idt] ->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhExoL1[ie][idt]) ;
fhExoECross[ie][idt] = new TH2F(Form("hExoECross_ECross%d_DT%d",ie,idt),
- Form("E cross for cells vs E cell, 1-E_{+}/E_{max} < %2.2f, #Delta t < %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
+ Form("#it{E} cross for cells vs E cell, 1-#it{E}_{+}/#it{E}_{max} < %2.2f, #Delta t < %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
nptbins,ptmin,ptmax,400,0,1);
- fhExoECross[ie][idt] ->SetYTitle("1-E_{+}/E_{cell max}");
- fhExoECross[ie][idt] ->SetXTitle("E_{cell} (GeV)");
+ fhExoECross[ie][idt] ->SetYTitle("1-#it{E}_{+}/#it{E}_{cell max}");
+ fhExoECross[ie][idt] ->SetXTitle("#it{E}_{cell} (GeV)");
outputContainer->Add(fhExoECross[ie][idt]) ;
fhExoTime [ie][idt] = new TH2F(Form("hExoTime_ECross%d_DT%d",ie,idt),
- Form("Time of cluster (max cell) vs E cluster for exotic, 1-E_{+}/E_{max} < %2.2f, #Delta t = %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
+ Form("Time of cluster (max cell) vs E cluster for exotic, 1-#it{E}_{+}/#it{E}_{max} < %2.2f, #Delta t = %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
nptbins,ptmin,ptmax,ntimebins,timemin,timemax);
- fhExoTime [ie][idt] ->SetYTitle("time_{max} (ns)");
- fhExoTime [ie][idt] ->SetXTitle("E (GeV)");
+ fhExoTime [ie][idt] ->SetYTitle("#it{t}_{max} (ns)");
+ fhExoTime [ie][idt] ->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhExoTime[ie][idt]) ;
fhExoL0NCell[ie][idt] = new TH2F(Form("hExoL0_NCell%d_DT%d",ie,idt),
- Form("#lambda^{2}_{0} vs N cells per clusters for E > 5 GeV, 1-E_{+}/E_{max} < %2.2f, #Delta t = %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
+ Form("#lambda^{2}_{0} vs N cells per clusters for E > 5 GeV, 1-#it{E}_{+}/#it{E}_{max} < %2.2f, #Delta t = %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
nptbins,ptmin,ptmax,ntimebins,timemin,timemax);
- fhExoL0NCell[ie][idt] ->SetYTitle("N cells");
+ fhExoL0NCell[ie][idt] ->SetYTitle("#it{n}_{cells}");
fhExoL0NCell[ie][idt] ->SetXTitle("#lambda^{2}_{0}");
outputContainer->Add(fhExoL0NCell[ie][idt]) ;
fhExoL1NCell[ie][idt] = new TH2F(Form("hExoL1_NCell%d_DT%d",ie,idt),
- Form("#lambda^{2}_{1} vs N cells per clusters for E > 5 GeV, 1-E_{+}/E_{max} < %2.2f, #Delta t = %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
+ Form("#lambda^{2}_{1} vs N cells per clusters for E > 5 GeV, 1-#it{E}_{+}/#it{E}_{max} < %2.2f, #Delta t = %2.0f",fExoECrossCuts[ie],fExoDTimeCuts[idt]),
nptbins,ptmin,ptmax,ntimebins,timemin,timemax);
- fhExoL1NCell[ie][idt] ->SetYTitle("N cells");
+ fhExoL1NCell[ie][idt] ->SetYTitle("#it{n}_{cells}");
fhExoL1NCell[ie][idt] ->SetXTitle("#lambda^{2}_{1}");
outputContainer->Add(fhExoL1NCell[ie][idt]) ;
// Cluster size in terms of cells
if(fStudyClustersAsymmetry)
{
- fhDeltaIEtaDeltaIPhiE0[0] = new TH2F ("hDeltaIEtaDeltaIPhiE0"," Cluster size in columns vs rows for E < 2 GeV, n cells > 3",
+ fhDeltaIEtaDeltaIPhiE0[0] = new TH2F ("hDeltaIEtaDeltaIPhiE0"," Cluster size in columns vs rows for E < 2 GeV, #it{n}_{cells} > 3",
50,0,50,50,0,50);
fhDeltaIEtaDeltaIPhiE0[0]->SetXTitle("#Delta Column");
fhDeltaIEtaDeltaIPhiE0[0]->SetYTitle("#Delta Row");
outputContainer->Add(fhDeltaIEtaDeltaIPhiE0[0]);
- fhDeltaIEtaDeltaIPhiE2[0] = new TH2F ("hDeltaIEtaDeltaIPhiE2"," Cluster size in columns vs rows for 2 <E < 6 GeV, n cells > 3",
+ fhDeltaIEtaDeltaIPhiE2[0] = new TH2F ("hDeltaIEtaDeltaIPhiE2"," Cluster size in columns vs rows for 2 <E < 6 GeV, #it{n}_{cells} > 3",
50,0,50,50,0,50);
fhDeltaIEtaDeltaIPhiE2[0]->SetXTitle("#Delta Column");
fhDeltaIEtaDeltaIPhiE2[0]->SetYTitle("#Delta Row");
outputContainer->Add(fhDeltaIEtaDeltaIPhiE2[0]);
- fhDeltaIEtaDeltaIPhiE6[0] = new TH2F ("hDeltaIEtaDeltaIPhiE6"," Cluster size in columns vs rows for E > 6 GeV, n cells > 3",
+ fhDeltaIEtaDeltaIPhiE6[0] = new TH2F ("hDeltaIEtaDeltaIPhiE6"," Cluster size in columns vs rows for E > 6 GeV, #it{n}_{cells} > 3",
50,0,50,50,0,50);
fhDeltaIEtaDeltaIPhiE6[0]->SetXTitle("#Delta Column");
fhDeltaIEtaDeltaIPhiE6[0]->SetYTitle("#Delta Row");
fhDeltaIA[0] = new TH2F ("hDeltaIA"," Cluster *asymmetry* in cell units vs E",
nptbins,ptmin,ptmax,21,-1.05,1.05);
- fhDeltaIA[0]->SetXTitle("E_{cluster}");
- fhDeltaIA[0]->SetYTitle("A_{cell in cluster}");
+ fhDeltaIA[0]->SetXTitle("#it{E}_{cluster}");
+ fhDeltaIA[0]->SetYTitle("#it{A}_{cell in cluster}");
outputContainer->Add(fhDeltaIA[0]);
fhDeltaIAL0[0] = new TH2F ("hDeltaIAL0"," Cluster *asymmetry* in cell units vs #lambda^{2}_{0}",
ssbins,ssmin,ssmax,21,-1.05,1.05);
fhDeltaIAL0[0]->SetXTitle("#lambda^{2}_{0}");
- fhDeltaIAL0[0]->SetYTitle("A_{cell in cluster}");
+ fhDeltaIAL0[0]->SetYTitle("#it{A}_{cell in cluster}");
outputContainer->Add(fhDeltaIAL0[0]);
fhDeltaIAL1[0] = new TH2F ("hDeltaIAL1"," Cluster *asymmetry* in cell units vs #lambda^{2}_{1}",
ssbins,ssmin,ssmax,21,-1.05,1.05);
fhDeltaIAL1[0]->SetXTitle("#lambda^{2}_{1}");
- fhDeltaIAL1[0]->SetYTitle("A_{cell in cluster}");
+ fhDeltaIAL1[0]->SetYTitle("#it{A}_{cell in cluster}");
outputContainer->Add(fhDeltaIAL1[0]);
fhDeltaIANCells[0] = new TH2F ("hDeltaIANCells"," Cluster *asymmetry* in cell units vs N cells in cluster",
nceclbins,nceclmin,nceclmax,21,-1.05,1.05);
- fhDeltaIANCells[0]->SetXTitle("N_{cell in cluster}");
- fhDeltaIANCells[0]->SetYTitle("A_{cell in cluster}");
+ fhDeltaIANCells[0]->SetXTitle("#it{n}_{cell in cluster}");
+ fhDeltaIANCells[0]->SetYTitle("#it{A}_{cell in cluster}");
outputContainer->Add(fhDeltaIANCells[0]);
- fhDeltaIEtaDeltaIPhiE0[1] = new TH2F ("hDeltaIEtaDeltaIPhiE0Charged"," Cluster size in columns vs rows for E < 2 GeV, n cells > 3, matched with track",
+ fhDeltaIEtaDeltaIPhiE0[1] = new TH2F ("hDeltaIEtaDeltaIPhiE0Charged"," Cluster size in columns vs rows for E < 2 GeV, #it{n}_{cells} > 3, matched with track",
50,0,50,50,0,50);
fhDeltaIEtaDeltaIPhiE0[1]->SetXTitle("#Delta Column");
fhDeltaIEtaDeltaIPhiE0[1]->SetYTitle("#Delta Row");
outputContainer->Add(fhDeltaIEtaDeltaIPhiE0[1]);
- fhDeltaIEtaDeltaIPhiE2[1] = new TH2F ("hDeltaIEtaDeltaIPhiE2Charged"," Cluster size in columns vs rows for 2 <E < 6 GeV, n cells > 3, matched with track",
+ fhDeltaIEtaDeltaIPhiE2[1] = new TH2F ("hDeltaIEtaDeltaIPhiE2Charged"," Cluster size in columns vs rows for 2 <E < 6 GeV, #it{n}_{cells} > 3, matched with track",
50,0,50,50,0,50);
fhDeltaIEtaDeltaIPhiE2[1]->SetXTitle("#Delta Column");
fhDeltaIEtaDeltaIPhiE2[1]->SetYTitle("#Delta Row");
outputContainer->Add(fhDeltaIEtaDeltaIPhiE2[1]);
- fhDeltaIEtaDeltaIPhiE6[1] = new TH2F ("hDeltaIEtaDeltaIPhiE6Charged"," Cluster size in columns vs rows for E > 6 GeV, n cells > 3, matched with track",
+ fhDeltaIEtaDeltaIPhiE6[1] = new TH2F ("hDeltaIEtaDeltaIPhiE6Charged"," Cluster size in columns vs rows for E > 6 GeV, #it{n}_{cells} > 3, matched with track",
50,0,50,50,0,50);
fhDeltaIEtaDeltaIPhiE6[1]->SetXTitle("#Delta Column");
fhDeltaIEtaDeltaIPhiE6[1]->SetYTitle("#Delta Row");
fhDeltaIA[1] = new TH2F ("hDeltaIACharged"," Cluster *asymmetry* in cell units vs E, matched with track",
nptbins,ptmin,ptmax,21,-1.05,1.05);
- fhDeltaIA[1]->SetXTitle("E_{cluster}");
- fhDeltaIA[1]->SetYTitle("A_{cell in cluster}");
+ fhDeltaIA[1]->SetXTitle("#it{E}_{cluster}");
+ fhDeltaIA[1]->SetYTitle("#it{A}_{cell in cluster}");
outputContainer->Add(fhDeltaIA[1]);
fhDeltaIAL0[1] = new TH2F ("hDeltaIAL0Charged"," Cluster *asymmetry* in cell units vs #lambda^{2}_{0}, matched with track",
ssbins,ssmin,ssmax,21,-1.05,1.05);
fhDeltaIAL0[1]->SetXTitle("#lambda^{2}_{0}");
- fhDeltaIAL0[1]->SetYTitle("A_{cell in cluster}");
+ fhDeltaIAL0[1]->SetYTitle("#it{A}_{cell in cluster}");
outputContainer->Add(fhDeltaIAL0[1]);
fhDeltaIAL1[1] = new TH2F ("hDeltaIAL1Charged"," Cluster *asymmetry* in cell units vs #lambda^{2}_{1}, matched with track",
ssbins,ssmin,ssmax,21,-1.05,1.05);
fhDeltaIAL1[1]->SetXTitle("#lambda^{2}_{1}");
- fhDeltaIAL1[1]->SetYTitle("A_{cell in cluster}");
+ fhDeltaIAL1[1]->SetYTitle("#it{A}_{cell in cluster}");
outputContainer->Add(fhDeltaIAL1[1]);
fhDeltaIANCells[1] = new TH2F ("hDeltaIANCellsCharged"," Cluster *asymmetry* in cell units vs N cells in cluster, matched with track",
nceclbins,nceclmin,nceclmax,21,-1.05,1.05);
- fhDeltaIANCells[1]->SetXTitle("N_{cell in cluster}");
- fhDeltaIANCells[1]->SetYTitle("A_{cell in cluster}");
+ fhDeltaIANCells[1]->SetXTitle("#it{n}_{cell in cluster}");
+ fhDeltaIANCells[1]->SetYTitle("#it{A}_{cell in cluster}");
outputContainer->Add(fhDeltaIANCells[1]);
if(IsDataMC()){
fhDeltaIAMC[iPart] = new TH2F (Form("hDeltaIA_MC%s",particle[iPart].Data()),Form(" Cluster *asymmetry* in cell units vs E, from %s",particle[iPart].Data()),
nptbins,ptmin,ptmax,21,-1.05,1.05);
- fhDeltaIAMC[iPart]->SetXTitle("E_{cluster}");
- fhDeltaIAMC[iPart]->SetYTitle("A_{cell in cluster}");
+ fhDeltaIAMC[iPart]->SetXTitle("#it{E}_{cluster}");
+ fhDeltaIAMC[iPart]->SetYTitle("#it{A}_{cell in cluster}");
outputContainer->Add(fhDeltaIAMC[iPart]);
}
}
if(fStudyBadClusters)
{
- fhBadClusterDeltaIEtaDeltaIPhiE0 = new TH2F ("hBadClusterDeltaIEtaDeltaIPhiE0"," Cluster size in columns vs rows for E < 2 GeV, n cells > 3",
+ fhBadClusterDeltaIEtaDeltaIPhiE0 = new TH2F ("hBadClusterDeltaIEtaDeltaIPhiE0"," Cluster size in columns vs rows for E < 2 GeV, #it{n}_{cells} > 3",
50,0,50,50,0,50);
fhBadClusterDeltaIEtaDeltaIPhiE0->SetXTitle("#Delta Column");
fhBadClusterDeltaIEtaDeltaIPhiE0->SetYTitle("#Delta Row");
outputContainer->Add(fhBadClusterDeltaIEtaDeltaIPhiE0);
- fhBadClusterDeltaIEtaDeltaIPhiE2 = new TH2F ("hBadClusterDeltaIEtaDeltaIPhiE2"," Cluster size in columns vs rows for 2 <E < 6 GeV, n cells > 3",
+ fhBadClusterDeltaIEtaDeltaIPhiE2 = new TH2F ("hBadClusterDeltaIEtaDeltaIPhiE2"," Cluster size in columns vs rows for 2 <E < 6 GeV, #it{n}_{cells} > 3",
50,0,50,50,0,50);
fhBadClusterDeltaIEtaDeltaIPhiE2->SetXTitle("#Delta Column");
fhBadClusterDeltaIEtaDeltaIPhiE2->SetYTitle("#Delta Row");
outputContainer->Add(fhBadClusterDeltaIEtaDeltaIPhiE2);
- fhBadClusterDeltaIEtaDeltaIPhiE6 = new TH2F ("hBadClusterDeltaIEtaDeltaIPhiE6"," Cluster size in columns vs rows for E > 6 GeV, n cells > 3",
+ fhBadClusterDeltaIEtaDeltaIPhiE6 = new TH2F ("hBadClusterDeltaIEtaDeltaIPhiE6"," Cluster size in columns vs rows for E > 6 GeV, #it{n}_{cells} > 3",
50,0,50,50,0,50);
fhBadClusterDeltaIEtaDeltaIPhiE6->SetXTitle("#Delta Column");
fhBadClusterDeltaIEtaDeltaIPhiE6->SetYTitle("#Delta Row");
fhBadClusterDeltaIA = new TH2F ("hBadClusterDeltaIA"," Cluster *asymmetry* in cell units vs E",
nptbins,ptmin,ptmax,21,-1.05,1.05);
- fhBadClusterDeltaIA->SetXTitle("E_{cluster}");
- fhBadClusterDeltaIA->SetYTitle("A_{cell in cluster}");
+ fhBadClusterDeltaIA->SetXTitle("#it{E}_{cluster}");
+ fhBadClusterDeltaIA->SetYTitle("#it{A}_{cell in cluster}");
outputContainer->Add(fhBadClusterDeltaIA);
}
}
{
fhECellClusterRatio = new TH2F ("hECellClusterRatio"," cell energy / cluster energy vs cluster energy",
nptbins,ptmin,ptmax, 100,0,1.);
- fhECellClusterRatio->SetXTitle("E_{cluster} (GeV) ");
- fhECellClusterRatio->SetYTitle("E_{cell i}/E_{cluster}");
+ fhECellClusterRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhECellClusterRatio->SetYTitle("#it{E}_{cell i}/#it{E}_{cluster}");
outputContainer->Add(fhECellClusterRatio);
fhECellClusterLogRatio = new TH2F ("hECellClusterLogRatio"," Log(cell energy / cluster energy) vs cluster energy",
nptbins,ptmin,ptmax, 100,-10,0);
- fhECellClusterLogRatio->SetXTitle("E_{cluster} (GeV) ");
- fhECellClusterLogRatio->SetYTitle("Log(E_{cell i}/E_{cluster})");
+ fhECellClusterLogRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhECellClusterLogRatio->SetYTitle("Log(#it{E}_{cell i}/#it{E}_{cluster})");
outputContainer->Add(fhECellClusterLogRatio);
fhEMaxCellClusterRatio = new TH2F ("hEMaxCellClusterRatio"," max cell energy / cluster energy vs cluster energy",
nptbins,ptmin,ptmax, 100,0,1.);
- fhEMaxCellClusterRatio->SetXTitle("E_{cluster} (GeV) ");
- fhEMaxCellClusterRatio->SetYTitle("E_{max cell}/E_{cluster}");
+ fhEMaxCellClusterRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhEMaxCellClusterRatio->SetYTitle("#it{E}_{max cell}/#it{E}_{cluster}");
outputContainer->Add(fhEMaxCellClusterRatio);
fhEMaxCellClusterLogRatio = new TH2F ("hEMaxCellClusterLogRatio"," Log(max cell energy / cluster energy) vs cluster energy",
nptbins,ptmin,ptmax, 100,-10,0);
- fhEMaxCellClusterLogRatio->SetXTitle("E_{cluster} (GeV) ");
- fhEMaxCellClusterLogRatio->SetYTitle("Log (E_{max cell}/E_{cluster})");
+ fhEMaxCellClusterLogRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhEMaxCellClusterLogRatio->SetYTitle("Log (#it{E}_{max cell}/#it{E}_{cluster})");
outputContainer->Add(fhEMaxCellClusterLogRatio);
- for(Int_t iw = 0; iw < 14; iw++){
- fhLambda0ForW0[iw] = new TH2F (Form("hLambda0ForW0%d",iw),Form("shower shape, #lambda^{2}_{0} vs E, w0 = %1.1f",1+0.5*iw),
+ fhECellTotalRatio = new TH2F ("hECellTotalRatio"," cell energy / sum all energy vs all energy",
+ nptbins*2,ptmin,ptmax*2, 100,0,1.);
+ fhECellTotalRatio->SetXTitle("#it{E}_{total} (GeV) ");
+ fhECellTotalRatio->SetYTitle("#it{E}_{cell i}/#it{E}_{total}");
+ outputContainer->Add(fhECellTotalRatio);
+
+ fhECellTotalLogRatio = new TH2F ("hECellTotalLogRatio"," Log(cell energy / sum all energy) vs all energy",
+ nptbins*2,ptmin,ptmax*2, 100,-10,0);
+ fhECellTotalLogRatio->SetXTitle("#it{E}_{total} (GeV) ");
+ fhECellTotalLogRatio->SetYTitle("Log(#it{E}_{cell i}/#it{E}_{total})");
+ outputContainer->Add(fhECellTotalLogRatio);
+
+ fhECellTotalRatioMod = new TH2F*[fNModules];
+ fhECellTotalLogRatioMod = new TH2F*[fNModules];
+
+ for(Int_t imod = 0; imod < fNModules; imod++)
+ {
+ fhECellTotalRatioMod[imod] = new TH2F (Form("hECellTotalRatio_Mod%d",imod),
+ Form("#cell energy / sum all energy vs all energy in Module %d",imod),
+ nptbins*2,ptmin,ptmax*2, 100,0,1.);
+ fhECellTotalRatioMod[imod]->SetXTitle("#it{E} (GeV)");
+ fhECellTotalRatioMod[imod]->SetYTitle("#it{n}_{cells}");
+ outputContainer->Add(fhECellTotalRatioMod[imod]);
+
+ fhECellTotalLogRatioMod[imod] = new TH2F (Form("hECellTotalLogRatio_Mod%d",imod),
+ Form("Log(cell energy / sum all energy) vs all energy in Module %d",imod),
+ nptbins*2,ptmin,ptmax*2, 100,-10,0);
+ fhECellTotalLogRatioMod[imod]->SetXTitle("#it{E} (GeV)");
+ fhECellTotalLogRatioMod[imod]->SetYTitle("#it{n}_{cells}");
+ outputContainer->Add(fhECellTotalLogRatioMod[imod]);
+
+ }
+
+ for(Int_t iw = 0; iw < 12; iw++)
+ {
+ Float_t w0 = 3+0.25*iw;
+ fhLambda0ForW0[iw] = new TH2F (Form("hLambda0ForW0%d",iw),Form("shower shape, #lambda^{2}_{0} vs E, w0 = %1.1f",w0),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
- fhLambda0ForW0[iw]->SetXTitle("E_{cluster}");
+ fhLambda0ForW0[iw]->SetXTitle("#it{E}_{cluster}");
fhLambda0ForW0[iw]->SetYTitle("#lambda^{2}_{0}");
outputContainer->Add(fhLambda0ForW0[iw]);
-// fhLambda1ForW0[iw] = new TH2F (Form("hLambda1ForW0%d",iw),Form("shower shape, #lambda^{2}_{1} vs E, w0 = %1.1f",1+0.5*iw),
+// fhLambda1ForW0[iw] = new TH2F (Form("hLambda1ForW0%d",iw),Form("shower shape, #lambda^{2}_{1} vs E, w0 = %1.1f",w0),
// nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-// fhLambda1ForW0[iw]->SetXTitle("E_{cluster}");
+// fhLambda1ForW0[iw]->SetXTitle("#it{E}_{cluster}");
// fhLambda1ForW0[iw]->SetYTitle("#lambda^{2}_{1}");
// outputContainer->Add(fhLambda1ForW0[iw]);
TString mcnames[] = {"Photon", "Electron","Conversion","Pi0","Hadron"};
for(Int_t imc = 0; imc < 5; imc++){
fhLambda0ForW0MC[iw][imc] = new TH2F (Form("hLambda0ForW0%d_MC%s",iw,mcnames[imc].Data()),
- Form("shower shape, #lambda^{2}_{0} vs E, w0 = %1.1f, for MC %s",1+0.5*iw,mcnames[imc].Data()),
+ Form("shower shape, #lambda^{2}_{0} vs E, w0 = %1.1f, for MC %s",w0,mcnames[imc].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
- fhLambda0ForW0MC[iw][imc]->SetXTitle("E_{cluster}");
+ fhLambda0ForW0MC[iw][imc]->SetXTitle("#it{E}_{cluster}");
fhLambda0ForW0MC[iw][imc]->SetYTitle("#lambda^{2}_{0}");
outputContainer->Add(fhLambda0ForW0MC[iw][imc]);
// fhLambda1ForW0MC[iw][imc] = new TH2F (Form("hLambda1ForW0%d_MC%s",iw,mcnames[imc].Data()),
-// Form("shower shape, #lambda^{2}_{1} vs E, w0 = %1.1f, for MC %s",1+0.5*iw,mcnames[imc].Data()),
+// Form("shower shape, #lambda^{2}_{1} vs E, w0 = %1.1f, for MC %s",w0,mcnames[imc].Data()),
// nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-// fhLambda1ForW0MC[iw][imc]->SetXTitle("E_{cluster}");
+// fhLambda1ForW0MC[iw][imc]->SetXTitle("#it{E}_{cluster}");
// fhLambda1ForW0MC[iw][imc]->SetYTitle("#lambda^{2}_{1}");
// outputContainer->Add(fhLambda1ForW0MC[iw][imc]);
}
fhTrackMatchedDEta = new TH2F("hTrackMatchedDEta","d#eta of cluster-track vs cluster energy",
nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
fhTrackMatchedDEta->SetYTitle("d#eta");
- fhTrackMatchedDEta->SetXTitle("E_{cluster} (GeV)");
+ fhTrackMatchedDEta->SetXTitle("#it{E}_{cluster} (GeV)");
fhTrackMatchedDPhi = new TH2F("hTrackMatchedDPhi","d#phi of cluster-track vs cluster energy",
nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
fhTrackMatchedDPhi->SetYTitle("d#phi (rad)");
- fhTrackMatchedDPhi->SetXTitle("E_{cluster} (GeV)");
+ fhTrackMatchedDPhi->SetXTitle("#it{E}_{cluster} (GeV)");
fhTrackMatchedDEtaDPhi = new TH2F("hTrackMatchedDEtaDPhi","d#eta vs d#phi of cluster-track vs cluster energy",
nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
fhTrackMatchedDEtaPos = new TH2F("hTrackMatchedDEtaPos","d#eta of cluster-track vs cluster energy",
nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
fhTrackMatchedDEtaPos->SetYTitle("d#eta");
- fhTrackMatchedDEtaPos->SetXTitle("E_{cluster} (GeV)");
+ fhTrackMatchedDEtaPos->SetXTitle("#it{E}_{cluster} (GeV)");
fhTrackMatchedDPhiPos = new TH2F("hTrackMatchedDPhiPos","d#phi of cluster-track vs cluster energy",
nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
fhTrackMatchedDPhiPos->SetYTitle("d#phi (rad)");
- fhTrackMatchedDPhiPos->SetXTitle("E_{cluster} (GeV)");
+ fhTrackMatchedDPhiPos->SetXTitle("#it{E}_{cluster} (GeV)");
fhTrackMatchedDEtaDPhiPos = new TH2F("hTrackMatchedDEtaDPhiPos","d#eta vs d#phi of cluster-track vs cluster energy",
nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
outputContainer->Add(fhTrackMatchedDPhiPos) ;
outputContainer->Add(fhTrackMatchedDEtaDPhiPos) ;
- if(fFillAllTH12)
+ fhECharged = new TH1F ("hECharged","#it{E} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
+ fhECharged->SetXTitle("#it{E} (GeV)");
+ outputContainer->Add(fhECharged);
+
+ fhPtCharged = new TH1F ("hPtCharged","#it{p}_{T} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
+ fhPtCharged->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ outputContainer->Add(fhPtCharged);
+
+ fhPhiCharged = new TH1F ("hPhiCharged","#phi reconstructed clusters, matched with track",nphibins,phimin,phimax);
+ fhPhiCharged->SetXTitle("#phi (rad)");
+ outputContainer->Add(fhPhiCharged);
+
+ fhEtaCharged = new TH1F ("hEtaCharged","#eta reconstructed clusters, matched with track",netabins,etamin,etamax);
+ fhEtaCharged->SetXTitle("#eta ");
+ outputContainer->Add(fhEtaCharged);
+
+ if(fFillAllTH3)
{
- fhECharged = new TH1F ("hECharged","E reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
- fhECharged->SetXTitle("E (GeV)");
- outputContainer->Add(fhECharged);
-
- fhPtCharged = new TH1F ("hPtCharged","p_{T} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
- fhPtCharged->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtCharged);
-
- fhPhiCharged = new TH1F ("hPhiCharged","#phi reconstructed clusters, matched with track",nphibins,phimin,phimax);
- fhPhiCharged->SetXTitle("#phi (rad)");
- outputContainer->Add(fhPhiCharged);
-
- fhEtaCharged = new TH1F ("hEtaCharged","#eta reconstructed clusters, matched with track",netabins,etamin,etamax);
- fhEtaCharged->SetXTitle("#eta ");
- outputContainer->Add(fhEtaCharged);
- }
- if(fFillAllTH3){
fhEtaPhiECharged = new TH3F ("hEtaPhiECharged","#eta vs #phi, reconstructed clusters, matched with track",
netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
fhEtaPhiECharged->SetXTitle("#eta ");
fhEtaPhiECharged->SetYTitle("#phi ");
- fhEtaPhiECharged->SetZTitle("E (GeV) ");
+ fhEtaPhiECharged->SetZTitle("#it{E} (GeV) ");
outputContainer->Add(fhEtaPhiECharged);
}
- fh1EOverP = new TH2F("h1EOverP","TRACK matches E/p",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fh1EOverP->SetYTitle("E/p");
- fh1EOverP->SetXTitle("p_{T} (GeV/c)");
+ fh1EOverP = new TH2F("h1EOverP","TRACK matches #it{E}/#it{p}",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fh1EOverP->SetYTitle("#it{E}/#it{p}");
+ fh1EOverP->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fh1EOverP);
- fh2dR = new TH2F("h2dR","TRACK matches dR",nptbins,ptmin,ptmax,ndRbins,dRmin,dRmax);
- fh2dR->SetXTitle("#Delta R (rad)");
- fh2dR->SetXTitle("E cluster (GeV)");
+ fh2dR = new TH2F("h2dR","TRACK matches #Delta #it{R}",nptbins,ptmin,ptmax,ndRbins,dRmin,dRmax);
+ fh2dR->SetXTitle("#Delta #it{R} (rad)");
+ fh2dR->SetXTitle("#it{E} cluster (GeV)");
outputContainer->Add(fh2dR) ;
- fh2MatchdEdx = new TH2F("h2MatchdEdx","dE/dx vs. p for all matches",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
- fh2MatchdEdx->SetXTitle("p (GeV/c)");
- fh2MatchdEdx->SetYTitle("<dE/dx>");
+ fh2MatchdEdx = new TH2F("h2MatchdEdx","#it{dE/dx} vs. #it{p} for all matches",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
+ fh2MatchdEdx->SetXTitle("p (GeV/#it{c})");
+ fh2MatchdEdx->SetYTitle("#it{dE/dx}>");
outputContainer->Add(fh2MatchdEdx);
- fh2EledEdx = new TH2F("h2EledEdx","dE/dx vs. p for electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
- fh2EledEdx->SetXTitle("p (GeV/c)");
- fh2EledEdx->SetYTitle("<dE/dx>");
+ fh2EledEdx = new TH2F("h2EledEdx","#it{dE/dx} vs. #it{p} for electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
+ fh2EledEdx->SetXTitle("p (GeV/#it{c})");
+ fh2EledEdx->SetYTitle("<#it{dE/dx}>");
outputContainer->Add(fh2EledEdx) ;
- fh1EOverPR02 = new TH2F("h1EOverPR02","TRACK matches E/p, all",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fh1EOverPR02->SetYTitle("E/p");
- fh1EOverPR02->SetXTitle("p_{T} (GeV/c)");
+ fh1EOverPR02 = new TH2F("h1EOverPR02","TRACK matches #it{E}/#it{p}, all",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fh1EOverPR02->SetYTitle("#it{E}/#it{p}");
+ fh1EOverPR02->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fh1EOverPR02);
- fh1EleEOverP = new TH2F("h1EleEOverP","Electron candidates E/p (60<dEdx<100)",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fh1EleEOverP->SetYTitle("E/p");
- fh1EleEOverP->SetXTitle("p_{T} (GeV/c)");
+ fh1EleEOverP = new TH2F("h1EleEOverP","Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100)",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fh1EleEOverP->SetYTitle("#it{E}/#it{p}");
+ fh1EleEOverP->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fh1EleEOverP);
}
if(fFillAllPi0Histo)
{
fhIM = new TH2F ("hIM","Cluster pairs Invariant mass vs reconstructed pair energy, ncell > 1",nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhIM->SetXTitle("p_{T, cluster pairs} (GeV) ");
- fhIM->SetYTitle("M_{cluster pairs} (GeV/c^{2})");
+ fhIM->SetXTitle("#it{p}_{T, cluster pairs} (GeV) ");
+ fhIM->SetYTitle("M_{cluster pairs} (GeV/#it{c}^{2})");
outputContainer->Add(fhIM);
fhAsym = new TH2F ("hAssym","Cluster pairs Asymmetry vs reconstructed pair energy",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax);
- fhAsym->SetXTitle("p_{T, cluster pairs} (GeV) ");
- fhAsym->SetYTitle("Asymmetry");
+ fhAsym->SetXTitle("#it{p}_{T, cluster pairs} (GeV) ");
+ fhAsym->SetYTitle("#it{Asymmetry}");
outputContainer->Add(fhAsym);
}
{
if(fFillAllTH3)
{
- fhXYZ = new TH3F ("hXYZ","Cluster: x vs y vs z",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
- fhXYZ->SetXTitle("x (cm)");
- fhXYZ->SetYTitle("y (cm)");
- fhXYZ->SetZTitle("z (cm) ");
+ fhXYZ = new TH3F ("hXYZ","Cluster: #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
+ fhXYZ->SetXTitle("#it{x} (cm)");
+ fhXYZ->SetYTitle("#it{y} (cm)");
+ fhXYZ->SetZTitle("#it{z} (cm) ");
outputContainer->Add(fhXYZ);
}
fhXNCells = new TH2F ("hXNCells","Cluster X position vs N Cells per Cluster",xbins,xmin,xmax,nceclbins,nceclmin,nceclmax);
- fhXNCells->SetXTitle("x (cm)");
+ fhXNCells->SetXTitle("#it{x} (cm)");
fhXNCells->SetYTitle("N cells per cluster");
outputContainer->Add(fhXNCells);
fhZNCells = new TH2F ("hZNCells","Cluster Z position vs N Cells per Cluster",zbins,zmin,zmax,nceclbins,nceclmin,nceclmax);
- fhZNCells->SetXTitle("z (cm)");
+ fhZNCells->SetXTitle("#it{z} (cm)");
fhZNCells->SetYTitle("N cells per cluster");
outputContainer->Add(fhZNCells);
fhXE = new TH2F ("hXE","Cluster X position vs cluster energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
- fhXE->SetXTitle("x (cm)");
- fhXE->SetYTitle("E (GeV)");
+ fhXE->SetXTitle("#it{x} (cm)");
+ fhXE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhXE);
fhZE = new TH2F ("hZE","Cluster Z position vs cluster energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
- fhZE->SetXTitle("z (cm)");
- fhZE->SetYTitle("E (GeV)");
+ fhZE->SetXTitle("#it{z} (cm)");
+ fhZE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhZE);
fhRNCells = new TH2F ("hRNCells","Cluster R position vs N Cells per Cluster",rbins,rmin,rmax,nceclbins,nceclmin,nceclmax);
fhYNCells = new TH2F ("hYNCells","Cluster Y position vs N Cells per Cluster",ybins,ymin,ymax,nceclbins,nceclmin,nceclmax);
- fhYNCells->SetXTitle("y (cm)");
+ fhYNCells->SetXTitle("#it{y} (cm)");
fhYNCells->SetYTitle("N cells per cluster");
outputContainer->Add(fhYNCells);
fhRE = new TH2F ("hRE","Cluster R position vs cluster energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
fhRE->SetXTitle("r = #sqrt{x^{2}+y^{2}} (cm)");
- fhRE->SetYTitle("E (GeV)");
+ fhRE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhRE);
fhYE = new TH2F ("hYE","Cluster Y position vs cluster energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
- fhYE->SetXTitle("y (cm)");
- fhYE->SetYTitle("E (GeV)");
+ fhYE->SetXTitle("#it{y} (cm)");
+ fhYE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhYE);
}
{
fhRCellE = new TH2F ("hRCellE","Cell R position vs cell energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
fhRCellE->SetXTitle("r = #sqrt{x^{2}+y^{2}} (cm)");
- fhRCellE->SetYTitle("E (GeV)");
+ fhRCellE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhRCellE);
fhXCellE = new TH2F ("hXCellE","Cell X position vs cell energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
- fhXCellE->SetXTitle("x (cm)");
- fhXCellE->SetYTitle("E (GeV)");
+ fhXCellE->SetXTitle("#it{x} (cm)");
+ fhXCellE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhXCellE);
fhYCellE = new TH2F ("hYCellE","Cell Y position vs cell energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
- fhYCellE->SetXTitle("y (cm)");
- fhYCellE->SetYTitle("E (GeV)");
+ fhYCellE->SetXTitle("#it{y} (cm)");
+ fhYCellE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhYCellE);
fhZCellE = new TH2F ("hZCellE","Cell Z position vs cell energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
- fhZCellE->SetXTitle("z (cm)");
- fhZCellE->SetYTitle("E (GeV)");
+ fhZCellE->SetXTitle("#it{z} (cm)");
+ fhZCellE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhZCellE);
- fhXYZCell = new TH3F ("hXYZCell","Cell : x vs y vs z",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
- fhXYZCell->SetXTitle("x (cm)");
- fhXYZCell->SetYTitle("y (cm)");
- fhXYZCell->SetZTitle("z (cm)");
+ fhXYZCell = new TH3F ("hXYZCell","Cell : #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
+ fhXYZCell->SetXTitle("#it{x} (cm)");
+ fhXYZCell->SetYTitle("#it{y} (cm)");
+ fhXYZCell->SetZTitle("#it{z} (cm)");
outputContainer->Add(fhXYZCell);
fhDeltaCellClusterRNCells = new TH2F ("hDeltaCellClusterRNCells","Cluster-Cell R position vs N Cells per Cluster",rbins*2,-dr,dr,nceclbins,nceclmin,nceclmax);
fhDeltaCellClusterRNCells->SetXTitle("r = #sqrt{x^{2}+y^{2}} (cm)");
- fhDeltaCellClusterRNCells->SetYTitle("N cells per cluster");
+ fhDeltaCellClusterRNCells->SetYTitle("#it{n}_{cells per cluster}");
outputContainer->Add(fhDeltaCellClusterRNCells);
fhDeltaCellClusterXNCells = new TH2F ("hDeltaCellClusterXNCells","Cluster-Cell X position vs N Cells per Cluster",xbins*2,-dx,dx,nceclbins,nceclmin,nceclmax);
- fhDeltaCellClusterXNCells->SetXTitle("x (cm)");
- fhDeltaCellClusterXNCells->SetYTitle("N cells per cluster");
+ fhDeltaCellClusterXNCells->SetXTitle("#it{x} (cm)");
+ fhDeltaCellClusterXNCells->SetYTitle("#it{n}_{cells per cluster}");
outputContainer->Add(fhDeltaCellClusterXNCells);
fhDeltaCellClusterYNCells = new TH2F ("hDeltaCellClusterYNCells","Cluster-Cell Y position vs N Cells per Cluster",ybins*2,-dy,dy,nceclbins,nceclmin,nceclmax);
- fhDeltaCellClusterYNCells->SetXTitle("y (cm)");
+ fhDeltaCellClusterYNCells->SetXTitle("#it{y} (cm)");
fhDeltaCellClusterYNCells->SetYTitle("N cells per cluster");
outputContainer->Add(fhDeltaCellClusterYNCells);
fhDeltaCellClusterZNCells = new TH2F ("hDeltaCellClusterZNCells","Cluster-Cell Z position vs N Cells per Cluster",zbins*2,-dz,dz,nceclbins,nceclmin,nceclmax);
- fhDeltaCellClusterZNCells->SetXTitle("z (cm)");
- fhDeltaCellClusterZNCells->SetYTitle("N cells per cluster");
+ fhDeltaCellClusterZNCells->SetXTitle("#it{z} (cm)");
+ fhDeltaCellClusterZNCells->SetYTitle("#it{n}_{cells per cluster}");
outputContainer->Add(fhDeltaCellClusterZNCells);
fhDeltaCellClusterRE = new TH2F ("hDeltaCellClusterRE","Cluster-Cell R position vs cluster energy",rbins*2,-dr,dr,nptbins,ptmin,ptmax);
fhDeltaCellClusterRE->SetXTitle("r = #sqrt{x^{2}+y^{2}} (cm)");
- fhDeltaCellClusterRE->SetYTitle("E (GeV)");
+ fhDeltaCellClusterRE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhDeltaCellClusterRE);
fhDeltaCellClusterXE = new TH2F ("hDeltaCellClusterXE","Cluster-Cell X position vs cluster energy",xbins*2,-dx,dx,nptbins,ptmin,ptmax);
- fhDeltaCellClusterXE->SetXTitle("x (cm)");
- fhDeltaCellClusterXE->SetYTitle("E (GeV)");
+ fhDeltaCellClusterXE->SetXTitle("#it{x} (cm)");
+ fhDeltaCellClusterXE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhDeltaCellClusterXE);
fhDeltaCellClusterYE = new TH2F ("hDeltaCellClusterYE","Cluster-Cell Y position vs cluster energy",ybins*2,-dy,dy,nptbins,ptmin,ptmax);
- fhDeltaCellClusterYE->SetXTitle("y (cm)");
- fhDeltaCellClusterYE->SetYTitle("E (GeV)");
+ fhDeltaCellClusterYE->SetXTitle("#it{y} (cm)");
+ fhDeltaCellClusterYE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhDeltaCellClusterYE);
fhDeltaCellClusterZE = new TH2F ("hDeltaCellClusterZE","Cluster-Cell Z position vs cluster energy",zbins*2,-dz,dz,nptbins,ptmin,ptmax);
- fhDeltaCellClusterZE->SetXTitle("z (cm)");
- fhDeltaCellClusterZE->SetYTitle("E (GeV)");
+ fhDeltaCellClusterZE->SetXTitle("#it{z} (cm)");
+ fhDeltaCellClusterZE->SetYTitle("#it{E} (GeV)");
outputContainer->Add(fhDeltaCellClusterZE);
fhEtaPhiAmp = new TH3F ("hEtaPhiAmp","Cell #eta vs cell #phi vs cell energy",netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
fhEtaPhiAmp->SetXTitle("#eta ");
fhEtaPhiAmp->SetYTitle("#phi (rad)");
- fhEtaPhiAmp->SetZTitle("E (GeV) ");
+ fhEtaPhiAmp->SetZTitle("#it{E} (GeV) ");
outputContainer->Add(fhEtaPhiAmp);
}
//Calo cells
fhNCells = new TH1F ("hNCells","# cells", ncebins,ncemin+0.5,ncemax);
- fhNCells->SetXTitle("n cells");
+ fhNCells->SetXTitle("#it{n}_{cells}");
outputContainer->Add(fhNCells);
+
+ fhNCellsCutAmpMin = new TH1F ("hNCellsCutAmpMin",Form("# cells amp > %1.2f-%1.2f",fEMCALCellAmpMin,fPHOSCellAmpMin), ncebins,ncemin+0.5,ncemax);
+ fhNCellsCutAmpMin->SetXTitle("#it{n}_{cells}");
+ outputContainer->Add(fhNCellsCutAmpMin);
- fhAmplitude = new TH1F ("hAmplitude","Cell Energy", nptbins*2,ptmin,ptmax);
- fhAmplitude->SetXTitle("Cell Energy (GeV)");
+ fhAmplitude = new TH1F ("hAmplitude","#it{E}_{cell}", nptbins*2,ptmin,ptmax);
+ fhAmplitude->SetXTitle("#it{E}_{cell} (GeV)");
outputContainer->Add(fhAmplitude);
- fhAmpId = new TH2F ("hAmpId","Cell Energy", nfineptbins,ptfinemin,ptfinemax,fNMaxRows*fNMaxCols*fNModules,0,fNMaxRows*fNMaxCols*fNModules);
- fhAmpId->SetXTitle("Cell Energy (GeV)");
+ fhAmpId = new TH2F ("hAmpId","#it{E}_{cell}", nfineptbins,ptfinemin,ptfinemax,fNMaxRows*fNMaxCols*fNModules,0,fNMaxRows*fNMaxCols*fNModules);
+ fhAmpId->SetXTitle("#it{E}_{cell} (GeV)");
outputContainer->Add(fhAmpId);
if(fFillAllCellTimeHisto)
{
fhCellTimeSpreadRespectToCellMax = new TH2F ("hCellTimeSpreadRespectToCellMax","t_{cell max}-t_{cell i} per cluster", nptbins,ptmin,ptmax,tdbins,tdmin,tdmax);
- fhCellTimeSpreadRespectToCellMax->SetXTitle("E (GeV)");
- fhCellTimeSpreadRespectToCellMax->SetYTitle("#Delta t_{cell max-i} (ns)");
+ fhCellTimeSpreadRespectToCellMax->SetXTitle("#it{E} (GeV)");
+ fhCellTimeSpreadRespectToCellMax->SetYTitle("#Delta #it{t}_{cell max-i} (ns)");
outputContainer->Add(fhCellTimeSpreadRespectToCellMax);
fhClusterMaxCellDiffAverageTime = new TH2F ("hClusterMaxCellDiffAverageTime","t_{cell max}-t_{average} per cluster", nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
- fhClusterMaxCellDiffAverageTime->SetXTitle("E (GeV)");
- fhClusterMaxCellDiffAverageTime->SetYTitle("#Delta t_{cell max - average} (ns)");
+ fhClusterMaxCellDiffAverageTime->SetXTitle("#it{E} (GeV)");
+ fhClusterMaxCellDiffAverageTime->SetYTitle("#Delta #it{t}_{cell max - average} (ns)");
outputContainer->Add(fhClusterMaxCellDiffAverageTime);
fhClusterMaxCellDiffWeightedTime = new TH2F ("hClusterMaxCellDiffWeightedTime","t_{cell max}-t_{weighted} per cluster", nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
- fhClusterMaxCellDiffWeightedTime->SetXTitle("E (GeV)");
- fhClusterMaxCellDiffWeightedTime->SetYTitle("#Delta t_{cell max - weighted} (ns)");
+ fhClusterMaxCellDiffWeightedTime->SetXTitle("#it{E} (GeV)");
+ fhClusterMaxCellDiffWeightedTime->SetYTitle("#Delta #it{t}_{cell max - weighted} (ns)");
outputContainer->Add(fhClusterMaxCellDiffWeightedTime);
fhCellIdCellLargeTimeSpread= new TH1F ("hCellIdCellLargeTimeSpread","Cells with time 100 ns larger than cell max in cluster ",
fhCellIdCellLargeTimeSpread->SetXTitle("Absolute Cell Id");
outputContainer->Add(fhCellIdCellLargeTimeSpread);
- fhTime = new TH1F ("hTime","Cell Time",ntimebins,timemin,timemax);
- fhTime->SetXTitle("Cell Time (ns)");
+ fhTime = new TH1F ("hTime","#it{t}_{cell}",ntimebins,timemin,timemax);
+ fhTime->SetXTitle("#it{t}_{cell} (ns)");
outputContainer->Add(fhTime);
- fhTimeVz = new TH2F ("hTimeVz","Cell Time vs vertex, amplitude > 0.5 GeV",100, 0, 50,ntimebins,timemin,timemax);
+ fhTimeVz = new TH2F ("hTimeVz","#it{t}_{cell} vs vertex, amplitude > 0.5 GeV",100, 0, 50,ntimebins,timemin,timemax);
fhTimeVz->SetXTitle("|v_{z}| (cm)");
- fhTimeVz->SetYTitle("Cell Time (ns)");
+ fhTimeVz->SetYTitle("#it{t}_{cell} (ns)");
outputContainer->Add(fhTimeVz);
- fhTimeId = new TH2F ("hTimeId","Cell Time vs Absolute Id",
+ fhTimeId = new TH2F ("hTimeId","#it{t}_{cell} vs Absolute Id",
ntimebins,timemin,timemax,fNMaxRows*fNMaxCols*fNModules,0,fNMaxRows*fNMaxCols*fNModules);
- fhTimeId->SetXTitle("Cell Time (ns)");
+ fhTimeId->SetXTitle("#it{t}_{cell} (ns)");
fhTimeId->SetYTitle("Cell Absolute Id");
outputContainer->Add(fhTimeId);
- fhTimeAmp = new TH2F ("hTimeAmp","Cell Time vs Cell Energy",nptbins*2,ptmin,ptmax,ntimebins,timemin,timemax);
- fhTimeAmp->SetYTitle("Cell Time (ns)");
- fhTimeAmp->SetXTitle("Cell Energy (GeV)");
+ fhTimeAmp = new TH2F ("hTimeAmp","#it{t}_{cell} vs #it{E}_{cell}",nptbins*2,ptmin,ptmax,ntimebins,timemin,timemax);
+ fhTimeAmp->SetYTitle("#it{t}_{cell} (ns)");
+ fhTimeAmp->SetXTitle("#it{E}_{cell} (GeV)");
outputContainer->Add(fhTimeAmp);
}
fhCellECross = new TH2F ("hCellECross","1 - Energy in cross around cell / cell energy",
nptbins,ptmin,ptmax, 400,-1,1.);
- fhCellECross->SetXTitle("E_{cell} (GeV) ");
- fhCellECross->SetYTitle("1- E_{cross}/E_{cell}");
+ fhCellECross->SetXTitle("#it{E}_{cell} (GeV) ");
+ fhCellECross->SetYTitle("1- #it{E}_{cross}/#it{E}_{cell}");
outputContainer->Add(fhCellECross);
outputContainer->Add(fhCaloCorrNClusters);
fhCaloCorrEClusters = new TH2F ("hCaloCorrEClusters","summed energy of clusters in EMCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
- fhCaloCorrEClusters->SetXTitle("#Sigma E of clusters in EMCAL (GeV)");
- fhCaloCorrEClusters->SetYTitle("#Sigma E of clusters in PHOS (GeV)");
+ fhCaloCorrEClusters->SetXTitle("#Sigma #it{E} of clusters in EMCAL (GeV)");
+ fhCaloCorrEClusters->SetYTitle("#Sigma #it{E} of clusters in PHOS (GeV)");
outputContainer->Add(fhCaloCorrEClusters);
fhCaloCorrNCells = new TH2F ("hCaloCorrNCells","# Cells in EMCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
outputContainer->Add(fhCaloCorrNCells);
fhCaloCorrECells = new TH2F ("hCaloCorrECells","summed energy of Cells in EMCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
- fhCaloCorrECells->SetXTitle("#Sigma E of Cells in EMCAL (GeV)");
- fhCaloCorrECells->SetYTitle("#Sigma E of Cells in PHOS (GeV)");
+ fhCaloCorrECells->SetXTitle("#Sigma #it{E} of Cells in EMCAL (GeV)");
+ fhCaloCorrECells->SetYTitle("#Sigma #it{E} of Cells in PHOS (GeV)");
outputContainer->Add(fhCaloCorrECells);
//Calorimeter VS V0 signal
fhCaloV0SCorrEClusters = new TH2F ("hCaloV0SEClusters",Form("summed energy of clusters in %s vs V0 signal",fCalorimeter.Data()), nv0sbins,nv0smin,nv0smax,nptbins,ptmin,ptmax*2);
fhCaloV0SCorrEClusters->SetXTitle("V0 signal");
- fhCaloV0SCorrEClusters->SetYTitle(Form("#Sigma E of clusters in %s (GeV)",fCalorimeter.Data()));
+ fhCaloV0SCorrEClusters->SetYTitle(Form("#Sigma #it{E} of clusters in %s (GeV)",fCalorimeter.Data()));
outputContainer->Add(fhCaloV0SCorrEClusters);
fhCaloV0SCorrNCells = new TH2F ("hCaloV0SNCells",Form("# Cells in %s vs V0 signal",fCalorimeter.Data()), nv0sbins,nv0smin,nv0smax, ncebins,ncemin,ncemax);
fhCaloV0SCorrECells = new TH2F ("hCaloV0SECells",Form("summed energy of Cells in %s vs V0 signal",fCalorimeter.Data()), nv0sbins,nv0smin,nv0smax,nptbins,ptmin,ptmax*2);
fhCaloV0SCorrECells->SetXTitle("V0 signal");
- fhCaloV0SCorrECells->SetYTitle(Form("#Sigma E of Cells in %s (GeV)",fCalorimeter.Data()));
+ fhCaloV0SCorrECells->SetYTitle(Form("#Sigma #it{E} of Cells in %s (GeV)",fCalorimeter.Data()));
outputContainer->Add(fhCaloV0SCorrECells);
//Calorimeter VS V0 multiplicity
fhCaloV0MCorrEClusters = new TH2F ("hCaloV0MEClusters",Form("summed energy of clusters in %s vs V0 signal",fCalorimeter.Data()), nv0mbins,nv0mmin,nv0mmax,nptbins,ptmin,ptmax*2);
fhCaloV0MCorrEClusters->SetXTitle("V0 signal");
- fhCaloV0MCorrEClusters->SetYTitle(Form("#Sigma E of clusters in %s (GeV)",fCalorimeter.Data()));
+ fhCaloV0MCorrEClusters->SetYTitle(Form("#Sigma #it{E} of clusters in %s (GeV)",fCalorimeter.Data()));
outputContainer->Add(fhCaloV0MCorrEClusters);
fhCaloV0MCorrNCells = new TH2F ("hCaloV0MNCells",Form("# Cells in %s vs V0 signal",fCalorimeter.Data()), nv0mbins,nv0mmin,nv0mmax, ncebins,ncemin,ncemax);
fhCaloV0MCorrECells = new TH2F ("hCaloV0MECells",Form("summed energy of Cells in %s vs V0 signal",fCalorimeter.Data()), nv0mbins,nv0mmin,nv0mmax,nptbins,ptmin,ptmax*2);
fhCaloV0MCorrECells->SetXTitle("V0 signal");
- fhCaloV0MCorrECells->SetYTitle(Form("#Sigma E of Cells in %s (GeV)",fCalorimeter.Data()));
+ fhCaloV0MCorrECells->SetYTitle(Form("#Sigma #it{E} of Cells in %s (GeV)",fCalorimeter.Data()));
outputContainer->Add(fhCaloV0MCorrECells);
//Calorimeter VS Track multiplicity
fhCaloTrackMCorrEClusters = new TH2F ("hCaloTrackMEClusters",Form("summed energy of clusters in %s vs # tracks",fCalorimeter.Data()), ntrmbins,ntrmmin,ntrmmax,nptbins,ptmin,ptmax*2);
fhCaloTrackMCorrEClusters->SetXTitle("# tracks");
- fhCaloTrackMCorrEClusters->SetYTitle(Form("#Sigma E of clusters in %s (GeV)",fCalorimeter.Data()));
+ fhCaloTrackMCorrEClusters->SetYTitle(Form("#Sigma #it{E} of clusters in %s (GeV)",fCalorimeter.Data()));
outputContainer->Add(fhCaloTrackMCorrEClusters);
fhCaloTrackMCorrNCells = new TH2F ("hCaloTrackMNCells",Form("# Cells in %s vs # tracks",fCalorimeter.Data()), ntrmbins,ntrmmin,ntrmmax, ncebins,ncemin,ncemax);
fhCaloTrackMCorrECells = new TH2F ("hCaloTrackMECells",Form("summed energy of Cells in %s vs # tracks",fCalorimeter.Data()), ntrmbins,ntrmmin,ntrmmax,nptbins,ptmin,ptmax*2);
fhCaloTrackMCorrECells->SetXTitle("# tracks");
- fhCaloTrackMCorrECells->SetYTitle(Form("#Sigma E of Cells in %s (GeV)",fCalorimeter.Data()));
+ fhCaloTrackMCorrECells->SetYTitle(Form("#Sigma #it{E} of Cells in %s (GeV)",fCalorimeter.Data()));
outputContainer->Add(fhCaloTrackMCorrECells);
fhCaloCenNClusters = new TH2F ("hCaloCenNClusters","# clusters in calorimeter vs centrality",100,0,100,nclbins,nclmin,nclmax);
outputContainer->Add(fhCaloCenNClusters);
fhCaloCenEClusters = new TH2F ("hCaloCenEClusters","summed energy of clusters in calorimeter vs centrality",100,0,100,nptbins,ptmin,ptmax*2);
- fhCaloCenEClusters->SetYTitle("#Sigma E of clusters in calorimeter (GeV)");
+ fhCaloCenEClusters->SetYTitle("#Sigma #it{E} of clusters in calorimeter (GeV)");
fhCaloCenEClusters->SetXTitle("Centrality");
outputContainer->Add(fhCaloCenEClusters);
outputContainer->Add(fhCaloCenNCells);
fhCaloCenECells = new TH2F ("hCaloCenECells","summed energy of Cells in calorimeter vs centrality",100,0,100,nptbins*2,ptmin,ptmax*4);
- fhCaloCenECells->SetYTitle("#Sigma E of Cells in calorimeter (GeV)");
+ fhCaloCenECells->SetYTitle("#Sigma #it{E} of Cells in calorimeter (GeV)");
fhCaloCenECells->SetXTitle("Centrality");
outputContainer->Add(fhCaloCenECells);
outputContainer->Add(fhCaloEvPNClusters);
fhCaloEvPEClusters = new TH2F ("hCaloEvPEClusters","summed energy of clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins,ptmin,ptmax*2);
- fhCaloEvPEClusters->SetYTitle("#Sigma E of clusters in calorimeter (GeV)");
+ fhCaloEvPEClusters->SetYTitle("#Sigma #it{E} of clusters in calorimeter (GeV)");
fhCaloEvPEClusters->SetXTitle("Event plane angle (rad)");
outputContainer->Add(fhCaloEvPEClusters);
outputContainer->Add(fhCaloEvPNCells);
fhCaloEvPECells = new TH2F ("hCaloEvPECells","summed energy of Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins*2,ptmin,ptmax*4);
- fhCaloEvPECells->SetYTitle("#Sigma E of Cells in calorimeter (GeV)");
+ fhCaloEvPECells->SetYTitle("#Sigma #it{E} of Cells in calorimeter (GeV)");
fhCaloEvPECells->SetXTitle("Event plane angle (rad)");
outputContainer->Add(fhCaloEvPECells);
//Module histograms
fhEMod = new TH2F ("hE_Mod","Cluster reconstructed Energy in each present Module",nptbins,ptmin,ptmax,fNModules,0,fNModules);
- fhEMod->SetXTitle("E (GeV)");
+ fhEMod->SetXTitle("#it{E} (GeV)");
fhEMod->SetYTitle("Module");
outputContainer->Add(fhEMod);
fhAmpMod = new TH2F ("hAmp_Mod","Cell energy in each present Module",nptbins,ptmin,ptmax,fNModules,0,fNModules);
- fhAmpMod->SetXTitle("E (GeV)");
+ fhAmpMod->SetXTitle("#it{E} (GeV)");
fhAmpMod->SetYTitle("Module");
outputContainer->Add(fhAmpMod);
outputContainer->Add(fhNClustersMod);
fhNCellsMod = new TH2F ("hNCells_Mod","# cells vs Module", ncebins,ncemin+0.5,ncemax,fNModules,0,fNModules);
- fhNCellsMod->SetXTitle("n cells");
+ fhNCellsMod->SetXTitle("#it{n}_{cells}");
fhNCellsMod->SetYTitle("Module");
outputContainer->Add(fhNCellsMod);
fhNCellsPerClusterMod[imod] = new TH2F (Form("hNCellsPerCluster_Mod%d",imod),
Form("# cells per cluster vs cluster energy in Module %d",imod),
nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
- fhNCellsPerClusterMod[imod]->SetXTitle("E (GeV)");
- fhNCellsPerClusterMod[imod]->SetYTitle("n cells");
+ fhNCellsPerClusterMod[imod]->SetXTitle("#it{E} (GeV)");
+ fhNCellsPerClusterMod[imod]->SetYTitle("#it{n}_{cells}");
outputContainer->Add(fhNCellsPerClusterMod[imod]);
fhNCellsPerClusterModNoCut[imod] = new TH2F (Form("hNCellsPerClusterNoCut_Mod%d",imod),
Form("# cells per cluster vs cluster energy in Module %d, no cut",imod),
nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
- fhNCellsPerClusterModNoCut[imod]->SetXTitle("E (GeV)");
- fhNCellsPerClusterModNoCut[imod]->SetYTitle("n cells");
+ fhNCellsPerClusterModNoCut[imod]->SetXTitle("#it{E} (GeV)");
+ fhNCellsPerClusterModNoCut[imod]->SetYTitle("#it{n}_{cells}");
outputContainer->Add(fhNCellsPerClusterModNoCut[imod]);
if(fFillAllCellTimeHisto)
for(Int_t ircu = 0; ircu < fNRCU; ircu++)
{
fhTimeAmpPerRCU[imod*fNRCU+ircu] = new TH2F (Form("hTimeAmp_Mod%d_RCU%d",imod,ircu),
- Form("Cell Energy vs Cell Time in Module %d, RCU %d ",imod,ircu),
+ Form("#it{E}_{cell} vs #it{t}_{cell} in Module %d, RCU %d ",imod,ircu),
nptbins,ptmin,ptmax,ntimebins,timemin,timemax);
- fhTimeAmpPerRCU[imod*fNRCU+ircu]->SetXTitle("E (GeV)");
- fhTimeAmpPerRCU[imod*fNRCU+ircu]->SetYTitle("time (ns)");
+ fhTimeAmpPerRCU[imod*fNRCU+ircu]->SetXTitle("#it{E} (GeV)");
+ fhTimeAmpPerRCU[imod*fNRCU+ircu]->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhTimeAmpPerRCU[imod*fNRCU+ircu]);
}
fhIMMod[imod] = new TH2F (Form("hIM_Mod%d",imod),
Form("Cluster pairs Invariant mass vs reconstructed pair energy in Module %d, n cell > 1",imod),
nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhIMMod[imod]->SetXTitle("p_{T, cluster pairs} (GeV) ");
- fhIMMod[imod]->SetYTitle("M_{cluster pairs} (GeV/c^{2})");
+ fhIMMod[imod]->SetXTitle("#it{p}_{T, cluster pairs} (GeV) ");
+ fhIMMod[imod]->SetYTitle("#it{M}_{cluster pairs} (GeV/#it{c}^{2})");
outputContainer->Add(fhIMMod[imod]);
}
fhRecoMCRatioE[iPart][iCh] = new TH2F (Form("hRecoMCRatioE_%s_Match%d",particleName[iPart].Data(),iCh),
Form("Reconstructed/Generated E, %s, Matched %d",particleName[iPart].Data(),iCh),
nptbins, ptmin, ptmax, 200,0,2);
- fhRecoMCRatioE[iPart][iCh]->SetYTitle("E_{reconstructed}/E_{generated}");
- fhRecoMCRatioE[iPart][iCh]->SetXTitle("E_{reconstructed} (GeV)");
+ fhRecoMCRatioE[iPart][iCh]->SetYTitle("#it{E}_{reconstructed}/#it{E}_{generated}");
+ fhRecoMCRatioE[iPart][iCh]->SetXTitle("#it{E}_{reconstructed} (GeV)");
outputContainer->Add(fhRecoMCRatioE[iPart][iCh]);
fhRecoMCDeltaE[iPart][iCh] = new TH2F (Form("hRecoMCDeltaE_%s_Match%d",particleName[iPart].Data(),iCh),
Form("Generated - Reconstructed E, %s, Matched %d",particleName[iPart].Data(),iCh),
nptbins, ptmin, ptmax, nptbins*2,-ptmax,ptmax);
- fhRecoMCDeltaE[iPart][iCh]->SetYTitle("#Delta E (GeV)");
- fhRecoMCDeltaE[iPart][iCh]->SetXTitle("E_{reconstructed} (GeV)");
+ fhRecoMCDeltaE[iPart][iCh]->SetYTitle("#Delta #it{E} (GeV)");
+ fhRecoMCDeltaE[iPart][iCh]->SetXTitle("#it{E}_{reconstructed} (GeV)");
outputContainer->Add(fhRecoMCDeltaE[iPart][iCh]);
fhRecoMCDeltaPhi[iPart][iCh] = new TH2F (Form("hRecoMCDeltaPhi_%s_Match%d",particleName[iPart].Data(),iCh),
Form("Generated - Reconstructed #phi, %s, Matched %d",particleName[iPart].Data(),iCh),
nptbins, ptmin, ptmax, nphibins*2,-phimax,phimax);
fhRecoMCDeltaPhi[iPart][iCh]->SetYTitle("#Delta #phi (rad)");
- fhRecoMCDeltaPhi[iPart][iCh]->SetXTitle("E_{reconstructed} (GeV)");
+ fhRecoMCDeltaPhi[iPart][iCh]->SetXTitle("#it{E}_{reconstructed} (GeV)");
outputContainer->Add(fhRecoMCDeltaPhi[iPart][iCh]);
fhRecoMCDeltaEta[iPart][iCh] = new TH2F (Form("hRecoMCDeltaEta_%s_Match%d",particleName[iPart].Data(),iCh),
Form("Generated - Reconstructed #eta, %s, Matched %d",particleName[iPart].Data(),iCh),
nptbins, ptmin, ptmax,netabins*2,-etamax,etamax);
fhRecoMCDeltaEta[iPart][iCh]->SetYTitle("#Delta #eta ");
- fhRecoMCDeltaEta[iPart][iCh]->SetXTitle("E_{reconstructed} (GeV)");
+ fhRecoMCDeltaEta[iPart][iCh]->SetXTitle("#it{E}_{reconstructed} (GeV)");
outputContainer->Add(fhRecoMCDeltaEta[iPart][iCh]);
fhRecoMCE[iPart][iCh] = new TH2F (Form("hRecoMCE_%s_Match%d",particleName[iPart].Data(),iCh),
- Form("E distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].Data(),iCh),
+ Form("#it{E} distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].Data(),iCh),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhRecoMCE[iPart][iCh]->SetXTitle("E_{rec} (GeV)");
- fhRecoMCE[iPart][iCh]->SetYTitle("E_{gen} (GeV)");
+ fhRecoMCE[iPart][iCh]->SetXTitle("#it{E}_{rec} (GeV)");
+ fhRecoMCE[iPart][iCh]->SetYTitle("#it{E}_{gen} (GeV)");
outputContainer->Add(fhRecoMCE[iPart][iCh]);
fhRecoMCPhi[iPart][iCh] = new TH2F (Form("hRecoMCPhi_%s_Match%d",particleName[iPart].Data(),iCh),
for(Int_t iPart = 0; iPart < 4; iPart++)
{
fhGenMCE[iPart] = new TH1F(Form("hGenMCE_%s",particleName[iPart].Data()) ,
- Form("p_{T} of generated %s",particleName[iPart].Data()),
+ Form("#it{p}_{T} of generated %s",particleName[iPart].Data()),
nptbins,ptmin,ptmax);
fhGenMCEtaPhi[iPart] = new TH2F(Form("hGenMCEtaPhi_%s",particleName[iPart].Data()),
Form("Y vs #phi of generated %s",particleName[iPart].Data()),
netabins,etamin,etamax,nphibins,phimin,phimax);
- fhGenMCE[iPart] ->SetXTitle("p_{T} (GeV/c)");
+ fhGenMCE[iPart] ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhGenMCEtaPhi[iPart]->SetXTitle("#eta");
fhGenMCEtaPhi[iPart]->SetYTitle("#phi (rad)");
fhGenMCAccE[iPart] = new TH1F(Form("hGenMCAccE_%s",particleName[iPart].Data()) ,
- Form("p_{T} of generated %s",particleName[iPart].Data()),
+ Form("#it{E} of generated %s",particleName[iPart].Data()),
nptbins,ptmin,ptmax);
fhGenMCAccEtaPhi[iPart] = new TH2F(Form("hGenMCAccEtaPhi_%s",particleName[iPart].Data()),
Form("Y vs #phi of generated %s",particleName[iPart].Data()),
netabins,etamin,etamax,nphibins,phimin,phimax);
- fhGenMCAccE[iPart] ->SetXTitle("p_{T} (GeV/c)");
+ fhGenMCAccE[iPart] ->SetXTitle("#it{E} (GeV)");
fhGenMCAccEtaPhi[iPart]->SetXTitle("#eta");
fhGenMCAccEtaPhi[iPart]->SetYTitle("#phi (rad)");
//Vertex of generated particles
fhEMVxyz = new TH2F ("hEMVxyz","Production vertex of reconstructed ElectroMagnetic particles",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);//,100,0,500);
- fhEMVxyz->SetXTitle("v_{x}");
- fhEMVxyz->SetYTitle("v_{y}");
+ fhEMVxyz->SetXTitle("#it{v}_{x}");
+ fhEMVxyz->SetYTitle("#it{v}_{y}");
//fhEMVxyz->SetZTitle("v_{z}");
outputContainer->Add(fhEMVxyz);
fhHaVxyz = new TH2F ("hHaVxyz","Production vertex of reconstructed hadrons",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);//,100,0,500);
- fhHaVxyz->SetXTitle("v_{x}");
- fhHaVxyz->SetYTitle("v_{y}");
+ fhHaVxyz->SetXTitle("#it{v}_{x}");
+ fhHaVxyz->SetYTitle("#it{v}_{y}");
//fhHaVxyz->SetZTitle("v_{z}");
outputContainer->Add(fhHaVxyz);
fhEMR = new TH2F ("hEMR","Distance to production vertex of reconstructed ElectroMagnetic particles vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
- fhEMR->SetXTitle("E (GeV)");
+ fhEMR->SetXTitle("#it{E} (GeV)");
fhEMR->SetYTitle("TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
outputContainer->Add(fhEMR);
fhHaR = new TH2F ("hHaR","Distance to production vertex of reconstructed Hadrons vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
- fhHaR->SetXTitle("E (GeV)");
+ fhHaR->SetXTitle("#it{E} (GeV)");
fhHaR->SetYTitle("TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
outputContainer->Add(fhHaR);
//Track Matching
- fhMCEle1EOverP = new TH2F("hMCEle1EOverP","TRACK matches E/p, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fhMCEle1EOverP->SetYTitle("E/p");
- fhMCEle1EOverP->SetXTitle("p_{T} (GeV/c)");
+ fhMCEle1EOverP = new TH2F("hMCEle1EOverP","TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fhMCEle1EOverP->SetYTitle("#it{E}/#it{p}");
+ fhMCEle1EOverP->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCEle1EOverP);
fhMCEle1dR = new TH1F("hMCEle1dR","TRACK matches dR, MC electrons",ndRbins,dRmin,dRmax);
- fhMCEle1dR->SetXTitle("#Delta R (rad)");
+ fhMCEle1dR->SetXTitle("#Delta #it{R} (rad)");
outputContainer->Add(fhMCEle1dR) ;
- fhMCEle2MatchdEdx = new TH2F("hMCEle2MatchdEdx","dE/dx vs. p for all matches, MC electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
- fhMCEle2MatchdEdx->SetXTitle("p (GeV/c)");
- fhMCEle2MatchdEdx->SetYTitle("<dE/dx>");
+ fhMCEle2MatchdEdx = new TH2F("hMCEle2MatchdEdx","#it{dE/dx} vs. #it{p} for all matches, MC electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
+ fhMCEle2MatchdEdx->SetXTitle("#it{p} (GeV/#it{c})");
+ fhMCEle2MatchdEdx->SetYTitle("<#it{dE/dx}>");
outputContainer->Add(fhMCEle2MatchdEdx);
- fhMCChHad1EOverP = new TH2F("hMCChHad1EOverP","TRACK matches E/p, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fhMCChHad1EOverP->SetYTitle("E/p");
- fhMCChHad1EOverP->SetXTitle("p_{T} (GeV/c)");
+ fhMCChHad1EOverP = new TH2F("hMCChHad1EOverP","TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fhMCChHad1EOverP->SetYTitle("#it{E}/#it{p}");
+ fhMCChHad1EOverP->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCChHad1EOverP);
fhMCChHad1dR = new TH1F("hMCChHad1dR","TRACK matches dR, MC charged hadrons",ndRbins,dRmin,dRmax);
fhMCChHad1dR->SetXTitle("#Delta R (rad)");
outputContainer->Add(fhMCChHad1dR) ;
- fhMCChHad2MatchdEdx = new TH2F("hMCChHad2MatchdEdx","dE/dx vs. p for all matches, MC charged hadrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
- fhMCChHad2MatchdEdx->SetXTitle("p (GeV/c)");
- fhMCChHad2MatchdEdx->SetYTitle("<dE/dx>");
+ fhMCChHad2MatchdEdx = new TH2F("hMCChHad2MatchdEdx","#it{dE/dx} vs. #it{p} for all matches, MC charged hadrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
+ fhMCChHad2MatchdEdx->SetXTitle("#it{p} (GeV/#it{c})");
+ fhMCChHad2MatchdEdx->SetYTitle("#it{dE/dx}>");
outputContainer->Add(fhMCChHad2MatchdEdx);
- fhMCNeutral1EOverP = new TH2F("hMCNeutral1EOverP","TRACK matches E/p, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fhMCNeutral1EOverP->SetYTitle("E/p");
- fhMCNeutral1EOverP->SetXTitle("p_{T} (GeV/c)");
+ fhMCNeutral1EOverP = new TH2F("hMCNeutral1EOverP","TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fhMCNeutral1EOverP->SetYTitle("#it{E}/#it{p}");
+ fhMCNeutral1EOverP->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCNeutral1EOverP);
fhMCNeutral1dR = new TH1F("hMCNeutral1dR","TRACK matches dR, MC neutrals",ndRbins,dRmin,dRmax);
- fhMCNeutral1dR->SetXTitle("#Delta R (rad)");
+ fhMCNeutral1dR->SetXTitle("#Delta #it{R} (rad)");
outputContainer->Add(fhMCNeutral1dR) ;
- fhMCNeutral2MatchdEdx = new TH2F("hMCNeutral2MatchdEdx","dE/dx vs. p for all matches, MC neutrals",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
- fhMCNeutral2MatchdEdx->SetXTitle("p (GeV/c)");
- fhMCNeutral2MatchdEdx->SetYTitle("<dE/dx>");
+ fhMCNeutral2MatchdEdx = new TH2F("hMCNeutral2MatchdEdx","#it{dE/dx} vs. #it{p} for all matches, MC neutrals",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
+ fhMCNeutral2MatchdEdx->SetXTitle("#it{p} (GeV/#it{c})");
+ fhMCNeutral2MatchdEdx->SetYTitle("#it{dE/dx}>");
outputContainer->Add(fhMCNeutral2MatchdEdx);
- fhMCEle1EOverPR02 = new TH2F("hMCEle1EOverPR02","TRACK matches E/p, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fhMCEle1EOverPR02->SetYTitle("E/p");
- fhMCEle1EOverPR02->SetXTitle("p_{T} (GeV/c)");
+ fhMCEle1EOverPR02 = new TH2F("hMCEle1EOverPR02","TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fhMCEle1EOverPR02->SetYTitle("#it{E}/#it{p}");
+ fhMCEle1EOverPR02->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCEle1EOverPR02);
- fhMCChHad1EOverPR02 = new TH2F("hMCChHad1EOverPR02","TRACK matches E/p, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fhMCChHad1EOverPR02->SetYTitle("E/p");
- fhMCChHad1EOverPR02->SetXTitle("p_{T} (GeV/c)");
+ fhMCChHad1EOverPR02 = new TH2F("hMCChHad1EOverPR02","TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fhMCChHad1EOverPR02->SetYTitle("#it{E}/#it{p}");
+ fhMCChHad1EOverPR02->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCChHad1EOverPR02);
- fhMCNeutral1EOverPR02 = new TH2F("hMCNeutral1EOverPR02","TRACK matches E/p, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fhMCNeutral1EOverPR02->SetYTitle("E/p");
- fhMCNeutral1EOverPR02->SetXTitle("p_{T} (GeV/c)");
+ fhMCNeutral1EOverPR02 = new TH2F("hMCNeutral1EOverPR02","TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fhMCNeutral1EOverPR02->SetYTitle("#it{E}/#it{p}");
+ fhMCNeutral1EOverPR02->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCNeutral1EOverPR02);
- fhMCEle1EleEOverP = new TH2F("hMCEle1EleEOverP","Electron candidates E/p (60<dEdx<100), MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fhMCEle1EleEOverP->SetYTitle("E/p");
- fhMCEle1EleEOverP->SetXTitle("p_{T} (GeV/c)");
+ fhMCEle1EleEOverP = new TH2F("hMCEle1EleEOverP","Electron candidates #it{E}/#it{p} (60<dEdx<100), MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fhMCEle1EleEOverP->SetYTitle("#it{E}/#it{p}");
+ fhMCEle1EleEOverP->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCEle1EleEOverP);
- fhMCChHad1EleEOverP = new TH2F("hMCEle1EleEOverP","Electron candidates E/p (60<dEdx<100), MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fhMCChHad1EleEOverP->SetYTitle("E/p");
- fhMCChHad1EleEOverP->SetXTitle("p_{T} (GeV/c)");
+ fhMCChHad1EleEOverP = new TH2F("hMCEle1EleEOverP","Electron candidates #it{E}/#it{p} (60<dEdx<100), MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fhMCChHad1EleEOverP->SetYTitle("#it{E}/#it{p}");
+ fhMCChHad1EleEOverP->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCChHad1EleEOverP);
- fhMCNeutral1EleEOverP = new TH2F("hMCNeutral1EleEOverP","Electron candidates E/p (60<dEdx<100), MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
- fhMCNeutral1EleEOverP->SetYTitle("E/p");
- fhMCNeutral1EleEOverP->SetXTitle("p_{T} (GeV/c)");
+ fhMCNeutral1EleEOverP = new TH2F("hMCNeutral1EleEOverP","Electron candidates #it{E}/#it{p} (60<dEdx<100), MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
+ fhMCNeutral1EleEOverP->SetYTitle("#it{E}/#it{p}");
+ fhMCNeutral1EleEOverP->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCNeutral1EleEOverP);
}
Float_t ecell1 = 0, ecell2 = 0, ecell3 = 0, ecell4 = 0;
Double_t tcell1 = 0, tcell2 = 0, tcell3 = 0, tcell4 = 0;
- if(absID1 >0 )
+ if(absID1 > 0 )
{
ecell1 = cells->GetCellAmplitude(absID1);
GetCaloUtils()->RecalibrateCellAmplitude(ecell1, fCalorimeter, absID1);
tcell1 = cells->GetCellTime(absID1);
GetCaloUtils()->RecalibrateCellTime (tcell1, fCalorimeter, absID1,GetReader()->GetInputEvent()->GetBunchCrossNumber());
}
- if(absID2 >0 )
+ if(absID2 > 0 )
{
ecell2 = cells->GetCellAmplitude(absID2);
GetCaloUtils()->RecalibrateCellAmplitude(ecell2, fCalorimeter, absID2);
tcell2 = cells->GetCellTime(absID2);
GetCaloUtils()->RecalibrateCellTime (tcell2, fCalorimeter, absID2, GetReader()->GetInputEvent()->GetBunchCrossNumber());
}
- if(absID3 >0 )
+ if(absID3 > 0 )
{
ecell3 = cells->GetCellAmplitude(absID3);
GetCaloUtils()->RecalibrateCellAmplitude(ecell3, fCalorimeter, absID3);
tcell3 = cells->GetCellTime(absID3);
GetCaloUtils()->RecalibrateCellTime (tcell3, fCalorimeter, absID3, GetReader()->GetInputEvent()->GetBunchCrossNumber());
}
- if(absID4 >0 )
+ if(absID4 > 0 )
{
ecell4 = cells->GetCellAmplitude(absID4);
GetCaloUtils()->RecalibrateCellAmplitude(ecell4, fCalorimeter, absID4);
AliVCluster* clus2 = (AliVCluster*)caloClusters->At(jclus);
Float_t maxCellFraction = 0.;
- Int_t absIdMax = GetCaloUtils()->GetMaxEnergyCell(cells, clus2,maxCellFraction);
+ Int_t absIdMax = GetCaloUtils()->GetMaxEnergyCell(cells, clus2, maxCellFraction);
// Try to rediuce background with a mild shower shape cut and no more than 1 maxima
// in cluster and remove low energy clusters
if( clus2->GetNCells() <= 1 || !IsGoodCluster(absIdMax,cells) ||
GetCaloUtils()->GetNumberOfLocalMaxima(clus2,cells) > 1 ||
- clus2->GetM02() > 0.5 || clus2->E() < 0.3) continue;
+ clus2->GetM02() > 0.5 || clus2->E() < fMinInvMassECut ) continue;
//Get cluster kinematics
clus2->GetMomentum(mom2,v);
fhIM ->Fill((mom+mom2).Pt(),(mom+mom2).M());
//Single module
- if(nModule == nModule2 && nModule >=0 && nModule < fNModules)
+ if(nModule == nModule2 && nModule >= 0 && nModule < fNModules)
fhIMMod[nModule]->Fill((mom+mom2).Pt(),(mom+mom2).M());
fCalorimeter = "EMCAL"; //or PHOS
fNModules = 22; // set maximum to maximum number of EMCAL modules
fNRCU = 2; // set maximum number of RCU in EMCAL per SM
+
fTimeCutMin = -9999999;
fTimeCutMax = 9999999;
- fEMCALCellAmpMin = 0.2;
- fPHOSCellAmpMin = 0.2;
+
+ fEMCALCellAmpMin = 0.2; // 200 MeV
+ fPHOSCellAmpMin = 0.2; // 200 MeV
+ fCellAmpMin = 0.2; // 200 MeV
+ fMinInvMassECut = 0.5; // 500 MeV
// Exotic studies
fExoNECrossCuts = 10 ;
printf("Time Cut: %3.1f < TOF < %3.1f\n", fTimeCutMin, fTimeCutMax);
printf("EMCAL Min Amplitude : %2.1f GeV/c\n", fEMCALCellAmpMin) ;
printf("PHOS Min Amplitude : %2.1f GeV/c\n", fPHOSCellAmpMin) ;
+ printf("Inv. Mass min. E clus : %2.1f GeV/c\n", fMinInvMassECut) ;
}
//Fill Calorimeter QA histograms
//Play with the MC stack if available
- if(IsDataMC()) MCHistograms();
+ if(IsDataMC()) MCHistograms();
- //Get List with CaloClusters
- TObjArray * caloClusters = NULL;
- if (fCalorimeter == "PHOS") caloClusters = GetPHOSClusters();
- else if (fCalorimeter == "EMCAL") caloClusters = GetEMCALClusters();
- else
+ //Get List with CaloClusters , calo Cells, init min amplitude
+ TObjArray * caloClusters = NULL;
+ AliVCaloCells * cells = 0x0;
+ if (fCalorimeter == "PHOS")
+ {
+ fCellAmpMin = fPHOSCellAmpMin;
+ caloClusters = GetPHOSClusters();
+ cells = GetPHOSCells();
+ }
+ else if (fCalorimeter == "EMCAL")
+ {
+ fCellAmpMin = fEMCALCellAmpMin;
+ caloClusters = GetEMCALClusters();
+ cells = GetEMCALCells();
+ }
+ else
AliFatal(Form("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Wrong calorimeter name <%s>, END\n", fCalorimeter.Data()));
- // Do not do anything if there are no clusters
- if(caloClusters->GetEntriesFast() == 0) return;
-
- //Get List with CaloCells
- AliVCaloCells * cells = 0x0;
- if(fCalorimeter == "PHOS") cells = GetPHOSCells();
- else cells = GetEMCALCells();
-
- if(!caloClusters || !cells) {
+ if( !caloClusters || !cells )
+ {
AliFatal(Form("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - No CaloClusters or CaloCells available\n"));
return; // trick coverity
}
+ if(caloClusters->GetEntriesFast() == 0) return ;
+
//printf("QA: N cells %d, N clusters %d \n",cells->GetNumberOfCells(),caloClusters->GetEntriesFast());
// Correlate Calorimeters and V0 and track Multiplicity
TLorentzVector mom ;
- if(GetReader()->ReadStack()){
-
+ if(GetReader()->ReadStack())
+ {
if(!GetMCStack())
AliFatal("Stack not available, is the MC handler called?\n");
primary->Momentum(mom);
MCHistograms(mom,TMath::Abs(primary->GetPdgCode()));
} //primary loop
- }
- else if(GetReader()->ReadAODMCParticles()){
-
+ } // ESD
+ else if(GetReader()->ReadAODMCParticles())
+ {
if(!GetReader()->GetAODMCParticles())
AliFatal("AODMCParticles not available!");
mom.SetPxPyPzE(aodprimary->Px(),aodprimary->Py(),aodprimary->Pz(),aodprimary->E());
MCHistograms(mom,TMath::Abs(aodprimary->GetPdgCode()));
} //primary loop
-
- }
+ } // AOD
}
//_______________________________________________________________________________
// First recalculate energy in case non linearity was applied
Float_t energy = 0;
- Float_t ampMax = 0;
+ Float_t ampMax = 0;
+ Float_t energyOrg = clus->E();
+
+ // Do study when there are enough cells in cluster
+ if(clus->GetNCells() < 3) return ;
+
for (Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
{
Int_t id = clus->GetCellsAbsId()[ipos];
return;
}
+ //Remove non lin correction
+ clus->SetE(energy);
+
fhEMaxCellClusterRatio ->Fill(energy,ampMax/energy);
fhEMaxCellClusterLogRatio->Fill(energy,TMath::Log(ampMax/energy));
Float_t l0org = clus->GetM02();
Float_t l1org = clus->GetM20();
Float_t dorg = clus->GetDispersion();
-
- for(Int_t iw = 0; iw < 14; iw++){
- GetCaloUtils()->GetEMCALRecoUtils()->SetW0(1+iw*0.5);
+
+ Int_t tagMC = -1;
+ if(IsDataMC() && clus->GetNLabels() > 0)
+ {
+ Int_t tag = GetMCAnalysisUtils()->CheckOrigin(clus->GetLabels(),clus->GetNLabels(), GetReader());
+
+ if( GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPhoton) &&
+ !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) &&
+ !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta) &&
+ !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion) ){
+ tagMC = 0;
+ } // Pure Photon
+ else if( GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCElectron) &&
+ !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion) ){
+ tagMC = 1;
+ } // Electron
+ else if( GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion) ){
+ tagMC = 2;
+ } // Conversion
+ else if( GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) ){
+ tagMC = 3;
+ }// Pi0
+ else if(!GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta) &&
+ !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPhoton) ){
+ tagMC = 4;
+ }// Hadron
+ }// Is MC
+
+ for(Int_t iw = 0; iw < 12; iw++)
+ {
+ GetCaloUtils()->GetEMCALRecoUtils()->SetW0(3+iw*0.25);
GetCaloUtils()->GetEMCALRecoUtils()->RecalculateClusterShowerShapeParameters(GetEMCALGeometry(), cells, clus);
fhLambda0ForW0[iw]->Fill(energy,clus->GetM02());
//fhLambda1ForW0[iw]->Fill(energy,clus->GetM20());
- if(IsDataMC()){
-
- Int_t tag = GetMCAnalysisUtils()->CheckOrigin(clus->GetLabels(),clus->GetNLabels(), GetReader());
-
- if( GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPhoton) &&
- !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) &&
- !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta) &&
- !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion) ){
- fhLambda0ForW0MC[iw][0]->Fill(energy,clus->GetM02());
- //fhLambda1ForW0MC[iw][0]->Fill(energy,clus->GetM20());
- } // Pure Photon
- else if( GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCElectron) &&
- !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion) ){
- fhLambda0ForW0MC[iw][1]->Fill(energy,clus->GetM02());
- //fhLambda1ForW0MC[iw][1]->Fill(energy,clus->GetM20());
- } // Electron
- else if( GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion) ){
- fhLambda0ForW0MC[iw][2]->Fill(energy,clus->GetM02());
- //fhLambda1ForW0MC[iw][2]->Fill(energy,clus->GetM20());
- } // Conversion
- else if( GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) ){
- fhLambda0ForW0MC[iw][3]->Fill(energy,clus->GetM02());
- //fhLambda1ForW0MC[iw][3]->Fill(energy,clus->GetM20());
- }// Pi0
- else if(!GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta) &&
- !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPhoton) ){
- fhLambda0ForW0MC[iw][4]->Fill(energy,clus->GetM02());
- //fhLambda1ForW0MC[iw][4]->Fill(energy,clus->GetM20());
- }// Hadron
-
- }// Is MC
+ if(IsDataMC() && tagMC >= 0)
+ {
+ fhLambda0ForW0MC[iw][tagMC]->Fill(energy,clus->GetM02());
+ //fhLambda1ForW0MC[iw][tagMC]->Fill(energy,clus->GetM20());
+ }
} // w0 loop
// Set the original values back
clus->SetDispersion(dorg);
}// EMCAL
-
+
+ clus->SetE(energyOrg);
+
}
// Main methods
void BadClusterHistograms(AliVCluster* clus, const TObjArray *caloClusters, AliVCaloCells * cells,
- Int_t absIdMax, Double_t maxCellFraction, Float_t eCrossFrac,
- Double_t tmax, Double_t timeAverages[2]);
+ Int_t absIdMax, Double_t maxCellFraction, Float_t eCrossFrac, Double_t tmax);
void CalculateAverageTime(AliVCluster *clus, AliVCaloCells *cells, Double_t timeAverages[2]);
void ClusterAsymmetryHistograms(AliVCluster* clus, Int_t absIdMax, const Bool_t goodCluster );
void ClusterHistograms(AliVCluster* cluster, const TObjArray *caloClusters, AliVCaloCells * cells,
- Int_t absIdMax, Double_t maxCellFraction, Float_t eCrossFrac,
- Double_t tmax, Double_t timeAverages[2]);
+ Int_t absIdMax, Double_t maxCellFraction, Float_t eCrossFrac, Double_t tmax);
void ClusterLoopHistograms(const TObjArray * clusters, AliVCaloCells * cells);
Float_t GetPHOSCellAmpMin() const { return fPHOSCellAmpMin ; }
void SetPHOSCellAmpMin (Float_t amp) { fPHOSCellAmpMin = amp ; }
-
+
+ Float_t GetInvMassMinECut() const { return fMinInvMassECut ; }
+ void SetInvMassMinECut(Float_t cut) { fMinInvMassECut = cut ; }
+
TString GetCalorimeter() const { return fCalorimeter ; }
void SetCalorimeter(TString calo) { fCalorimeter = calo ; }
void SwitchOnFillAllPositionHistogram2() { fFillAllPosHisto2 = kTRUE ; }
void SwitchOffFillAllPositionHistogram2() { fFillAllPosHisto2 = kFALSE ; }
- void SwitchOnFillAllTH12Histogram() { fFillAllTH12 = kTRUE ; }
- void SwitchOffFillAllTH12Histogram() { fFillAllTH12 = kFALSE ; }
-
void SwitchOnFillAllTH3Histogram() { fFillAllTH3 = kTRUE ; }
void SwitchOffFillAllTH3Histogram() { fFillAllTH3 = kFALSE ; }
Bool_t fFillAllCellTimeHisto; // Fill all cell time histo
Bool_t fFillAllPosHisto; // Fill all the position related histograms
Bool_t fFillAllPosHisto2; // Fill all the position related histograms 2
- Bool_t fFillAllTH12 ; // Fill simple histograms which information is already in TH3 histograms
Bool_t fFillAllTH3 ; // Fill TH3 histograms
Bool_t fFillAllTMHisto ; // Fill track matching histograms
Bool_t fFillAllPi0Histo ; // Fill invariant mass histograms
//Cuts
Double_t fTimeCutMin ; // Remove clusters/cells with time smaller than this value, in ns
Double_t fTimeCutMax ; // Remove clusters/cells with time larger than this value, in ns
+ Float_t fCellAmpMin; // amplitude Threshold on calorimeter cells, set at execution time
Float_t fEMCALCellAmpMin; // amplitude Threshold on emcal cells
Float_t fPHOSCellAmpMin ; // amplitude Threshold on phos cells
+ Float_t fMinInvMassECut; // Minimum energy cut value for clusters entering the invariant mass calculation
+
// Exotic studies
Float_t fExoNECrossCuts ; // Number of ecross cuts
Float_t fExoECrossCuts[10]; // List of ecross cuts
//Calo Cells
TH1F * fhNCells; //! Number of towers/crystals with signal
+ TH1F * fhNCellsCutAmpMin; //! Number of towers/crystals with signal, with min amplitude
TH1F * fhAmplitude; //! Amplitude measured in towers/crystals
TH2F * fhAmpId; //! Amplitude measured in towers/crystals vs id of tower.
TH3F * fhEtaPhiAmp; //! eta vs phi vs amplitude, cells
TH2F * fhLambda0ForW0MC[14][5]; //! L0 for 7 defined w0= 3, 3.5 ... 6, depending on the particle of origin
//TH2F * fhLambda1ForW0MC[7][5]; //! L1 for 7 defined w0= 3, 3.5 ... 6, depending on the particle of origin
+ TH2F * fhECellTotalRatio; //! e cell / e total vs e total
+ TH2F * fhECellTotalLogRatio; //! log (e cell / e total) vs e total
+ TH2F ** fhECellTotalRatioMod; //! e cell / e total vs e total, per SM
+ TH2F ** fhECellTotalLogRatioMod; //! log (e cell / e total) vs e total, per SM
+
// Exotic studies
TH2F * fhExoNCell [10][5] ; //! Number of cells per cluster for different cuts
AliAnaCalorimeterQA & operator = (const AliAnaCalorimeterQA & qa) ;//cpy assignment
AliAnaCalorimeterQA( const AliAnaCalorimeterQA & qa) ; // cpy ctor
- ClassDef(AliAnaCalorimeterQA,27)
+ ClassDef(AliAnaCalorimeterQA,28)
} ;
fFillIdEtaHisto(0), fFillHighMultHisto(0),
fFillArmenterosHisto(0), fFillThetaStarHisto(0),
fSSWeightN(0), fSSECellCutN(0),
- fNLMSettingN(0), fWSimu(0),
+ fNLMSettingN(0), fWSimu(),
fhMassAsyCutNLocMax1(0), fhMassAsyCutNLocMax2(0), fhMassAsyCutNLocMaxN(0),
fhM02AsyCutNLocMax1(0), fhM02AsyCutNLocMax2(0), fhM02AsyCutNLocMaxN(0),
fhMassM02CutNLocMax1(0), fhMassM02CutNLocMax2(0), fhMassM02CutNLocMaxN(0),
GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(eta0, phi0, absId0);
GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(eta1, phi1, absId1);
- if(absId1 < 0 || absId1 < 0)
+ if(absId0 < 0 || absId1 < 0)
{
//printf("AliAnaInsideClusterInvariantMass::CheckLocalMaximaMCOrigin(() - Photon hit AbsId: photon0 %d - photon1 %d\n",absId0,absId1);
return;
else cells = GetPHOSCells();
// First recalculate energy in case non linearity was applied
- Float_t energy = 0;
- for (Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
+ Float_t energy = GetCaloUtils()->RecalibrateClusterEnergy(clus, cells);// recalculate cluster energy, avoid non lin correction.
+
+ Float_t simuTotWeight = 0;
+ if(GetCaloUtils()->IsMCECellClusFracCorrectionOn())
{
-
- Int_t id = clus->GetCellsAbsId()[ipos];
-
- //Recalibrate cell energy if needed
- Float_t amp = cells->GetCellAmplitude(id);
- GetCaloUtils()->RecalibrateCellAmplitude(amp,fCalorimeter, id);
-
- energy += amp;
-
- } // energy loop
+ simuTotWeight = GetCaloUtils()->RecalibrateClusterEnergyWeightCell(clus, cells,energy);
+ simuTotWeight/= energy;
+ }
if(energy <=0 )
{
if(amp1 < amp2) Info("FillSSWeightHistograms","Bad local maxima E ordering : id1 E %f, id2 E %f\n ",amp1,amp2);
if(amp1==0 || amp2==0) Info("FillSSWeightHistograms","Null E local maxima : id1 E %f, id2 E %f\n " ,amp1,amp2);
+ if(GetCaloUtils()->IsMCECellClusFracCorrectionOn())
+ {
+ amp1*=GetCaloUtils()->GetMCECellClusFracCorrection(amp1,energy)/simuTotWeight;
+ amp2*=GetCaloUtils()->GetMCECellClusFracCorrection(amp2,energy)/simuTotWeight;
+ }
+
if(amp1>0)fhPi0CellEMaxEMax2Frac [nlm]->Fill(energy,amp2/amp1);
fhPi0CellEMaxClusterFrac [nlm]->Fill(energy,amp1/energy);
fhPi0CellEMax2ClusterFrac[nlm]->Fill(energy,amp2/energy);
//Recalibrate cell energy if needed
Float_t amp = cells->GetCellAmplitude(id);
GetCaloUtils()->RecalibrateCellAmplitude(amp,fCalorimeter, id);
+ if(GetCaloUtils()->IsMCECellClusFracCorrectionOn())
+ {
+ //printf("eCell a) %f",amp);
+ amp*=GetCaloUtils()->GetMCECellClusFracCorrection(amp,energy)/simuTotWeight;
+ //printf(", b)%f\n",amp);
+ }
if(amp > 0)fhPi0CellE [nlm]->Fill(energy,amp);
fhPi0CellEFrac [nlm]->Fill(energy,amp/energy);
}
}
-
+
//Recalculate shower shape for different W0
if(fCalorimeter=="EMCAL")
{
fNLMMinE [0] = 0.10; fNLMMinE [1] = 0.20; fNLMMinE [2] = 0.35; fNLMMinE [3] = 0.50; fNLMMinE [4] = 1.00;
fNLMMinDiff[0] = 0.03; fNLMMinDiff[1] = 0.05; fNLMMinDiff[2] = 0.10; fNLMMinDiff[3] = 0.15; fNLMMinDiff[4] = 0.20;
+ fWSimu[0] = 1; // Default, do not correct, change to 1.05-1.1
+ fWSimu[1] = 0; // Default, do not correct, change to 0.07
+
}
Double_t etaMean = 0.;
Double_t phiMean = 0.;
- //Loop on cells, calculate the cluster energy, in case a cut on cell energy is added
- // and to check if the cluster is between 2 SM in eta
- Int_t iSM0 = -1;
- Bool_t shared = kFALSE;
- Float_t energy = 0;
+ Bool_t shared = GetCaloUtils()-> IsClusterSharedByTwoSuperModules(geom,cluster);
- for(Int_t iDigit=0; iDigit < cluster->GetNCells(); iDigit++)
+ Float_t energy = GetCaloUtils()->RecalibrateClusterEnergy(cluster, cells);
+
+ Float_t simuTotWeight = 0;
+ if(GetCaloUtils()->IsMCECellClusFracCorrectionOn())
{
- //Get from the absid the supermodule, tower and eta/phi numbers
- geom->GetCellIndex(cluster->GetCellAbsId(iDigit),iSupMod,iTower,iIphi,iIeta);
- geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta, iphi,ieta);
-
- //Check if there are cells of different SM
- if (iDigit == 0 ) iSM0 = iSupMod;
- else if(iSupMod!= iSM0) shared = kTRUE;
-
- //Get the cell energy, if recalibration is on, apply factors
- fraction = cluster->GetCellAmplitudeFraction(iDigit);
- if(fraction < 1e-4) fraction = 1.; // in case unfolding is off
-
- if(GetCaloUtils()->GetEMCALRecoUtils()->IsRecalibrationOn())
- {
- recalFactor = GetCaloUtils()->GetEMCALRecoUtils()->GetEMCALChannelRecalibrationFactor(iSupMod,ieta,iphi);
- }
-
- eCell = cells->GetCellAmplitude(cluster->GetCellAbsId(iDigit))*fraction*recalFactor;
-
- if(eCell > eCellMin) energy += eCell;
-
- }//cell loop
+ simuTotWeight = GetCaloUtils()->RecalibrateClusterEnergyWeightCell(cluster, cells,energy);
+ simuTotWeight/= energy;
+ }
//Loop on cells, get weighted parameters
for(Int_t iDigit=0; iDigit < cluster->GetNCells(); iDigit++)
if(energy > 0 && eCell > eCellMin)
{
+ if(GetCaloUtils()->IsMCECellClusFracCorrectionOn())
+ eCell*=GetCaloUtils()->GetMCECellClusFracCorrection(eCell,energy)/simuTotWeight;
+
w = GetCaloUtils()->GetEMCALRecoUtils()->GetCellWeight(eCell,energy);
//correct weight, ONLY in simulation
- w *= (1 - fWSimu * w );
+ w *= (fWSimu[0] - fWSimu[1] * w );
etai=(Double_t)ieta;
phii=(Double_t)iphi;
if(energy > 0 && eCell > eCellMin)
{
+ if(GetCaloUtils()->IsMCECellClusFracCorrectionOn())
+ eCell*=GetCaloUtils()->GetMCECellClusFracCorrection(eCell,energy)/simuTotWeight;
+
w = GetCaloUtils()->GetEMCALRecoUtils()->GetCellWeight(eCell,energy);
//correct weight, ONLY in simulation
- w *= (1 - fWSimu * w );
+ w *= (fWSimu[0] - fWSimu[1] * w );
etai=(Double_t)ieta;
phii=(Double_t)iphi;
void SetMinBadChannelDistance(Float_t cut) { fMinBadDist = cut ; }
- void SetWCorrectionParameter(Float_t p = 0.07) { fWSimu = p ; }
+ void SetWCorrectionParameter(Int_t i, Float_t p = 0.07) { if( i<2 ) fWSimu[i] = p; }
void SwitchOnFillAngleHistograms() { fFillAngleHisto = kTRUE ; }
void SwitchOffFillAngleHistograms() { fFillAngleHisto = kFALSE ; }
Float_t fNLMMinDiff[5]; // List of local maxima min difference cell energy
Int_t fNLMSettingN; // Total number of NLM settings to test
- Float_t fWSimu; // Slope of the linear correction factor for the shower
- // shape weight in simulation, about 0.07
+ Float_t fWSimu[2]; // Constant and slope of the linear correction factor for the shower
+ // shape weight in simulation, about 1-0.07*w
//Histograms
if(uexE > 0) fhPtHbpXEUeCharged->Fill(ptTrig,TMath::Log(1/uexE));
fhZTUeCharged->Fill(ptTrig,uezT);
- if(uexE > 0) fhPtHbpZTUeCharged->Fill(ptTrig,TMath::Log(1/uezT));
+ if(uezT > 0) fhPtHbpZTUeCharged->Fill(ptTrig,TMath::Log(1/uezT));
// Pile up studies
#include "AliAODCaloCluster.h"
#include "AliAODEvent.h"
+//jets
+#include "AliAODJetEventBackground.h"
+#include "TRandom2.h"
+
ClassImp(AliAnaParticleJetFinderCorrelation)
//________________________________________________________________________
- AliAnaParticleJetFinderCorrelation::AliAnaParticleJetFinderCorrelation() :
- AliAnaCaloTrackCorrBaseClass(),
- fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.), fRatioMaxCut(0.), fRatioMinCut(0.),
- fConeSize(0), fPtThresholdInCone(0),fUseJetRefTracks(0), fMakeCorrelationInHistoMaker(0), fSelectIsolated(0),
- fhDeltaEta(0), fhDeltaPhi(0), fhDeltaPt(0), fhPtRatio(0), fhPt(0),
- fhFFz(0),fhFFxi(0),fhFFpt(0),fhNTracksInCone(0)
+AliAnaParticleJetFinderCorrelation::AliAnaParticleJetFinderCorrelation() :
+AliAnaCaloTrackCorrBaseClass(),
+ fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.), fRatioMaxCut(0.), fRatioMinCut(0.),
+ fConeSize(0), fPtThresholdInCone(0),fUseJetRefTracks(0),
+ fMakeCorrelationInHistoMaker(0), fSelectIsolated(0),
+ fJetConeSize(0.4),fJetMinPt(5),fJetAreaFraction(0.6),
+ fNonStandardJetFromReader(kTRUE), fJetBranchName("jets"),
+ fBackgroundJetFromReader(kTRUE),fBkgJetBranchName("jets"),
+ fGammaConeSize(0.3),fUseBackgroundSubtractionGamma(0),fSaveGJTree(0),
+ fMostEnergetic(kFALSE),fMostOpposite(kTRUE), fUseHistogramJetBkg(kTRUE),
+ fUseHistogramTracks(kTRUE),fUseHistogramJetTracks(kTRUE),fGenerator(0),
+ fhDeltaEta(0), /*fhDeltaPhi(0),*/fhDeltaPhiCorrect(0),fhDeltaPhi0PiCorrect(0), fhDeltaPt(0), fhPtRatio(0), fhPt(0),
+ fhFFz(0),fhFFxi(0),fhFFpt(0),fhNTracksInCone(0),
+ fhJetFFz(0),fhJetFFxi(0),fhJetFFpt(0),fhJetFFzCor(0),fhJetFFxiCor(0),
+ fhBkgFFz(),fhBkgFFxi(),fhBkgFFpt(),fhBkgNTracksInCone(),fhBkgSumPtInCone(),fhBkgSumPtnTracksInCone(),//<<---new
+ fhNjetsNgammas(0),fhCuts(0),
+ fhDeltaEtaBefore(0),fhDeltaPhiBefore(0),fhDeltaPtBefore(0),fhPtRatioBefore(0),
+ fhPtBefore(0),fhDeltaPhi0PiCorrectBefore(0),
+ fhJetPtBefore(0),fhJetPt(0),fhJetPtMostEne(0),fhJetPhi(0),fhJetEta(0),fhJetEtaVsPt(0),
+ fhJetPhiVsEta(0),fhJetEtaVsNpartInJet(0),fhJetEtaVsNpartInJetBkg(0),fhJetChBkgEnergyVsPt(0),fhJetChAreaVsPt(0),/*fhJetNjet(0),*/
+ fhTrackPhiVsEta(0),fhTrackAveTrackPt(0),fhJetNjetOverPtCut(),
+/*fhJetChBkgEnergyVsPtEtaGt05(0),fhJetChBkgEnergyVsPtEtaLe05(0),fhJetChAreaVsPtEtaGt05(0),fhJetChAreaVsPtEtaLe05(0),*/
+ fhJetChBkgEnergyVsArea(0),fhJetRhoVsPt(0),fhJetRhoVsCentrality(0),//fhJetBkgRho(0),
+ fhJetNparticlesInJet(0),fhJetDeltaEtaDeltaPhi(0),fhJetDeltaEtaDeltaPhiAllTracks(0),
+ fhJetAveTrackPt(0),fhJetNtracksInJetAboveThr(),fhJetRatioNTrkAboveToNTrk(),fhJetNtrackRatioMostEne(),
+ fhJetNtrackRatioJet5GeV(),fhJetNtrackRatioLead5GeV(),
+ fhBkgJetBackground(),fhBkgJetSigma(),fhBkgJetArea(),fhPhotonPtMostEne(0),
+ fhPhotonAverageEnergy(0),fhPhotonRatioAveEneToMostEne(0),fhPhotonAverageEnergyMinus1(0),fhPhotonRatioAveEneMinus1ToMostEne(0),
+ fhPhotonNgammaMoreAverageToNgamma(0),fhPhotonNgammaMoreAverageMinus1ToNgamma(0),fhPhotonNgammaOverPtCut(),
+ fhPhotonBkgRhoVsNtracks(0),fhPhotonBkgRhoVsNclusters(0),fhPhotonBkgRhoVsCentrality(0),
+ fhPhotonBkgRhoVsNcells(0),fhPhotonPt(0),fhPhotonPtCorrected(0),fhPhotonPtCorrectedZoom(0),fhPhotonPtDiff(0),
+ fhPhotonPtDiffVsCentrality(0),fhPhotonPtDiffVsNcells(0),fhPhotonPtDiffVsNtracks(0),fhPhotonPtDiffVsNclusters(0),
+ fhPhotonSumPtInCone(0),fhPhotonSumPtCorrectInCone(0),fhPhotonSumPtChargedInCone(0),
+ fhSelectedJetPhiVsEta(0),fhSelectedJetChBkgEnergyVsPtJet(0),fhSelectedJetChAreaVsPtJet(0),fhSelectedJetNjet(0),fhSelectedNtracks(0),
+ fhSelectedTrackPhiVsEta(0),fhCuts2(0),
+ fhSelectedPhotonNLMVsPt(0),fhSelectedPhotonLambda0VsPt(0), fhRandomPhiEta(),
+fTreeGJ (0),
+fGamPt (0),
+fGamLambda0 (0),
+fGamNLM (0),
+fGamSumPtCh (0),
+fGamTime (0),
+fGamNcells (0),
+fGamEta (0),
+fGamPhi (0),
+fGamSumPtNeu(0),
+fGamNtracks (0),
+fGamNclusters(0),
+fGamAvEne (0),
+fJetPhi (0),
+fJetEta (0),
+fJetPt (0),
+fJetBkgChEne(0),
+fJetArea (0),
+fJetNtracks (0),
+fJetNtracks1(0),
+fJetNtracks2(0),
+fJetRho(0),
+fEventNumber(0),
+fNtracks (0),
+fZvertex (0),
+fCentrality (0),
+fIso(0),
+fGamRho(0)
+
{
//Default Ctor
+ // printf("constructor\n");
//Initialize parameters
InitParameters();
+ for(Int_t i=0;i<10;i++){
+ fhJetNjetOverPtCut[i] = 0;
+ fhPhotonNgammaOverPtCut[i] = 0;
+ }
+ fGenerator = new TRandom2();
+ fGenerator->SetSeed(0);
}
+//___________________________________________________________________
+AliAnaParticleJetFinderCorrelation::~AliAnaParticleJetFinderCorrelation(){
+ delete fGenerator;
+}
+
+
//___________________________________________________________________
TList * AliAnaParticleJetFinderCorrelation::GetCreateOutputObjects()
{
// Create histograms to be saved in output file and
// store them in fOutputContainer
-
+ // printf("GetCreateOutputObjects\n");
+
TList * outputContainer = new TList() ;
outputContainer->SetName("ParticleJetFinderHistos") ;
// Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
// Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
- fhDeltaPhi = new TH2F("DeltaPhi","#phi_{jet} - #phi_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-4,4);
- fhDeltaPhi->SetYTitle("#Delta #phi");
- fhDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
- outputContainer->Add(fhDeltaPhi);
-
- fhDeltaEta = new TH2F("DeltaEta","#eta_{jet} - #eta_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-5,5);
+// fhDeltaPhi = new TH2F("DeltaPhi","#phi_{trigger} - #phi_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-6,4);
+// fhDeltaPhi->SetYTitle("#Delta #phi");
+// fhDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
+// outputContainer->Add(fhDeltaPhi);
+
+ fhDeltaPhiCorrect = new TH2F("DeltaPhiCorrect","#phi_{trigger} - #phi_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,6.5);
+ fhDeltaPhiCorrect->SetYTitle("#Delta #phi");
+ fhDeltaPhiCorrect->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaPhiCorrect);
+
+ fhDeltaPhi0PiCorrect = new TH2F("DeltaPhi0PiCorrect","#phi_{trigger} - #phi_{jet} (0,#pi) vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,3.5);
+ fhDeltaPhi0PiCorrect->SetYTitle("#Delta #phi");
+ fhDeltaPhi0PiCorrect->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaPhi0PiCorrect);
+
+
+ fhDeltaEta = new TH2F("DeltaEta","#eta_{trigger} - #eta_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-2,2);
fhDeltaEta->SetYTitle("#Delta #eta");
fhDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhDeltaEta);
- fhDeltaPt = new TH2F("DeltaPt","p_{T trigger} - #p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-50,50);
- fhDeltaPt->SetYTitle("#Delta #p_{T}");
+ fhDeltaPt = new TH2F("DeltaPt","p_{T trigger} - p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,150,-50,100);
+ fhDeltaPt->SetYTitle("#Delta p_{T}");
fhDeltaPt->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhDeltaPt);
- fhPtRatio = new TH2F("PtRatio","p_{T jet} / #p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0,2.);
+ fhPtRatio = new TH2F("PtRatio","p_{T jet} / p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0,2.);
fhPtRatio->SetYTitle("ratio");
fhPtRatio->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhPtRatio);
fhFFxi->SetXTitle("p_{T trigger}");
outputContainer->Add(fhFFxi) ;
- fhFFpt = new TH2F("FFpt","#xi = p_{T i charged}) vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,50.);
+ fhFFpt = new TH2F("FFpt","p_{T i charged} vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,50.);
fhFFpt->SetYTitle("p_{T charged hadron}");
fhFFpt->SetXTitle("p_{T trigger}");
outputContainer->Add(fhFFpt) ;
- fhNTracksInCone = new TH2F("NTracksInCone","#xi = p_{T i charged}) vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,50.);
+ fhNTracksInCone = new TH2F("NTracksInCone","Number of tracks in cone vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,150.);
fhNTracksInCone->SetYTitle("p_{T charged hadron}");
fhNTracksInCone->SetXTitle("p_{T trigger}");
outputContainer->Add(fhNTracksInCone) ;
+ //FF according to jet axis
+ fhJetFFz = new TH2F("JetFFz","z = p_{T i charged}/p_{T jet} vs p_{T jet}",nptbins,ptmin,ptmax,200,0.,2);
+ fhJetFFz->SetYTitle("z");
+ fhJetFFz->SetXTitle("p_{T jet}");
+ outputContainer->Add(fhJetFFz) ;
+
+ fhJetFFxi = new TH2F("JetFFxi","#xi = ln(p_{T jet}/p_{T i charged}) vs p_{T jet}", nptbins,ptmin,ptmax,100,0.,10.);
+ fhJetFFxi->SetYTitle("#xi");
+ fhJetFFxi->SetXTitle("p_{T jet}");
+ outputContainer->Add(fhJetFFxi) ;
+
+ fhJetFFpt = new TH2F("JetFFpt","p_{T i charged} vs p_{T jet}", nptbins,ptmin,ptmax,100,0.,50.);
+ fhJetFFpt->SetYTitle("p_{T charged hadron}");
+ fhJetFFpt->SetXTitle("p_{T jet}");
+ outputContainer->Add(fhJetFFpt) ;
+
+ fhJetFFzCor = new TH2F("JetFFzCor","z = -cos(#alpha(jet,trig))*p_{T i charged}/p_{T jet} vs p_{T jet}",nptbins,ptmin,ptmax,200,0.,2);
+ fhJetFFzCor->SetYTitle("z");
+ fhJetFFzCor->SetXTitle("p_{T jet}");
+ outputContainer->Add(fhJetFFzCor) ;
+
+ fhJetFFxiCor = new TH2F("JetFFxiCor","#xi = ln(p_{T jet}/(-cos(#alpha(jet,trig))*p_{T i charged})) vs p_{T jet}", nptbins,ptmin,ptmax,100,0.,10.);
+ fhJetFFxiCor->SetYTitle("#xi");
+ fhJetFFxiCor->SetXTitle("p_{T jet}");
+ outputContainer->Add(fhJetFFxiCor) ;
+
+
+ //background FF
+ fhBkgFFz[0] = new TH2F("BkgFFzRC", "z = p_{T i charged}/p_{T trigger} vs p_{T trigger} Bkg RC" ,nptbins,ptmin,ptmax,200,0.,2);
+ fhBkgFFz[1] = new TH2F("BkgFFzPCG", "z = p_{T i charged}/p_{T trigger} vs p_{T trigger} Bkg PCG" ,nptbins,ptmin,ptmax,200,0.,2);
+ fhBkgFFz[2] = new TH2F("BkgFFzPCJ", "z = p_{T i charged}/p_{T trigger} vs p_{T trigger} Bkg PCJ" ,nptbins,ptmin,ptmax,200,0.,2);
+ fhBkgFFz[3] = new TH2F("BkgFFzMP", "z = p_{T i charged}/p_{T trigger} vs p_{T trigger} Bkg MP" ,nptbins,ptmin,ptmax,200,0.,2);
+ fhBkgFFz[4] = new TH2F("BkgFFzTest","z = p_{T i charged}/p_{T trigger} vs p_{T trigger} Bkg Test",nptbins,ptmin,ptmax,200,0.,2);
+ for(Int_t i=0;i<5;i++){
+ fhBkgFFz[i]->SetYTitle("z");
+ fhBkgFFz[i]->SetXTitle("p_{T trigger}");
+ outputContainer->Add(fhBkgFFz[i]) ;
+ }
+
+ fhBkgFFxi[0] = new TH2F("BkgFFxiRC", "#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,10.);
+ fhBkgFFxi[1] = new TH2F("BkgFFxiPCG", "#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,10.);
+ fhBkgFFxi[2] = new TH2F("BkgFFxiPCJ", "#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,10.);
+ fhBkgFFxi[3] = new TH2F("BkgFFxiMP", "#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,10.);
+ fhBkgFFxi[4] = new TH2F("BkgFFxiTest","#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger} Bkg Test",nptbins,ptmin,ptmax,100,0.,10.);
+ for(Int_t i=0;i<5;i++){
+ fhBkgFFxi[i]->SetYTitle("#xi");
+ fhBkgFFxi[i]->SetXTitle("p_{T trigger}");
+ outputContainer->Add(fhBkgFFxi[i]) ;
+ }
+
+ fhBkgFFpt[0] = new TH2F("BkgFFptRC", "p_{T i charged} vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,50.);
+ fhBkgFFpt[1] = new TH2F("BkgFFptPCG", "p_{T i charged} vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,50.);
+ fhBkgFFpt[2] = new TH2F("BkgFFptPCJ", "p_{T i charged} vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,50.);
+ fhBkgFFpt[3] = new TH2F("BkgFFptMP", "p_{T i charged} vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,50.);
+ fhBkgFFpt[4] = new TH2F("BkgFFptTest","p_{T i charged} vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,50.);
+ for(Int_t i=0;i<5;i++){
+ fhBkgFFpt[i]->SetYTitle("p_{T charged hadron}");
+ fhBkgFFpt[i]->SetXTitle("p_{T trigger}");
+ outputContainer->Add(fhBkgFFpt[i]) ;
+ }
+
+ fhBkgNTracksInCone[0] = new TH2F("BkgNTracksInConeRC", "Number of tracks in cone vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,150.);
+ fhBkgNTracksInCone[1] = new TH2F("BkgNTracksInConePCG", "Number of tracks in cone vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,150.);
+ fhBkgNTracksInCone[2] = new TH2F("BkgNTracksInConePCJ", "Number of tracks in cone vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,150.);
+ fhBkgNTracksInCone[3] = new TH2F("BkgNTracksInConeMP", "Number of tracks in cone vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,150.);
+ fhBkgNTracksInCone[4] = new TH2F("BkgNTracksInConeTest","Number of tracks in cone vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,150.);
+ for(Int_t i=0;i<5;i++){
+ fhBkgNTracksInCone[i]->SetYTitle("Number of tracks");
+ fhBkgNTracksInCone[i]->SetXTitle("p_{T trigger}");
+ outputContainer->Add(fhBkgNTracksInCone[i]) ;
+ }
+
+ fhBkgSumPtInCone[0] = new TH2F("BkgSumPtInConeRC", "Sum P_{T} in cone vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,100.);
+ fhBkgSumPtInCone[1] = new TH2F("BkgSumPtInConePCG", "Sum P_{T} in cone vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,100.);
+ fhBkgSumPtInCone[2] = new TH2F("BkgSumPtInConePCJ", "Sum P_{T} in cone vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,100.);
+ fhBkgSumPtInCone[3] = new TH2F("BkgSumPtInConeMP", "Sum P_{T} in cone vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,100.);
+ fhBkgSumPtInCone[4] = new TH2F("BkgSumPtInConeTest","Sum P_{T} in cone vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,100.);
+ for(Int_t i=0;i<5;i++){
+ fhBkgSumPtInCone[i]->SetYTitle("Sum P_{T}");
+ fhBkgSumPtInCone[i]->SetXTitle("p_{T trigger}");
+ outputContainer->Add(fhBkgSumPtInCone[i]) ;
+ }
+
+ fhBkgSumPtnTracksInCone[0] = new TH2F("BkgSumPtnTracksInConeRC", "Sum p_{T} / Number of tracks in cone vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,20.);
+ fhBkgSumPtnTracksInCone[1] = new TH2F("BkgSumPtnTracksInConePCG", "Sum p_{T} / Number of tracks in cone vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,20.);
+ fhBkgSumPtnTracksInCone[2] = new TH2F("BkgSumPtnTracksInConePCJ", "Sum p_{T} / Number of tracks in cone vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,20.);
+ fhBkgSumPtnTracksInCone[3] = new TH2F("BkgSumPtnTracksInConeMP", "Sum p_{T} / Number of tracks in cone vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,20.);
+ fhBkgSumPtnTracksInCone[4] = new TH2F("BkgSumPtnTracksInConeTest","Sum p_{T} / Number of tracks in cone vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,20.);
+ for(Int_t i=0;i<5;i++){
+ fhBkgSumPtnTracksInCone[i]->SetYTitle("Sum p_{T}/Number of tracks");
+ fhBkgSumPtnTracksInCone[i]->SetXTitle("p_{T trigger}");
+ outputContainer->Add(fhBkgSumPtnTracksInCone[i]) ;
+ }
+
+
+ //temporary histograms
+ fhNjetsNgammas = new TH2F("NjetsNgammas"," Number of jets vs number of gammas in event",20,0.,100.,10,0.,80.);
+ fhNjetsNgammas->SetYTitle("Number of gammas");
+ fhNjetsNgammas->SetXTitle("Number of jets");
+ outputContainer->Add(fhNjetsNgammas) ;
+
+ fhCuts = new TH1F("Cuts"," Cuts",10,0.,10.);
+ fhCuts->SetYTitle("Counts");
+ fhCuts->SetXTitle("Cut number");
+ outputContainer->Add(fhCuts) ;
+
+ fhDeltaPhiBefore = new TH2F("DeltaPhiBefore","#phi_{trigger} - #phi_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,6.5);
+ fhDeltaPhiBefore->SetYTitle("#Delta #phi");
+ fhDeltaPhiBefore->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaPhiBefore);
+
+ fhDeltaEtaBefore = new TH2F("DeltaEtaBefore","#eta_{trigger} - #eta_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-2,2);
+ fhDeltaEtaBefore->SetYTitle("#Delta #eta");
+ fhDeltaEtaBefore->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaEtaBefore);
+
+ fhDeltaPtBefore = new TH2F("DeltaPtBefore","p_{T trigger} - p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-50,50);
+ fhDeltaPtBefore->SetYTitle("#Delta p_{T}");
+ fhDeltaPtBefore->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaPtBefore);
+
+ fhPtRatioBefore = new TH2F("PtRatioBefore","p_{T jet} / p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0,2.);
+ fhPtRatioBefore->SetYTitle("ratio");
+ fhPtRatioBefore->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhPtRatioBefore);
+
+ fhPtBefore = new TH2F("PtBefore","p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
+ fhPtBefore->SetYTitle("p_{T jet}(GeV/c)");
+ fhPtBefore->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhPtBefore);
+
+ fhDeltaPhi0PiCorrectBefore = new TH2F("DeltaPhi0PiCorrectBefore","#phi_{trigger} - #phi_{jet} (0,#pi) vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,3.5);
+ fhDeltaPhi0PiCorrectBefore->SetYTitle("#Delta #phi");
+ fhDeltaPhi0PiCorrectBefore->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaPhi0PiCorrectBefore);
+
+ //temporary jet histograms
+ fhJetPtBefore = new TH1F("JetPtBefore","JetPtBefore",150,-50,100);
+ fhJetPtBefore->SetYTitle("Counts");
+ fhJetPtBefore->SetXTitle("p_{T jet}(GeV/c)");
+ outputContainer->Add(fhJetPtBefore) ;
+
+ fhJetPt = new TH1F("JetPt","JetPt",150,-50,100);
+ fhJetPt->SetYTitle("Counts");
+ fhJetPt->SetXTitle("p_{T jet}(GeV/c)");
+ outputContainer->Add(fhJetPt) ;
+
+ fhJetPtMostEne = new TH1F("JetPtMostEne","JetPtMostEne",150,0,150);
+ fhJetPtMostEne->SetYTitle("Counts");
+ fhJetPtMostEne->SetXTitle("p_{T jet}(GeV/c)");
+ outputContainer->Add(fhJetPtMostEne) ;
+
+ fhJetPhi = new TH1F("JetPhi","JetPhi",130,0,6.5);
+ fhJetPhi->SetYTitle("Counts");
+ fhJetPhi->SetXTitle("#phi_{jet}");
+ outputContainer->Add(fhJetPhi) ;
+
+ fhJetEta = new TH1F("JetEta","JetEta",100,-1,1);
+ fhJetEta->SetYTitle("Counts");
+ fhJetEta->SetXTitle("#eta_{jet}");
+ outputContainer->Add(fhJetEta) ;
+
+ fhJetEtaVsPt = new TH2F("JetEtaVsPt","JetEtaVsPt",100,0,100,50,-1,1);
+ fhJetEtaVsPt->SetYTitle("#eta_{jet}");
+ fhJetEtaVsPt->SetXTitle("p_{T,jet}(GeV/c)");
+ outputContainer->Add(fhJetEtaVsPt) ;
+
+ fhJetPhiVsEta = new TH2F("JetPhiVsEta","JetPhiVsEta",65,0,6.5,50,-1,1);
+ fhJetPhiVsEta->SetYTitle("#eta_{jet}");
+ fhJetPhiVsEta->SetXTitle("#phi_{jet}");
+ outputContainer->Add(fhJetPhiVsEta) ;
+
+ fhJetEtaVsNpartInJet= new TH2F("JetEtaVsNpartInJet","JetEtaVsNpartInJet",50,-1,1,100,0.,200.);
+ fhJetEtaVsNpartInJet->SetYTitle("N_{tracks-in-jet}");
+ fhJetEtaVsNpartInJet->SetXTitle("#eta_{jet}");
+ outputContainer->Add(fhJetEtaVsNpartInJet) ;
+
+ fhJetEtaVsNpartInJetBkg= new TH2F("JetEtaVsNpartInJetBkg","JetEtaVsNpartInJetBkg",50,-1,1,100,0.,200.);
+ fhJetEtaVsNpartInJetBkg->SetYTitle("N_{tracks-in-jet}");
+ fhJetEtaVsNpartInJetBkg->SetXTitle("#eta_{jet}");
+ outputContainer->Add(fhJetEtaVsNpartInJetBkg) ;
+
+ fhJetChBkgEnergyVsPt = new TH2F("JetBkgChEnergyVsPt","JetBkgChEnergyVsPt",100,0,100,90,0,90);
+ fhJetChBkgEnergyVsPt->SetYTitle("Jet Bkg Energy (GeV)");
+ fhJetChBkgEnergyVsPt->SetXTitle("p_{T,jet} (GeV/c)");
+ outputContainer->Add(fhJetChBkgEnergyVsPt);
+
+ fhJetChAreaVsPt = new TH2F("JetChAreaVsPt","JetChAreaVsPt",100,0,100,50,0,1);
+ fhJetChAreaVsPt->SetYTitle("Jet Area");
+ fhJetChAreaVsPt->SetXTitle("p_{T,jet} (GeV/c)");
+ outputContainer->Add(fhJetChAreaVsPt);
+
+ if(IsHistogramTracks()){
+ fhTrackPhiVsEta = new TH2F("TrackPhiVsEta","TrackPhiVsEta",65,0,6.5,50,-1,1);
+ fhTrackPhiVsEta->SetYTitle("#eta_{track}");
+ fhTrackPhiVsEta->SetXTitle("#phi_{track}");
+ outputContainer->Add(fhTrackPhiVsEta) ;
+
+ fhTrackAveTrackPt = new TH1F("TrackAveTrackPt","TrackAveTrackPt",45,0,1.5);
+ fhTrackAveTrackPt->SetYTitle("Counts");
+ fhTrackAveTrackPt->SetXTitle("Average p_{T,track} (GeV/c)");
+ outputContainer->Add(fhTrackAveTrackPt);
+
+ }//end of IsHistogramTracks()
+
+ for(Int_t i=0;i<10;i++){
+ fhJetNjetOverPtCut[i] = new TH1F(Form("JetNjetOverPtCut%d", i),Form("JetNjetOverPtCut%d", i),100,0,100);
+ fhJetNjetOverPtCut[i]->SetYTitle("Counts");
+ fhJetNjetOverPtCut[i]->SetXTitle("N_{jets} over threshold");
+ outputContainer->Add(fhJetNjetOverPtCut[i]);
+ }
+
+ fhJetChBkgEnergyVsArea = new TH2F("JetBkgChEnergyVsArea","JetBkgChEnergyVsArea",100,0,100,70,0,0.7);
+ fhJetChBkgEnergyVsArea->SetXTitle("Jet Bkg Energy (GeV)");
+ fhJetChBkgEnergyVsArea->SetYTitle("Area");
+ outputContainer->Add(fhJetChBkgEnergyVsArea);
+
+ fhJetRhoVsPt = new TH2F("JetRhoVsPt","JetRhoVsPt",100,0,100,100,0,150);
+ fhJetRhoVsPt->SetYTitle("Rho");
+ fhJetRhoVsPt->SetXTitle("p_{T,jet} (GeV/c)");
+ outputContainer->Add(fhJetRhoVsPt);
+
+ if(IsHistogramJetBkg()){
+ fhJetRhoVsCentrality = new TH2F("JetRhoVsCentrality","JetRhoVsCentrality",100,0,100,100,0,200);
+ fhJetRhoVsCentrality->SetYTitle("Rho");
+ fhJetRhoVsCentrality->SetXTitle("Centrality");
+ outputContainer->Add(fhJetRhoVsCentrality);
+ }
+
+ fhJetNparticlesInJet = new TH1F("JetNparticlesInJet","JetNparticlesInJet",100,0,200);
+ fhJetNparticlesInJet->SetXTitle("N^{particles}");
+ fhJetNparticlesInJet->SetYTitle("N^{jets}");
+ outputContainer->Add(fhJetNparticlesInJet);
+
+ fhJetDeltaEtaDeltaPhi = new TH2F("JetDeltaEtaDeltaPhi","#Delta #eta^{jet-track} vs. #Delta #phi^{jet-track} for jet tracks",100,-0.8,0.8,100,-0.8,0.8);
+ fhJetDeltaEtaDeltaPhi->SetXTitle("#Delta #eta^{jet-track}");
+ fhJetDeltaEtaDeltaPhi->SetYTitle("#Delta #phi^{jet-track}");
+ outputContainer->Add(fhJetDeltaEtaDeltaPhi );
+
+
+ fhJetDeltaEtaDeltaPhiAllTracks = new TH2F("JetDeltaEtaDeltaPhiAllTracks","#Delta #eta^{jet-track} vs. #Delta #phi^{jet-track} for all tracks",100,-3.2,3.2,100,-3.2,3.2);
+ fhJetDeltaEtaDeltaPhiAllTracks->SetXTitle("#Delta #eta^{jet-track}");
+ fhJetDeltaEtaDeltaPhiAllTracks->SetYTitle("#Delta #phi^{jet-track}");
+ outputContainer->Add(fhJetDeltaEtaDeltaPhiAllTracks);
+
+
+ if(IsHistogramJetTracks()){
+ fhJetAveTrackPt = new TH1F("JetAveTrackPt","JetAveTrackPt",45,0.,1.5);
+ fhJetAveTrackPt->SetXTitle("Average p_{T,track} (GeV/c)");
+ fhJetAveTrackPt->SetYTitle("Counts");
+ outputContainer->Add(fhJetAveTrackPt);
+
+ for(Int_t i=0;i<6;i++){
+ if(i==0) fhJetNtracksInJetAboveThr[i] = new TH2F(Form("JetNtracksInJetAboveThr%d", i),Form("JetNtracksInJetAboveThr%d", i),100,0,100,100,0,200);
+ else fhJetNtracksInJetAboveThr[i] = new TH2F(Form("JetNtracksInJetAboveThr%d", i),Form("JetNtracksInJetAboveThr%d", i),100,0,100,100,0,100);
+ fhJetNtracksInJetAboveThr[i]->SetXTitle("p_{T,jet} (GeV/c)");
+ fhJetNtracksInJetAboveThr[i]->SetYTitle("N_{tracks} over threshold");
+ outputContainer->Add(fhJetNtracksInJetAboveThr[i]);
+ }
+
+ for(Int_t i=0;i<5;i++){
+ fhJetRatioNTrkAboveToNTrk[i] = new TH2F(Form("JetRatioNTrkAboveToNTrk%d", i),Form("JetRatioNTrkAboveToNTrk%d", i),100,0,100,40,0,1);
+ fhJetRatioNTrkAboveToNTrk[i]->SetXTitle("p_{T,jet} (GeV/c)");
+ fhJetRatioNTrkAboveToNTrk[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
+ outputContainer->Add(fhJetRatioNTrkAboveToNTrk[i]);
+
+ fhJetNtrackRatioMostEne[i] = new TH2F(Form("JetNtrackRatioMostEne%d", i),Form("JetNtrackRatioMostEne%d", i),100,0,100,40,0,1);
+ fhJetNtrackRatioMostEne[i]->SetXTitle("p_{T,jet} (GeV/c)");
+ fhJetNtrackRatioMostEne[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
+ outputContainer->Add(fhJetNtrackRatioMostEne[i]);
+
+ fhJetNtrackRatioJet5GeV[i] = new TH2F(Form("JetNtrackRatioJet5GeV%d", i),Form("JetNtrackRatioJet5GeV%d", i),100,0,100,40,0,1);
+ fhJetNtrackRatioJet5GeV[i]->SetXTitle("p_{T,jet} (GeV/c)");
+ fhJetNtrackRatioJet5GeV[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
+ outputContainer->Add(fhJetNtrackRatioJet5GeV[i]);
+
+ fhJetNtrackRatioLead5GeV[i] = new TH2F(Form("JetNtrackRatioLead5GeV%d", i),Form("JetNtrackRatioLead5GeV%d", i),100,0,100,40,0,1);
+ fhJetNtrackRatioLead5GeV[i]->SetXTitle("p_{T,jet} (GeV/c)");
+ fhJetNtrackRatioLead5GeV[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
+ outputContainer->Add(fhJetNtrackRatioLead5GeV[i]);
+ }
+ }//end of if IsHistogramJetTracks
+
+ //temporary background jets histograms
+ if(IsHistogramJetBkg()){
+ for(Int_t i=0;i<4;i++){
+ fhBkgJetBackground[i] = new TH1F(Form("BkgJetBackground%d", i),Form("BkgJetBackground%d", i),100,0,200);
+ fhBkgJetBackground[i]->SetXTitle("<#rho> (GeV/c)");
+ fhBkgJetBackground[i]->SetYTitle("Counts");
+ outputContainer->Add(fhBkgJetBackground[i]);
+
+ fhBkgJetSigma[i] = new TH1F(Form("BkgJetSigma%d", i),Form("BkgJetSigma%d", i),100,0,50);
+ fhBkgJetSigma[i]->SetXTitle("#sigma (GeV/c)");
+ fhBkgJetSigma[i]->SetYTitle("Counts");
+ outputContainer->Add(fhBkgJetSigma[i]);
+
+ fhBkgJetArea[i] = new TH1F(Form("BkgJetArea%d", i),Form("BkgJetArea%d", i),100,0,1);
+ fhBkgJetArea[i]->SetXTitle("<A>");
+ fhBkgJetArea[i]->SetYTitle("Counts");
+ outputContainer->Add(fhBkgJetArea[i]);
+ }
+ }
+
+ //temporary photon histograms
+ fhPhotonPtMostEne = new TH1F("PhotonPtMostEne","PhotonPtMostEne",100,0,100);
+ fhPhotonPtMostEne->SetYTitle("Counts");
+ fhPhotonPtMostEne->SetXTitle("p_{T,#gamma} (GeV/c)");
+ outputContainer->Add(fhPhotonPtMostEne);
+
+// fhPhotonIndexMostEne = new TH1F("PhotonIndexMostEne","PhotonIndexMostEne",100,0,100);
+// fhPhotonIndexMostEne->SetYTitle("Counts");
+// fhPhotonIndexMostEne->SetXTitle("Index");
+// outputContainer->Add(fhPhotonIndexMostEne);
+
+ fhPhotonAverageEnergy = new TH1F("PhotonAverageEnergy","PhotonAverageEnergy",100,0,10);
+ fhPhotonAverageEnergy->SetYTitle("Counts");
+ fhPhotonAverageEnergy->SetXTitle("p_{T,#gamma} (GeV/c)");
+ outputContainer->Add(fhPhotonAverageEnergy);
+
+ fhPhotonRatioAveEneToMostEne = new TH1F("PhotonRatioAveEneToMostEne","PhotonRatioAveEneToMostEne",100,0,1);
+ fhPhotonRatioAveEneToMostEne->SetYTitle("Counts");
+ fhPhotonRatioAveEneToMostEne->SetXTitle("Ratio");
+ outputContainer->Add(fhPhotonRatioAveEneToMostEne);
+
+ fhPhotonAverageEnergyMinus1 = new TH1F("PhotonAverageEnergyMinus1","PhotonAverageEnergyMinus1",100,0,10);
+ fhPhotonAverageEnergyMinus1->SetYTitle("Counts");
+ fhPhotonAverageEnergyMinus1->SetXTitle("p_{T,#gamma} (GeV/c)");
+ outputContainer->Add(fhPhotonAverageEnergyMinus1);
+
+ fhPhotonRatioAveEneMinus1ToMostEne = new TH1F("PhotonRatioAveEneMinus1ToMostEne","PhotonRatioAveEneMinus1ToMostEne",100,0,1);
+ fhPhotonRatioAveEneMinus1ToMostEne->SetYTitle("Counts");
+ fhPhotonRatioAveEneMinus1ToMostEne->SetXTitle("Ratio");
+ outputContainer->Add(fhPhotonRatioAveEneMinus1ToMostEne);
+
+ fhPhotonNgammaMoreAverageToNgamma = new TH1F("PhotonNgammaMoreAverageToNgamma","PhotonNgammaMoreAverageToNgamma",100,0,1);
+ fhPhotonNgammaMoreAverageToNgamma->SetYTitle("Counts");
+ fhPhotonNgammaMoreAverageToNgamma->SetXTitle("Ratio");
+ outputContainer->Add(fhPhotonNgammaMoreAverageToNgamma);
+
+ fhPhotonNgammaMoreAverageMinus1ToNgamma = new TH1F("PhotonNgammaMoreAverageMinus1ToNgamma","PhotonNgammaMoreAverageMinus1ToNgamma",100,0,1);
+ fhPhotonNgammaMoreAverageMinus1ToNgamma->SetYTitle("Counts");
+ fhPhotonNgammaMoreAverageMinus1ToNgamma->SetXTitle("Ratio");
+ outputContainer->Add(fhPhotonNgammaMoreAverageMinus1ToNgamma);
+
+ for(Int_t i=0;i<10;i++){
+ fhPhotonNgammaOverPtCut[i] = new TH1F(Form("PhotonNgammaOverPtCut%d",i),Form("PhotonNgammaOverPtCut%d",i),100,0,100);
+ fhPhotonNgammaOverPtCut[i]->SetYTitle("Counts");
+ fhPhotonNgammaOverPtCut[i]->SetXTitle("N_{#gamma} over threshold");
+ outputContainer->Add(fhPhotonNgammaOverPtCut[i]);
+ }
+
+ fhPhotonBkgRhoVsNtracks = new TH2F("PhotonBkgRhoVsNtracks","PhotonBkgRhoVsNtracks",200,0,2500,75,0,1.5);
+ //fhPhotonBkgRhoVsNtracks->SetXTitle("Counts");
+ fhPhotonBkgRhoVsNtracks->SetXTitle("Ntracks");
+ fhPhotonBkgRhoVsNtracks->SetYTitle("Rho");
+ outputContainer->Add(fhPhotonBkgRhoVsNtracks);
+
+ fhPhotonBkgRhoVsNclusters = new TH2F("PhotonBkgRhoVsNclusters","PhotonBkgRhoVsNclusters",50,0,100,75,0,1.5);
+ fhPhotonBkgRhoVsNclusters->SetXTitle("Nclusters");
+ fhPhotonBkgRhoVsNclusters->SetYTitle("Rho");
+ outputContainer->Add(fhPhotonBkgRhoVsNclusters);
+
+ fhPhotonBkgRhoVsCentrality = new TH2F("PhotonBkgRhoVsCentrality","PhotonBkgRhoVsCentrality",100,0,100,75,0,1.5);
+ fhPhotonBkgRhoVsCentrality->SetXTitle("Centrality");
+ fhPhotonBkgRhoVsCentrality->SetYTitle("Rho");
+ outputContainer->Add(fhPhotonBkgRhoVsCentrality);
+
+ fhPhotonBkgRhoVsNcells = new TH2F("PhotonBkgRhoVsNcells","PhotonBkgRhoVsNcells",100,0,200,75,0,1.5);
+ fhPhotonBkgRhoVsNcells->SetXTitle("N_{cells}");
+ fhPhotonBkgRhoVsNcells->SetYTitle("Rho");
+ outputContainer->Add(fhPhotonBkgRhoVsNcells);
+
+ fhPhotonPt = new TH1F("PhotonPt","PhotonPt",220,-10,100);
+ fhPhotonPt->SetXTitle("p_{T,#gamma} (GeV/c)");
+ fhPhotonPt->SetYTitle("Counts");
+ outputContainer->Add(fhPhotonPt);
+
+ fhPhotonPtCorrected = new TH1F("PhotonPtCorrected","PhotonPtCorrected",220,-10,100);
+ fhPhotonPtCorrected->SetXTitle("p_{T,#gamma} (GeV/c)");
+ fhPhotonPtCorrected->SetYTitle("Counts");
+ outputContainer->Add(fhPhotonPtCorrected);
+
+ fhPhotonPtDiff = new TH1F("PhotonPtDiff","PhotonPtDiff",50,0,10);
+ fhPhotonPtDiff->SetXTitle("p_{T,#gamma} (GeV/c)");
+ fhPhotonPtDiff->SetYTitle("Counts");
+ outputContainer->Add(fhPhotonPtDiff);
+
+ fhPhotonPtDiffVsNtracks = new TH2F("PhotonPtDiffVsNtracks","PhotonPtDiffVsNtracks",200,0,2500,50,0,5);
+ fhPhotonPtDiffVsNtracks->SetXTitle("N_{tracks}");
+ fhPhotonPtDiffVsNtracks->SetYTitle("<#rho^{#gamma}>*N_{cells}");
+ outputContainer->Add(fhPhotonPtDiffVsNtracks);
+
+ fhPhotonPtDiffVsNclusters = new TH2F("PhotonPtDiffVsNclusters","PhotonPtDiffVsNclusters",50,0,100,50,0,5);
+ fhPhotonPtDiffVsNclusters->SetXTitle("N_{clusters}");
+ fhPhotonPtDiffVsNclusters->SetYTitle("<#rho^{#gamma}>*N_{cells}");
+ outputContainer->Add(fhPhotonPtDiffVsNclusters);
+
+ fhPhotonPtDiffVsCentrality = new TH2F("PhotonPtDiffVsCentrality","PhotonPtDiffVsCentrality",100,0,100,50,0,5);
+ fhPhotonPtDiffVsCentrality->SetXTitle("Centrality");
+ fhPhotonPtDiffVsCentrality->SetYTitle("<#rho^{#gamma}>*N_{cells}");
+ outputContainer->Add(fhPhotonPtDiffVsCentrality);
+
+ fhPhotonPtDiffVsNcells = new TH2F("PhotonPtDiffVsNcells","PhotonPtDiffVsNcells",100,0,200,50,0,5);
+ fhPhotonPtDiffVsNcells->SetXTitle("N_{cells}");
+ fhPhotonPtDiffVsNcells->SetYTitle("<#rho^{#gamma}>*N_{cells}");
+ outputContainer->Add(fhPhotonPtDiffVsNcells);
+
+
+ fhPhotonPtCorrectedZoom = new TH1F("PhotonPtCorrectedZoom","PhotonPtCorrectedZoom",200,-5,5);
+ fhPhotonPtCorrectedZoom->SetXTitle("p_{T,#gamma} (GeV/c)");
+ fhPhotonPtCorrectedZoom->SetYTitle("Counts");
+ outputContainer->Add(fhPhotonPtCorrectedZoom);
+
+ fhPhotonSumPtInCone = new TH1F("PhotonSumPtInCone","PhotonSumPtInCone",100,0,100);
+ fhPhotonSumPtInCone->SetXTitle("#Sigma p_{T,#gamma} (GeV/c)");
+ fhPhotonSumPtInCone->SetYTitle("Counts");
+ outputContainer->Add(fhPhotonSumPtInCone);
+
+ fhPhotonSumPtCorrectInCone = new TH1F("PhotonSumPtCorrectInCone","PhotonSumPtCorrectInCone",100,-20,80);
+ fhPhotonSumPtCorrectInCone->SetXTitle("#Sigma p_{T,#gamma} (GeV/c)");
+ fhPhotonSumPtCorrectInCone->SetYTitle("Counts");
+ outputContainer->Add(fhPhotonSumPtCorrectInCone);
+
+ fhPhotonSumPtChargedInCone = new TH1F("PhotonSumPtChargedInCone","PhotonSumPtChargedInCone",100,0,100);
+ fhPhotonSumPtChargedInCone->SetXTitle("#Sigma p_{T,#gamma}^{ch} (GeV/c)");
+ fhPhotonSumPtChargedInCone->SetYTitle("Counts");
+ outputContainer->Add(fhPhotonSumPtChargedInCone);
+
+
+ //temporary jet histograms after selection
+ fhSelectedJetPhiVsEta = new TH2F("SelectedJetSelectedPhiVsEta","SelectedJetPhiVsEta",65,0,6.5,50,-1,1);
+ fhSelectedJetPhiVsEta->SetYTitle("#eta_{jet}");
+ fhSelectedJetPhiVsEta->SetXTitle("#phi_{jet}");
+ outputContainer->Add(fhSelectedJetPhiVsEta) ;
+
+ fhSelectedJetChBkgEnergyVsPtJet = new TH2F("SelectedJetBkgChEnergyVsPtJet","SelectedJetBkgChEnergyVsPtJet",100,0,100,90,0,90);
+ fhSelectedJetChBkgEnergyVsPtJet->SetYTitle("Jet Bkg Energy (GeV)");
+ fhSelectedJetChBkgEnergyVsPtJet->SetXTitle("p_{T,jet} (GeV/c)");
+ outputContainer->Add(fhSelectedJetChBkgEnergyVsPtJet);
+
+ fhSelectedJetChAreaVsPtJet = new TH2F("SelectedJetChAreaVsPtJet","SelectedJetChAreaVsPtJet",100,0,100,50,0,1);
+ fhSelectedJetChAreaVsPtJet->SetYTitle("Jet Area");
+ fhSelectedJetChAreaVsPtJet->SetXTitle("p_{T,jet} (GeV/c)");
+ outputContainer->Add(fhSelectedJetChAreaVsPtJet);
+
+ fhSelectedJetNjet = new TH1F("SelectedJetNjet","SelectedJetNjet",100,0,100);
+ fhSelectedJetNjet->SetYTitle("Counts");
+ fhSelectedJetNjet->SetXTitle("N_{jets} per event");
+ outputContainer->Add(fhSelectedJetNjet);
+
+ fhSelectedNtracks = new TH1F("SelectedNtracks","SelectedNtracks",100,0,2000);
+ fhSelectedNtracks->SetYTitle("Counts");
+ fhSelectedNtracks->SetXTitle("N_{tracks} per event");
+ outputContainer->Add(fhSelectedNtracks);
+
+ fhSelectedTrackPhiVsEta = new TH2F("SelectedTrackPhiVsEta","SelectedTrackPhiVsEta",65,0,6.5,50,-1,1);
+ fhSelectedTrackPhiVsEta->SetYTitle("#eta_{track}");
+ fhSelectedTrackPhiVsEta->SetXTitle("#phi_{track}");
+ outputContainer->Add(fhSelectedTrackPhiVsEta) ;
+
+ fhCuts2 = new TH1F("Cuts2","Cuts2",10,0.,10.);
+ fhCuts2->SetYTitle("Counts");
+ fhCuts2->SetXTitle("Cut number");
+ outputContainer->Add(fhCuts2);
+
+ fhSelectedPhotonNLMVsPt = new TH2F("SelectedPhotonNLMVsPt","SelectedPhotonNLMVsPt",100,0,100,10,0,10);
+ fhSelectedPhotonNLMVsPt->SetYTitle("NLM");
+ fhSelectedPhotonNLMVsPt->SetXTitle("p_{T,#gamma} (GeV/c)");
+ outputContainer->Add(fhSelectedPhotonNLMVsPt);
+
+ fhSelectedPhotonLambda0VsPt = new TH2F("SelectedPhotonLambda0VsPt","SelectedPhotonLambda0VsPt",100,0,100,50,0,5);
+ fhSelectedPhotonLambda0VsPt->SetYTitle("#lambda_{0}");
+ fhSelectedPhotonLambda0VsPt->SetXTitle("p_{T,#gamma} (GeV/c)");
+ outputContainer->Add(fhSelectedPhotonLambda0VsPt);
+
+ //random
+ fhRandomPhiEta[0] = new TH2F("RandomPhiEtaRC", "RandomPhiEtaRC", 100,0,6.5,100,-1.,1.);
+ fhRandomPhiEta[1] = new TH2F("RandomPhiEtaPCG", "RandomPhiEtaPerpConePhoton",100,0,6.5,100,-1.,1.);
+ fhRandomPhiEta[2] = new TH2F("RandomPhiEtaPCJ", "RandomPhiEtaPerpConeJet", 100,0,6.5,100,-1.,1.);
+ fhRandomPhiEta[3] = new TH2F("RandomPhiEtaMP", "RandomPhiEtaMidPoint", 100,0,6.5,100,-1.,1.);
+ fhRandomPhiEta[4] = new TH2F("RandomPhiEtaTest","RandomPhiEtaTest", 100,0,6.5,100,-1.,1.);
+ for(Int_t i=0;i<5;i++){
+ fhRandomPhiEta[i]->SetXTitle("#phi");
+ fhRandomPhiEta[i]->SetYTitle("#eta");
+ outputContainer->Add(fhRandomPhiEta[i]);
+ }
+
+
+ //tree with data
+ if(fSaveGJTree){
+ fTreeGJ=new TTree("fTreeGJ","fTreeGJ");
+ fTreeGJ->Branch("fGamPt" ,&fGamPt ,"fGamPt/D");//! fGamPt
+ fTreeGJ->Branch("fGamLambda0" ,&fGamLambda0 ,"fGamLambda0/D");
+ fTreeGJ->Branch("fGamNLM" ,&fGamNLM ,"fGamNLM/I");
+ fTreeGJ->Branch("fGamSumPtCh" ,&fGamSumPtCh ,"fGamSumPtCh/D");
+ fTreeGJ->Branch("fGamNtracks" ,&fGamNtracks ,"fGamNtracks/I");
+ fTreeGJ->Branch("fGamTime" ,&fGamTime ,"fGamTime/D");
+ fTreeGJ->Branch("fGamNcells" ,&fGamNcells ,"fGamNcells/I");
+ fTreeGJ->Branch("fGamEta" ,&fGamEta ,"fGamEta/D");
+ fTreeGJ->Branch("fGamPhi" ,&fGamPhi ,"fGamPhi/D");
+ fTreeGJ->Branch("fGamSumPtNeu",&fGamSumPtNeu ,"fGamSumPtNeu/D");
+ fTreeGJ->Branch("fGamNclusters" ,&fGamNclusters ,"fGamNclusters/I");
+ fTreeGJ->Branch("fGamAvEne" ,&fGamAvEne ,"fGamAvEne/D");
+ fTreeGJ->Branch("fJetPhi" ,&fJetPhi ,"fJetPhi/D");
+ fTreeGJ->Branch("fJetEta" ,&fJetEta ,"fJetEta/D");
+ fTreeGJ->Branch("fJetPt" ,&fJetPt ,"fJetPt/D");
+ fTreeGJ->Branch("fJetBkgChEne",&fJetBkgChEne ,"fJetBkgChEne/D");
+ fTreeGJ->Branch("fJetArea" ,&fJetArea ,"fJetArea/D");
+ fTreeGJ->Branch("fJetNtracks" ,&fJetNtracks ,"fJetNtracks/I");
+ fTreeGJ->Branch("fJetNtracks1" ,&fJetNtracks1 ,"fJetNtracks1/I");
+ fTreeGJ->Branch("fJetNtracks2" ,&fJetNtracks2 ,"fJetNtracks2/I");
+ fTreeGJ->Branch("fJetRho" ,&fJetRho ,"fJetRho/D");
+ fTreeGJ->Branch("fEventNumber",&fEventNumber ,"fEventNumber/I");
+ fTreeGJ->Branch("fNtracks" ,&fNtracks ,"fNtracks/I");
+ fTreeGJ->Branch("fZvertex" ,&fZvertex ,"fZvertex/D");
+ fTreeGJ->Branch("fCentrality" ,&fCentrality ,"fCentrality/D");
+ fTreeGJ->Branch("fIso" ,&fIso ,"fIso/O");
+ fTreeGJ->Branch("fGamRho" ,&fGamRho ,"fGamRho/D");
+
+ outputContainer->Add(fTreeGJ);
+ }
+
return outputContainer;
}
//_______________________________________________________
void AliAnaParticleJetFinderCorrelation::InitParameters()
{
+ // printf("InitParameters\n");
//Initialize the parameters of the analysis.
SetInputAODName("PWG4Particle");
AddToHistogramsName("AnaJetFinderCorr_");
fUseJetRefTracks = kFALSE ;
fMakeCorrelationInHistoMaker = kFALSE ;
fSelectIsolated = kFALSE;
-
+ fJetConeSize = 0.4 ;
+ fJetMinPt = 5 ; //GeV/c
+ fJetAreaFraction = 0.6 ;
+ fJetBranchName = "jets";
+ fBkgJetBranchName = "jets";
+ fGammaConeSize = 0.3;
+ fUseBackgroundSubtractionGamma = kFALSE;
+ fSaveGJTree = kTRUE;
+ fMostEnergetic = kFALSE;
+ fMostOpposite = kTRUE;
+ fUseHistogramJetBkg = kTRUE;
+ fUseHistogramTracks = kTRUE;
+ fUseHistogramJetTracks = kTRUE;
+
}
-//__________________________________________________________________________________
-Int_t AliAnaParticleJetFinderCorrelation::SelectJet(AliAODPWG4Particle * particle,
- const AliAODEvent *event) const
+//__________________________________________________________________
+Int_t AliAnaParticleJetFinderCorrelation::SelectJet(AliAODPWG4Particle * particle, TClonesArray *aodRecJets)
{
+ //Input for jets is TClonesArray *aodRecJets
//Returns the index of the jet that is opposite to the particle
+ // printf(" SelectJet ");
- Int_t njets = event->GetNJets() ;
+ Double_t particlePt=particle->Pt();
+ if(fUseBackgroundSubtractionGamma) {
+ Int_t clusterIDtmp = particle->GetCaloLabel(0) ;
+ Int_t nCells=0;
+ AliVCluster *cluster=0;
+ if(!(clusterIDtmp<0) ){
+ Int_t iclustmp = -1;
+ TObjArray* clusters = GetEMCALClusters();
+ cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
+ nCells = cluster->GetNCells();
+ }
+ particlePt-=(fGamRho*nCells);
+ }
+ if(particlePt<=0) {
+ //printf("Particle with negative or 0 pt\n");
+ return -2;
+ }
+ Int_t njets = aodRecJets->GetEntriesFast();
AliAODJet * jet = 0 ;
Int_t index = -1;
+ Double_t dphiprev= 10000;
+ Double_t particlePhi=particle->Phi();
+ Double_t deltaPhi=-10000.;// in the range (0; 2*pi)
+ Double_t jetPt=0.;
+
for(Int_t ijet = 0; ijet < njets ; ijet++){
- jet = event->GetJet(ijet) ;
- Float_t dphi = TMath::Abs(particle->Phi()-jet->Phi());
- Float_t ratio = jet->Pt()/particle->Pt();
- if(GetDebug() > 3)
- printf("AliAnaParticleJetFinderCorrelation::SelectJet() - Jet %d, Ratio pT %2.3f, Delta phi %2.3f\n",ijet,ratio,dphi);
- Float_t dphiprev= 10000;
- if((dphi > fDeltaPhiMinCut) && (dphi<fDeltaPhiMaxCut) &&
+ jet = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
+ if(!jet)
+ {
+ AliInfo("Jet not in container");
+ continue;
+ }
+ fhCuts2->Fill(2.,1.);
+ jetPt=jet->Pt();
+ if(fBackgroundJetFromReader ){
+ jetPt-= (fJetRho * jet->EffectiveAreaCharged() );
+ }
+ if(jetPt<0.) continue;
+ //put jet eta requirement here |eta_jet|<0.9-jet_cone_size
+ fhCuts2->Fill(3.,1.);
+ if(TMath::Abs(jet->Eta()) > (0.9 - fJetConeSize) ) continue;
+ fhCuts2->Fill(4.,1.);
+ // if(jet->Pt()<5) continue;
+ if(jetPt<fJetMinPt) continue;
+ fhCuts2->Fill(5.,1.);
+ if(jet->EffectiveAreaCharged()<fJetAreaFraction*TMath::Pi()*fJetConeSize*fJetConeSize) continue;
+ fhCuts2->Fill(6.,1.);
+ //printf("jet found\n");
+ Double_t deltaPhi0pi = TMath::Abs(particle->Phi()-jet->Phi());
+ Double_t ratio = jetPt/particlePt;
+
+ deltaPhi = particlePhi - jet->Phi() ;
+ if ( deltaPhi0pi > TMath::Pi() ) deltaPhi0pi = 2. * TMath::Pi() - deltaPhi0pi ;
+ if(deltaPhi<0) deltaPhi +=(TMath::Pi()*2.);
+
+ fhDeltaPtBefore ->Fill(particlePt, particlePt - jetPt);
+ fhDeltaPhiBefore->Fill(particlePt, deltaPhi);
+ fhDeltaEtaBefore->Fill(particlePt, particle->Eta() - jet->Eta());
+ fhPtRatioBefore ->Fill(particlePt, jetPt/particlePt);
+ fhPtBefore ->Fill(particlePt, jetPt);
+
+ fhDeltaPhi0PiCorrectBefore->Fill(particlePt, deltaPhi0pi);//good
+
+ if(GetDebug() > 5)
+ printf("AliAnaParticleJetFinderCorrelation::SelectJet() - Jet %d, Ratio pT %2.3f, Delta phi %2.3f\n",ijet,ratio,deltaPhi);
+
+ if((deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) &&
(ratio > fRatioMinCut) && (ratio < fRatioMaxCut) &&
- (TMath::Abs(dphi-3.14159) < TMath::Abs(dphiprev-3.14159))){//In case there is more than one jet select the most opposite.
- dphiprev = dphi;
- index = ijet ;
- }//Selection cuts
-}//AOD Jet loop
-
-return index ;
-
+ (TMath::Abs(deltaPhi-TMath::Pi()) < TMath::Abs(dphiprev-TMath::Pi()) )){//In case there is more than one jet select the most opposite.
+ dphiprev = deltaPhi;
+ index = ijet ;
+ }//Selection cuts
+ }//AOD Jet loop
+
+ return index ;
+
}
//__________________________________________________________________
-void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD()
-{
+void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD()
+{
//Particle-Jet Correlation Analysis, fill AODs
-
+ // printf("I use MakeAnalysisFillAOD\n");
//Get the event, check if there are AODs available, if not, skip this analysis
AliAODEvent * event = NULL;
- if(GetReader()->GetOutputEvent())
+
+ // cout<<"GetReader()->GetOutputEvent() "<<GetReader()->GetOutputEvent()<<endl;
+ // cout<<"GetReader()->GetDataType() "<<GetReader()->GetDataType() <<endl;
+ // cout<<"AliCaloTrackReader::kAOD "<<AliCaloTrackReader::kAOD<<endl;
+ // cout<<"GetReader()->GetInputEvent() "<<GetReader()->GetInputEvent()<<endl;
+
+ if(GetReader()->GetOutputEvent())
{
- event = dynamic_cast<AliAODEvent*>(GetReader()->GetOutputEvent());
+ event = dynamic_cast<AliAODEvent*>(GetReader()->GetOutputEvent());
}
- else if(GetReader()->GetDataType() == AliCaloTrackReader::kAOD)
- {
- event = dynamic_cast<AliAODEvent*>(GetReader()->GetInputEvent());
+ else if(GetReader()->GetDataType() == AliCaloTrackReader::kAOD)
+ {
+ event = dynamic_cast<AliAODEvent*>(GetReader()->GetInputEvent());
}
- else
+ else
{
if(GetDebug() > 3) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - There are no jets available for this analysis\n");
return;
}
-
+
if(!GetInputAODBranch() || !event){
printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s > \n",GetInputAODName().Data());
abort();
printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s> \n",GetInputAODBranch()->GetClass()->GetName());
abort();
}
-
- Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
+
+ //
+ // non-standard jets
+ //
+ Int_t nJets=-1;
+ TClonesArray *aodRecJets = 0;
+ if(IsNonStandardJetFromReader()){//jet branch from reader
+ if(GetDebug() > 3) printf("GetNonStandardJets function (from reader) is called\n");
+ aodRecJets = GetNonStandardJets();
+ if(GetDebug() > 3) printf("aodRecJets %p\n",aodRecJets);
+ if(aodRecJets==0x0){
+ if(GetDebug() > 3) event->Print();
+ abort();
+ }
+ nJets=aodRecJets->GetEntries();
+ if(GetDebug() > 3) printf("nJets %d\n",nJets);
+ }
+ //end of new part
+
+ if(nJets==0) {
+ //printf("Why number of jets = 0? Check what type of collision it is. If PbPb -problem.\n");
+ return;
+ }
+
+ //
+ //Background jets
+ //
+ AliAODJetEventBackground* aodBkgJets = 0;
+ if(IsBackgroundJetFromReader()){//jet branch from reader
+ if(GetDebug() > 3) printf("GetBackgroundJets function is called\n");
+ aodBkgJets = GetBackgroundJets();
+ if(GetDebug() > 3) printf("aodBkgJets %p\n",aodBkgJets);
+ if(aodBkgJets==0x0){
+ if(GetDebug() > 3) event->Print();
+ abort();
+ }
+ if(GetDebug() > 3) aodBkgJets->Print("c");
+ }
+
+ Double_t rhoEvent=0.;
+ if(aodBkgJets && IsBackgroundJetFromReader() ) {
+ rhoEvent = aodBkgJets->GetBackground(2);//hardcoded
+ }
+ fJetRho = rhoEvent;
+
+
+ Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
if(GetDebug() > 3){
printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Begin jet finder correlation analysis, fill AODs \n");
printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", ntrig);
- printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In jet branch aod entries %d\n", event->GetNJets());
+ printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In standard jet branch aod entries %d\n", event->GetNJets());
+ printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In non standard jet branch aod entries %d\n", nJets);
}
- //Loop on stored AOD particles, trigger
- for(Int_t iaod = 0; iaod < ntrig ; iaod++){
- AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
-
- //Correlate with jets
- Int_t ijet = SelectJet(particle,event);
- if(ijet > -1){
- if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Jet with index %d selected \n",ijet);
- AliAODJet *jet = event->GetJet(ijet);
- particle->SetRefJet(jet);
+ //if(nJets==0) return;//to speed up
+ // cout<<"ntrig po return "<<ntrig<<endl;
+
+ //
+ //calculate average cell energy without most energetic photon
+ //
+ Double_t medianPhotonRho=0.;
+ TObjArray* clusters = GetEMCALClusters();
+ Int_t clusterIDtmp;
+ Int_t iclustmp = -1;
+ AliVCluster *cluster=0;
+
+ if(IsBackgroundSubtractionGamma()){
+ //
+ // Find most energetic photon without background subtraction
+ //
+ Double_t maxPt=0.;
+ Int_t maxIndex=-1;
+ AliAODPWG4ParticleCorrelation* particlecorr =0;
+ for(Int_t iaod = 0; iaod < ntrig ; iaod++){
+ particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
+ if(particlecorr->Pt() > maxPt) {
+ maxPt = particlecorr->Pt();
+ maxIndex = iaod;
+ }
+ }
+
+ //
+ // calculate background energy per cell
+ //
+ Int_t numberOfcells=0;
+ if(ntrig>1){
+ Double_t *photonRhoArr=new Double_t[ntrig-1];
+ Int_t photonRhoArrayIndex=0;
+ for(Int_t iaod = 0; iaod < ntrig ; iaod++){
+ particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
+ if(iaod==maxIndex) continue;
+ clusterIDtmp = particlecorr->GetCaloLabel(0) ;
+ if(clusterIDtmp < 0) continue;
+ cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
+ photonRhoArr[photonRhoArrayIndex]=particlecorr->Pt()/ cluster->GetNCells();
+ numberOfcells+=cluster->GetNCells();
+ photonRhoArrayIndex++;
+ }
+ if(photonRhoArrayIndex>0) medianPhotonRho=TMath::Median(photonRhoArrayIndex,photonRhoArr);
+ delete [] photonRhoArr;
+ }
+ }//end of if background calculation for gamma
+ fGamRho = medianPhotonRho;
+
+
+ //
+ //take most energetic photon and most energetic jet and combine
+ //
+ if(fMostEnergetic){
+ //
+ // most energetic photon with background subtraction
+ //
+ Double_t mostEnePhotonPt=0.;
+ Int_t indexMostEnePhoton=-1;
+ AliAODPWG4ParticleCorrelation* particle =0;
+ Double_t ptCorrect=0.;
+ Int_t nCells=0;
+ for(Int_t iaod = 0; iaod < ntrig ; iaod++){
+ particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
+ clusterIDtmp = particle->GetCaloLabel(0) ;
+ if(!(clusterIDtmp<0)){
+ cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
+ nCells = cluster->GetNCells();
+ }
+ ptCorrect = particle->Pt() - medianPhotonRho * nCells;
+ if( ptCorrect > mostEnePhotonPt ){
+ mostEnePhotonPt = ptCorrect;
+ indexMostEnePhoton = iaod ;
+ }
+ }
+ // printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Photon with index %d selected \n",indexMostEnePhoton);
+ //
+ // most energetic jet with background subtraction
+ //
+ Double_t mostEneJetPt=0.;
+ Int_t indexMostEneJet=-1;
+ AliAODJet * jet = 0 ;
+ //Double_t ptCorrect=0.;
+ for(Int_t ijet = 0; ijet < nJets ; ijet++){
+ jet = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
+ if(!jet) continue;
+ if(TMath::Abs(jet->Eta()) > (0.9 - fJetConeSize) ) continue;
+ if(jet->EffectiveAreaCharged()<fJetAreaFraction*TMath::Pi()*fJetConeSize*fJetConeSize) continue;
+ if(jet->Pt()<fJetMinPt) continue;
+ ptCorrect = jet->Pt() - rhoEvent * jet->EffectiveAreaCharged();
+ if(ptCorrect > mostEneJetPt){
+ mostEneJetPt = ptCorrect;
+ indexMostEneJet = ijet;
+ }
}
- } // input aod loop
+ // printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Jet with index %d selected \n",indexMostEneJet);
+
+ //
+ // assign jet to photon
+ //
+ if(indexMostEneJet>=0 && indexMostEnePhoton>=0){
+ particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(indexMostEnePhoton));
+ jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(indexMostEneJet));
+ particle->SetRefJet(jet);
+ }
+ }//end of take most energetic photon and most ene. jet after bkg subtraction
+
+ if(fMostOpposite){
+ //Bool_t isJetFound=kFALSE;//new
+ //Loop on stored AOD particles, trigger
+ for(Int_t iaod = 0; iaod < ntrig ; iaod++){
+ AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
+
+ //Correlate with jets
+ Int_t ijet = SelectJet(particle,aodRecJets);//input for jets is TClonesArray
+ if(ijet > -1){
+ //isJetFound=kTRUE;
+ if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Jet with index %d selected \n",ijet);
+ AliAODJet *jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(ijet));
+ particle->SetRefJet(jet);
+ //printf("Most opposite found\n");
+ }
+ } // input aod loop
+ // if(GetReader()->WriteDeltaAODToFile() && isJetFound) WriteJetsToOutputBranch(aodRecJets);
+ }//end of take most opposite photon and jet after bkg subtraction
+
if(GetDebug() > 1 ) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - End fill AODs \n");
}
//__________________________________________________________________
-void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms()
+void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms()
{
//Particle-Jet Correlation Analysis, fill histograms
+ if(GetDebug() > 3 ) {
+ printf("I use MakeAnalysisFillHistograms\n");
+ printf("ntracks before iso %d\n",GetCTSTracks()->GetEntriesFast() );
+ }
//Get the event, check if there are AODs available, if not, skip this analysis
AliAODEvent * event = NULL;
- if(GetReader()->GetOutputEvent())
+
+ //printf("GetReader()->GetOutputEvent() %d\n",GetReader()->GetOutputEvent() );
+ //printf("GetReader()->GetDataType() %d\n",GetReader()->GetDataType() );
+ //printf("AliCaloTrackReader::kAOD %d\n",AliCaloTrackReader::kAOD );
+ //printf("GetReader()->GetInputEvent() %d\n",GetReader()->GetInputEvent() );
+
+ if(GetReader()->GetOutputEvent())
{
- event = dynamic_cast<AliAODEvent*>(GetReader()->GetOutputEvent());
+ event = dynamic_cast<AliAODEvent*>(GetReader()->GetOutputEvent());
}
- else if(GetReader()->GetDataType() == AliCaloTrackReader::kAOD)
- {
- event = dynamic_cast<AliAODEvent*>(GetReader()->GetInputEvent());
+ else if(GetReader()->GetDataType() == AliCaloTrackReader::kAOD)
+ {
+ event = dynamic_cast<AliAODEvent*>(GetReader()->GetInputEvent());
}
else {
if(GetDebug() > 3) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - There are no jets available for this analysis\n");
abort();
}
- Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
+ Int_t nJets=-1;
+ TClonesArray *aodRecJets = 0;
+ if(IsNonStandardJetFromReader()){//branch read in reader from reader
+ if (GetDebug() > 3) printf("GetNonStandardJets function (from reader) is called\n");
+ aodRecJets = GetNonStandardJets();
+ if(aodRecJets==0x0){
+ if(GetDebug() > 3) event->Print();
+ AliFatal("Jets container not found");
+ return; // trick coverity
+ }
+ nJets=aodRecJets->GetEntries();
+ }
+ if(nJets==0) {
+ // printf("Why number of jets = 0? Check what type of collision it is. If PbPb -problem.\n");
+ GetReader()->FillInputNonStandardJets();
+ aodRecJets = GetNonStandardJets();
+ if(aodRecJets) nJets=aodRecJets->GetEntries();
+ // printf("nJets = %d\n",nJets);
+ return;
+ }
+
+ //
+ //Background jets
+ //
+ AliAODJetEventBackground* aodBkgJets = 0;
+ if(IsBackgroundJetFromReader()){//jet branch from reader
+ if(GetDebug() > 3) printf("GetBackgroundJets function is called\n");
+ aodBkgJets = GetBackgroundJets();
+ if(GetDebug() > 3) printf("aodBkgJets %p\n",aodBkgJets);
+ if(aodBkgJets==0x0){
+ if(GetDebug() > 3) event->Print();
+ abort();
+ }
+ if(GetDebug() > 3) aodBkgJets->Print("c");
+ }
+
+
+ //
+ // only background jets informations
+ //
+ // Float_t pTback = 0;
+ Double_t rhoEvent=0.;
+ if(aodBkgJets) {
+ if(IsBackgroundJetFromReader() ) rhoEvent = aodBkgJets->GetBackground(2);
+ if(IsHistogramJetBkg()) {
+ fhJetRhoVsCentrality->Fill(GetEventCentrality(),rhoEvent);
+ for(Int_t i=0;i<4;i++){
+ fhBkgJetBackground[i]->Fill(aodBkgJets->GetBackground(i));
+ fhBkgJetSigma[i]->Fill(aodBkgJets->GetSigma(i));
+ fhBkgJetArea[i]->Fill(aodBkgJets->GetMeanarea(i));
+ }
+ }//end of if fill HistogramJetBkg
+ }//end if aodBkgJets exists
+
+ //
+ //only track information
+ //
+ Int_t nCTSTracks = GetCTSTracks()->GetEntriesFast();
+ AliAODTrack *aodtrack;
+ Int_t itrack = 0;
+ if(IsHistogramTracks()) {
+ Double_t sumTrackPt=0;
+ for(itrack = 0; itrack < nCTSTracks ; itrack++){
+ aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
+ if(!aodtrack) continue;
+ fhTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());
+ sumTrackPt+=aodtrack->Pt();
+ }
+ if(nCTSTracks)
+ fhTrackAveTrackPt->Fill(sumTrackPt/nCTSTracks);
+ }//end if IsHistogramTracks
+
+ //
+ //only jet informations
+ //
+ AliAODJet * jettmp = 0 ;
+ Double_t jetPttmp = 0.;
+ Double_t var1tmp = 0.;
+ Double_t var2tmp = 0.;
+ // fhJetNjet->Fill(nJets);
+ Double_t ptMostEne=0;
+ // Int_t indexMostEne=-1;
+ Int_t nJetsOverThreshold[10]={nJets,0,0,0,0,0,0,0,0,0};
+ Int_t iCounter=0;
+ Double_t sumJetTrackPt=0.;
+ Int_t sumNJetTrack=0;
+ Int_t nTracksInJet=0;
+ Int_t itrk=0;
+ for(Int_t ijet = 0; ijet < nJets ; ijet++){
+ jettmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
+ if(!jettmp) continue;
+ fhJetPtBefore->Fill(jettmp->Pt());
+ jetPttmp = jettmp->Pt() - rhoEvent * jettmp->EffectiveAreaCharged();//<<---changed here
+
+ //calculate number of tracks above 1,2,3,4,5 GeV in jet
+ AliVTrack* jettrack = 0x0 ;
+
+ Int_t nTrackThrGeV[5]={0,0,0,0,0};
+ nTracksInJet=(jettmp->GetRefTracks())->GetEntriesFast();
+ fhJetNparticlesInJet->Fill(nTracksInJet);
+ if(nTracksInJet==0) continue;
+ sumNJetTrack+=nTracksInJet;
+ for(itrack=0;itrack<nTracksInJet;itrack++){
+ jettrack=(AliVTrack *) ((jettmp->GetRefTracks())->At(itrack));
+ if(!jettrack) continue;
+
+ fhJetDeltaEtaDeltaPhi->Fill(jettmp->Eta()-jettrack->Eta(),jettmp->Phi()-jettrack->Phi());
+ sumJetTrackPt+=jettrack->Pt();
+ if(IsHistogramJetTracks()){
+ if(jettrack->Pt()>1.) nTrackThrGeV[0]++;
+ if(jettrack->Pt()>2.) nTrackThrGeV[1]++;
+ if(jettrack->Pt()>3.) nTrackThrGeV[2]++;
+ if(jettrack->Pt()>4.) nTrackThrGeV[3]++;
+ if(jettrack->Pt()>5.) nTrackThrGeV[4]++;
+ }//end of if IsHistogramJetTracks
+ }//end of jet track loop
+ //printf("jetPt %f ntrks %d ntrks>1,2,3,4,5GeV in jet %d, %d, %d, %d, %d\n",jetPttmp,nTracksInJet,nTrackThrGeV[0],nTrackThrGeV[1],nTrackThrGeV[2],nTrackThrGeV[3],nTrackThrGeV[4]);
+
+ for(itrack = 0; itrack < nCTSTracks ; itrack++){
+ aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
+ if(aodtrack) fhJetDeltaEtaDeltaPhiAllTracks->Fill(jettmp->Eta()-aodtrack->Eta(),jettmp->Phi()-aodtrack->Phi());
+ }
+
+
+ if(IsHistogramJetTracks()){
+ fhJetNtracksInJetAboveThr[0]->Fill(jetPttmp,nTracksInJet);//all jets
+
+ for(itrk=0;itrk<5;itrk++) {
+ fhJetNtracksInJetAboveThr[itrk+1]->Fill(jetPttmp,nTrackThrGeV[itrk]);//all jets
+ fhJetRatioNTrkAboveToNTrk[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);//all jets
+ }
+ if(ijet==0){//most ene jet
+ for(itrk=0;itrk<5;itrk++)
+ fhJetNtrackRatioMostEne[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
+ }
+ if(jetPttmp>5){//jet with pt>5GeV/c
+ for(itrk=0;itrk<5;itrk++)
+ fhJetNtrackRatioJet5GeV[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
+ }
+ if(nTrackThrGeV[4]>0){//jet with leading particle pt>5GeV/c
+ for(itrk=0;itrk<5;itrk++)
+ fhJetNtrackRatioLead5GeV[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
+ }
+ }//end of if IsHistogramJetTracks
+
+
+ Double_t effectiveChargedBgEnergy=(IsBackgroundJetFromReader()?rhoEvent * jettmp->EffectiveAreaCharged():jettmp->ChargedBgEnergy());
+
+
+ fhJetChBkgEnergyVsArea->Fill(effectiveChargedBgEnergy,jettmp->EffectiveAreaCharged());
+ //if(jettmp->EffectiveAreaCharged()>0)
+ fhJetRhoVsPt->Fill(jetPttmp,jettmp->ChargedBgEnergy()*jettmp->EffectiveAreaCharged());
+
+ if(jetPttmp>ptMostEne) {
+ ptMostEne = jetPttmp;
+ //indexMostEne=ijet;
+ }
+ fhJetPt->Fill(jetPttmp);
+ fhJetChBkgEnergyVsPt->Fill(jetPttmp,effectiveChargedBgEnergy);
+ fhJetChAreaVsPt->Fill(jetPttmp,jettmp->EffectiveAreaCharged());
+ if(GetDebug()>5) printf("ChargedBgEnergy %f EffectiveAreaCharged %f\n", jettmp->ChargedBgEnergy(),jettmp->EffectiveAreaCharged());
+ for(iCounter=1;iCounter<10;iCounter++){
+ if(jetPttmp>iCounter) nJetsOverThreshold[iCounter]++;
+ }
+
+ var1tmp = jettmp->Phi();
+ var2tmp = jettmp->Eta();
+ fhJetPhi->Fill(var1tmp);
+ fhJetEta->Fill(var2tmp);
+ fhJetPhiVsEta->Fill(var1tmp,var2tmp);
+ fhJetEtaVsPt->Fill(jetPttmp,var2tmp);
+ fhJetEtaVsNpartInJet->Fill(var2tmp,nTracksInJet);
+ if(jetPttmp>0)
+ fhJetEtaVsNpartInJetBkg->Fill(var2tmp,nTracksInJet);
+
+ }//end of jet loop
+ if(IsHistogramJetTracks()){
+ if(sumNJetTrack>0){
+ //printf("average track pt %f\n",sumJetTrackPt/sumNJetTrack);
+ fhJetAveTrackPt->Fill(sumJetTrackPt/sumNJetTrack);
+ }
+ }//end of if IsHistogramJetTracks
+
+
+ fhJetPtMostEne->Fill(ptMostEne);
+ for(iCounter=0;iCounter<10;iCounter++){
+ fhJetNjetOverPtCut[iCounter]->Fill(nJetsOverThreshold[iCounter]);
+ nJetsOverThreshold[iCounter]=0;
+ }
+
+ //end of only jet part
+
+ //
+ // Photons
+ //
+ Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
if(GetDebug() > 1){
printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - Begin jet finder correlation analysis, fill histograms \n");
printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", ntrig);
printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - In jet output branch aod entries %d\n", event->GetNJets());
}
+ fhNjetsNgammas->Fill(nJets,ntrig);
+
+ //if(nJets==0) return;//to speed up
+ //printf("ntrig %d, njets %d\n",ntrig,nJets);
+
+ //
+ //Fill only temporary photon histograms
+ //
+ Double_t maxPt=0.;
+ Int_t maxIndex=-1;
+ Double_t tmpPt=0.;
+ Double_t sumPt=0.;
+ nJetsOverThreshold[0]=ntrig;
+ for(Int_t iaod = 0; iaod < ntrig ; iaod++){
+ AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
+ tmpPt = particlecorr->Pt();
+ if(tmpPt>maxPt) {
+ maxPt = tmpPt;
+ maxIndex = iaod;
+ }
+ for(iCounter=1;iCounter<10;iCounter++){
+ if(tmpPt>iCounter) nJetsOverThreshold[iCounter]++;
+ }
+ sumPt+=tmpPt;
+ }
+ for(iCounter=0;iCounter<10;iCounter++){
+ fhPhotonNgammaOverPtCut[iCounter]->Fill(nJetsOverThreshold[iCounter]);
+ // nJetsOverThreshold[iCounter]=0;
+ }
+
+ fGamAvEne=0;
+ TObjArray* clusters = GetEMCALClusters();
+ //printf("calculate median bkg energy for photons ");
+ Double_t medianPhotonRho=0.;
+ Int_t clusterID;
+ Int_t iclustmp = -1;
+ Int_t numberOfcells=0;
+ AliVCluster *cluster = 0;
+ if(ntrig>1){
+ Double_t *photonRhoArr=new Double_t[ntrig-1];
+ fhPhotonPtMostEne->Fill(maxPt);
+ // fhPhotonIndexMostEne->Fill(indexMaxPt);
+ fhPhotonAverageEnergy->Fill(sumPt/ntrig);
+ fhPhotonRatioAveEneToMostEne->Fill(sumPt/(ntrig*maxPt));
+ fhPhotonAverageEnergyMinus1->Fill((sumPt-maxPt)/(ntrig-1));
+ fGamAvEne=(sumPt-maxPt)/(ntrig-1);
+ fhPhotonRatioAveEneMinus1ToMostEne->Fill((sumPt-maxPt)/((ntrig-1)*maxPt));
+
+ Int_t counterGamma=0;
+ Int_t counterGammaMinus1=0;
+
+ Int_t photonRhoArrayIndex=0;
+ //TObjArray* clusterstmp = GetEMCALClusters();
+ for(Int_t iaod = 0; iaod < ntrig ; iaod++){
+ AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
+ if( particlecorr->Pt() > sumPt/ntrig ) counterGamma++;
+ if( particlecorr->Pt() > (sumPt-maxPt)/(ntrig-1) ) counterGammaMinus1++;
+
+ if(iaod==maxIndex) continue;
+ clusterID = particlecorr->GetCaloLabel(0) ;
+ if(clusterID < 0) continue;
+ cluster = FindCluster(clusters,clusterID,iclustmp);
+ photonRhoArr[photonRhoArrayIndex]=particlecorr->Pt()/ cluster->GetNCells();
+ numberOfcells+=cluster->GetNCells();
+ photonRhoArrayIndex++;
+ }
+ if(photonRhoArrayIndex>0) medianPhotonRho=TMath::Median(photonRhoArrayIndex,photonRhoArr);
+ delete [] photonRhoArr;
+ fhPhotonNgammaMoreAverageToNgamma->Fill((Double_t)counterGamma / (Double_t)ntrig);
+ fhPhotonNgammaMoreAverageMinus1ToNgamma->Fill((Double_t)counterGammaMinus1 / (Double_t)ntrig);
+ }
+ //printf("median = %f\n",medianPhotonRho);
+ fhPhotonBkgRhoVsNtracks->Fill(GetCTSTracks()->GetEntriesFast(),medianPhotonRho);
+ fhPhotonBkgRhoVsNclusters->Fill(ntrig,medianPhotonRho);
+ fhPhotonBkgRhoVsCentrality->Fill(GetEventCentrality(),medianPhotonRho);
+ fhPhotonBkgRhoVsNcells->Fill(numberOfcells,medianPhotonRho);
+
+
+ AliVCluster *cluster2 = 0;
+ Double_t photon2Corrected=0;
+ Double_t sumPtTmp=0.;
+ Double_t sumPtCorrectTmp=0.;
+ AliVTrack* trackTmp = 0x0 ;
+ TVector3 p3Tmp;
+
+ for(Int_t iaod = 0; iaod < ntrig ; iaod++){
+ AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
+ clusterID = particlecorr->GetCaloLabel(0) ;
+ if(clusterID < 0) continue;
+ cluster = FindCluster(clusters,clusterID,iclustmp);
+ fhPhotonPt->Fill(particlecorr->Pt());
+ fhPhotonPtCorrected->Fill(particlecorr->Pt() - cluster->GetNCells() * medianPhotonRho);
+ fhPhotonPtDiff->Fill(cluster->GetNCells() * medianPhotonRho);
+ fhPhotonPtDiffVsCentrality->Fill(GetEventCentrality(),cluster->GetNCells() * medianPhotonRho);
+ fhPhotonPtDiffVsNcells->Fill(numberOfcells,cluster->GetNCells() * medianPhotonRho);
+ fhPhotonPtDiffVsNtracks->Fill(GetCTSTracks()->GetEntriesFast(),cluster->GetNCells() * medianPhotonRho);
+ fhPhotonPtDiffVsNclusters->Fill(ntrig,cluster->GetNCells() * medianPhotonRho);
+
+ fhPhotonPtCorrectedZoom->Fill(particlecorr->Pt() - cluster->GetNCells() * medianPhotonRho);
+
+ //test: sum_pt in the cone 0.3 for each photon
+ //should be: random fake gamma from MB
+ //is: each gamma for EMCEGA
+ sumPtTmp=0.;
+ sumPtCorrectTmp=0.;
+
+ for(Int_t iaod2 = 0; iaod2 < ntrig ; iaod2++){
+ if(iaod==iaod2) continue;
+ AliAODPWG4ParticleCorrelation* particlecorr2 = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod2));
+ clusterID = particlecorr2->GetCaloLabel(0) ;
+ if(clusterID < 0) continue;
+ cluster2 = FindCluster(clusters,clusterID,iclustmp);
+ photon2Corrected = particlecorr2->Pt() - cluster2->GetNCells() * medianPhotonRho;
+
+ //if(Pt()<0.5) continue; //<<hardcoded here //FIXME
+ if( TMath::Sqrt((particlecorr->Eta()-particlecorr2->Eta())*(particlecorr->Eta()-particlecorr2->Eta()) +
+ (particlecorr->Phi()-particlecorr2->Phi())*(particlecorr->Phi()-particlecorr2->Phi()) )<fGammaConeSize ){//if(/*cone is correct*/){
+ sumPtTmp+= particlecorr2->Pt();
+ sumPtCorrectTmp+=photon2Corrected;
+ }
+ }
+ fhPhotonSumPtInCone->Fill(sumPtTmp);
+ fhPhotonSumPtCorrectInCone->Fill(sumPtCorrectTmp);
+
+ //test: sum_pt in the cone 0.3 for each track
+ //should be: random fake gamma from MB
+ //is: each gamma for EMCEGA
+ sumPtTmp=0.;
+ for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++){
+ trackTmp = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
+ p3Tmp.SetXYZ(trackTmp->Px(),trackTmp->Py(),trackTmp->Pz());
+ if( TMath::Sqrt((particlecorr->Eta()-p3Tmp.Eta())*(particlecorr->Eta()-p3Tmp.Eta()) +
+ (particlecorr->Phi()-p3Tmp.Phi())*(particlecorr->Phi()-p3Tmp.Phi()) )<fGammaConeSize ){
+ sumPtTmp+=p3Tmp.Pt();
+ }
+ }//end of loop over tracks
+ fhPhotonSumPtChargedInCone->Fill(sumPtTmp);
+ }
+
+ //End of Fill temporary photon histograms
+
+ //
+ // Apply background subtraction for photons
+ //
+ fGamRho = medianPhotonRho;
+ if(!IsBackgroundSubtractionGamma()) medianPhotonRho=0;
+
+ //
+ //Get vertex for cluster momentum calculation <<----new here
+ //
+ Double_t vertex[] = {0,0,0} ; //vertex ;
+ if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
+ GetReader()->GetVertex(vertex);
+ fZvertex = vertex[2];
+
+ //
//Loop on stored AOD particles, trigger
+ //
for(Int_t iaod = 0; iaod < ntrig ; iaod++){
- AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
+ AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
+ fhCuts->Fill(0);
+ fhCuts2->Fill(0.,(Double_t)nJets);
+ if(GetDebug() > 5) printf("OnlyIsolated %d !particlecorr->IsIsolated() %d \n",OnlyIsolated(), !particlecorr->IsIsolated());
if(OnlyIsolated() && !particlecorr->IsIsolated()) continue;
+ fhCuts->Fill(1);
+ fhCuts2->Fill(1.,nJets);
+
+ if(nJets>0) {
+ fhCuts->Fill(2);
+ }
//Recover the jet correlated, found previously.
AliAODJet * jet = particlecorr->GetJet();
//If correlation not made before, do it now.
if(fMakeCorrelationInHistoMaker){
//Correlate with jets
- Int_t ijet = SelectJet(particlecorr,event);
+ Int_t ijet = SelectJet(particlecorr,aodRecJets);//input for jets is TClonesArray
if(ijet > -1){
if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - Jet with index %d selected \n",ijet);
- jet = event->GetJet(ijet);
- particlecorr->SetRefJet(jet);
+ //jet = event->GetJet(ijet);
+ jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(ijet));
+
+ particlecorr->SetRefJet(jet);
+
}
}
if (!jet) continue ;
+ fhCuts->Fill(3);
+ fhCuts2->Fill(7.,1.);
- //Fill Histograms
-
- Double_t ptTrig = particlecorr->Pt();
- Double_t ptJet = jet->Pt();
+ //
+ //Fill Correlation Histograms
+ //
+ clusterID = particlecorr->GetCaloLabel(0) ;
+ if(!(clusterID<0)){
+ cluster = FindCluster(clusters,clusterID,iclustmp);
+ //fill tree variables
+ fGamNcells = cluster->GetNCells();
+ }
+ Double_t ptTrig = particlecorr->Pt() - medianPhotonRho * fGamNcells;//<<---changed here
+ Double_t ptJet = jet->Pt() - rhoEvent * jet->EffectiveAreaCharged();//<<---changed here
Double_t phiTrig = particlecorr->Phi();
Double_t phiJet = jet->Phi();
Double_t etaTrig = particlecorr->Eta();
Double_t etaJet = jet->Eta();
+ Double_t deltaPhi=phiTrig-phiJet;
+ if(deltaPhi<0)deltaPhi+=(TMath::Pi()*2.);
//printf("pT trigger %2.3f, pT jet %2.3f, Delta phi %2.3f, Delta eta %2.3f, Delta pT %2.3f, ratio %2.3f \n",
// ptTrig,ptJet, phiJet-phiTrig, etaJet-etaTrig, ptTrig-ptJet, ptJet/ptTrig);
fhDeltaPt ->Fill(ptTrig, ptTrig-ptJet);
- fhDeltaPhi->Fill(ptTrig, phiJet-phiTrig);
- fhDeltaEta->Fill(ptTrig, etaJet-etaTrig);
+ // fhDeltaPhi->Fill(ptTrig, phiTrig-phiJet);//need to be shifted by 2pi
+
+ fhDeltaPhiCorrect->Fill(ptTrig, deltaPhi);//correct
+
+ Double_t deltaPhiCorrect = TMath::Abs( particlecorr->Phi() - jet->Phi() );
+ if ( deltaPhiCorrect > TMath::Pi() ) deltaPhiCorrect = 2. * TMath::Pi() - deltaPhiCorrect ;
+ fhDeltaPhi0PiCorrect->Fill(ptTrig, deltaPhiCorrect);
+
+ fhDeltaEta->Fill(ptTrig, etaTrig-etaJet);
fhPtRatio ->Fill(ptTrig, ptJet/ptTrig);
fhPt ->Fill(ptTrig, ptJet);
- //Fragmentation function
+ fhSelectedJetPhiVsEta->Fill(phiJet,etaJet);
+ fhSelectedJetChBkgEnergyVsPtJet->Fill(ptJet,(IsBackgroundJetFromReader()?rhoEvent * jet->EffectiveAreaCharged():jet->ChargedBgEnergy()) );
+ fhSelectedJetChAreaVsPtJet->Fill(ptJet,jet->EffectiveAreaCharged());
+ fhSelectedJetNjet->Fill(nJets);
+ fhSelectedNtracks->Fill(GetCTSTracks()->GetEntriesFast());//to be checked
+ fhSelectedPhotonNLMVsPt->Fill(ptTrig,particlecorr->GetFiducialArea());
+
+
+ if(clusterID < 0 ){
+ fhSelectedPhotonLambda0VsPt->Fill(ptTrig,-1);
+ //fill tree variables
+ fGamLambda0 = -1;
+ fGamTime = -1;
+ fGamNcells = 0;
+ fGamSumPtNeu=0;
+ }
+ else{
+ //Int_t iclus = -1;
+ // TObjArray* clusters = GetEMCALClusters();
+ //cluster = FindCluster(clusters,clusterID,iclustmp);
+ Double_t lambda0=cluster->GetM02();
+ fhSelectedPhotonLambda0VsPt->Fill(ptTrig,lambda0);
+ //fill tree variables
+ fGamLambda0 = lambda0;
+ fGamTime = cluster->GetTOF();
+ //fGamNcells = cluster->GetNCells();
+
+ fGamSumPtNeu=0;
+ fGamNclusters=0;
+ TLorentzVector mom ;
+ //TVector3 p3Tmp;
+ //Double_t scalarProduct=0;
+ //Double_t vectorLength=particlecorr->P();
+ for(Int_t icalo=0; icalo <clusters->GetEntriesFast(); icalo++){
+ AliVCluster* calo = (AliVCluster *) clusters->At(icalo);
+ if(clusterID==calo->GetID()) continue;//the same cluster as trigger
+ calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
+ //printf("min pt %f\n",GetMinPt());
+ if(mom.Pt()<GetMinPt()) continue; //<<hardcoded here //FIXME 0.5 check if correct
+ p3Tmp.SetXYZ(mom.Px(),mom.Py(),mom.Pz());
+ //calculate sum pt in the cone
+ if( TMath::Sqrt((particlecorr->Eta()-p3Tmp.Eta())*(particlecorr->Eta()-p3Tmp.Eta()) +
+ (particlecorr->Phi()-p3Tmp.Phi())*(particlecorr->Phi()-p3Tmp.Phi()) )<fGammaConeSize ){
+ //scalarProduct = particlecorr->Px()*mom.Px() + particlecorr->Py()*mom.Py() + particlecorr->Pz()*mom.Pz();
+ //scalarProduct/=mom.P();
+ //scalarProduct/=vectorLength;
+ //if(scalarProduct>TMath::Cos(0.3)) {//FIXME photon radius
+ fGamSumPtNeu+=mom.Pt();
+ fGamNclusters++;
+ }
+ }
+ }
+
+ //sum pt of charged tracks in the gamma isolation cone
+ //starts here
+ fGamSumPtCh=0;
+ fGamNtracks=0;
+ for(itrack = 0; itrack < nCTSTracks ; itrack++){
+ aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
+ fhSelectedTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());//fill histogram here
+ // if(aodtrack->Pt()<0.15) continue;//hardcoded
+ if(aodtrack->Pt()<fPtThresholdInCone) continue;
+ if(!aodtrack->IsHybridGlobalConstrainedGlobal()) continue;
+ if(TMath::Sqrt((particlecorr->Phi() - aodtrack->Phi())*(particlecorr->Phi() - aodtrack->Phi()) +
+ (particlecorr->Eta() - aodtrack->Eta())*(particlecorr->Eta() - aodtrack->Eta()) ) <fGammaConeSize ) {
+ fGamSumPtCh+=aodtrack->Pt();
+ fGamNtracks++;
+ }
+ }
+ //ends here
+
+ // for(Int_t itrack = 0; itrack < nCTSTracks ; itrack++){
+ // aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
+ // fhSelectedTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());
+ // }
+
+ //
+ // Background Fragmentation function
+ //
+ TVector3 gammaVector,jetVector;
+ gammaVector.SetXYZ(particlecorr->Px(),particlecorr->Py(),particlecorr->Pz());
+ jetVector.SetXYZ(jet->Px(),jet->Py(),jet->Pz());
+ CalculateBkg(gammaVector,jetVector,vertex,1);//jet perp
+ CalculateBkg(gammaVector,jetVector,vertex,2);//RC
+ CalculateBkg(gammaVector,jetVector,vertex,3);//mid point
+ CalculateBkg(gammaVector,jetVector,vertex,4);//gamma perp
+ //CalculateBkg(gammaVector,jetVector,vertex,5);/test
+ Double_t angleJetGam = gammaVector.Angle(jetVector);
+ //printf("angleJetGam %f\n",angleJetGam*180/TMath::Pi());
+
+ //
+ // Fragmentation function
+ //
Float_t rad = 0, pt = 0, eta = 0, phi = 0;
Int_t npartcone = 0;
TVector3 p3;
Int_t ntracks = 0;
+ if(GetDebug()>3){
+ printf ("fUseJetRefTracks %d\n",fUseJetRefTracks );
+ printf ("jet->GetRefTracks() %p\n",jet->GetRefTracks());
+ printf ("GetCTSTracks() %p\n",GetCTSTracks() );
+ }
+
if(!fUseJetRefTracks)
ntracks =GetCTSTracks()->GetEntriesFast();
else //If you want to use jet tracks from JETAN
ntracks = (jet->GetRefTracks())->GetEntriesFast();
+ if(GetDebug()>3) printf ("ntracks %d\n",ntracks);
AliVTrack* track = 0x0 ;
for(Int_t ipr = 0;ipr < ntracks ; ipr ++ ){
if(!fUseJetRefTracks)
- track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
+ track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
else //If you want to use jet tracks from JETAN
track = (AliVTrack *) ((jet->GetRefTracks())->At(ipr));
//Check if there is any particle inside cone with pt larger than fPtThreshold
rad = TMath::Sqrt((eta-etaJet)*(eta-etaJet)+ (phi-phiJet)*(phi-phiJet));
- if(rad < fConeSize && pt > fPtThresholdInCone){
+ if(rad < fConeSize && pt > fPtThresholdInCone){
//printf("charged in jet cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad);
npartcone++;
fhFFz ->Fill(ptTrig, pt/ptTrig);
fhFFxi->Fill(ptTrig, TMath::Log(ptTrig/pt));
fhFFpt->Fill(ptTrig, pt);
+
+ //according to jet axis
+ fhJetFFz ->Fill(ptJet, pt/ptJet);
+ fhJetFFxi->Fill(ptJet, TMath::Log(ptJet/pt));
+ fhJetFFpt->Fill(ptJet, pt);
+
+
+ if(TMath::Cos(angleJetGam)<0 && ptJet!=0 && pt!=0 ){
+ fhJetFFzCor ->Fill(ptJet, -pt*TMath::Cos(angleJetGam)/ptJet);
+ fhJetFFxiCor->Fill(ptJet, TMath::Log(ptJet/(-pt*TMath::Cos(angleJetGam))));
+ }
}
}//Tracks
fhNTracksInCone->Fill(ptTrig, npartcone);
+ //fill tree here for each photon-jet (isolation required usually)
+
+ fGamPt = ptTrig;
+ //fGamLambda0 = ;//filled earlier
+ fGamNLM = particlecorr->GetFiducialArea();
+ //fGamSumPtCh = ;//filled earlier
+ //fGamTime = particlecorr->GetTOF();//filled earlier
+ //fGamNcells = particlecorr->GetNCells();//filled earlier
+ fGamEta = etaTrig;
+ fGamPhi = phiTrig;
+ //fGamSumPtNeu = ;//filled earlier
+ //fGamNtracks = ;//filled earlier
+ //fGamNclusters= ;//filled earlier
+ //fGamAvEne = ;//filled earlier
+ fJetPhi = phiJet;
+ fJetEta = etaJet;
+ fJetPt = ptJet;
+ fJetBkgChEne = (IsBackgroundJetFromReader()?rhoEvent * jet->EffectiveAreaCharged():jet->ChargedBgEnergy());
+ fJetArea = jet->EffectiveAreaCharged();
+ fJetNtracks = (jet->GetRefTracks())->GetEntriesFast();
+ fEventNumber = 0;
+ fNtracks = GetCTSTracks()->GetEntriesFast();
+ fCentrality = GetEventCentrality();
+ fIso = particlecorr->IsIsolated();
+
+ Int_t nTrk1GeV=0;
+ Int_t nTrk2GeV=0;
+ for(itrack=0;itrack < fJetNtracks;itrack++){
+ track = (AliVTrack *) ((jet->GetRefTracks())->At(itrack));
+ if(track->Pt()>1.) nTrk1GeV++;
+ if(track->Pt()>2.) nTrk2GeV++;
+ }
+
+ fJetNtracks1 = nTrk1GeV;
+ fJetNtracks2 = nTrk2GeV;
+
+ if(fSaveGJTree) fTreeGJ->Fill();
}//AOD trigger particle loop
if(GetDebug() > 1) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n");
-}
+}
//__________________________________________________________________
printf("fUseJetRefTracks = %d\n", fUseJetRefTracks) ;
printf("fMakeCorrelationInHistoMaker = %d\n", fMakeCorrelationInHistoMaker) ;
printf("Isolated Trigger? %d\n", fSelectIsolated) ;
-
+ printf("Reconstructed jet cone size = %3.2f\n", fJetConeSize) ;
+ printf("Reconstructed jet minimum pt = %3.2f\n", fJetMinPt) ;
+ printf("Reconstructed jet minimum area fraction = %3.2f\n", fJetAreaFraction) ;
+
+ if(!fNonStandardJetFromReader){
+ printf("fJetBranchName = %s\n", fJetBranchName.Data()) ;
+ }
+ if(!fBackgroundJetFromReader){
+ printf("fBkgJetBranchName = %s\n", fBkgJetBranchName.Data()) ;
+ }
+
+ printf("Isolation cone size = %3.2f\n", fGammaConeSize) ;
+ printf("fUseBackgroundSubtractionGamma = %d\n",fUseBackgroundSubtractionGamma);
+ printf("fSaveGJTree = %d\n",fSaveGJTree);
+ printf("fMostEnergetic = %d\n",fMostEnergetic);
+ printf("fMostOpposite = %d\n",fMostOpposite);
+
+ printf("fUseHistogramJetBkg = %d\n",fUseHistogramJetBkg);
+ printf("fUseHistogramTracks = %d\n",fUseHistogramTracks);
+ printf("fUseHistogramJetTracks = %d\n",fUseHistogramJetTracks);
+
}
+//__________________________________________________________________
+void AliAnaParticleJetFinderCorrelation::CalculateBkg(TVector3 gamma, TVector3 jet,Double_t vertex[3],Int_t type=2){
+ //
+ // calculate background for fragmentation function and fill histograms
+ // 1. 90 degrees from jet axis in random place = perpendicular cone
+ // 2. Random cone not belonging to jet cone nor photon cone
+ // 3. In the middle point from jet and photon momentum vectors
+ // 4. 90 degrees from photon direction in random place = perpendicular cone 2
+
+ //
+ // implementation of 2 works, 1 and 4 works
+ //
+ Double_t gammaPt = gamma.Pt();
+ Double_t gammaEta = gamma.Eta();
+ Double_t gammaPhi = gamma.Phi();
+ Double_t jetEta = jet.Eta();
+ Double_t jetPhi = jet.Phi();
+
+ //refference direction of background
+ Double_t refEta=0.,refPhi=0.;
+ Double_t rad = 0,rad2 = 0.;
+ if(type==1){//perpendicular to jet axis
+ //printf("vertex: %f %f %f \n",vertex[0],vertex[1],vertex[2]);
+
+ Double_t xVar;
+ Double_t yVar;
+ Double_t newX=0.;
+ Double_t newY=0.;
+ Double_t newZ=0.;
+ //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
+ Double_t jx=jet.Px();
+ Double_t jy=jet.Py();
+ Double_t jz=jet.Pz();
+ //if(jz==0)printf("problem\n");
+ //X axis
+ Double_t Xx=1.0-vertex[0];
+ Double_t Xy=-1.0*vertex[1];
+ Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
+ //Y axis
+ Double_t Yx=jy*Xz-jz*Xy;
+ Double_t Yy=jz*Xx-jx*Xz;
+ Double_t Yz=jx*Xy-jy*Xx;
+ //Determinant
+ Double_t det = Xx*Yy*jz + Xy*Yz*jx + Xz*Yx*jy - Xx*Yz*jy - Xy*Yx*jz - Xz*Yy*jx;
+ if(det==0)printf("problem det==0\n");
+ Double_t detX = 0.;
+ Double_t detY = 0.;
+ Double_t detZ = 0.;
+
+// Double_t tmpScalar = jx*Xx+jy*Xy+jz*Xz;
+// printf("scalar jet.P o X: %f\n",tmpScalar);
+// tmpScalar = jet.Px()*Yx+jet.Py()*Yy+jet.Pz()*Yz;
+// printf("scalar jet.P o Y: %f\n",tmpScalar);
+// tmpScalar = Xx*Yx+Xy*Yy+Xz*Yz;
+// printf("scalar X o Y: %f\n",tmpScalar);
+
+ TVector3 perp;
+ //randomise
+ do{
+ refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
+ //refPhi=fGenerator->Uniform(-1,1)*TMath::Pi();
+ xVar=TMath::Cos(refPhi);
+ yVar=TMath::Sin(refPhi);
+ //yVar=TMath::Cos(-TMath::Pi()/2.+refPhi);
+ //zVar=0 in new surface frame
+ detX = xVar*Yy*jz + Xz*yVar*jy - xVar*Yz*jy - Xy*yVar*jz;
+ detY = Xx*yVar*jz + xVar*Yz*jx - xVar*Yx*jz - Xz*yVar*jx;
+ detZ = Xy*yVar*jx + xVar*Yx*jy - Xx*yVar*jy - xVar*Yy*jx;
+
+ newX=detX/det;
+ newY=detY/det;
+ newZ=detZ/det;
+
+ perp.SetXYZ(newX,newY,newZ);
+ refEta = perp.Eta();
+ refPhi = perp.Phi();//output in <-pi, pi> range
+ if(refPhi<0)refPhi+=2*TMath::Pi();
+ rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
+ rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
+ //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
+ } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
+ fhRandomPhiEta[2]->Fill(refPhi,refEta);
+
+ }
+ else if(type==2){//random cone
+ //randomise
+ do{
+ refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
+ refEta=fGenerator->Uniform(-(0.9-fJetConeSize),0.9-fJetConeSize);
+ rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
+ rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
+ //check if reference is not within jet cone or gamma cone +0.4
+ //example: FF fConeSize=0.4, fJetConeSize=0.4, fIsoGammaConeSize=0.3
+ } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize);
+ //photon:0.7=0.4+0.3; jets:0.8=0.4 +0.4 //rad<fConeSize+fJetConeSize rad2<fConeSize+0.3
+ fhRandomPhiEta[0]->Fill(refPhi,refEta);
+ }
+ else if(type==4){//perpendicular to photon axis
+ Double_t xVar;
+ Double_t yVar;
+ Double_t newX=0.;
+ Double_t newY=0.;
+ Double_t newZ=0.;
+ //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
+ Double_t jx=gamma.Px();
+ Double_t jy=gamma.Py();
+ Double_t jz=gamma.Pz();
+ //if(jz==0)printf("problem\n");
+ //X axis
+ Double_t Xx=1.0-vertex[0];
+ Double_t Xy=-1.0*vertex[1];
+ Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
+ //Y axis
+ Double_t Yx=jy*Xz-jz*Xy;
+ Double_t Yy=jz*Xx-jx*Xz;
+ Double_t Yz=jx*Xy-jy*Xx;
+ //Determinant
+ Double_t det = Xx*Yy*jz + Xy*Yz*jx + Xz*Yx*jy - Xx*Yz*jy - Xy*Yx*jz - Xz*Yy*jx;
+ if(det==0)printf("problem det==0\n");
+ Double_t detX = 0.;
+ Double_t detY = 0.;
+ Double_t detZ = 0.;
+
+// Double_t tmpScalar = jx*Xx+jy*Xy+jz*Xz;
+// printf("scalar jet.P o X: %f\n",tmpScalar);
+// tmpScalar = jet.Px()*Yx+jet.Py()*Yy+jet.Pz()*Yz;
+// printf("scalar jet.P o Y: %f\n",tmpScalar);
+// tmpScalar = Xx*Yx+Xy*Yy+Xz*Yz;
+// printf("scalar X o Y: %f\n",tmpScalar);
+
+ TVector3 perp;
+ //randomise
+ do{
+ refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
+ //refPhi=fGenerator->Uniform(-1,1)*TMath::Pi();
+ xVar=TMath::Cos(refPhi);
+ yVar=TMath::Sin(refPhi);
+ //yVar=TMath::Cos(-TMath::Pi()/2.+refPhi);
+ //zVar=0 in new surface frame
+ detX = xVar*Yy*jz + Xz*yVar*jy - xVar*Yz*jy - Xy*yVar*jz;
+ detY = Xx*yVar*jz + xVar*Yz*jx - xVar*Yx*jz - Xz*yVar*jx;
+ detZ = Xy*yVar*jx + xVar*Yx*jy - Xx*yVar*jy - xVar*Yy*jx;
+
+ newX=detX/det;
+ newY=detY/det;
+ newZ=detZ/det;
+
+ perp.SetXYZ(newX,newY,newZ);
+ refEta = perp.Eta();
+ refPhi = perp.Phi();//output in <-pi, pi> range
+ if(refPhi<0)refPhi+=2*TMath::Pi();
+ rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
+ rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
+ //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
+ } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
+ fhRandomPhiEta[1]->Fill(refPhi,refEta);
+
+ }
+ else if(type==3){//mid point
+
+ Double_t jx=jet.Px();
+ Double_t jy=jet.Py();
+ Double_t jz=jet.Pz();
+ // if(jz==0)printf("problem\n");
+ Double_t gx=gamma.Px();
+ Double_t gy=gamma.Py();
+ Double_t gz=gamma.Pz();
+
+ Double_t cosAlpha=(jx*gx+jy*gy+jz*gz)/(jet.Mag()*gamma.Mag());
+ Double_t cosinus=TMath::Sqrt((cosAlpha+1.)/2.);
+ //perpendicular axis
+ Double_t Zx=gy*jz-gz*jy;
+ Double_t Zy=gz*jx-gx*jz;
+ Double_t Zz=gx*jy-gy*jx;
+
+ //Determinant
+ Double_t det = Zx*gy*jz + Zy*gz*jx + Zz*gx*jy - Zz*gy*jx - Zy*gx*jz - Zx*gz*jy;
+
+ Double_t newX=0.;
+ Double_t newY=0.;
+ Double_t newZ=0.;
+ if(det!=0) {
+ Double_t detX = -Zy*gz*cosinus +Zz*cosinus*jy + Zz*gy*cosinus - Zy*cosinus*jz;
+ Double_t detY = Zx*cosinus*jz - Zz*gx*cosinus - Zz*cosinus*jx + Zx*gz*cosinus;
+ Double_t detZ = -Zx*gy*cosinus + Zy*cosinus*jx + Zy*gx*cosinus - Zx*cosinus*jy;
+
+ newX=detX/det;
+ newY=detY/det;
+ newZ=detZ/det;
+ }
+
+ TVector3 perp;
+ perp.SetXYZ(newX,newY,newZ);
+ refEta = perp.Eta();
+ refPhi = perp.Phi();//output in <-pi, pi> range
+ if(refPhi<0)refPhi+=2*TMath::Pi();
+ rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
+ rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
+ //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
+
+ if (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize) fhRandomPhiEta[3]->Fill(refPhi,refEta);
+ }
+ else if(type==5){//tmp
+ //printf("vertex: %f %f %f \n",vertex[0],vertex[1],vertex[2]);
+
+ Double_t xVar;
+ Double_t newX=0.;
+ Double_t newY=0.;
+ Double_t newZ=0.;
+ //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
+ Double_t jx=jet.Px();
+ Double_t jy=jet.Py();
+ Double_t jz=jet.Pz();
+ // if(jz==0)printf("problem\n");
+ //X axis
+ Double_t Xx=1.0-vertex[0];
+ Double_t Xy=-1.0*vertex[1];
+ Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
+ //Y axis
+ Double_t Yx=jy*Xz-jz*Xy;
+ Double_t Yy=jz*Xx-jx*Xz;
+ Double_t Yz=jx*Xy-jy*Xx;
+
+ // X and Y length
+ Double_t Xlength=TMath::Sqrt(Xx*Xx+Xy*Xy+Xz*Xz);
+ Double_t Ylength=TMath::Sqrt(Yx*Yx+Yy*Yy+Yz*Yz);
+ Double_t ratio=Ylength/Xlength;
+
+ TVector3 perp;
+ //randomise
+ do{
+ refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
+ xVar=TMath::Tan(refPhi)/ratio;
+ newX=xVar*Yx+Xx;
+ newY=xVar*Yy+Xy;
+ newZ=xVar*Yz+Xz;
+
+ perp.SetXYZ(newX,newY,newZ);
+ refEta = perp.Eta();
+ refPhi = perp.Phi();//output in <-pi, pi> range
+ if(refPhi<0)refPhi+=2*TMath::Pi();
+ rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
+ rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
+ //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
+ } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
+ fhRandomPhiEta[4]->Fill(refPhi,refEta);
+ }
+
+
+
+ //calculate FF in background
+ Int_t ntracks = 0;
+ ntracks =GetCTSTracks()->GetEntriesFast();
+ AliVTrack* track = 0x0 ;
+ TVector3 p3;
+
+ Double_t pt = 0, eta = 0, phi = 0;
+ Int_t npartcone = 0;
+ Double_t sumPt=0.;
+ for(Int_t ipr = 0;ipr < ntracks ; ipr ++ ){
+ track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
+ p3.SetXYZ(track->Px(),track->Py(),track->Pz());
+ pt = p3.Pt();
+ if(pt<fPtThresholdInCone) {//0.150
+ //printf("problem: track pt < %f MeV/c \n",fPtThresholdInCone);
+ continue;
+ }
+ eta = p3.Eta() ;
+ phi = p3.Phi() ;
+ if(phi < 0) phi+=TMath::TwoPi();
+ //Check if there is any particle inside cone with pt larger than fPtThreshold
+ rad = TMath::Sqrt((eta-refEta)*(eta-refEta) + (phi-refPhi)*(phi-refPhi));
+ if(rad < fConeSize && pt > fPtThresholdInCone){
+ //printf("charged in jet cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad);
+ npartcone++;
+ sumPt+=pt;
+ if(type==1){//perp jet
+ fhBkgFFz[1] ->Fill(gammaPt, pt/gammaPt);
+ fhBkgFFxi[1]->Fill(gammaPt, TMath::Log(gammaPt/pt));
+ fhBkgFFpt[1]->Fill(gammaPt, pt);
+ }
+ else if(type==2){//RC
+ fhBkgFFz[0] ->Fill(gammaPt, pt/gammaPt);
+ fhBkgFFxi[0]->Fill(gammaPt, TMath::Log(gammaPt/pt));
+ fhBkgFFpt[0]->Fill(gammaPt, pt);
+ }
+ else if(type==3){//mid point
+ fhBkgFFz[3] ->Fill(gammaPt, pt/gammaPt);
+ fhBkgFFxi[3]->Fill(gammaPt, TMath::Log(gammaPt/pt));
+ fhBkgFFpt[3]->Fill(gammaPt, pt);
+ }
+ else if(type==4){//perp jet
+ fhBkgFFz[2] ->Fill(gammaPt, pt/gammaPt);
+ fhBkgFFxi[2]->Fill(gammaPt, TMath::Log(gammaPt/pt));
+ fhBkgFFpt[2]->Fill(gammaPt, pt);
+ }
+ else if(type==5){//test
+ fhBkgFFz[4] ->Fill(gammaPt, pt/gammaPt);
+ fhBkgFFxi[4]->Fill(gammaPt, TMath::Log(gammaPt/pt));
+ fhBkgFFpt[4]->Fill(gammaPt, pt);
+ }
+
+
+ }
+ }//end of loop over tracks
+ Double_t sumOverTracks=0.;
+ if(npartcone!=0) sumOverTracks = sumPt/npartcone;
+ if(type==1) {
+ fhBkgNTracksInCone[1]->Fill(gammaPt, npartcone);
+ fhBkgSumPtInCone[1]->Fill(gammaPt,sumPt);
+ fhBkgSumPtnTracksInCone[1]->Fill(gammaPt,sumOverTracks);
+ }
+ else if(type==2) {
+ fhBkgNTracksInCone[0]->Fill(gammaPt, npartcone);
+ fhBkgSumPtInCone[0]->Fill(gammaPt,sumPt);
+ fhBkgSumPtnTracksInCone[0]->Fill(gammaPt,sumOverTracks);
+ }
+ else if(type==3) {
+ fhBkgNTracksInCone[3]->Fill(gammaPt, npartcone);
+ fhBkgSumPtInCone[3]->Fill(gammaPt,sumPt);
+ fhBkgSumPtnTracksInCone[3]->Fill(gammaPt,sumOverTracks);
+ }
+ else if(type==4) {
+ fhBkgNTracksInCone[2]->Fill(gammaPt, npartcone);
+ fhBkgSumPtInCone[2]->Fill(gammaPt,sumPt);
+ fhBkgSumPtnTracksInCone[2]->Fill(gammaPt,sumOverTracks);
+ }
+ else if(type==5) {
+ fhBkgNTracksInCone[4]->Fill(gammaPt, npartcone);
+ fhBkgSumPtInCone[4]->Fill(gammaPt,sumPt);
+ fhBkgSumPtnTracksInCone[4]->Fill(gammaPt,sumOverTracks);
+ }
+}
+
+
// For Example direct isolated photon found in AliAnaGammaDirect and the jet with JETAN
//
//-- Author: Gustavo Conesa (INFN-LNF)
+//-- Modified by Adam Matyja (INP PAN, Krakow)
// --- ROOT system ---
class TH2F;
-
+class TTree;
+class TRandom2;
//---- Analysis system ----
#include "AliAnaCaloTrackCorrBaseClass.h"
public:
AliAnaParticleJetFinderCorrelation() ; // default ctor
- virtual ~AliAnaParticleJetFinderCorrelation() { ; } // virtual dtor
+ virtual ~AliAnaParticleJetFinderCorrelation() ; // virtual dtor
// General methods
void MakeAnalysisFillHistograms() ;
- Int_t SelectJet(AliAODPWG4Particle * particle, const AliAODEvent * event) const ;
+ Int_t SelectJet(AliAODPWG4Particle * particle, TClonesArray * aodRecJets) ;//to access non standard branch
void Print(const Option_t * opt) const;
Double_t GetRatioMinCut() const { return fRatioMinCut ; }
Bool_t AreJetRefTracks() const { return fUseJetRefTracks ; }
Bool_t IsCorrelationMadeInHistoMaker() const { return fMakeCorrelationInHistoMaker ; }
-
+ Double_t GetJetConeSize() const { return fJetConeSize ; }
+ Double_t GetJetMinPt() const { return fJetMinPt ; }
+ Double_t GetJetAreaFraction() const { return fJetAreaFraction ; }
+ Double_t GetGammaConeSize() const { return fGammaConeSize ; }
+
void SetConeSize(Float_t cone) { fConeSize = cone ; }
void SetPtThresholdInCone(Float_t pt) { fPtThresholdInCone = pt ; }
void SetDeltaPhiCutRange(Double_t phimin, Double_t phimax)
void SetRatioCutRange(Double_t ratiomin, Double_t ratiomax)
{ fRatioMaxCut =ratiomax; fRatioMinCut = ratiomin ; }
void UseJetRefTracks(Bool_t use) { fUseJetRefTracks = use ; }
- void SetMakeCorrelationInHistoMaker(Bool_t make) { fMakeCorrelationInHistoMaker = make ; }
-
+ void SetMakeCorrelationInHistoMaker(Bool_t make) { fMakeCorrelationInHistoMaker = make ; }
+ void SetJetConeSize(Double_t cone) { fJetConeSize = cone ; }
+ void SetJetMinPt(Double_t minpt) { fJetMinPt = minpt ; }
+ void SetJetAreaFraction(Double_t areafr) { fJetAreaFraction = areafr ; }
+ void SetGammaConeSize(Float_t cone) { fGammaConeSize = cone ; }
+
+ // Settings for non standard jet branch
+ TString GetJetBranchName() const { return fJetBranchName ; }
+ void SetJetBranchName(const char *name) { fJetBranchName = name ; }
+ void SwitchOnNonStandardJetFromReader() { fNonStandardJetFromReader = kTRUE ; }
+ void SwitchOffNonStandardJetFromReader() { fNonStandardJetFromReader = kFALSE; }
+ Bool_t IsNonStandardJetFromReader() { return fNonStandardJetFromReader ; }
+
+ TString GetBkgJetBranchName() const { return fBkgJetBranchName ; }
+ void SetBkgJetBranchName(const char *name) { fBkgJetBranchName = name ; }
+ void SwitchOnBackgroundJetFromReader() { fBackgroundJetFromReader = kTRUE ; }
+ void SwitchOffBackgroundJetFromReader() { fBackgroundJetFromReader = kFALSE ; }
+ Bool_t IsBackgroundJetFromReader() { return fBackgroundJetFromReader ; }
+
+ //switches for photons
+ void SwitchOnBackgroundSubtractionGamma() { fUseBackgroundSubtractionGamma = kTRUE ; }
+ void SwitchOffBackgroundSubtractionGamma() { fUseBackgroundSubtractionGamma = kFALSE; }
+ Bool_t IsBackgroundSubtractionGamma() { return fUseBackgroundSubtractionGamma ; }
+
+ void CalculateBkg(TVector3 gamma, TVector3 jet,Double_t *vector,Int_t type);
+
+ void SwitchOnSaveGJTree() { fSaveGJTree = kTRUE ; }
+ void SwitchOffSaveGJTree() { fSaveGJTree = kFALSE; }
+ Bool_t IsSaveGJTree() { return fSaveGJTree ; }
+
+ void SwitchOnMostEnergetic() { fMostEnergetic = kTRUE ; fMostOpposite = kFALSE; }
+ void SwitchOffMostEnergetic() { fMostEnergetic = kFALSE; fMostOpposite = kTRUE ; }
+ void SwitchOffMostOpposite() { fMostEnergetic = kTRUE ; fMostOpposite = kFALSE; }
+ void SwitchOnMostOpposite() { fMostEnergetic = kFALSE; fMostOpposite = kTRUE ; }
+ Bool_t IsMostEnergetic() { return fMostEnergetic ; }
+ Bool_t IsMostOpposite() { return fMostOpposite; }
+
+ //switches for histograms
+ void SwitchOnHistogramJetBkg() { fUseHistogramJetBkg = kTRUE ; }
+ void SwitchOffHistogramJetBkg() { fUseHistogramJetBkg = kFALSE; }
+ Bool_t IsHistogramJetBkg() { return fUseHistogramJetBkg ; }
+
+ void SwitchOnHistogramTracks() { fUseHistogramTracks = kTRUE ; }
+ void SwitchOffHistogramTracks() { fUseHistogramTracks = kFALSE; }
+ Bool_t IsHistogramTracks() { return fUseHistogramTracks ; }
+
+ void SwitchOnHistogramJetTracks() { fUseHistogramJetTracks = kTRUE ; }
+ void SwitchOffHistogramJetTracks() { fUseHistogramJetTracks = kFALSE; }
+ Bool_t IsHistogramJetTracks() { return fUseHistogramJetTracks ; }
+
private:
//selection parameters
Double_t fDeltaPhiMaxCut ; //! Minimum Delta Phi Gamma-Leading
- Double_t fDeltaPhiMinCut ; //! Maximum Delta Phi Gamma-Leading
- Double_t fRatioMaxCut ; //! Jet/ particle Ratio cut maximum
+ Double_t fDeltaPhiMinCut ; //! Maximum Delta Phi Gamma-Leading
+ Double_t fRatioMaxCut ; //! Jet/particle Ratio cut maximum
Double_t fRatioMinCut ; //! Jet/particle Ratio cut minimum
- Double_t fConeSize ; //! Jet cone size
+ Double_t fConeSize ; //! Jet cone size to calculate fragmentation function
Double_t fPtThresholdInCone ; //! Jet pT threshold in jet cone
- Bool_t fUseJetRefTracks ; //! Use track references from JETAN not the AOD tracks
- Bool_t fMakeCorrelationInHistoMaker ; //!Make particle-jet correlation in histogram maker
- Bool_t fSelectIsolated ; // Select only trigger particles isolated
+ Bool_t fUseJetRefTracks ; //! Use track references from JETAN not the AOD tracks to calculate fragmentation function
+ Bool_t fMakeCorrelationInHistoMaker ; //!Make particle-jet correlation in histogram maker
+ Bool_t fSelectIsolated ; //! Select only trigger particles isolated
+ Double_t fJetConeSize ; //! Reconstructed jet cone size
+ Double_t fJetMinPt ; //! Minumum jet pt, default 5GeV/c
+ Double_t fJetAreaFraction ; //! Jet area fraction X in X*pi*R^2, default 0.6
+ Bool_t fNonStandardJetFromReader; //! use non standard jet from reader //new
+ TString fJetBranchName ;//! name of jet branch not set in reader part //new
+ Bool_t fBackgroundJetFromReader; //! use background jet from reader //new
+ TString fBkgJetBranchName ;//! name of background jet branch not set in reader part //new
+
+ Double_t fGammaConeSize ; //! Isolation cone radius
+ Bool_t fUseBackgroundSubtractionGamma;//! flag to use backgrouind subtraction for photons or not
+ Bool_t fSaveGJTree;//! flag to save gamma-jet tree
+ Bool_t fMostEnergetic;//! flag to choose gamma-jet pairs most energetic
+ Bool_t fMostOpposite;//! flag to choose gamma-jet pairs most opposite
+
+ Bool_t fUseHistogramJetBkg;//! flag to save bkg jet histograms
+ Bool_t fUseHistogramTracks;//! flag to save CTS tracks features
+ Bool_t fUseHistogramJetTracks;//! flag to save jet tracks features
+
+ TRandom2 * fGenerator;//! pointer to random generator object
+
// Histograms
- TH2F * fhDeltaEta; //! Difference of jet eta and trigger particle eta as function of trigger particle pT
- TH2F * fhDeltaPhi; //! Difference of jet phi and trigger particle phi as function of trigger particle pT
+ TH2F * fhDeltaEta; //! Difference of jet eta and trigger particle eta as function of trigger particle pT
+ //TH2F * fhDeltaPhi; //! Difference of jet phi and trigger particle phi as function of trigger particle pT
+ TH2F * fhDeltaPhiCorrect; //! Difference of jet phi and trigger particle phi as function of trigger particle pT
+ TH2F * fhDeltaPhi0PiCorrect; //! Difference of jet phi and trigger particle phi as function of trigger particle pT
+
TH2F * fhDeltaPt; //! Difference of jet pT and trigger particle pT as function of trigger particle pT
TH2F * fhPtRatio; //! Ratio of jet pT and trigger particle pT as function of trigger particle pT
TH2F * fhPt; //! jet pT vs trigger particle pT
- TH2F * fhFFz ; //! Accepted reconstructed jet fragmentation function, z=ptjet/pttrig
- TH2F * fhFFxi; //! Accepted reconstructed jet fragmentation function, xsi = ln(pttrig/ptjet)
+ TH2F * fhFFz ; //! Accepted reconstructed jet fragmentation function, z=pt^particle,jet/pttrig
+ TH2F * fhFFxi; //! Accepted reconstructed jet fragmentation function, xsi = ln(pttrig/pt^particle,jet)
TH2F * fhFFpt; //! Jet particle pt distribution in cone
TH2F * fhNTracksInCone; //! jet multiplicity in cone
+ TH2F * fhJetFFz ; //! Accepted reconstructed jet fragmentation function, z=pt^particle,jet/ptjet
+ TH2F * fhJetFFxi; //! Accepted reconstructed jet fragmentation function, xsi = ln(ptjet/pt^particle,jet)
+ TH2F * fhJetFFpt; //! Jet particle pt distribution in jet cone
+ TH2F * fhJetFFzCor ; //! Accepted reconstructed jet fragmentation function, z=pt^particle,jet*-cos(jet,trig)/ptjet
+ TH2F * fhJetFFxiCor; //! Accepted reconstructed jet fragmentation function, xsi = ln(ptjet/pt^particle*-cos(jet,trig),jet)
+
+ //background from RC
+ TH2F * fhBkgFFz[5] ; //! Background fragmentation function, z=ptjet/pttrig
+ TH2F * fhBkgFFxi[5]; //! Background fragmentation function, xsi = ln(pttrig/ptjet)
+ TH2F * fhBkgFFpt[5]; //! Background particle pt distribution in cone
+ TH2F * fhBkgNTracksInCone[5]; //! Background multiplicity in cone
+ TH2F * fhBkgSumPtInCone[5]; //! Background sum pt in cone
+ TH2F * fhBkgSumPtnTracksInCone[5];//! Background sum pt over ntracks in cone
+
+ //temporary histograms
+ TH2F * fhNjetsNgammas; //! Number of jets vs number of photons in the event
+ TH1F * fhCuts; //! Number of events after cuts
+
+ TH2F * fhDeltaEtaBefore; //! Difference of jet eta and trigger particle eta as function of trigger particle pT
+ TH2F * fhDeltaPhiBefore; //! Difference of jet phi and trigger particle phi as function of trigger particle pT
+ TH2F * fhDeltaPtBefore; //! Difference of jet pT and trigger particle pT as function of trigger particle pT
+ TH2F * fhPtRatioBefore; //! Ratio of jet pT and trigger particle pT as function of trigger particle pT
+ TH2F * fhPtBefore; //! jet pT vs trigger particle pT
+ TH2F * fhDeltaPhi0PiCorrectBefore; //! Difference of jet phi and trigger particle phi (0,pi) as function of trigger particle pT
+
+ //temporary jet histograms
+ TH1F * fhJetPtBefore; //! Pt of all jets
+ TH1F * fhJetPt; //! Pt of all jets after bkg correction
+ TH1F * fhJetPtMostEne; //! Pt of the most energetic jet
+ TH1F * fhJetPhi; //! Phi of all jets
+ TH1F * fhJetEta; //! Eta of all jets
+ TH2F * fhJetEtaVsPt; //! Eta of all jets vs pt
+ TH2F * fhJetPhiVsEta; //! Phi vs eta of all jets
+ TH2F * fhJetEtaVsNpartInJet; //! Eta vs number of particles in jet for all jets
+ TH2F * fhJetEtaVsNpartInJetBkg; //! Eta vs number of particles in jet for background subtracted jets
+ TH2F * fhJetChBkgEnergyVsPt; //! background energy of each charged jet vs jet pt
+ TH2F * fhJetChAreaVsPt; //! area of each charged jet vs jet pt
+ TH2F * fhTrackPhiVsEta; //! Phi vs eta of all chosen tracks in all events
+ TH1F * fhTrackAveTrackPt; //! average track pt in event
+ TH1F * fhJetNjetOverPtCut[10]; //! number of reconstructed jets in event over pT threshold
+ TH2F * fhJetChBkgEnergyVsArea; //! area of each charged jet vs jet background
+ TH2F * fhJetRhoVsPt; //! jet energy density vs jet pt
+ TH2F * fhJetRhoVsCentrality; //! jet energy density vs centrality
+ TH1F * fhJetNparticlesInJet; //! number of particles in jets
+ TH2F * fhJetDeltaEtaDeltaPhi; //! delta eta vs delta phi for (jet-track) <-0.8,0.8>
+ TH2F * fhJetDeltaEtaDeltaPhiAllTracks;//! delta eta vs delta phi for (jet-track) <-pi,pi>
+
+
+
+ TH1F * fhJetAveTrackPt; //! average track from jets pt in event
+ TH2F * fhJetNtracksInJetAboveThr[6]; //! number of tracks in jet with pt above 0,1,2,3,4,5GeV
+ TH2F * fhJetRatioNTrkAboveToNTrk[5]; //! ratio tracks in jet with pt above 1,2,3,4,5GeV to ntracks
+ TH2F * fhJetNtrackRatioMostEne[5]; //! the same for most energetic jet
+ TH2F * fhJetNtrackRatioJet5GeV[5]; //! the same for pt jet above 5 GeV
+ TH2F * fhJetNtrackRatioLead5GeV[5]; //! the same for jet with leading particle pt>5GeV
+
+ //temporary background jet histograms
+ TH1F * fhBkgJetBackground[4]; //! background from jet bkg branch
+ TH1F * fhBkgJetSigma[4]; //! sigma of jet in backgroud branch
+ TH1F * fhBkgJetArea[4]; //! area of jet in bkg branch
+
+ //temporary photon histograms
+ TH1F * fhPhotonPtMostEne; //! most pt photon
+ TH1F * fhPhotonAverageEnergy; //! average energy of photon
+ TH1F * fhPhotonRatioAveEneToMostEne; //! ratio average energy to most energetic photon
+ TH1F * fhPhotonAverageEnergyMinus1; //! average energy of photon w/o most ene photon
+ TH1F * fhPhotonRatioAveEneMinus1ToMostEne; //! ratio average energy of photon w/o most ene photon to most energetic photon
+ TH1F * fhPhotonNgammaMoreAverageToNgamma; //! number of gammas with ene. more than average ene divided by no. of gammas
+ TH1F * fhPhotonNgammaMoreAverageMinus1ToNgamma; //! number of gammas with ene. more than average ene (w/o most ene gamma) divided by no. of gammas
+ TH1F * fhPhotonNgammaOverPtCut[10]; //! number of photons in event over pT threshold
+ TH2F * fhPhotonBkgRhoVsNtracks; //! average energy in one cell vs n tracks
+ TH2F * fhPhotonBkgRhoVsNclusters; //! average energy in one cell vs n clusters
+ TH2F * fhPhotonBkgRhoVsCentrality; //! average energy in one cell vs centrality
+ TH2F * fhPhotonBkgRhoVsNcells; //! average energy in one cell vs n cells
+ TH1F * fhPhotonPt; //! pt of gamma before bkg correction
+ TH1F * fhPhotonPtCorrected; //! pt of gamma after background correction
+ TH1F * fhPhotonPtCorrectedZoom; //! pt of gamma after background correction in +-5 GeV/c
+ TH1F * fhPhotonPtDiff; //! bkg correction = n_cells * median_rho
+ TH2F * fhPhotonPtDiffVsCentrality; //! correction vs centrality
+ TH2F * fhPhotonPtDiffVsNcells; //! correction vs Ncells
+ TH2F * fhPhotonPtDiffVsNtracks; //! correction vs Ntracks
+ TH2F * fhPhotonPtDiffVsNclusters; //! correction vs Nclustres
+
+ TH1F * fhPhotonSumPtInCone; //! sum pt in cone before correction
+ TH1F * fhPhotonSumPtCorrectInCone; //! sum pt in cone afrer correction
+ TH1F * fhPhotonSumPtChargedInCone; //! sum pt of charged tracks in the cone before correction
+
+
+ //temporary jet histograms after selection
+ TH2F * fhSelectedJetPhiVsEta; //! phi vs eta of selected jet
+ TH2F * fhSelectedJetChBkgEnergyVsPtJet; //! background energy of selected charged jet vs jet pt
+ TH2F * fhSelectedJetChAreaVsPtJet; //! area of selected charged jet vs jet pt
+ TH1F * fhSelectedJetNjet; //! number of jets in selected event
+ TH1F * fhSelectedNtracks; //! number of tracks in selected event
+ TH2F * fhSelectedTrackPhiVsEta; //! Phi vs eta of all chosen tracks in selected events
+
+ TH1F * fhCuts2; //! efficienct cuts
+
+ //temporary photon histogram after selection
+ TH2F * fhSelectedPhotonNLMVsPt; //! nlm vs pt for selected photons
+ TH2F * fhSelectedPhotonLambda0VsPt; //! lambda0 vs pt for selected photons
+ TH2F * fhRandomPhiEta[5]; //! eta and phi from random generator
+
+ //tree with data gamma and jet
+ TTree * fTreeGJ; //! gamma-jet tree
+ Double_t fGamPt; //! pt
+ Double_t fGamLambda0; //! lambda 0
+ Int_t fGamNLM; //! NLM
+ Double_t fGamSumPtCh; //! energy in isolation cone charged
+ Double_t fGamTime; //! time
+ Int_t fGamNcells; //! ncells
+ Double_t fGamEta; //! eta photon
+ Double_t fGamPhi; //! phi photon
+ Double_t fGamSumPtNeu; //! energy in isolation cone neutral
+ Int_t fGamNtracks; //! number of tracks in iso cone
+ Int_t fGamNclusters; //! number of clusters in iso cone
+ Double_t fGamAvEne; //! average energy of photons (without most ene)
+ Double_t fJetPhi; //! jet phi
+ Double_t fJetEta; //! eta phi
+ Double_t fJetPt; //! jet pt
+ Double_t fJetBkgChEne; //! bkg energy of jet
+ Double_t fJetArea; //! jet area
+ Int_t fJetNtracks; //! number of jet tracks
+ Int_t fJetNtracks1; //! number of jet tracks with pt>1 GeV/c
+ Int_t fJetNtracks2; //! number of jet tracks with pt>2 GeV/c
+ Double_t fJetRho; //! jet rho in event
+ Int_t fEventNumber; //! event number
+ Int_t fNtracks; //! n tracks in event
+ Double_t fZvertex; //! z vertex
+ Double_t fCentrality; //! centrality
+ Bool_t fIso; //! flag isolated or not
+ Double_t fGamRho; //! background energy for photons per cell in EMCal
+
AliAnaParticleJetFinderCorrelation( const AliAnaParticleJetFinderCorrelation & g) ; // cpy ctor
AliAnaParticleJetFinderCorrelation & operator = (const AliAnaParticleJetFinderCorrelation & g) ; // cpy assignment
- ClassDef(AliAnaParticleJetFinderCorrelation,2)
+ ClassDef(AliAnaParticleJetFinderCorrelation,3)
} ;
fhMCPi0MassPtRec(), fhMCPi0MassPtTrue(), fhMCPi0PtTruePtRec(),
fhMCEtaMassPtRec(), fhMCEtaMassPtTrue(), fhMCEtaPtTruePtRec(),
fhMCPi0PtOrigin(0x0), fhMCEtaPtOrigin(0x0),
+fhMCPi0ProdVertex(0), fhMCEtaProdVertex(0),
+fhMCPi0ProdVertexInner(0), fhMCEtaProdVertexInner(0),
fhReMCFromConversion(0), fhReMCFromNotConversion(0), fhReMCFromMixConversion(0),
fhCosThStarPrimPi0(0), fhCosThStarPrimEta(0)//,
{
if(fCheckConversion)
{
fhReConv = new TH2F("hReConv","Real Pair with one recombined conversion ",nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhReConv->SetXTitle("p_{T} (GeV/c)");
- fhReConv->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReConv->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReConv->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReConv) ;
fhReConv2 = new TH2F("hReConv2","Real Pair with 2 recombined conversion ",nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhReConv2->SetXTitle("p_{T} (GeV/c)");
- fhReConv2->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReConv2->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReConv2->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReConv2) ;
if(DoOwnMix())
{
fhMiConv = new TH2F("hMiConv","Mixed Pair with one recombined conversion ",nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMiConv->SetXTitle("p_{T} (GeV/c)");
- fhMiConv->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMiConv->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMiConv->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMiConv) ;
fhMiConv2 = new TH2F("hMiConv2","Mixed Pair with 2 recombined conversion ",nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMiConv2->SetXTitle("p_{T} (GeV/c)");
- fhMiConv2->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMiConv2->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMiConv2->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMiConv2) ;
}
}
//printf("cen %d, pid %d, asy %d, Index %d\n",ic,ipid,iasym,index);
//Distance to bad module 1
snprintf(key, buffersize,"hRe_cen%d_pidbit%d_asy%d_dist1",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
+ snprintf(title, buffersize,"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhRe1[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhRe1[index]->SetXTitle("p_{T} (GeV/c)");
- fhRe1[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhRe1[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhRe1[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
//printf("name: %s\n ",fhRe1[index]->GetName());
outputContainer->Add(fhRe1[index]) ;
{
//Distance to bad module 2
snprintf(key, buffersize,"hRe_cen%d_pidbit%d_asy%d_dist2",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
+ snprintf(title, buffersize,"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhRe2[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhRe2[index]->SetXTitle("p_{T} (GeV/c)");
- fhRe2[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhRe2[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhRe2[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhRe2[index]) ;
//Distance to bad module 3
snprintf(key, buffersize,"hRe_cen%d_pidbit%d_asy%d_dist3",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 3",
+ snprintf(title, buffersize,"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 3",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhRe3[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhRe3[index]->SetXTitle("p_{T} (GeV/c)");
- fhRe3[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhRe3[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhRe3[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhRe3[index]) ;
}
{
//Distance to bad module 1
snprintf(key, buffersize,"hReInvPt_cen%d_pidbit%d_asy%d_dist1",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
+ snprintf(title, buffersize,"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhReInvPt1[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhReInvPt1[index]->SetXTitle("p_{T} (GeV/c)");
- fhReInvPt1[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReInvPt1[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReInvPt1[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReInvPt1[index]) ;
if(fFillBadDistHisto){
//Distance to bad module 2
snprintf(key, buffersize,"hReInvPt_cen%d_pidbit%d_asy%d_dist2",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
+ snprintf(title, buffersize,"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhReInvPt2[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhReInvPt2[index]->SetXTitle("p_{T} (GeV/c)");
- fhReInvPt2[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReInvPt2[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReInvPt2[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReInvPt2[index]) ;
//Distance to bad module 3
snprintf(key, buffersize,"hReInvPt_cen%d_pidbit%d_asy%d_dist3",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 3",
+ snprintf(title, buffersize,"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 3",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhReInvPt3[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhReInvPt3[index]->SetXTitle("p_{T} (GeV/c)");
- fhReInvPt3[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReInvPt3[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReInvPt3[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReInvPt3[index]) ;
}
}
{
//Distance to bad module 1
snprintf(key, buffersize,"hMi_cen%d_pidbit%d_asy%d_dist1",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
+ snprintf(title, buffersize,"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhMi1[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMi1[index]->SetXTitle("p_{T} (GeV/c)");
- fhMi1[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMi1[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMi1[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMi1[index]) ;
if(fFillBadDistHisto){
//Distance to bad module 2
snprintf(key, buffersize,"hMi_cen%d_pidbit%d_asy%d_dist2",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
+ snprintf(title, buffersize,"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhMi2[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMi2[index]->SetXTitle("p_{T} (GeV/c)");
- fhMi2[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMi2[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMi2[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMi2[index]) ;
//Distance to bad module 3
snprintf(key, buffersize,"hMi_cen%d_pidbit%d_asy%d_dist3",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 3",
+ snprintf(title, buffersize,"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 3",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhMi3[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMi3[index]->SetXTitle("p_{T} (GeV/c)");
- fhMi3[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMi3[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMi3[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMi3[index]) ;
}
{
//Distance to bad module 1
snprintf(key, buffersize,"hMiInvPt_cen%d_pidbit%d_asy%d_dist1",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
+ snprintf(title, buffersize,"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhMiInvPt1[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMiInvPt1[index]->SetXTitle("p_{T} (GeV/c)");
- fhMiInvPt1[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMiInvPt1[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMiInvPt1[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMiInvPt1[index]) ;
if(fFillBadDistHisto){
//Distance to bad module 2
snprintf(key, buffersize,"hMiInvPt_cen%d_pidbit%d_asy%d_dist2",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
+ snprintf(title, buffersize,"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhMiInvPt2[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMiInvPt2[index]->SetXTitle("p_{T} (GeV/c)");
- fhMiInvPt2[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMiInvPt2[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMiInvPt2[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMiInvPt2[index]) ;
//Distance to bad module 3
snprintf(key, buffersize,"hMiInvPt_cen%d_pidbit%d_asy%d_dist3",ic,ipid,iasym) ;
- snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f,dist bad 3",
+ snprintf(title, buffersize,"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f,dist bad 3",
ic,fPIDBits[ipid], fAsymCuts[iasym]) ;
fhMiInvPt3[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMiInvPt3[index]->SetXTitle("p_{T} (GeV/c)");
- fhMiInvPt3[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMiInvPt3[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMiInvPt3[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMiInvPt3[index]) ;
}
}
if(fFillAsymmetryHisto)
{
- fhRePtAsym = new TH2F("hRePtAsym","Asymmetry vs pt, for pairs",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
- fhRePtAsym->SetXTitle("p_{T} (GeV/c)");
- fhRePtAsym->SetYTitle("Asymmetry");
+ fhRePtAsym = new TH2F("hRePtAsym","#it{Asymmetry} vs #it{p}_{T} , for pairs",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
+ fhRePtAsym->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhRePtAsym->SetYTitle("#it{Asymmetry}");
outputContainer->Add(fhRePtAsym);
- fhRePtAsymPi0 = new TH2F("hRePtAsymPi0","Asymmetry vs pt, for pairs close to #pi^{0} mass",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
- fhRePtAsymPi0->SetXTitle("p_{T} (GeV/c)");
+ fhRePtAsymPi0 = new TH2F("hRePtAsymPi0","#it{Asymmetry} vs #it{p}_{T} , for pairs close to #pi^{0} mass",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
+ fhRePtAsymPi0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhRePtAsymPi0->SetYTitle("Asymmetry");
outputContainer->Add(fhRePtAsymPi0);
- fhRePtAsymEta = new TH2F("hRePtAsymEta","Asymmetry vs pt, for pairs close to #eta mass",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
- fhRePtAsymEta->SetXTitle("p_{T} (GeV/c)");
- fhRePtAsymEta->SetYTitle("Asymmetry");
+ fhRePtAsymEta = new TH2F("hRePtAsymEta","#it{Asymmetry} vs #it{p}_{T} , for pairs close to #eta mass",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
+ fhRePtAsymEta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhRePtAsymEta->SetYTitle("#it{Asymmetry}");
outputContainer->Add(fhRePtAsymEta);
}
fhRePIDBits = new TH2F*[fNPIDBits];
for(Int_t ipid=0; ipid<fNPIDBits; ipid++){
snprintf(key, buffersize,"hRe_pidbit%d",ipid) ;
- snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for PIDBit=%d",fPIDBits[ipid]) ;
+ snprintf(title, buffersize,"Real #it{M}_{#gamma#gamma} distr. for PIDBit=%d",fPIDBits[ipid]) ;
fhRePIDBits[ipid] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhRePIDBits[ipid]->SetXTitle("p_{T} (GeV/c)");
- fhRePIDBits[ipid]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhRePIDBits[ipid]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhRePIDBits[ipid]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhRePIDBits[ipid]) ;
}// pid bit loop
for(Int_t iasym=0; iasym<fNAsymCuts; iasym++)
{
snprintf(key, buffersize,"hRe_pt%d_cell%d_asym%d",ipt,icell,iasym) ;
- snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for pt >%2.2f, ncell>%d and asym >%1.2f ",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]) ;
+ snprintf(title, buffersize,"Real #it{M}_{#gamma#gamma} distr. for pt >%2.2f, ncell>%d and asym >%1.2f ",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]) ;
Int_t index = ((ipt*fNCellNCuts)+icell)*fNAsymCuts + iasym;
//printf("ipt %d, icell %d, iassym %d, index %d\n",ipt, icell, iasym, index);
fhRePtNCellAsymCuts[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhRePtNCellAsymCuts[index]->SetXTitle("p_{T} (GeV/c)");
- fhRePtNCellAsymCuts[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhRePtNCellAsymCuts[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhRePtNCellAsymCuts[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhRePtNCellAsymCuts[index]) ;
snprintf(key, buffersize,"hMi_pt%d_cell%d_asym%d",ipt,icell,iasym) ;
- snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for pt >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]) ;
+ snprintf(title, buffersize,"Mixed #it{M}_{#gamma#gamma} distr. for pt >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]) ;
fhMiPtNCellAsymCuts[index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMiPtNCellAsymCuts[index]->SetXTitle("p_{T} (GeV/c)");
- fhMiPtNCellAsymCuts[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMiPtNCellAsymCuts[index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMiPtNCellAsymCuts[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMiPtNCellAsymCuts[index]) ;
if(fFillSMCombinations)
for(Int_t iSM = 0; iSM < fNModules; iSM++)
{
snprintf(key, buffersize,"hRe_pt%d_cell%d_asym%d_SM%d",ipt,icell,iasym,iSM) ;
- snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for pt >%2.2f, ncell>%d and asym >%1.2f, SM %d ",
+ snprintf(title, buffersize,"Real #it{M}_{#gamma#gamma} distr. for pt >%2.2f, ncell>%d and asym >%1.2f, SM %d ",
fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym],iSM) ;
fhRePtNCellAsymCutsSM[iSM][index] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhRePtNCellAsymCutsSM[iSM][index]->SetXTitle("p_{T} (GeV/c)");
- fhRePtNCellAsymCutsSM[iSM][index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhRePtNCellAsymCutsSM[iSM][index]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhRePtNCellAsymCutsSM[iSM][index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhRePtNCellAsymCutsSM[iSM][index]) ;
}
fhRePtMult = new TH3F*[fNAsymCuts] ;
for(Int_t iasym = 0; iasym<fNAsymCuts; iasym++)
{
- fhRePtMult[iasym] = new TH3F(Form("hRePtMult_asym%d",iasym),Form("(p_{T},C,M)_{#gamma#gamma}, A<%1.2f",fAsymCuts[iasym]),
+ fhRePtMult[iasym] = new TH3F(Form("hRePtMult_asym%d",iasym),Form("(#it{p}_{T},C,M)_{#gamma#gamma}, A<%1.2f",fAsymCuts[iasym]),
nptbins,ptmin,ptmax,ntrmbins,ntrmmin,ntrmmax,nmassbins,massmin,massmax);
- fhRePtMult[iasym]->SetXTitle("p_{T} (GeV/c)");
+ fhRePtMult[iasym]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhRePtMult[iasym]->SetYTitle("Track multiplicity");
- fhRePtMult[iasym]->SetZTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhRePtMult[iasym]->SetZTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhRePtMult[iasym]) ;
}
}
fhReSS[0] = new TH2F("hRe_SS_Tight"," 0.01 < #lambda_{0}^{2} < 0.4",
nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhReSS[0]->SetXTitle("p_{T} (GeV/c)");
- fhReSS[0]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReSS[0]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReSS[0]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReSS[0]) ;
fhReSS[1] = new TH2F("hRe_SS_Loose"," #lambda_{0}^{2} > 0.4",
nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhReSS[1]->SetXTitle("p_{T} (GeV/c)");
- fhReSS[1]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReSS[1]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReSS[1]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReSS[1]) ;
fhReSS[2] = new TH2F("hRe_SS_Both"," cluster_{1} #lambda_{0}^{2} > 0.4; cluster_{2} 0.01 < #lambda_{0}^{2} < 0.4",
nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhReSS[2]->SetXTitle("p_{T} (GeV/c)");
- fhReSS[2]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReSS[2]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReSS[2]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReSS[2]) ;
}
{
fhReMCFromConversion = new TH2F("hReMCFromConversion","Invariant mass of 2 clusters originated in conversions",
nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhReMCFromConversion->SetXTitle("p_{T} (GeV/c)");
- fhReMCFromConversion->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReMCFromConversion->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReMCFromConversion->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReMCFromConversion) ;
fhReMCFromNotConversion = new TH2F("hReMCNotFromConversion","Invariant mass of 2 clusters not originated in conversions",
nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhReMCFromNotConversion->SetXTitle("p_{T} (GeV/c)");
- fhReMCFromNotConversion->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReMCFromNotConversion->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReMCFromNotConversion->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReMCFromNotConversion) ;
fhReMCFromMixConversion = new TH2F("hReMCFromMixConversion","Invariant mass of 2 clusters one from conversion and the other not",
nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhReMCFromMixConversion->SetXTitle("p_{T} (GeV/c)");
- fhReMCFromMixConversion->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReMCFromMixConversion->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReMCFromMixConversion->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReMCFromMixConversion) ;
//Pi0
- fhPrimPi0E = new TH1F("hPrimPi0E","Primary pi0 E, Y<1",nptbins,ptmin,ptmax) ;
- fhPrimPi0AccE = new TH1F("hPrimPi0AccE","Primary pi0 E with both photons in acceptance",nptbins,ptmin,ptmax) ;
- fhPrimPi0E ->SetXTitle("E (GeV)");
- fhPrimPi0AccE->SetXTitle("E (GeV)");
+ fhPrimPi0E = new TH1F("hPrimPi0E","Primary #pi^{0} E, Y<1",nptbins,ptmin,ptmax) ;
+ fhPrimPi0AccE = new TH1F("hPrimPi0AccE","Primary #pi^{0} E with both photons in acceptance",nptbins,ptmin,ptmax) ;
+ fhPrimPi0E ->SetXTitle("#it{E} (GeV)");
+ fhPrimPi0AccE->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhPrimPi0E) ;
outputContainer->Add(fhPrimPi0AccE) ;
- fhPrimPi0PtRejected = new TH1F("hPrimPi0PtRejected","Primary pi0 pt",nptbins,ptmin,ptmax) ;
- fhPrimPi0Pt = new TH1F("hPrimPi0Pt","Primary pi0 pt, Y<1",nptbins,ptmin,ptmax) ;
- fhPrimPi0AccPt = new TH1F("hPrimPi0AccPt","Primary pi0 pt with both photons in acceptance",nptbins,ptmin,ptmax) ;
- fhPrimPi0Pt ->SetXTitle("p_{T} (GeV/c)");
- fhPrimPi0AccPt->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0PtRejected = new TH1F("hPrimPi0PtRejected","Primary #pi^{0} pt",nptbins,ptmin,ptmax) ;
+ fhPrimPi0Pt = new TH1F("hPrimPi0Pt","Primary #pi^{0} #it{p}_{T} , #it{Y}<1",nptbins,ptmin,ptmax) ;
+ fhPrimPi0AccPt = new TH1F("hPrimPi0AccPt","Primary #pi^{0} pt with both photons in acceptance",nptbins,ptmin,ptmax) ;
+ fhPrimPi0Pt ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhPrimPi0AccPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimPi0PtRejected) ;
outputContainer->Add(fhPrimPi0Pt) ;
outputContainer->Add(fhPrimPi0AccPt) ;
Int_t netabinsopen = TMath::Nint(netabins*4/(etamax-etamin));
fhPrimPi0Y = new TH2F("hPrimPi0Rapidity","Rapidity of primary pi0",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
- fhPrimPi0Y ->SetYTitle("Rapidity");
- fhPrimPi0Y ->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0Y ->SetYTitle("#it{Rapidity}");
+ fhPrimPi0Y ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimPi0Y) ;
fhPrimPi0Yeta = new TH2F("hPrimPi0PseudoRapidity","PseudoRapidity of primary pi0",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
fhPrimPi0Yeta ->SetYTitle("#eta");
- fhPrimPi0Yeta ->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0Yeta ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimPi0Yeta) ;
- fhPrimPi0YetaYcut = new TH2F("hPrimPi0PseudoRapidityYcut","PseudoRapidity of primary pi0, |Y|<1",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
+ fhPrimPi0YetaYcut = new TH2F("hPrimPi0PseudoRapidityYcut","PseudoRapidity of primary pi0, |#it{Y}|<1",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
fhPrimPi0YetaYcut ->SetYTitle("#eta");
- fhPrimPi0YetaYcut ->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0YetaYcut ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimPi0YetaYcut) ;
- fhPrimPi0AccY = new TH2F("hPrimPi0AccRapidity","Rapidity of primary pi0 with accepted daughters",nptbins,ptmin,ptmax,netabins,etamin,etamax) ;
+ fhPrimPi0AccY = new TH2F("hPrimPi0AccRapidity","Rapidity of primary #pi^{0} with accepted daughters",nptbins,ptmin,ptmax,netabins,etamin,etamax) ;
fhPrimPi0AccY->SetYTitle("Rapidity");
- fhPrimPi0AccY->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0AccY->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimPi0AccY) ;
- fhPrimPi0AccYeta = new TH2F("hPrimPi0AccPseudoRapidity","PseudoRapidity of primary pi0 with accepted daughters",nptbins,ptmin,ptmax,netabins,etamin,etamax) ;
+ fhPrimPi0AccYeta = new TH2F("hPrimPi0AccPseudoRapidity","PseudoRapidity of primary #pi^{0} with accepted daughters",nptbins,ptmin,ptmax,netabins,etamin,etamax) ;
fhPrimPi0AccYeta ->SetYTitle("#eta");
- fhPrimPi0AccYeta ->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0AccYeta ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimPi0AccYeta) ;
Int_t nphibinsopen = TMath::Nint(nphibins*TMath::TwoPi()/(phimax-phimin));
fhPrimPi0Phi = new TH2F("hPrimPi0Phi","Azimuthal of primary pi0, Y<1",nptbins,ptmin,ptmax,nphibinsopen,0,360) ;
fhPrimPi0Phi->SetYTitle("#phi (deg)");
- fhPrimPi0Phi->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0Phi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimPi0Phi) ;
- fhPrimPi0AccPhi = new TH2F("hPrimPi0AccPhi","Azimuthal of primary pi0 with accepted daughters",nptbins,ptmin,ptmax,
+ fhPrimPi0AccPhi = new TH2F("hPrimPi0AccPhi","Azimuthal of primary #pi^{0} with accepted daughters",nptbins,ptmin,ptmax,
nphibins,phimin*TMath::RadToDeg(),phimax*TMath::RadToDeg()) ;
fhPrimPi0AccPhi->SetYTitle("#phi (deg)");
- fhPrimPi0AccPhi->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0AccPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimPi0AccPhi) ;
- fhPrimPi0PtCentrality = new TH2F("hPrimPi0PtCentrality","Primary pi0 pt vs reco centrality, Y<1",nptbins,ptmin,ptmax, 100, 0, 100) ;
- fhPrimPi0AccPtCentrality = new TH2F("hPrimPi0AccPtCentrality","Primary pi0 with both photons in acceptance pt vs reco centrality",nptbins,ptmin,ptmax, 100, 0, 100) ;
- fhPrimPi0PtCentrality ->SetXTitle("p_{T} (GeV/c)");
- fhPrimPi0AccPtCentrality->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0PtCentrality = new TH2F("hPrimPi0PtCentrality","Primary #pi^{0} #it{p}_{T} vs reco centrality, Y<1",nptbins,ptmin,ptmax, 100, 0, 100) ;
+ fhPrimPi0AccPtCentrality = new TH2F("hPrimPi0AccPtCentrality","Primary #pi^{0} with both photons in acceptance #it{p}_{T} vs reco centrality",nptbins,ptmin,ptmax, 100, 0, 100) ;
+ fhPrimPi0PtCentrality ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhPrimPi0AccPtCentrality->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPrimPi0PtCentrality ->SetYTitle("Centrality");
fhPrimPi0AccPtCentrality->SetYTitle("Centrality");
outputContainer->Add(fhPrimPi0PtCentrality) ;
outputContainer->Add(fhPrimPi0AccPtCentrality) ;
- fhPrimPi0PtEventPlane = new TH2F("hPrimPi0PtEventPlane","Primary pi0 pt vs reco event plane angle, Y<1",nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
- fhPrimPi0AccPtEventPlane = new TH2F("hPrimPi0AccPtEventPlane","Primary pi0 with both photons in acceptance pt vs reco event plane angle",nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
- fhPrimPi0PtEventPlane ->SetXTitle("p_{T} (GeV/c)");
- fhPrimPi0AccPtEventPlane->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0PtEventPlane = new TH2F("hPrimPi0PtEventPlane","Primary #pi^{0} #it{p}_{T} vs reco event plane angle, Y<1",nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
+ fhPrimPi0AccPtEventPlane = new TH2F("hPrimPi0AccPtEventPlane","Primary #pi^{0} with both photons in acceptance #it{p}_{T} vs reco event plane angle",nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
+ fhPrimPi0PtEventPlane ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhPrimPi0AccPtEventPlane->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPrimPi0PtEventPlane ->SetYTitle("Event Plane Angle (rad)");
fhPrimPi0AccPtEventPlane->SetYTitle("Event Plane Angle (rad)");
outputContainer->Add(fhPrimPi0PtEventPlane) ;
fhPrimEtaE = new TH1F("hPrimEtaE","Primary eta E",nptbins,ptmin,ptmax) ;
fhPrimEtaAccE = new TH1F("hPrimEtaAccE","Primary eta E with both photons in acceptance",nptbins,ptmin,ptmax) ;
- fhPrimEtaE ->SetXTitle("E (GeV)");
- fhPrimEtaAccE->SetXTitle("E (GeV)");
+ fhPrimEtaE ->SetXTitle("#it{E} (GeV)");
+ fhPrimEtaAccE->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhPrimEtaE) ;
outputContainer->Add(fhPrimEtaAccE) ;
fhPrimEtaPtRejected = new TH1F("hPrimEtaPtRejected","Primary eta pt",nptbins,ptmin,ptmax) ;
fhPrimEtaPt = new TH1F("hPrimEtaPt","Primary eta pt",nptbins,ptmin,ptmax) ;
- fhPrimEtaAccPt = new TH1F("hPrimEtaAccPt","Primary eta pt with both photons in acceptance",nptbins,ptmin,ptmax) ;
- fhPrimEtaPt ->SetXTitle("p_{T} (GeV/c)");
- fhPrimEtaAccPt->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaAccPt = new TH1F("hPrimEtaAccPt","Primary eta #it{p}_{T} with both photons in acceptance",nptbins,ptmin,ptmax) ;
+ fhPrimEtaPt ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhPrimEtaAccPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimEtaPtRejected) ;
outputContainer->Add(fhPrimEtaPt) ;
outputContainer->Add(fhPrimEtaAccPt) ;
- fhPrimEtaY = new TH2F("hPrimEtaRapidity","Rapidity of primary eta",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
- fhPrimEtaY->SetYTitle("Rapidity");
- fhPrimEtaY->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaY = new TH2F("hPrimEtaRapidity","Rapidity of primary #eta",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
+ fhPrimEtaY->SetYTitle("#it{Rapidity}");
+ fhPrimEtaY->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimEtaY) ;
- fhPrimEtaYeta = new TH2F("hPrimEtaPseudoRapidityEta","PsuedoRapidity of primary eta",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
- fhPrimEtaYeta->SetYTitle("Rapidity");
- fhPrimEtaYeta->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaYeta = new TH2F("hPrimEtaPseudoRapidityEta","PseudoRapidity of primary #eta",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
+ fhPrimEtaYeta->SetYTitle("#it{Rapidity}");
+ fhPrimEtaYeta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimEtaYeta) ;
- fhPrimEtaYetaYcut = new TH2F("hPrimEtaPseudoRapidityEtaYcut","PseudoRapidity of primary eta, |Y|<1",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
- fhPrimEtaYetaYcut->SetYTitle("PseudoRapidity");
- fhPrimEtaYetaYcut->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaYetaYcut = new TH2F("hPrimEtaPseudoRapidityEtaYcut","PseudoRapidity of primary #eta, |Y|<1",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
+ fhPrimEtaYetaYcut->SetYTitle("#it{Pseudorapidity}");
+ fhPrimEtaYetaYcut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimEtaYetaYcut) ;
- fhPrimEtaAccY = new TH2F("hPrimEtaAccRapidity","Rapidity of primary eta",nptbins,ptmin,ptmax, netabins,etamin,etamax) ;
- fhPrimEtaAccY->SetYTitle("Rapidity");
- fhPrimEtaAccY->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaAccY = new TH2F("hPrimEtaAccRapidity","Rapidity of primary #eta",nptbins,ptmin,ptmax, netabins,etamin,etamax) ;
+ fhPrimEtaAccY->SetYTitle("#it{Rapidity}");
+ fhPrimEtaAccY->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimEtaAccY) ;
- fhPrimEtaAccYeta = new TH2F("hPrimEtaAccPseudoRapidity","PseudoRapidity of primary eta",nptbins,ptmin,ptmax, netabins,etamin,etamax) ;
- fhPrimEtaAccYeta->SetYTitle("PSeudoRapidity");
- fhPrimEtaAccYeta->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaAccYeta = new TH2F("hPrimEtaAccPseudoRapidity","PseudoRapidity of primary #eta",nptbins,ptmin,ptmax, netabins,etamin,etamax) ;
+ fhPrimEtaAccYeta->SetYTitle("#it{Pseudorapidity}");
+ fhPrimEtaAccYeta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimEtaAccYeta) ;
fhPrimEtaPhi = new TH2F("hPrimEtaPhi","Azimuthal of primary eta",nptbins,ptmin,ptmax, nphibins,phimin*TMath::RadToDeg(),phimax*TMath::RadToDeg()) ;
fhPrimEtaPhi->SetYTitle("#phi (deg)");
- fhPrimEtaPhi->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimEtaPhi) ;
fhPrimEtaAccPhi = new TH2F("hPrimEtaAccPhi","Azimuthal of primary eta with accepted daughters",nptbins,ptmin,ptmax, nphibins,phimin*TMath::RadToDeg(),phimax*TMath::RadToDeg()) ;
fhPrimEtaAccPhi->SetYTitle("#phi (deg)");
- fhPrimEtaAccPhi->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaAccPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPrimEtaAccPhi) ;
- fhPrimEtaPtCentrality = new TH2F("hPrimEtaPtCentrality","Primary eta pt vs reco centrality, Y<1",nptbins,ptmin,ptmax, 100, 0, 100) ;
- fhPrimEtaAccPtCentrality = new TH2F("hPrimEtaAccPtCentrality","Primary eta with both photons in acceptance pt vs reco centrality",nptbins,ptmin,ptmax, 100, 0, 100) ;
- fhPrimEtaPtCentrality ->SetXTitle("p_{T} (GeV/c)");
- fhPrimEtaAccPtCentrality->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaPtCentrality = new TH2F("hPrimEtaPtCentrality","Primary eta #it{p}_{T} vs reco centrality, Y<1",nptbins,ptmin,ptmax, 100, 0, 100) ;
+ fhPrimEtaAccPtCentrality = new TH2F("hPrimEtaAccPtCentrality","Primary #eta with both photons in acceptance #it{p}_{T} vs reco centrality",nptbins,ptmin,ptmax, 100, 0, 100) ;
+ fhPrimEtaPtCentrality ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhPrimEtaAccPtCentrality->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPrimEtaPtCentrality ->SetYTitle("Centrality");
fhPrimEtaAccPtCentrality->SetYTitle("Centrality");
outputContainer->Add(fhPrimEtaPtCentrality) ;
outputContainer->Add(fhPrimEtaAccPtCentrality) ;
- fhPrimEtaPtEventPlane = new TH2F("hPrimEtaPtEventPlane","Primary eta pt vs reco event plane angle, Y<1",nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
- fhPrimEtaAccPtEventPlane = new TH2F("hPrimEtaAccPtEventPlane","Primary eta with both photons in acceptance pt vs reco event plane angle",nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
- fhPrimEtaPtEventPlane ->SetXTitle("p_{T} (GeV/c)");
- fhPrimEtaAccPtEventPlane->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaPtEventPlane = new TH2F("hPrimEtaPtEventPlane","Primary #eta #it{p}_{T} vs reco event plane angle, Y<1",nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
+ fhPrimEtaAccPtEventPlane = new TH2F("hPrimEtaAccPtEventPlane","Primary #eta with both photons in acceptance #it{p}_{T} vs reco event plane angle",nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
+ fhPrimEtaPtEventPlane ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhPrimEtaAccPtEventPlane->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPrimEtaPtEventPlane ->SetYTitle("Event Plane Angle (rad)");
fhPrimEtaAccPtEventPlane->SetYTitle("Event Plane Angle (rad)");
outputContainer->Add(fhPrimEtaPtEventPlane) ;
outputContainer->Add(fhPrimPi0OpeningAngle) ;
fhPrimPi0OpeningAngleAsym = new TH2F
- ("hPrimPi0OpeningAngleAsym","Angle between all primary #gamma pair vs Asymmetry, p_{T}>5 GeV/c",100,0,1,100,0,0.5);
+ ("hPrimPi0OpeningAngleAsym","Angle between all primary #gamma pair vs #it{Asymmetry}, #it{p}_{T}>5 GeV/#it{c}",100,0,1,100,0,0.5);
fhPrimPi0OpeningAngleAsym->SetXTitle("|A|=| (E_{1}-E_{2}) / (E_{1}+E_{2}) |");
fhPrimPi0OpeningAngleAsym->SetYTitle("#theta(rad)");
outputContainer->Add(fhPrimPi0OpeningAngleAsym) ;
outputContainer->Add(fhPrimEtaOpeningAngle) ;
fhPrimEtaOpeningAngleAsym = new TH2F
- ("hPrimEtaOpeningAngleAsym","Angle between all primary #gamma pair vs Asymmetry, p_{T}>5 GeV/c",100,0,1,100,0,0.5);
- fhPrimEtaOpeningAngleAsym->SetXTitle("|A|=| (E_{1}-E_{2}) / (E_{1}+E_{2}) |");
+ ("hPrimEtaOpeningAngleAsym","Angle between all primary #gamma pair vs #it{Asymmetry}, #it{p}_{T}>5 GeV/#it{c}",100,0,1,100,0,0.5);
+ fhPrimEtaOpeningAngleAsym->SetXTitle("|#it{A}|=| (#it{E}_{1}-#it{E}_{2}) / (#it{E}_{1}+#it{E}_{2}) |");
fhPrimEtaOpeningAngleAsym->SetYTitle("#theta(rad)");
outputContainer->Add(fhPrimEtaOpeningAngleAsym) ;
fhPrimEtaCosOpeningAngle = new TH2F
("hPrimEtaCosOpeningAngle","Cosinus of angle between all primary #gamma pair vs E_{#eta}",nptbins,ptmin,ptmax,100,-1,1);
fhPrimEtaCosOpeningAngle->SetYTitle("cos (#theta) ");
- fhPrimEtaCosOpeningAngle->SetXTitle("E_{ #eta} (GeV)");
+ fhPrimEtaCosOpeningAngle->SetXTitle("#it{E}_{ #eta} (GeV)");
outputContainer->Add(fhPrimEtaCosOpeningAngle) ;
{
//Prim origin
//Pi0
- fhPrimPi0PtOrigin = new TH2F("hPrimPi0PtOrigin","Primary pi0 pt vs origin",nptbins,ptmin,ptmax,11,0,11) ;
- fhPrimPi0PtOrigin->SetXTitle("p_{T} (GeV/c)");
+ fhPrimPi0PtOrigin = new TH2F("hPrimPi0PtOrigin","Primary #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,11,0,11) ;
+ fhPrimPi0PtOrigin->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPrimPi0PtOrigin->SetYTitle("Origin");
fhPrimPi0PtOrigin->GetYaxis()->SetBinLabel(1 ,"Status 21");
fhPrimPi0PtOrigin->GetYaxis()->SetBinLabel(2 ,"Quark");
fhPrimPi0PtOrigin->GetYaxis()->SetBinLabel(10 ,"#eta prime");
outputContainer->Add(fhPrimPi0PtOrigin) ;
- fhMCPi0PtOrigin = new TH2F("hMCPi0PtOrigin","Reconstructed pair from generated pi0 pt vs origin",nptbins,ptmin,ptmax,11,0,11) ;
- fhMCPi0PtOrigin->SetXTitle("p_{T} (GeV/c)");
+ fhMCPi0PtOrigin = new TH2F("hMCPi0PtOrigin","Reconstructed pair from generated #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,11,0,11) ;
+ fhMCPi0PtOrigin->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhMCPi0PtOrigin->SetYTitle("Origin");
fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(1 ,"Status 21");
fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(2 ,"Quark");
outputContainer->Add(fhMCPi0PtOrigin) ;
//Eta
- fhPrimEtaPtOrigin = new TH2F("hPrimEtaPtOrigin","Primary pi0 pt vs origin",nptbins,ptmin,ptmax,7,0,7) ;
- fhPrimEtaPtOrigin->SetXTitle("p_{T} (GeV/c)");
+ fhPrimEtaPtOrigin = new TH2F("hPrimEtaPtOrigin","Primary #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,7,0,7) ;
+ fhPrimEtaPtOrigin->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPrimEtaPtOrigin->SetYTitle("Origin");
fhPrimEtaPtOrigin->GetYaxis()->SetBinLabel(1 ,"Status 21");
fhPrimEtaPtOrigin->GetYaxis()->SetBinLabel(2 ,"Quark");
outputContainer->Add(fhPrimEtaPtOrigin) ;
- fhMCEtaPtOrigin = new TH2F("hMCEtaPtOrigin","Reconstructed pair from generated pi0 pt vs origin",nptbins,ptmin,ptmax,7,0,7) ;
- fhMCEtaPtOrigin->SetXTitle("p_{T} (GeV/c)");
+ fhMCEtaPtOrigin = new TH2F("hMCEtaPtOrigin","Reconstructed pair from generated #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,7,0,7) ;
+ fhMCEtaPtOrigin->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhMCEtaPtOrigin->SetYTitle("Origin");
fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(1 ,"Status 21");
fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(2 ,"Quark");
fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(6 ,"#eta prime");
outputContainer->Add(fhMCEtaPtOrigin) ;
+
+ fhMCPi0ProdVertex = new TH2F("hMCPi0ProdVertex","Selected reco pair from generated #pi^{0} #it{p}_{T} vs production vertex",nptbins,ptmin,ptmax,2000,0,500) ;
+ fhMCPi0ProdVertex->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCPi0ProdVertex->SetYTitle("#it{R} (cm)");
+ outputContainer->Add(fhMCPi0ProdVertex) ;
+
+ fhMCPi0ProdVertexInner = new TH2F("hMCPi0ProdVertexInner","Selected reco pair from generated #pi^{0} #it{p}_{T} vs production vertex",nptbins,ptmin,ptmax,500,0,50) ;
+ fhMCPi0ProdVertexInner->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCPi0ProdVertexInner->SetYTitle("#it{R} (cm)");
+ outputContainer->Add(fhMCPi0ProdVertexInner) ;
+
+ fhMCEtaProdVertex = new TH2F("hMCEtaProdVertex","Selected reco pair from generated #eta #it{p}_{T} vs production vertex",nptbins,ptmin,ptmax,2000,0,500) ;
+ fhMCEtaProdVertex->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCEtaProdVertex->SetYTitle("#it{R} (cm)");
+ outputContainer->Add(fhMCEtaProdVertex) ;
+
+ fhMCEtaProdVertexInner = new TH2F("hMCEtaProdVertexInner","Selected reco pair from generated #eta #it{p}_{T} vs production vertex",nptbins,ptmin,ptmax,500,0,50) ;
+ fhMCEtaProdVertexInner->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCEtaProdVertexInner->SetYTitle("#it{R} (cm)");
+ outputContainer->Add(fhMCEtaProdVertexInner) ;
for(Int_t i = 0; i<13; i++)
{
- fhMCOrgMass[i] = new TH2F(Form("hMCOrgMass_%d",i),Form("mass vs pt, origin %d",i),nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMCOrgMass[i]->SetXTitle("p_{T} (GeV/c)");
- fhMCOrgMass[i]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMCOrgMass[i] = new TH2F(Form("hMCOrgMass_%d",i),Form("#it{M} vs #it{p}_{T}, origin %d",i),nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
+ fhMCOrgMass[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCOrgMass[i]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMCOrgMass[i]) ;
- fhMCOrgAsym[i]= new TH2F(Form("hMCOrgAsym_%d",i),Form("asymmetry vs pt, origin %d",i),nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
- fhMCOrgAsym[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCOrgAsym[i]= new TH2F(Form("hMCOrgAsym_%d",i),Form("#it{Asymmetry} vs #it{p}_{T}, origin %d",i),nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
+ fhMCOrgAsym[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhMCOrgAsym[i]->SetYTitle("A");
outputContainer->Add(fhMCOrgAsym[i]) ;
- fhMCOrgDeltaEta[i] = new TH2F(Form("hMCOrgDeltaEta_%d",i),Form("#Delta #eta of pair vs pt, origin %d",i),nptbins,ptmin,ptmax,netabins,-1.4,1.4) ;
- fhMCOrgDeltaEta[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCOrgDeltaEta[i] = new TH2F(Form("hMCOrgDeltaEta_%d",i),Form("#Delta #eta of pair vs #it{p}_{T}, origin %d",i),nptbins,ptmin,ptmax,netabins,-1.4,1.4) ;
+ fhMCOrgDeltaEta[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhMCOrgDeltaEta[i]->SetYTitle("#Delta #eta");
outputContainer->Add(fhMCOrgDeltaEta[i]) ;
- fhMCOrgDeltaPhi[i]= new TH2F(Form("hMCOrgDeltaPhi_%d",i),Form("#Delta #phi of pair vs p_{T}, origin %d",i),nptbins,ptmin,ptmax,nphibins,-0.7,0.7) ;
- fhMCOrgDeltaPhi[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCOrgDeltaPhi[i]= new TH2F(Form("hMCOrgDeltaPhi_%d",i),Form("#Delta #phi of pair vs #it{p}_{T}, origin %d",i),nptbins,ptmin,ptmax,nphibins,-0.7,0.7) ;
+ fhMCOrgDeltaPhi[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhMCOrgDeltaPhi[i]->SetYTitle("#Delta #phi (rad)");
outputContainer->Add(fhMCOrgDeltaPhi[i]) ;
Int_t index = ((ipt*fNCellNCuts)+icell)*fNAsymCuts + iasym;
fhMCPi0MassPtRec[index] = new TH2F(Form("hMCPi0MassPtRec_pt%d_cell%d_asym%d",ipt,icell,iasym),
- Form("Reconstructed Mass vs reconstructed p_T of true #pi^{0} cluster pairs for pt >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
+ Form("Reconstructed Mass vs reconstructed #it{p}_{T} of true #pi^{0} cluster pairs for #it{p}_{T} >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMCPi0MassPtRec[index]->SetXTitle("p_{T, reconstructed} (GeV/c)");
- fhMCPi0MassPtRec[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMCPi0MassPtRec[index]->SetXTitle("#it{p}_{T, reconstructed} (GeV/#it{c})");
+ fhMCPi0MassPtRec[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMCPi0MassPtRec[index]) ;
fhMCPi0MassPtTrue[index] = new TH2F(Form("hMCPi0MassPtTrue_pt%d_cell%d_asym%d",ipt,icell,iasym),
- Form("Reconstructed Mass vs generated p_T of true #pi^{0} cluster pairs for pt >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
+ Form("Reconstructed Mass vs generated p_T of true #pi^{0} cluster pairs for #it{p}_{T} >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMCPi0MassPtTrue[index]->SetXTitle("p_{T, generated} (GeV/c)");
- fhMCPi0MassPtTrue[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMCPi0MassPtTrue[index]->SetXTitle("#it{p}_{T, generated} (GeV/#it{c})");
+ fhMCPi0MassPtTrue[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMCPi0MassPtTrue[index]) ;
fhMCPi0PtTruePtRec[index] = new TH2F(Form("hMCPi0PtTruePtRec_pt%d_cell%d_asym%d",ipt,icell,iasym),
- Form("Generated vs reconstructed p_T of true #pi^{0} cluster pairs, 0.01 < rec. mass < 0.17 MeV/c^{2} for pt >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
+ Form("Generated vs reconstructed p_T of true #pi^{0} cluster pairs, 0.01 < rec. mass < 0.17 MeV/#it{c}^{2} for #it{p}_{T} >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
- fhMCPi0PtTruePtRec[index]->SetXTitle("p_{T, generated} (GeV/c)");
- fhMCPi0PtTruePtRec[index]->SetYTitle("p_{T, reconstructed} (GeV/c)");
+ fhMCPi0PtTruePtRec[index]->SetXTitle("#it{p}_{T, generated} (GeV/#it{c})");
+ fhMCPi0PtTruePtRec[index]->SetYTitle("#it{p}_{T, reconstructed} (GeV/#it{c})");
outputContainer->Add(fhMCPi0PtTruePtRec[index]) ;
fhMCEtaMassPtRec[index] = new TH2F(Form("hMCEtaMassPtRec_pt%d_cell%d_asym%d",ipt,icell,iasym),
- Form("Reconstructed Mass vs reconstructed p_T of true #eta cluster pairs for pt >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
+ Form("Reconstructed Mass vs reconstructed p_T of true #eta cluster pairs for #it{p}_{T} >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMCEtaMassPtRec[index]->SetXTitle("p_{T, generated} (GeV/c)");
- fhMCEtaMassPtRec[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMCEtaMassPtRec[index]->SetXTitle("#it{p}_{T, generated} (GeV/#it{c})");
+ fhMCEtaMassPtRec[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMCEtaMassPtRec[index]) ;
fhMCEtaMassPtTrue[index] = new TH2F(Form("hMCEtaMassPtTrue_pt%d_cell%d_asym%d",ipt,icell,iasym),
- Form("Reconstructed Mass vs generated p_T of true #eta cluster pairs for pt >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
+ Form("Reconstructed Mass vs generated p_T of true #eta cluster pairs for #it{p}_{T} >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMCEtaMassPtTrue[index]->SetXTitle("p_{T, generated} (GeV/c)");
- fhMCEtaMassPtTrue[index]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMCEtaMassPtTrue[index]->SetXTitle("#it{p}_{T, generated} (GeV/#it{c})");
+ fhMCEtaMassPtTrue[index]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMCEtaMassPtTrue[index]) ;
fhMCEtaPtTruePtRec[index] = new TH2F(Form("hMCEtaPtTruePtRec_pt%d_cell%d_asym%d",ipt,icell,iasym),
- Form("Generated vs reconstructed p_T of true #eta cluster pairs, 0.01 < rec. mass < 0.17 MeV/c^{2} for pt >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
+ Form("Generated vs reconstructed p_T of true #eta cluster pairs, 0.01 < rec. mass < 0.17 MeV/#it{c}^{2} for #it{p}_{T} >%2.2f, ncell>%d and asym >%1.2f",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
- fhMCEtaPtTruePtRec[index]->SetXTitle("p_{T, generated} (GeV/c)");
- fhMCEtaPtTruePtRec[index]->SetYTitle("p_{T, reconstructed} (GeV/c)");
+ fhMCEtaPtTruePtRec[index]->SetXTitle("#it{p}_{T, generated} (GeV/#it{c})");
+ fhMCEtaPtTruePtRec[index]->SetYTitle("#it{p}_{T, reconstructed} (GeV/#it{c})");
outputContainer->Add(fhMCEtaPtTruePtRec[index]) ;
}
}
fhMCEtaPtTruePtRec = new TH2F*[1];
fhMCPi0MassPtTrue[0] = new TH2F("hMCPi0MassPtTrue","Reconstructed Mass vs generated p_T of true #pi^{0} cluster pairs",nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMCPi0MassPtTrue[0]->SetXTitle("p_{T, generated} (GeV/c)");
- fhMCPi0MassPtTrue[0]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMCPi0MassPtTrue[0]->SetXTitle("#it{p}_{T, generated} (GeV/#it{c})");
+ fhMCPi0MassPtTrue[0]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMCPi0MassPtTrue[0]) ;
- fhMCPi0PtTruePtRec[0]= new TH2F("hMCPi0PtTruePtRec","Generated vs reconstructed p_T of true #pi^{0} cluster pairs, 0.01 < rec. mass < 0.17 MeV/c^{2}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
- fhMCPi0PtTruePtRec[0]->SetXTitle("p_{T, generated} (GeV/c)");
- fhMCPi0PtTruePtRec[0]->SetYTitle("p_{T, reconstructed} (GeV/c)");
+ fhMCPi0PtTruePtRec[0]= new TH2F("hMCPi0PtTruePtRec","Generated vs reconstructed p_T of true #pi^{0} cluster pairs, 0.01 < rec. mass < 0.17 MeV/#it{c}^{2}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
+ fhMCPi0PtTruePtRec[0]->SetXTitle("#it{p}_{T, generated} (GeV/#it{c})");
+ fhMCPi0PtTruePtRec[0]->SetYTitle("#it{p}_{T, reconstructed} (GeV/#it{c})");
outputContainer->Add(fhMCPi0PtTruePtRec[0]) ;
fhMCEtaMassPtTrue[0] = new TH2F("hMCEtaMassPtTrue","Reconstructed Mass vs generated p_T of true #eta cluster pairs",nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMCEtaMassPtTrue[0]->SetXTitle("p_{T, generated} (GeV/c)");
- fhMCEtaMassPtTrue[0]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMCEtaMassPtTrue[0]->SetXTitle("#it{p}_{T, generated} (GeV/#it{c})");
+ fhMCEtaMassPtTrue[0]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMCEtaMassPtTrue[0]) ;
- fhMCEtaPtTruePtRec[0]= new TH2F("hMCEtaPtTruePtRec","Generated vs reconstructed p_T of true #eta cluster pairs, 0.01 < rec. mass < 0.17 MeV/c^{2}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
- fhMCEtaPtTruePtRec[0]->SetXTitle("p_{T, generated} (GeV/c)");
- fhMCEtaPtTruePtRec[0]->SetYTitle("p_{T, reconstructed} (GeV/c)");
+ fhMCEtaPtTruePtRec[0]= new TH2F("hMCEtaPtTruePtRec","Generated vs reconstructed p_T of true #eta cluster pairs, 0.01 < rec. mass < 0.17 MeV/#it{c}^{2}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
+ fhMCEtaPtTruePtRec[0]->SetXTitle("#it{p}_{T, generated} (GeV/#it{c})");
+ fhMCEtaPtTruePtRec[0]->SetYTitle("#it{p}_{T, reconstructed} (GeV/#it{c})");
outputContainer->Add(fhMCEtaPtTruePtRec[0]) ;
}
}
{
//Module dependent invariant mass
snprintf(key, buffersize,"hReMod_%d",imod) ;
- snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for Module %d",imod) ;
+ snprintf(title, buffersize,"Real #it{M}_{#gamma#gamma} distr. for Module %d",imod) ;
fhReMod[imod] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhReMod[imod]->SetXTitle("p_{T} (GeV/c)");
- fhReMod[imod]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReMod[imod]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReMod[imod]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReMod[imod]) ;
if(fCalorimeter=="PHOS")
{
snprintf(key, buffersize,"hReDiffPHOSMod_%d",imod) ;
snprintf(title, buffersize,"Real pairs PHOS, clusters in different Modules: %s",(pairnamePHOS[imod]).Data()) ;
fhReDiffPHOSMod[imod] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhReDiffPHOSMod[imod]->SetXTitle("p_{T} (GeV/c)");
- fhReDiffPHOSMod[imod]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReDiffPHOSMod[imod]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReDiffPHOSMod[imod]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReDiffPHOSMod[imod]) ;
}
else{//EMCAL
snprintf(key, buffersize,"hReSameSectorEMCAL_%d",imod) ;
snprintf(title, buffersize,"Real pairs EMCAL, clusters in same sector, SM(%d,%d)",imod*2,imod*2+1) ;
fhReSameSectorEMCALMod[imod] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhReSameSectorEMCALMod[imod]->SetXTitle("p_{T} (GeV/c)");
- fhReSameSectorEMCALMod[imod]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReSameSectorEMCALMod[imod]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReSameSectorEMCALMod[imod]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReSameSectorEMCALMod[imod]) ;
}
if(imod<fNModules-2)
snprintf(key, buffersize,"hReSameSideEMCAL_%d",imod) ;
snprintf(title, buffersize,"Real pairs EMCAL, clusters in same side SM(%d,%d)",imod, imod+2) ;
fhReSameSideEMCALMod[imod] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhReSameSideEMCALMod[imod]->SetXTitle("p_{T} (GeV/c)");
- fhReSameSideEMCALMod[imod]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhReSameSideEMCALMod[imod]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhReSameSideEMCALMod[imod]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhReSameSideEMCALMod[imod]) ;
}
}//EMCAL
if(DoOwnMix())
{
snprintf(key, buffersize,"hMiMod_%d",imod) ;
- snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for Module %d",imod) ;
+ snprintf(title, buffersize,"Mixed #it{M}_{#gamma#gamma} distr. for Module %d",imod) ;
fhMiMod[imod] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMiMod[imod]->SetXTitle("p_{T} (GeV/c)");
- fhMiMod[imod]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMiMod[imod]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMiMod[imod]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMiMod[imod]) ;
if(fCalorimeter=="PHOS"){
snprintf(key, buffersize,"hMiDiffPHOSMod_%d",imod) ;
snprintf(title, buffersize,"Mixed pairs PHOS, clusters in different Modules: %s",(pairnamePHOS[imod]).Data()) ;
fhMiDiffPHOSMod[imod] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMiDiffPHOSMod[imod]->SetXTitle("p_{T} (GeV/c)");
- fhMiDiffPHOSMod[imod]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMiDiffPHOSMod[imod]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMiDiffPHOSMod[imod]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMiDiffPHOSMod[imod]) ;
}//PHOS
else{//EMCAL
snprintf(key, buffersize,"hMiSameSectorEMCALMod_%d",imod) ;
snprintf(title, buffersize,"Mixed pairs EMCAL, clusters in same sector, SM(%d,%d)",imod*2,imod*2+1) ;
fhMiSameSectorEMCALMod[imod] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMiSameSectorEMCALMod[imod]->SetXTitle("p_{T} (GeV/c)");
- fhMiSameSectorEMCALMod[imod]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMiSameSectorEMCALMod[imod]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMiSameSectorEMCALMod[imod]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMiSameSectorEMCALMod[imod]) ;
}
if(imod<fNModules-2){
snprintf(key, buffersize,"hMiSameSideEMCALMod_%d",imod) ;
snprintf(title, buffersize,"Mixed pairs EMCAL, clusters in same side SM(%d,%d)",imod, imod+2) ;
fhMiSameSideEMCALMod[imod] = new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
- fhMiSameSideEMCALMod[imod]->SetXTitle("p_{T} (GeV/c)");
- fhMiSameSideEMCALMod[imod]->SetYTitle("m_{#gamma,#gamma} (GeV/c^{2})");
+ fhMiSameSideEMCALMod[imod]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMiSameSideEMCALMod[imod]->SetYTitle("#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
outputContainer->Add(fhMiSameSideEMCALMod[imod]) ;
}
}//EMCAL
fhArmPrimPi0[i] = new TH2F(Form("hArmenterosPrimPi0EBin%d",i),
Form("Armenteros of primary #pi^{0}, %s",ebin[i].Data()),
200, -1, 1, narmbins,armmin,armmax);
- fhArmPrimPi0[i]->SetYTitle("p_{T}^{Arm}");
+ fhArmPrimPi0[i]->SetYTitle("#it{p}_{T}^{Arm}");
fhArmPrimPi0[i]->SetXTitle("#alpha^{Arm}");
outputContainer->Add(fhArmPrimPi0[i]) ;
fhArmPrimEta[i] = new TH2F(Form("hArmenterosPrimEtaEBin%d",i),
Form("Armenteros of primary #eta, %s",ebin[i].Data()),
200, -1, 1, narmbins,armmin,armmax);
- fhArmPrimEta[i]->SetYTitle("p_{T}^{Arm}");
+ fhArmPrimEta[i]->SetYTitle("#it{p}_{T}^{Arm}");
fhArmPrimEta[i]->SetXTitle("#alpha^{Arm}");
outputContainer->Add(fhArmPrimEta[i]) ;
if(GetDebug() > 1) printf("AliAnaPi0::FillMCVersusRecDataHistograms() - Common ancestor label %d, pdg %d, name %s, status %d; \n",
ancLabel,ancPDG,TDatabasePDG::Instance()->GetParticle(ancPDG)->GetName(),ancStatus);
- if(ancLabel > -1){
+ Float_t prodR = -1;
+
+ if(ancLabel > -1)
+ {
if(ancPDG==22){//gamma
fhMCOrgMass[0]->Fill(pt,mass);
fhMCOrgAsym[0]->Fill(pt,asym);
fhMCOrgAsym[2]->Fill(pt,asym);
fhMCOrgDeltaEta[2]->Fill(pt,deta);
fhMCOrgDeltaPhi[2]->Fill(pt,dphi);
- if(fMultiCutAnaSim){
+ if(fMultiCutAnaSim)
+ {
for(Int_t ipt=0; ipt<fNPtCuts; ipt++){
for(Int_t icell=0; icell<fNCellNCuts; icell++){
for(Int_t iasym=0; iasym<fNAsymCuts; iasym++){
}// icell loop
}// pt cut loop
}//Multi cut ana sim
- else {
+ else
+ {
fhMCPi0MassPtTrue[0]->Fill(ancMomentum.Pt(),mass);
- if(mass < 0.17 && mass > 0.1) {
- fhMCPi0PtTruePtRec[0]->Fill(ancMomentum.Pt(),pt);
+
+ if(mass < 0.17 && mass > 0.1)
+ {
+ fhMCPi0PtTruePtRec[0]->Fill(ancMomentum.Pt(),pt);
+
if(fFillOriginHisto)
{
if(GetReader()->ReadStack())
if(momindex < 0) return;
TParticle* mother = GetMCStack()->Particle(momindex);
mompdg = TMath::Abs(mother->GetPdgCode());
- momstatus = mother->GetStatusCode();
+ momstatus = mother->GetStatusCode();
+ prodR = mother->R();
}
else
{
if(momindex < 0) return;
AliAODMCParticle* mother = (AliAODMCParticle *) mcparticles->At(momindex);
mompdg = TMath::Abs(mother->GetPdgCode());
- momstatus = mother->GetStatus();
- }
+ momstatus = mother->GetStatus();
+ prodR = TMath::Sqrt(mother->Xv()*mother->Xv()+mother->Yv()*mother->Yv());
+ }
+ fhMCPi0ProdVertex->Fill(pt,prodR);
+ if(prodR < 50)fhMCPi0ProdVertexInner->Fill(pt,prodR);
+
if (momstatus == 21) fhMCPi0PtOrigin->Fill(pt,0.5);//parton
else if(mompdg < 22 ) fhMCPi0PtOrigin->Fill(pt,1.5);//quark
else if(mompdg > 2100 && mompdg < 2210) fhMCPi0PtOrigin->Fill(pt,2.5);// resonances
else if(mompdg == 130) fhMCPi0PtOrigin->Fill(pt,6.5);//k0L
else if(momstatus == 11 || momstatus == 12 ) fhMCPi0PtOrigin->Fill(pt,3.5);//resonances
else fhMCPi0PtOrigin->Fill(pt,7.5);//other?
+
}
}//pi0 mass region
-
}
}
else if(ancPDG==221){//Eta
}// icell loop
}// pt cut loop
} //Multi cut ana sim
- else {
+ else
+ {
fhMCEtaMassPtTrue[0]->Fill(ancMomentum.Pt(),mass);
if(mass < 0.65 && mass > 0.45) fhMCEtaPtTruePtRec[0]->Fill(ancMomentum.Pt(),pt);
if(momindex < 0) return;
TParticle* mother = GetMCStack()->Particle(momindex);
mompdg = TMath::Abs(mother->GetPdgCode());
- momstatus = mother->GetStatusCode();
+ momstatus = mother->GetStatusCode();
+ prodR = mother->R();
}
else
{
if(momindex < 0) return;
AliAODMCParticle* mother = (AliAODMCParticle *) mcparticles->At(momindex);
mompdg = TMath::Abs(mother->GetPdgCode());
- momstatus = mother->GetStatus();
- }
+ momstatus = mother->GetStatus();
+ prodR = TMath::Sqrt(mother->Xv()*mother->Xv()+mother->Yv()*mother->Yv());
+ }
+
+ fhMCEtaProdVertex->Fill(pt,prodR);
+ if(prodR < 50)fhMCEtaProdVertexInner->Fill(pt,prodR);
if (momstatus == 21 ) fhMCEtaPtOrigin->Fill(pt,0.5);//parton
else if(mompdg < 22 ) fhMCEtaPtOrigin->Fill(pt,1.5);//quark
// MC data
//---------
//Do some MC checks on the origin of the pair, is there any common ancestor and if there is one, who?
- if(IsDataMC()) {
-
+ if(IsDataMC())
+ {
if(GetMCAnalysisUtils()->CheckTagBit(p1->GetTag(),AliMCAnalysisUtils::kMCConversion) &&
GetMCAnalysisUtils()->CheckTagBit(p2->GetTag(),AliMCAnalysisUtils::kMCConversion))
{
TH2F * fhMCPi0PtOrigin ; //! Mass of reoconstructed pi0 pairs in calorimeter vs mother
TH2F * fhMCEtaPtOrigin ; //! Mass of reoconstructed pi0 pairs in calorimeter vs mother
+ TH2F * fhMCPi0ProdVertex; //! Spectrum of selected pi0 vs production vertex
+ TH2F * fhMCEtaProdVertex; //! Spectrum of selected eta vs production vertex
+ TH2F * fhMCPi0ProdVertexInner; //! Spectrum of selected pi0 vs production vertex, below 50 cm
+ TH2F * fhMCEtaProdVertexInner; //! Spectrum of selected eta vs production vertex, below 50 cm
+
TH2F * fhReMCFromConversion ; //! Invariant mass of 2 clusters originated in conversions
TH2F * fhReMCFromNotConversion ; //! Invariant mass of 2 clusters not originated in conversions
TH2F * fhReMCFromMixConversion ; //! Invariant mass of 2 clusters one from conversion and the other not
AliAnaPi0( const AliAnaPi0 & api0) ; // cpy ctor
AliAnaPi0 & operator = (const AliAnaPi0 & api0) ; // cpy assignment
- ClassDef(AliAnaPi0,27)
+ ClassDef(AliAnaPi0,28)
} ;
fhMCOtherDecayPt(0),
fhMassPairMCPi0(0), fhMassPairMCEta(0),
fhAnglePairMCPi0(0), fhAnglePairMCEta(0),
+fhMCPi0PtOrigin(0x0), fhMCEtaPtOrigin(0x0),
+fhMCPi0ProdVertex(0), fhMCEtaProdVertex(0),
+fhMCPi0ProdVertexInner(0), fhMCEtaProdVertexInner(0),
+
// Weight studies
fhECellClusterRatio(0), fhECellClusterLogRatio(0),
fhEMaxCellClusterRatio(0), fhEMaxCellClusterLogRatio(0),
Float_t pOverEmax = GetHistogramRanges()->GetHistoPOverEMax();
Float_t pOverEmin = GetHistogramRanges()->GetHistoPOverEMin();
- Int_t ntimptbins= GetHistogramRanges()->GetHistoTimeBins();
- Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();
- Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
+ Int_t ntimptbins = GetHistogramRanges()->GetHistoTimeBins();
+ Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();
+ Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
- TString nlm[] ={"1 Local Maxima","2 Local Maxima", "NLM > 2"};
- TString ptype[] ={"#gamma","#gamma->e^{#pm}","#pi^{0}","#eta","e^{#pm}", "hadron"};
- TString pname[] ={"Photon","Conversion", "Pi0", "Eta", "Electron","Hadron"};
+ TString nlm[] = {"1 Local Maxima","2 Local Maxima", "NLM > 2"};
+ TString ptype[] = {"#gamma","#gamma->e^{#pm}","#pi^{0}","#eta","e^{#pm}", "hadron"};
+ TString pname[] = {"Photon","Conversion", "Pi0", "Eta", "Electron","Hadron"};
Int_t bin[] = {0,2,4,6,10,15,20,100}; // energy bins
fhPt = new TH1F("hPt","Number of identified #pi^{0} (#eta) decay",nptbins,ptmin,ptmax);
- fhPt->SetYTitle("N");
- fhPt->SetXTitle("p_{T} (GeV/c)");
+ fhPt->SetYTitle("#it{N}");
+ fhPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPt) ;
fhE = new TH1F("hE","Number of identified #pi^{0} (#eta) decay pairs",nptbins,ptmin,ptmax);
- fhE->SetYTitle("N");
- fhE->SetXTitle("E (GeV)");
+ fhE->SetYTitle("#it{N}");
+ fhE->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhE) ;
fhPtPhi = new TH2F
- ("hPtPhi","Selected #pi^{0} (#eta) pairs: p_{T} vs #phi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
+ ("hPtPhi","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #phi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
fhPtPhi->SetYTitle("#phi (rad)");
- fhPtPhi->SetXTitle("E (GeV)");
+ fhPtPhi->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhPtPhi) ;
fhPtEta = new TH2F
- ("hPtEta","Selected #pi^{0} (#eta) pairs: p_{T} vs #eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);
+ ("hPtEta","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);
fhPtEta->SetYTitle("#eta");
- fhPtEta->SetXTitle("E (GeV)");
+ fhPtEta->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhPtEta) ;
fhEtaPhi = new TH2F
if(fCalorimeter=="EMCAL" && fFillEMCALBCHistograms)
{
fhEtaPhiEMCALBC0 = new TH2F
- ("hEtaPhiEMCALBC0","cluster,E > 2 GeV, #eta vs #phi, for clusters with |time| < 25 ns, EMCAL-BC=0",netabins,etamin,etamax,nphibins,phimin,phimax);
+ ("hEtaPhiEMCALBC0","cluster, #it{E} > 2 GeV, #eta vs #phi, for clusters with |#it{t}| < 25 ns, EMCAL-BC=0",netabins,etamin,etamax,nphibins,phimin,phimax);
fhEtaPhiEMCALBC0->SetYTitle("#phi (rad)");
fhEtaPhiEMCALBC0->SetXTitle("#eta");
outputContainer->Add(fhEtaPhiEMCALBC0) ;
fhEtaPhiEMCALBC1 = new TH2F
- ("hEtaPhiEMCALBC1","cluster,E > 2 GeV, #eta vs #phi, for clusters with 25 < |time| < 75 ns, EMCAL-BC=1",netabins,etamin,etamax,nphibins,phimin,phimax);
+ ("hEtaPhiEMCALBC1","cluster, #it{E} > 2 GeV, #eta vs #phi, for clusters with 25 < |#it{t}| < 75 ns, EMCAL-BC=1",netabins,etamin,etamax,nphibins,phimin,phimax);
fhEtaPhiEMCALBC1->SetYTitle("#phi (rad)");
fhEtaPhiEMCALBC1->SetXTitle("#eta");
outputContainer->Add(fhEtaPhiEMCALBC1) ;
fhEtaPhiEMCALBCN = new TH2F
- ("hEtaPhiEMCALBCN","cluster,E > 2 GeV, #eta vs #phi, for clusters with |time| > 75 ns, EMCAL-BC>1",netabins,etamin,etamax,nphibins,phimin,phimax);
+ ("hEtaPhiEMCALBCN","cluster, #it{E} > 2 GeV, #eta vs #phi, for clusters with |#it{t}| > 75 ns, EMCAL-BC>1",netabins,etamin,etamax,nphibins,phimin,phimax);
fhEtaPhiEMCALBCN->SetYTitle("#phi (rad)");
fhEtaPhiEMCALBCN->SetXTitle("#eta");
outputContainer->Add(fhEtaPhiEMCALBCN) ;
{
fhEtaPhiTriggerEMCALBC[i] = new TH2F
(Form("hEtaPhiTriggerEMCALBC%d",i-5),
- Form("meson E > 2 GeV, #eta vs #phi, Trigger EMCAL-BC=%d",i-5),
+ Form("meson #it{E} > 2 GeV, #eta vs #phi, Trigger EMCAL-BC=%d",i-5),
netabins,etamin,etamax,nphibins,phimin,phimax);
fhEtaPhiTriggerEMCALBC[i]->SetYTitle("#phi (rad)");
fhEtaPhiTriggerEMCALBC[i]->SetXTitle("#eta");
fhTimeTriggerEMCALBC[i] = new TH2F
(Form("hTimeTriggerEMCALBC%d",i-5),
- Form("meson time vs E, Trigger EMCAL-BC=%d",i-5),
+ Form("meson #it{t} vs #it{E}, Trigger EMCAL-BC=%d",i-5),
nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
- fhTimeTriggerEMCALBC[i]->SetXTitle("E (GeV)");
- fhTimeTriggerEMCALBC[i]->SetYTitle("time (ns)");
+ fhTimeTriggerEMCALBC[i]->SetXTitle("#it{E} (GeV)");
+ fhTimeTriggerEMCALBC[i]->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhTimeTriggerEMCALBC[i]);
fhTimeTriggerEMCALBCPileUpSPD[i] = new TH2F
(Form("hTimeTriggerEMCALBC%dPileUpSPD",i-5),
- Form("meson time vs E, Trigger EMCAL-BC=%d",i-5),
+ Form("meson #it{t} vs #it{E}, Trigger EMCAL-BC=%d",i-5),
nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
- fhTimeTriggerEMCALBCPileUpSPD[i]->SetXTitle("E (GeV)");
- fhTimeTriggerEMCALBCPileUpSPD[i]->SetYTitle("time (ns)");
+ fhTimeTriggerEMCALBCPileUpSPD[i]->SetXTitle("#it{E} (GeV)");
+ fhTimeTriggerEMCALBCPileUpSPD[i]->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhTimeTriggerEMCALBCPileUpSPD[i]);
fhEtaPhiTriggerEMCALBCUM[i] = new TH2F
(Form("hEtaPhiTriggerEMCALBC%d_UnMatch",i-5),
- Form("meson E > 2 GeV, #eta vs #phi, unmatched trigger EMCAL-BC=%d",i-5),
+ Form("meson #it{E} > 2 GeV, #eta vs #phi, unmatched trigger EMCAL-BC=%d",i-5),
netabins,etamin,etamax,nphibins,phimin,phimax);
fhEtaPhiTriggerEMCALBCUM[i]->SetYTitle("#phi (rad)");
fhEtaPhiTriggerEMCALBCUM[i]->SetXTitle("#eta");
fhTimeTriggerEMCALBCUM[i] = new TH2F
(Form("hTimeTriggerEMCALBC%d_UnMatch",i-5),
- Form("meson time vs E, unmatched trigger EMCAL-BC=%d",i-5),
+ Form("meson #it{t} vs #it{E}, unmatched trigger EMCAL-BC=%d",i-5),
nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
- fhTimeTriggerEMCALBCUM[i]->SetXTitle("E (GeV)");
- fhTimeTriggerEMCALBCUM[i]->SetYTitle("time (ns)");
+ fhTimeTriggerEMCALBCUM[i]->SetXTitle("#it{E} (GeV)");
+ fhTimeTriggerEMCALBCUM[i]->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhTimeTriggerEMCALBCUM[i]);
}
fhTimeTriggerEMCALBC0UMReMatchOpenTime = new TH2F("hTimeTriggerBC0_UnMatch_ReMatch_OpenTime",
- "cluster time vs E of clusters, no match, rematch open time",
+ "cluster #it{t} vs #it{E} of clusters, no match, rematch open time",
nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
- fhTimeTriggerEMCALBC0UMReMatchOpenTime->SetXTitle("E (GeV)");
- fhTimeTriggerEMCALBC0UMReMatchOpenTime->SetYTitle("time (ns)");
+ fhTimeTriggerEMCALBC0UMReMatchOpenTime->SetXTitle("#it{E} (GeV)");
+ fhTimeTriggerEMCALBC0UMReMatchOpenTime->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhTimeTriggerEMCALBC0UMReMatchOpenTime);
fhTimeTriggerEMCALBC0UMReMatchCheckNeigh = new TH2F("hTimeTriggerBC0_UnMatch_ReMatch_CheckNeighbours",
- "cluster time vs E of clusters, no match, rematch with neigbour parches",
+ "cluster #it{t} vs #it{E} of clusters, no match, rematch with neigbour parches",
nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
- fhTimeTriggerEMCALBC0UMReMatchCheckNeigh->SetXTitle("E (GeV)");
- fhTimeTriggerEMCALBC0UMReMatchCheckNeigh->SetYTitle("time (ns)");
+ fhTimeTriggerEMCALBC0UMReMatchCheckNeigh->SetXTitle("#it{E} (GeV)");
+ fhTimeTriggerEMCALBC0UMReMatchCheckNeigh->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhTimeTriggerEMCALBC0UMReMatchCheckNeigh);
fhTimeTriggerEMCALBC0UMReMatchBoth = new TH2F("hTimeTriggerBC0_UnMatch_ReMatch_Both",
- "cluster time vs E of clusters, no match, rematch open time and neigbour",
+ "cluster #it{t} vs #it{E} of clusters, no match, rematch open time and neigbour",
nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
- fhTimeTriggerEMCALBC0UMReMatchBoth->SetXTitle("E (GeV)");
- fhTimeTriggerEMCALBC0UMReMatchBoth->SetYTitle("time (ns)");
+ fhTimeTriggerEMCALBC0UMReMatchBoth->SetXTitle("#it{E} (GeV)");
+ fhTimeTriggerEMCALBC0UMReMatchBoth->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhTimeTriggerEMCALBC0UMReMatchBoth);
}
- fhPtCentrality = new TH2F("hPtCentrality","centrality vs p_{T}",nptbins,ptmin,ptmax, 100,0,100);
+ fhPtCentrality = new TH2F("hPtCentrality","centrality vs #it{p}_{T}",nptbins,ptmin,ptmax, 100,0,100);
fhPtCentrality->SetYTitle("centrality");
- fhPtCentrality->SetXTitle("p_{T}(GeV/c)");
+ fhPtCentrality->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtCentrality) ;
- fhPtEventPlane = new TH2F("hPtEventPlane","event plane angle vs p_{T}",nptbins,ptmin,ptmax, 100,0,TMath::Pi());
+ fhPtEventPlane = new TH2F("hPtEventPlane","event plane angle vs #it{p}_{T}",nptbins,ptmin,ptmax, 100,0,TMath::Pi());
fhPtEventPlane->SetYTitle("Event plane angle (rad)");
- fhPtEventPlane->SetXTitle("p_{T} (GeV/c)");
+ fhPtEventPlane->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtEventPlane) ;
if(fAnaType == kSSCalo)
{
fhPtReject = new TH1F("hPtReject","Number of rejected as #pi^{0} (#eta) decay",nptbins,ptmin,ptmax);
- fhPtReject->SetYTitle("N");
- fhPtReject->SetXTitle("p_{T} (GeV/c)");
+ fhPtReject->SetYTitle("#it{N}");
+ fhPtReject->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtReject) ;
fhEReject = new TH1F("hEReject","Number of rejected as #pi^{0} (#eta) decay pairs",nptbins,ptmin,ptmax);
- fhEReject->SetYTitle("N");
- fhEReject->SetXTitle("E (GeV)");
+ fhEReject->SetYTitle("#it{N}");
+ fhEReject->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhEReject) ;
fhPtPhiReject = new TH2F
- ("hPtPhiReject","Rejected #pi^{0} (#eta) cluster: p_{T} vs #phi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
+ ("hPtPhiReject","Rejected #pi^{0} (#eta) cluster: #it{p}_{T} vs #phi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
fhPtPhiReject->SetYTitle("#phi (rad)");
- fhPtPhiReject->SetXTitle("p_{T} (GeV/c)");
+ fhPtPhiReject->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtPhiReject) ;
fhPtEtaReject = new TH2F
- ("hPtEtaReject","Rejected #pi^{0} (#eta) cluster: p_{T} vs #eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);
+ ("hPtEtaReject","Rejected #pi^{0} (#eta) cluster: #it{p}_{T} vs #eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);
fhPtEtaReject->SetYTitle("#eta");
- fhPtEtaReject->SetXTitle("p_{T} (GeV/c)");
+ fhPtEtaReject->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtEtaReject) ;
fhEtaPhiReject = new TH2F
}
fhMass = new TH2F
- ("hMass","all pairs mass: E vs mass",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMass->SetYTitle("mass (GeV/c^{2})");
- fhMass->SetXTitle("E (GeV)");
+ ("hMass","all pairs #it{M}: #it{E} vs #it{M}",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhMass->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMass->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhMass) ;
fhSelectedMass = new TH2F
- ("hSelectedMass","Selected #pi^{0} (#eta) pairs mass: E vs mass",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhSelectedMass->SetYTitle("mass (GeV/c^{2})");
- fhSelectedMass->SetXTitle("E (GeV)");
+ ("hSelectedMass","Selected #pi^{0} (#eta) pairs #it{M}: E vs #it{M}",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhSelectedMass->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhSelectedMass->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhSelectedMass) ;
if(fAnaType == kSSCalo)
{
fhMassPt = new TH2F
- ("hMassPt","all pairs mass: p_{T} vs mass",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMassPt->SetYTitle("mass (GeV/c^{2})");
- fhMassPt->SetXTitle("p_{T} (GeV/c)");
+ ("hMassPt","all pairs #it{M}: #it{p}_{T} vs #it{M}",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhMassPt->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMassPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMassPt) ;
fhSelectedMassPt = new TH2F
- ("hSelectedMassPt","Selected #pi^{0} (#eta) pairs mass: p_{T} vs mass",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhSelectedMassPt->SetYTitle("mass (GeV/c^{2})");
- fhSelectedMassPt->SetXTitle("p_{T} (GeV/c)");
+ ("hSelectedMassPt","Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M}",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhSelectedMassPt->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhSelectedMassPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhSelectedMassPt) ;
for(Int_t inlm = 0; inlm < 3; inlm++)
{
fhMassPtLocMax[inlm] = new TH2F
- (Form("hMassPtNLocMax%d",inlm+1),Form("all pairs mass: p_{T} vs mass and NLM=%s",nlm[inlm].Data()),nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMassPtLocMax[inlm]->SetYTitle("mass (GeV/c^{2})");
- fhMassPtLocMax[inlm]->SetXTitle("p_{T} (GeV/c)");
+ (Form("hMassPtNLocMax%d",inlm+1),Form("all pairs #it{M}: #it{p}_{T} vs #it{M} and NLM=%s",nlm[inlm].Data()),nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhMassPtLocMax[inlm]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMassPtLocMax[inlm]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMassPtLocMax[inlm]) ;
fhSelectedMassPtLocMax[inlm] = new TH2F
- (Form("hSelectedMassPtLocMax%d",inlm+1),Form("Selected #pi^{0} (#eta) pairs mass: p_{T} vs mass, NLM=%s",nlm[inlm].Data()),nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhSelectedMassPtLocMax[inlm]->SetYTitle("mass (GeV/c^{2})");
- fhSelectedMassPtLocMax[inlm]->SetXTitle("p_{T} (GeV/c)");
+ (Form("hSelectedMassPtLocMax%d",inlm+1),Form("Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M}, NLM=%s",nlm[inlm].Data()),nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhSelectedMassPtLocMax[inlm]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhSelectedMassPtLocMax[inlm]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhSelectedMassPtLocMax[inlm]) ;
for(Int_t iSM = 0; iSM < GetCaloUtils()->GetNumberOfSuperModulesUsed(); iSM++)
{
fhSelectedMassPtLocMaxSM[inlm][iSM] = new TH2F
- (Form("hSelectedMassPtLocMax%d_SM%d",inlm+1,iSM),Form("Selected #pi^{0} (#eta) pairs mass: p_{T} vs mass, NLM=%s for SM=%d",nlm[inlm].Data(),iSM),nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhSelectedMassPtLocMaxSM[inlm][iSM]->SetYTitle("mass (GeV/c^{2})");
- fhSelectedMassPtLocMaxSM[inlm][iSM]->SetXTitle("p_{T} (GeV/c)");
+ (Form("hSelectedMassPtLocMax%d_SM%d",inlm+1,iSM),Form("Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M}, NLM=%s for SM=%d",nlm[inlm].Data(),iSM),nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhSelectedMassPtLocMaxSM[inlm][iSM]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhSelectedMassPtLocMaxSM[inlm][iSM]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhSelectedMassPtLocMaxSM[inlm][iSM]) ;
fhSelectedLambda0PtLocMaxSM[inlm][iSM] = new TH2F
- (Form("hSelectedLambda0PtLocMax%d_SM%d",inlm+1,iSM),Form("Selected #pi^{0} (#eta) pairs #lambda_{0}^{2}: p_{T} vs mass, NLM=%s for SM=%d",nlm[inlm].Data(),iSM),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+ (Form("hSelectedLambda0PtLocMax%d_SM%d",inlm+1,iSM),Form("Selected #pi^{0} (#eta) pairs #lambda_{0}^{2}: #it{p}_{T} vs #it{M}, NLM=%s for SM=%d",nlm[inlm].Data(),iSM),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhSelectedLambda0PtLocMaxSM[inlm][iSM]->SetYTitle("#lambda_{0}^{2}");
- fhSelectedLambda0PtLocMaxSM[inlm][iSM]->SetXTitle("p_{T} (GeV/c)");
+ fhSelectedLambda0PtLocMaxSM[inlm][iSM]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhSelectedLambda0PtLocMaxSM[inlm][iSM]) ;
}
{
fhMCSelectedMassPtLocMax[ipart][inlm] = new TH2F
(Form("hSelectedMassPtLocMax%d_MC%s",inlm+1,pname[ipart].Data()),
- Form("Selected #pi^{0} (#eta) pairs mass: p_{T} vs mass, NLM=%s, %s",nlm[inlm].Data(),pname[ipart].Data()),
+ Form("Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M}, NLM=%s, %s",nlm[inlm].Data(),pname[ipart].Data()),
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMCSelectedMassPtLocMax[ipart][inlm]->SetYTitle("mass (GeV/c^{2})");
- fhMCSelectedMassPtLocMax[ipart][inlm]->SetXTitle("p_{T} (GeV/c)");
+ fhMCSelectedMassPtLocMax[ipart][inlm]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMCSelectedMassPtLocMax[ipart][inlm]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCSelectedMassPtLocMax[ipart][inlm]) ;
}
}
if(IsDataMC())
{
fhMassNoOverlap = new TH2F
- ("hMassNoOverlap","all pairs mass: E vs mass, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMassNoOverlap->SetYTitle("mass (GeV/c^{2})");
- fhMassNoOverlap->SetXTitle("E (GeV)");
+ ("hMassNoOverlap","all pairs #it{M}: #it{E} vs #it{M}, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhMassNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMassNoOverlap->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhMassNoOverlap) ;
fhSelectedMassNoOverlap = new TH2F
- ("hSelectedMassNoOverlap","Selected #pi^{0} (#eta) pairs mass: E vs mass, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhSelectedMassNoOverlap->SetYTitle("mass (GeV/c^{2})");
- fhSelectedMassNoOverlap->SetXTitle("E (GeV)");
+ ("hSelectedMassNoOverlap","Selected #pi^{0} (#eta) pairs #it{M}: #it{E} vs #it{M}, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhSelectedMassNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhSelectedMassNoOverlap->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhSelectedMassNoOverlap) ;
fhMassPtNoOverlap = new TH2F
- ("hMassPtNoOverlap","all pairs mass: p_{T} vs mass, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMassPtNoOverlap->SetYTitle("mass (GeV/c^{2})");
- fhMassPtNoOverlap->SetXTitle("p_{T} (GeV/c)");
+ ("hMassPtNoOverlap","all pairs #it{M}: #it{p}_{T} vs #it{M}, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhMassPtNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMassPtNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMassPtNoOverlap) ;
fhSelectedMassPtNoOverlap = new TH2F
- ("hSelectedMassPtNoOverlap","Selected #pi^{0} (#eta) pairs mass: p_{T} vs mass, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhSelectedMassPtNoOverlap->SetYTitle("mass (GeV/c^{2})");
- fhSelectedMassPtNoOverlap->SetXTitle("p_{T} (GeV/c)");
+ ("hSelectedMassPtNoOverlap","Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M}, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
+ fhSelectedMassPtNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhSelectedMassPtNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhSelectedMassPtNoOverlap) ;
}
}
if(fAnaType != kSSCalo)
{
fhPtDecay = new TH1F("hPtDecay","Number of identified #pi^{0} (#eta) decay photons",nptbins,ptmin,ptmax);
- fhPtDecay->SetYTitle("N");
- fhPtDecay->SetXTitle("p_{T} (GeV/c)");
+ fhPtDecay->SetYTitle("#it{N}");
+ fhPtDecay->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtDecay) ;
fhEDecay = new TH1F("hEDecay","Number of identified #pi^{0} (#eta) decay photons",nptbins,ptmin,ptmax);
- fhEDecay->SetYTitle("N");
- fhEDecay->SetXTitle("E (GeV)");
+ fhEDecay->SetYTitle("#it{N}");
+ fhEDecay->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhEDecay) ;
}
if( fFillSelectClHisto )
{
fhPtDispersion = new TH2F
- ("hPtDispersion","Selected #pi^{0} (#eta) pairs: p_{T} vs dispersion",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+ ("hPtDispersion","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs dispersion",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhPtDispersion->SetYTitle("D^{2}");
- fhPtDispersion->SetXTitle("p_{T} (GeV/c)");
+ fhPtDispersion->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtDispersion) ;
fhPtLambda0 = new TH2F
- ("hPtLambda0","Selected #pi^{0} (#eta) pairs: p_{T} vs #lambda_{0}",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+ ("hPtLambda0","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhPtLambda0->SetYTitle("#lambda_{0}^{2}");
- fhPtLambda0->SetXTitle("p_{T} (GeV/c)");
+ fhPtLambda0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtLambda0) ;
fhPtLambda1 = new TH2F
- ("hPtLambda1","Selected #pi^{0} (#eta) pairs: p_{T} vs #lambda_{1}",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+ ("hPtLambda1","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{1}",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhPtLambda1->SetYTitle("#lambda_{1}^{2}");
- fhPtLambda1->SetXTitle("p_{T} (GeV/c)");
+ fhPtLambda1->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtLambda1) ;
fhPtLambda0FracMaxCellCut = new TH2F
- ("hPtLambda0FracMaxCellCut","Selected #pi^{0} (#eta) pairs: p_{T} vs #lambda_{0}, Max cell fraction of energy < 0.5",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+ ("hPtLambda0FracMaxCellCut","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, Max cell fraction of energy < 0.5",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhPtLambda0FracMaxCellCut->SetYTitle("#lambda_{0}^{2}");
- fhPtLambda0FracMaxCellCut->SetXTitle("p_{T} (GeV/c)");
+ fhPtLambda0FracMaxCellCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtLambda0FracMaxCellCut) ;
fhPtFracMaxCell = new TH2F
- ("hPtFracMaxCell","Selected #pi^{0} (#eta) pairs: p_{T} vs #lambda_{0}, Max cell fraction of energy",nptbins,ptmin,ptmax,100,0,1);
+ ("hPtFracMaxCell","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, Max cell fraction of energy",nptbins,ptmin,ptmax,100,0,1);
fhPtFracMaxCell->SetYTitle("Fraction");
- fhPtFracMaxCell->SetXTitle("p_{T} (GeV/c)");
+ fhPtFracMaxCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtFracMaxCell) ;
if(fCalorimeter=="EMCAL")
{
fhPtLambda0NoTRD = new TH2F
- ("hPtLambda0NoTRD","Selected #pi^{0} (#eta) pairs: p_{T} vs #lambda_{0}, not behind TRD",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+ ("hPtLambda0NoTRD","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, not behind TRD",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhPtLambda0NoTRD->SetYTitle("#lambda_{0}^{2}");
- fhPtLambda0NoTRD->SetXTitle("p_{T} (GeV/c)");
+ fhPtLambda0NoTRD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtLambda0NoTRD) ;
fhPtFracMaxCellNoTRD = new TH2F
- ("hPtFracMaxCellNoTRD","Selected #pi^{0} (#eta) pairs: p_{T} vs #lambda_{0}, Max cell fraction of energy, not behind TRD",nptbins,ptmin,ptmax,100,0,1);
+ ("hPtFracMaxCellNoTRD","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, Max cell fraction of energy, not behind TRD",nptbins,ptmin,ptmax,100,0,1);
fhPtFracMaxCellNoTRD->SetYTitle("Fraction");
- fhPtFracMaxCellNoTRD->SetXTitle("p_{T} (GeV/c)");
+ fhPtFracMaxCellNoTRD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtFracMaxCellNoTRD) ;
if(!fFillOnlySimpleSSHisto)
{
- fhPtDispEta = new TH2F ("hPtDispEta","#sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs p_{T}", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
- fhPtDispEta->SetXTitle("p_{T} (GeV/c)");
+ fhPtDispEta = new TH2F ("hPtDispEta","#sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs #it{p}_{T}", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
+ fhPtDispEta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPtDispEta->SetYTitle("#sigma^{2}_{#eta #eta}");
outputContainer->Add(fhPtDispEta);
- fhPtDispPhi = new TH2F ("hPtDispPhi","#sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i} - <#phi>)^{2} / #Sigma w_{i} vs p_{T}", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
- fhPtDispPhi->SetXTitle("p_{T} (GeV/c)");
+ fhPtDispPhi = new TH2F ("hPtDispPhi","#sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i} - <#phi>)^{2} / #Sigma w_{i} vs #it{p}_{T}", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
+ fhPtDispPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPtDispPhi->SetYTitle("#sigma^{2}_{#phi #phi}");
outputContainer->Add(fhPtDispPhi);
- fhPtSumEta = new TH2F ("hPtSumEta","#sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i})^{2} / #Sigma w_{i} - <#eta>^{2} vs p_{T}", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
- fhPtSumEta->SetXTitle("p_{T} (GeV/c)");
+ fhPtSumEta = new TH2F ("hPtSumEta","#sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i})^{2} / #Sigma w_{i} - <#eta>^{2} vs #it{p}_{T}", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
+ fhPtSumEta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPtSumEta->SetYTitle("#delta^{2}_{#eta #eta}");
outputContainer->Add(fhPtSumEta);
- fhPtSumPhi = new TH2F ("hPtSumPhi","#sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i})^{2}/ #Sigma w_{i} - <#phi>^{2} vs p_{T}",
+ fhPtSumPhi = new TH2F ("hPtSumPhi","#sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i})^{2}/ #Sigma w_{i} - <#phi>^{2} vs #it{p}_{T}",
nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
- fhPtSumPhi->SetXTitle("p_{T} (GeV/c)");
+ fhPtSumPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPtSumPhi->SetYTitle("#delta^{2}_{#phi #phi}");
outputContainer->Add(fhPtSumPhi);
- fhPtSumEtaPhi = new TH2F ("hPtSumEtaPhi","#delta^{2}_{#eta #phi} = #Sigma w_{i}(#phi_{i} #eta_{i} ) / #Sigma w_{i} - <#phi><#eta> vs p_{T}",
+ fhPtSumEtaPhi = new TH2F ("hPtSumEtaPhi","#delta^{2}_{#eta #phi} = #Sigma w_{i}(#phi_{i} #eta_{i} ) / #Sigma w_{i} - <#phi><#eta> vs #it{p}_{T}",
nptbins,ptmin,ptmax, 2*ssbins,-ssmax,ssmax);
- fhPtSumEtaPhi->SetXTitle("p_{T} (GeV/c)");
+ fhPtSumEtaPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPtSumEtaPhi->SetYTitle("#delta^{2}_{#eta #phi}");
outputContainer->Add(fhPtSumEtaPhi);
- fhPtDispEtaPhiDiff = new TH2F ("hPtDispEtaPhiDiff","#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta} vs p_{T}",
+ fhPtDispEtaPhiDiff = new TH2F ("hPtDispEtaPhiDiff","#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta} vs #it{p}_{T}",
nptbins,ptmin,ptmax,200, -10,10);
- fhPtDispEtaPhiDiff->SetXTitle("p_{T} (GeV/c)");
+ fhPtDispEtaPhiDiff->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPtDispEtaPhiDiff->SetYTitle("#sigma^{2}_{#phi #phi}-#sigma^{2}_{#eta #eta}");
outputContainer->Add(fhPtDispEtaPhiDiff);
- fhPtSphericity = new TH2F ("hPtSphericity","(#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi}) vs p_{T} (GeV/c)",
+ fhPtSphericity = new TH2F ("hPtSphericity","(#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi}) vs #it{p}_{T} (GeV/#it{c})",
nptbins,ptmin,ptmax, 200, -1,1);
- fhPtSphericity->SetXTitle("p_{T} (GeV/c)");
+ fhPtSphericity->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPtSphericity->SetYTitle("s = (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi})");
outputContainer->Add(fhPtSphericity);
fhNLocMaxPt = new TH2F("hNLocMaxPt","Number of local maxima in cluster, selected clusters",
nptbins,ptmin,ptmax,20,0,20);
fhNLocMaxPt ->SetYTitle("N maxima");
- fhNLocMaxPt ->SetXTitle("p_{T} (GeV/c)");
+ fhNLocMaxPt ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhNLocMaxPt) ;
for(Int_t iSM = 0; iSM < GetCaloUtils()->GetNumberOfSuperModulesUsed(); iSM++)
fhNLocMaxPtSM[iSM] = new TH2F(Form("hNLocMaxPt_SM%d",iSM),Form("Number of local maxima in cluster, selected clusters in SM %d",iSM),
nptbins,ptmin,ptmax,20,0,20);
fhNLocMaxPtSM[iSM] ->SetYTitle("N maxima");
- fhNLocMaxPtSM[iSM] ->SetXTitle("p_{T} (GeV/c)");
+ fhNLocMaxPtSM[iSM] ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhNLocMaxPtSM[iSM]) ;
}
fhNLocMaxPtReject = new TH2F("hNLocMaxPtReject","Number of local maxima in cluster, rejected clusters",
nptbins,ptmin,ptmax,20,0,20);
fhNLocMaxPtReject ->SetYTitle("N maxima");
- fhNLocMaxPtReject ->SetXTitle("p_{T} (GeV/c)");
+ fhNLocMaxPtReject ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhNLocMaxPtReject) ;
}
for (Int_t i = 0; i < 3; i++)
{
fhPtLambda0LocMax[i] = new TH2F(Form("hPtLambda0LocMax%d",i+1),
- Form("Selected #pi^{0} (#eta) pairs: p_{T} vs #lambda_{0}, NLM=%s",nlm[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, NLM=%s",nlm[i].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhPtLambda0LocMax[i]->SetYTitle("#lambda_{0}^{2}");
- fhPtLambda0LocMax[i]->SetXTitle("p_{T} (GeV/c)");
+ fhPtLambda0LocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtLambda0LocMax[i]) ;
if(IsDataMC())
{
fhMCPtLambda0LocMax[ipart][i] = new TH2F
(Form("hPtLambda0LocMax%d_MC%s",i+1,pname[ipart].Data()),
- Form("Selected #pi^{0} (#eta) pairs: p_{T} vs #lambda_{0}, NLM=%s, MC %s",nlm[i].Data(),pname[ipart].Data()),
+ Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, NLM=%s, MC %s",nlm[i].Data(),pname[ipart].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhMCPtLambda0LocMax[ipart][i]->SetYTitle("#lambda_{0}^{2}");
- fhMCPtLambda0LocMax[ipart][i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtLambda0LocMax[ipart][i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPtLambda0LocMax[ipart][i]) ;
}
}
fhPtLambda1LocMax[i] = new TH2F(Form("hPtLambda1LocMax%d",i+1),
- Form("Selected #pi^{0} (#eta) pairs: p_{T} vs #lambda_{1}, %s",nlm[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{1}, %s",nlm[i].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhPtLambda1LocMax[i]->SetYTitle("#lambda_{1}^{2}");
- fhPtLambda1LocMax[i]->SetXTitle("p_{T} (GeV/c)");
+ fhPtLambda1LocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtLambda1LocMax[i]) ;
fhPtDispersionLocMax[i] = new TH2F(Form("hPtDispersionLocMax%d",i+1),
- Form("Selected #pi^{0} (#eta) pairs: p_{T} vs dispersion^{2}, %s",nlm[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs dispersion^{2}, %s",nlm[i].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhPtDispersionLocMax[i]->SetYTitle("dispersion^{2}");
- fhPtDispersionLocMax[i]->SetXTitle("p_{T} (GeV/c)");
+ fhPtDispersionLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtDispersionLocMax[i]) ;
if(fCalorimeter == "EMCAL" && !fFillOnlySimpleSSHisto)
{
fhPtDispEtaLocMax[i] = new TH2F(Form("hPtDispEtaLocMax%d",i+1),
- Form("Selected #pi^{0} (#eta) pairs: p_{T} vs #sigma_{#eta #eta}, %s",nlm[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #sigma_{#eta #eta}, %s",nlm[i].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhPtDispEtaLocMax[i]->SetYTitle("#sigma_{#eta #eta}");
- fhPtDispEtaLocMax[i]->SetXTitle("p_{T} (GeV/c)");
+ fhPtDispEtaLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtDispEtaLocMax[i]) ;
fhPtDispPhiLocMax[i] = new TH2F(Form("hPtDispPhiLocMax%d",i+1),
- Form("Selected #pi^{0} (#eta) pairs: p_{T} vs #sigma_{#phi #phi}, %s",nlm[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #sigma_{#phi #phi}, %s",nlm[i].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhPtDispPhiLocMax[i]->SetYTitle("#sigma_{#phi #phi}");
- fhPtDispPhiLocMax[i]->SetXTitle("p_{T} (GeV/c)");
+ fhPtDispPhiLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtDispPhiLocMax[i]) ;
fhPtSumEtaPhiLocMax[i] = new TH2F(Form("hPtSumEtaPhiLocMax%d",i+1),
- Form("Selected #pi^{0} (#eta) pairs: p_{T} vs #sigma_{#eta #phi}, %s",nlm[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #sigma_{#eta #phi}, %s",nlm[i].Data()),
nptbins,ptmin,ptmax,2*ssbins,-ssmax,ssmax);
fhPtSumEtaPhiLocMax[i]->SetYTitle("#sigma_{#eta #phi}");
- fhPtSumEtaPhiLocMax[i]->SetXTitle("p_{T} (GeV/c)");
+ fhPtSumEtaPhiLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtSumEtaPhiLocMax[i]) ;
fhPtDispEtaPhiDiffLocMax[i] = new TH2F(Form("hPtDispEtaPhiDiffLocMax%d",i+1),
- Form("Selected #pi^{0} (#eta) pairs: p_{T} vs #sigma_{#phi #phi} - #sigma_{#eta #eta}, %s",nlm[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #sigma_{#phi #phi} - #sigma_{#eta #eta}, %s",nlm[i].Data()),
nptbins,ptmin,ptmax,200, -10,10);
fhPtDispEtaPhiDiffLocMax[i]->SetYTitle("#sigma_{#phi #phi} - #sigma_{#eta #eta}");
- fhPtDispEtaPhiDiffLocMax[i]->SetXTitle("p_{T} (GeV/c)");
+ fhPtDispEtaPhiDiffLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtDispEtaPhiDiffLocMax[i]) ;
fhPtSphericityLocMax[i] = new TH2F(Form("hPtSphericityLocMax%d",i+1),
- Form("Selected #pi^{0} (#eta) pairs: p_{T} vs #sigma_{#phi #phi} - #sigma_{#eta #eta} / (#sigma_{#phi #phi} + #sigma_{#eta #eta}), %s",nlm[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #sigma_{#phi #phi} - #sigma_{#eta #eta} / (#sigma_{#phi #phi} + #sigma_{#eta #eta}), %s",nlm[i].Data()),
nptbins,ptmin,ptmax,200, -1,1);
fhPtSphericityLocMax[i]->SetYTitle("#sigma_{#phi #phi} - #sigma_{#eta #eta} / (#sigma_{#phi #phi} + #sigma_{#eta #eta})");
- fhPtSphericityLocMax[i]->SetXTitle("p_{T} (GeV/c)");
+ fhPtSphericityLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtSphericityLocMax[i]) ;
}
}
fhPtNCells = new TH2F ("hPtNCells","N cells in cluster vs E ", nptbins,ptmin,ptmax, nbins,nmin,nmax);
- fhPtNCells->SetXTitle("p_{T} (GeV/c)");
+ fhPtNCells->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPtNCells->SetYTitle("# of cells in cluster");
outputContainer->Add(fhPtNCells);
fhPtTime = new TH2F("hPtTime","cluster time vs pair E",nptbins,ptmin,ptmax, tbins,tmin,tmax);
- fhPtTime->SetXTitle("p_{T} (GeV/c)");
+ fhPtTime->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhPtTime->SetYTitle("t (ns)");
outputContainer->Add(fhPtTime);
fhEPairDiffTime = new TH2F("hEPairDiffTime","cluster pair time difference vs E",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
- fhEPairDiffTime->SetXTitle("E_{pair} (GeV)");
+ fhEPairDiffTime->SetXTitle("#it{E}_{pair} (GeV)");
fhEPairDiffTime->SetYTitle("#Delta t (ns)");
outputContainer->Add(fhEPairDiffTime);
fhMassPairLocMax[i] = new TH2F
(Form("MassPairLocMax%s",combiName[i].Data()),
- Form("Mass for decay #gamma pair vs E_{pair}, origin #pi^{0}, %s", combiTitle[i].Data()),
+ Form("#it{M} for decay #gamma pair vs #it{E}_{pair}, origin #pi^{0}, %s", combiTitle[i].Data()),
nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhMassPairLocMax[i]->SetYTitle("Mass (MeV/c^{2})");
- fhMassPairLocMax[i]->SetXTitle("E_{pair} (GeV)");
+ fhMassPairLocMax[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMassPairLocMax[i]->SetXTitle("#it{E}_{pair} (GeV)");
outputContainer->Add(fhMassPairLocMax[i]) ;
}
}
{
fhTrackMatchedDEta = new TH2F
("hTrackMatchedDEta",
- "d#eta of cluster-track vs cluster p_{T}",
+ "d#eta of cluster-track vs cluster #it{p}_{T}",
nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
fhTrackMatchedDEta->SetYTitle("d#eta");
- fhTrackMatchedDEta->SetXTitle("p_{T} (GeV/c)");
+ fhTrackMatchedDEta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhTrackMatchedDPhi = new TH2F
("hTrackMatchedDPhi",
- "d#phi of cluster-track vs cluster p_{T}",
+ "d#phi of cluster-track vs cluster #it{p}_{T}",
nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
fhTrackMatchedDPhi->SetYTitle("d#phi (rad)");
- fhTrackMatchedDPhi->SetXTitle("p_{T} (GeV/c)");
+ fhTrackMatchedDPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhTrackMatchedDEtaDPhi = new TH2F
("hTrackMatchedDEtaDPhi",
fhTrackMatchedDEtaPos = new TH2F
("hTrackMatchedDEtaPos",
- "d#eta of cluster-track vs cluster p_{T}",
+ "d#eta of cluster-track vs cluster #it{p}_{T}",
nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
fhTrackMatchedDEtaPos->SetYTitle("d#eta");
- fhTrackMatchedDEtaPos->SetXTitle("p_{T} (GeV/c)");
+ fhTrackMatchedDEtaPos->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhTrackMatchedDPhiPos = new TH2F
("hTrackMatchedDPhiPos",
- "d#phi of cluster-track vs cluster p_{T}",
+ "d#phi of cluster-track vs cluster #it{p}_{T}",
nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
fhTrackMatchedDPhiPos->SetYTitle("d#phi (rad)");
- fhTrackMatchedDPhiPos->SetXTitle("p_{T} (GeV/c)");
+ fhTrackMatchedDPhiPos->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhTrackMatchedDEtaDPhiPos = new TH2F
("hTrackMatchedDEtaDPhiPos",
fhTrackMatchedDEtaNeg = new TH2F
("hTrackMatchedDEtaNeg",
- "d#eta of cluster-track vs cluster p_{T}",
+ "d#eta of cluster-track vs cluster #it{p}_{T}",
nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
fhTrackMatchedDEtaNeg->SetYTitle("d#eta");
- fhTrackMatchedDEtaNeg->SetXTitle("p_{T} (GeV/c)");
+ fhTrackMatchedDEtaNeg->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhTrackMatchedDPhiNeg = new TH2F
("hTrackMatchedDPhiNeg",
- "d#phi of cluster-track vs cluster p_{T}",
+ "d#phi of cluster-track vs cluster #it{p}_{T}",
nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
fhTrackMatchedDPhiNeg->SetYTitle("d#phi (rad)");
- fhTrackMatchedDPhiNeg->SetXTitle("p_{T} (GeV/c)");
+ fhTrackMatchedDPhiNeg->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhTrackMatchedDEtaDPhiNeg = new TH2F
("hTrackMatchedDEtaDPhiNeg",
outputContainer->Add(fhTrackMatchedDPhiNeg) ;
outputContainer->Add(fhTrackMatchedDEtaDPhiNeg) ;
- fhdEdx = new TH2F ("hdEdx","matched track <dE/dx> vs cluster p_{T}", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
- fhdEdx->SetXTitle("p_{T} (GeV/c)");
- fhdEdx->SetYTitle("<dE/dx>");
+ fhdEdx = new TH2F ("hdEdx","matched track <dE/dx> vs cluster #it{p}_{T}", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
+ fhdEdx->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhdEdx->SetYTitle("<#it{dE}/#it{dx}>");
outputContainer->Add(fhdEdx);
- fhEOverP = new TH2F ("hEOverP","matched track E/p vs cluster p_{T}", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
- fhEOverP->SetXTitle("p_{T} (GeV/c)");
- fhEOverP->SetYTitle("E/p");
+ fhEOverP = new TH2F ("hEOverP","matched track E/p vs cluster #it{p}_{T}", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
+ fhEOverP->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhEOverP->SetYTitle("#it{E}/#it{p}");
outputContainer->Add(fhEOverP);
if(fCalorimeter=="EMCAL")
{
fhEOverPNoTRD = new TH2F ("hEOverPNoTRD","matched track E/p vs cluster E, SM not behind TRD ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
- fhEOverPNoTRD->SetXTitle("E (GeV)");
- fhEOverPNoTRD->SetYTitle("E/p");
+ fhEOverPNoTRD->SetXTitle("#it{E} (GeV)");
+ fhEOverPNoTRD->SetYTitle("#it{E}/#it{p}");
outputContainer->Add(fhEOverPNoTRD);
}
("hTrackMatchedMCParticlePt",
"Origin of particle vs energy",
nptbins,ptmin,ptmax,8,0,8);
- fhTrackMatchedMCParticlePt->SetXTitle("p_{T} (GeV/c)");
+ fhTrackMatchedMCParticlePt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
//fhTrackMatchedMCParticlePt->SetYTitle("Particle type");
fhTrackMatchedMCParticlePt->GetYaxis()->SetBinLabel(1 ,"Photon");
{
fhECellClusterRatio = new TH2F ("hECellClusterRatio"," cell energy / cluster energy vs cluster energy, for selected decay photons from neutral meson",
nptbins,ptmin,ptmax, 100,0,1.);
- fhECellClusterRatio->SetXTitle("E_{cluster} (GeV) ");
- fhECellClusterRatio->SetYTitle("E_{cell i}/E_{cluster}");
+ fhECellClusterRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhECellClusterRatio->SetYTitle("#it{E}_{cell i}/#it{E}_{cluster}");
outputContainer->Add(fhECellClusterRatio);
fhECellClusterLogRatio = new TH2F ("hECellClusterLogRatio"," Log(cell energy / cluster energy) vs cluster energy, for selected decay photons from neutral meson",
nptbins,ptmin,ptmax, 100,-10,0);
- fhECellClusterLogRatio->SetXTitle("E_{cluster} (GeV) ");
- fhECellClusterLogRatio->SetYTitle("Log (E_{max cell}/E_{cluster})");
+ fhECellClusterLogRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhECellClusterLogRatio->SetYTitle("Log (#it{E}_{max cell}/#it{E}_{cluster})");
outputContainer->Add(fhECellClusterLogRatio);
fhEMaxCellClusterRatio = new TH2F ("hEMaxCellClusterRatio"," max cell energy / cluster energy vs cluster energy, for selected decay photons from neutral meson",
nptbins,ptmin,ptmax, 100,0,1.);
- fhEMaxCellClusterRatio->SetXTitle("E_{cluster} (GeV) ");
- fhEMaxCellClusterRatio->SetYTitle("E_{max cell}/E_{cluster}");
+ fhEMaxCellClusterRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhEMaxCellClusterRatio->SetYTitle("#it{E}_{max cell}/#it{E}_{cluster}");
outputContainer->Add(fhEMaxCellClusterRatio);
fhEMaxCellClusterLogRatio = new TH2F ("hEMaxCellClusterLogRatio"," Log(max cell energy / cluster energy) vs cluster energy, for selected decay photons from neutral meson",
nptbins,ptmin,ptmax, 100,-10,0);
- fhEMaxCellClusterLogRatio->SetXTitle("E_{cluster} (GeV) ");
- fhEMaxCellClusterLogRatio->SetYTitle("Log (E_{max cell}/E_{cluster})");
+ fhEMaxCellClusterLogRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
+ fhEMaxCellClusterLogRatio->SetYTitle("Log (#it{E}_{max cell}/#it{E}_{cluster})");
outputContainer->Add(fhEMaxCellClusterLogRatio);
for(Int_t iw = 0; iw < 14; iw++)
{
fhLambda0ForW0[iw] = new TH2F (Form("hLambda0ForW0%d",iw),Form("shower shape, #lambda^{2}_{0} vs E, w0 = %1.1f, for selected decay photons from neutral meson",1+0.5*iw),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
- fhLambda0ForW0[iw]->SetXTitle("E_{cluster}");
+ fhLambda0ForW0[iw]->SetXTitle("#it{E}_{cluster}");
fhLambda0ForW0[iw]->SetYTitle("#lambda^{2}_{0}");
outputContainer->Add(fhLambda0ForW0[iw]);
// fhLambda1ForW0[iw] = new TH2F (Form("hLambda1ForW0%d",iw),Form("shower shape, #lambda^{2}_{1} vs E, w0 = %1.1f, for selected decay photons from neutral meson",0.5+0.5*iw),
// nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
- // fhLambda1ForW0[iw]->SetXTitle("E_{cluster}");
+ // fhLambda1ForW0[iw]->SetXTitle("#it{E}_{cluster}");
// fhLambda1ForW0[iw]->SetYTitle("#lambda^{2}_{1}");
// outputContainer->Add(fhLambda1ForW0[iw]);
if(IsDataMC())
{
+ // Origin
+
+ fhMCPi0PtOrigin = new TH2F("hMCPi0PtOrigin","Reconstructed pair from generated #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,11,0,11) ;
+ fhMCPi0PtOrigin->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCPi0PtOrigin->SetYTitle("Origin");
+ fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(1 ,"Status 21");
+ fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(2 ,"Quark");
+ fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(3 ,"qq Resonances");
+ fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(4 ,"Resonances");
+ fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(5 ,"#rho");
+ fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(6 ,"#omega");
+ fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(7 ,"K");
+ fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(8 ,"Other");
+ fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(9 ,"#eta");
+ fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(10 ,"#eta prime");
+ outputContainer->Add(fhMCPi0PtOrigin) ;
+
+ fhMCEtaPtOrigin = new TH2F("hMCEtaPtOrigin","Reconstructed pair from generated #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,7,0,7) ;
+ fhMCEtaPtOrigin->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCEtaPtOrigin->SetYTitle("Origin");
+ fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(1 ,"Status 21");
+ fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(2 ,"Quark");
+ fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(3 ,"qq Resonances");
+ fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(4 ,"Resonances");
+ fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(5 ,"Other");
+ fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(6 ,"#eta prime");
+ outputContainer->Add(fhMCEtaPtOrigin) ;
+
+ fhMCPi0ProdVertex = new TH2F("hMCPi0ProdVertex","Selected reco pair from generated #pi^{0} #it{p}_{T} vs production vertex",nptbins,ptmin,ptmax,2000,0,500) ;
+ fhMCPi0ProdVertex->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCPi0ProdVertex->SetYTitle("#it{R} (cm)");
+ outputContainer->Add(fhMCPi0ProdVertex) ;
+
+ fhMCPi0ProdVertexInner = new TH2F("hMCPi0ProdVertexInner","Selected reco pair from generated #pi^{0} #it{p}_{T} vs production vertex",nptbins,ptmin,ptmax,500,0,50) ;
+ fhMCPi0ProdVertexInner->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCPi0ProdVertexInner->SetYTitle("#it{R} (cm)");
+ outputContainer->Add(fhMCPi0ProdVertexInner) ;
+
+ fhMCEtaProdVertex = new TH2F("hMCEtaProdVertex","Selected reco pair from generated #eta #it{p}_{T} vs production vertex",nptbins,ptmin,ptmax,2000,0,500) ;
+ fhMCEtaProdVertex->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCEtaProdVertex->SetYTitle("#it{R} (cm)");
+ outputContainer->Add(fhMCEtaProdVertex) ;
+
+ fhMCEtaProdVertexInner = new TH2F("hMCEtaProdVertexInner","Selected reco pair from generated #eta #it{p}_{T} vs production vertex",nptbins,ptmin,ptmax,500,0,50) ;
+ fhMCEtaProdVertexInner->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCEtaProdVertexInner->SetYTitle("#it{R} (cm)");
+ outputContainer->Add(fhMCEtaProdVertexInner) ;
+
if(GetReader()->GetDataType() != AliCaloTrackReader::kMC && fAnaType==kSSCalo)
{
- fhMCPi0PtGenRecoFraction = new TH2F("hMCPi0PtGenRecoFraction","Number of clusters from #pi^{0} (2 #gamma) identified as #pi^{0} (#eta), pT versus E primary #pi^{0} / E reco",
+ fhMCPi0PtGenRecoFraction = new TH2F("hMCPi0PtGenRecoFraction","Number of clusters from #pi^{0} (2 #gamma) identified as #pi^{0} (#eta), #it{p}_{T} versus E primary #pi^{0} / E reco",
nptbins,ptmin,ptmax,200,0,2);
- fhMCPi0PtGenRecoFraction->SetXTitle("p^{rec}_{T} (GeV/c)");
- fhMCPi0PtGenRecoFraction->SetYTitle("E^{ #pi^{0} mother} / E^{rec}");
+ fhMCPi0PtGenRecoFraction->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
+ fhMCPi0PtGenRecoFraction->SetYTitle("#it{E}^{#pi^{0} mother} / #it{E}^{rec}");
outputContainer->Add(fhMCPi0PtGenRecoFraction) ;
- fhMCEtaPtGenRecoFraction = new TH2F("hMCEtaPtGenRecoFraction","Number of clusters from #eta (2 #gamma) identified as #pi^{0} (#eta),pT versus E primary #eta / E reco",
+ fhMCEtaPtGenRecoFraction = new TH2F("hMCEtaPtGenRecoFraction","Number of clusters from #eta (2 #gamma) identified as #pi^{0} (#eta),#it{p}_{T} versus E primary #eta / E reco",
nptbins,ptmin,ptmax,200,0,2);
- fhMCEtaPtGenRecoFraction->SetXTitle("p^{rec}_{T} (GeV/c)");
- fhMCEtaPtGenRecoFraction->SetYTitle("E^{ #eta mother} / E^{rec}");
+ fhMCEtaPtGenRecoFraction->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
+ fhMCEtaPtGenRecoFraction->SetYTitle("#it{E}^{ #eta mother} / #it{E}^{rec}");
outputContainer->Add(fhMCEtaPtGenRecoFraction) ;
fhMCPi0DecayPt = new TH1F("hMCPi0DecayPt","Number of #gamma from #pi^{0} decay identified as #pi^{0} (#eta)",nptbins,ptmin,ptmax);
- fhMCPi0DecayPt->SetYTitle("N");
- fhMCPi0DecayPt->SetXTitle("p^{rec}_{T} (GeV/c)");
+ fhMCPi0DecayPt->SetYTitle("#it{N}");
+ fhMCPi0DecayPt->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPi0DecayPt) ;
- fhMCPi0DecayPtFraction = new TH2F("hMCPi0DecayPtFraction","Number of #gamma from #pi^{0} decay identified as #pi^{0} (#eta), pT versus E primary #gamma / E primary #pi^{0}",
+ fhMCPi0DecayPtFraction = new TH2F("hMCPi0DecayPtFraction","Number of #gamma from #pi^{0} decay identified as #pi^{0} (#eta), #it{p}_{T} versus E primary #gamma / #it{E} primary #pi^{0}",
nptbins,ptmin,ptmax,100,0,1);
- fhMCPi0DecayPtFraction->SetXTitle("p^{rec}_{T} (GeV/c)");
+ fhMCPi0DecayPtFraction->SetXTitle("p^{rec}_{T} (GeV/#it{c})");
fhMCPi0DecayPtFraction->SetYTitle("E^{gen} / E^{gen-mother}");
outputContainer->Add(fhMCPi0DecayPtFraction) ;
fhMCEtaDecayPt = new TH1F("hMCEtaDecayPt","Number of #gamma from #eta decay identified as #pi^{0} (#eta)",nptbins,ptmin,ptmax);
- fhMCEtaDecayPt->SetYTitle("N");
- fhMCEtaDecayPt->SetXTitle("p^{rec}_{T} (GeV/c)");
+ fhMCEtaDecayPt->SetYTitle("#it{N}");
+ fhMCEtaDecayPt->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCEtaDecayPt) ;
- fhMCEtaDecayPtFraction = new TH2F("hMCEtaDecayPtFraction","Number of #gamma from #eta decay identified as #pi^{0} (#eta), pT versus E primary #gamma / E primary #eta",
+ fhMCEtaDecayPtFraction = new TH2F("hMCEtaDecayPtFraction","Number of #gamma from #eta decay identified as #pi^{0} (#eta), #it{p}_{T} versus E primary #gamma / E primary #eta",
nptbins,ptmin,ptmax,100,0,1);
- fhMCEtaDecayPtFraction->SetXTitle("p^{rec}_{T} (GeV/c)");
- fhMCEtaDecayPtFraction->SetYTitle("E^{gen} / E^{gen-mother}");
+ fhMCEtaDecayPtFraction->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
+ fhMCEtaDecayPtFraction->SetYTitle("#it{E}^{gen} / #it{E}^{gen-mother}");
outputContainer->Add(fhMCEtaDecayPtFraction) ;
fhMCOtherDecayPt = new TH1F("hMCOtherDecayPt","Number of #gamma decay (not #eta or #pi^{0}) identified as #pi^{0} (#eta)",nptbins,ptmin,ptmax);
- fhMCOtherDecayPt->SetYTitle("N");
- fhMCOtherDecayPt->SetXTitle("p^{rec}_{T} (GeV/c)");
+ fhMCOtherDecayPt->SetYTitle("#it{N}");
+ fhMCOtherDecayPt->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCOtherDecayPt) ;
}
fhAnglePairMCPi0 = new TH2F
("AnglePairMCPi0",
- "Angle between decay #gamma pair vs E_{pair}, origin #pi^{0}",nptbins,ptmin,ptmax,250,0,0.5);
+ "Angle between decay #gamma pair vs #it{E}_{pair}, origin #pi^{0}",nptbins,ptmin,ptmax,250,0,0.5);
fhAnglePairMCPi0->SetYTitle("#alpha (rad)");
- fhAnglePairMCPi0->SetXTitle("E_{pair} (GeV)");
+ fhAnglePairMCPi0->SetXTitle("#it{E}_{pair} (GeV)");
outputContainer->Add(fhAnglePairMCPi0) ;
if (fAnaType!= kSSCalo)
{
fhAnglePairMCEta = new TH2F
("AnglePairMCEta",
- "Angle between decay #gamma pair vs E_{pair}, origin #eta",nptbins,ptmin,ptmax,250,0,0.5);
+ "Angle between decay #gamma pair vs #it{E}_{pair}, origin #eta",nptbins,ptmin,ptmax,250,0,0.5);
fhAnglePairMCEta->SetYTitle("#alpha (rad)");
- fhAnglePairMCEta->SetXTitle("E_{pair} (GeV)");
+ fhAnglePairMCEta->SetXTitle("#it{E}_{pair} (GeV)");
outputContainer->Add(fhAnglePairMCEta) ;
fhMassPairMCPi0 = new TH2F
("MassPairMCPi0",
- "Mass for decay #gamma pair vs E_{pair}, origin #pi^{0}",nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhMassPairMCPi0->SetYTitle("Mass (MeV/c^{2})");
- fhMassPairMCPi0->SetXTitle("E_{pair} (GeV)");
+ "#it{M} for decay #gamma pair vs #it{E}_{pair}, origin #pi^{0}",nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
+ fhMassPairMCPi0->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMassPairMCPi0->SetXTitle("#it{E}_{pair} (GeV)");
outputContainer->Add(fhMassPairMCPi0) ;
fhMassPairMCEta = new TH2F
("MassPairMCEta",
- "Mass for decay #gamma pair vs E_{pair}, origin #eta",nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
- fhMassPairMCEta->SetYTitle("Mass (MeV/c^{2})");
- fhMassPairMCEta->SetXTitle("E_{pair} (GeV)");
+ "#it{M} for decay #gamma pair vs #it{E}_{pair}, origin #eta",nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
+ fhMassPairMCEta->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMassPairMCEta->SetXTitle("#it{E}_{pair} (GeV)");
outputContainer->Add(fhMassPairMCEta) ;
}
{
fhMCE[i] = new TH1F
- (Form("hE_MC%s",pname[i].Data()),
+ (Form("h#it{E}_MC%s",pname[i].Data()),
Form("Identified as #pi^{0} (#eta), cluster from %s",
ptype[i].Data()),
nptbins,ptmin,ptmax);
- fhMCE[i]->SetYTitle("N");
- fhMCE[i]->SetXTitle("E (GeV)");
+ fhMCE[i]->SetYTitle("#it{N}");
+ fhMCE[i]->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhMCE[i]) ;
fhMCPt[i] = new TH1F
Form("Identified as #pi^{0} (#eta), cluster from %s",
ptype[i].Data()),
nptbins,ptmin,ptmax);
- fhMCPt[i]->SetYTitle("N");
- fhMCPt[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPt[i]->SetYTitle("#it{N}");
+ fhMCPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPt[i]) ;
fhMCPtCentrality[i] = new TH2F
ptype[i].Data()),
nptbins,ptmin,ptmax, 100,0,100);
fhMCPtCentrality[i]->SetYTitle("centrality");
- fhMCPtCentrality[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtCentrality[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPtCentrality[i]) ;
if(fAnaType == kSSCalo)
{
fhMCNLocMaxPt[i] = new TH2F
(Form("hNLocMaxPt_MC%s",pname[i].Data()),
- Form("cluster from %s, pT of cluster vs NLM, accepted",ptype[i].Data()),
+ Form("cluster from %s, #it{p}_{T} of cluster vs NLM, accepted",ptype[i].Data()),
nptbins,ptmin,ptmax,20,0,20);
- fhMCNLocMaxPt[i] ->SetYTitle("N maxima");
- fhMCNLocMaxPt[i] ->SetXTitle("p_{T} (GeV/c)");
+ fhMCNLocMaxPt[i] ->SetYTitle("#it{NLM}");
+ fhMCNLocMaxPt[i] ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCNLocMaxPt[i]) ;
fhMCNLocMaxPtReject[i] = new TH2F
(Form("hNLocMaxPtReject_MC%s",pname[i].Data()),
- Form("cluster from %s, pT of cluster vs NLM, rejected",ptype[i].Data()),
+ Form("cluster from %s, #it{p}_{T} of cluster vs NLM, rejected",ptype[i].Data()),
nptbins,ptmin,ptmax,20,0,20);
- fhMCNLocMaxPtReject[i] ->SetYTitle("N maxima");
- fhMCNLocMaxPtReject[i] ->SetXTitle("p_{T} (GeV/c)");
+ fhMCNLocMaxPtReject[i] ->SetYTitle("#it{NLM}");
+ fhMCNLocMaxPtReject[i] ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCNLocMaxPtReject[i]) ;
fhMCEReject[i] = new TH1F
Form("Rejected as #pi^{0} (#eta), cluster from %s",
ptype[i].Data()),
nptbins,ptmin,ptmax);
- fhMCEReject[i]->SetYTitle("N");
- fhMCEReject[i]->SetXTitle("E (GeV)");
+ fhMCEReject[i]->SetYTitle("#it{N}");
+ fhMCEReject[i]->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhMCEReject[i]) ;
fhMCPtReject[i] = new TH1F
Form("Rejected as #pi^{0} (#eta), cluster from %s",
ptype[i].Data()),
nptbins,ptmin,ptmax);
- fhMCPtReject[i]->SetYTitle("N");
- fhMCPtReject[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtReject[i]->SetYTitle("#it{N}");
+ fhMCPtReject[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPtReject[i]) ;
}
Form("Identified as #pi^{0} (#eta), cluster from %s",ptype[i].Data()),
nptbins,ptmin,ptmax,nphibins,phimin,phimax);
fhMCPtPhi[i]->SetYTitle("#phi");
- fhMCPtPhi[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtPhi[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPtPhi[i]) ;
fhMCPtEta[i] = new TH2F
Form("Identified as #pi^{0} (#eta), cluster from %s",
ptype[i].Data()),nptbins,ptmin,ptmax,netabins,etamin,etamax);
fhMCPtEta[i]->SetYTitle("#eta");
- fhMCPtEta[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtEta[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPtEta[i]) ;
fhMCMassPt[i] = new TH2F
(Form("hMassPt_MC%s",pname[i].Data()),
- Form("all pairs mass: p_{T} vs massfrom %s",ptype[i].Data()),
+ Form("all pairs #it{M}: #it{p}_{T} vs #it{M} from %s",ptype[i].Data()),
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMCMassPt[i]->SetYTitle("mass (GeV/c^{2})");
- fhMCMassPt[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCMassPt[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMCMassPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCMassPt[i]) ;
fhMCSelectedMassPt[i] = new TH2F
(Form("hSelectedMassPt_MC%s",pname[i].Data()),
- Form("Selected #pi^{0} (#eta) pairs mass: p_{T} vs massfrom %s",ptype[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M} from %s",ptype[i].Data()),
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMCSelectedMassPt[i]->SetYTitle("mass (GeV/c^{2})");
- fhMCSelectedMassPt[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCSelectedMassPt[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMCSelectedMassPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCSelectedMassPt[i]) ;
if(fAnaType == kSSCalo)
{
fhMCMassPtNoOverlap[i] = new TH2F
(Form("hMassPtNoOverlap_MC%s",pname[i].Data()),
- Form("all pairs mass: p_{T} vs massfrom %s, no overlap",ptype[i].Data()),
+ Form("all pairs #it{M}: #it{p}_{T} vs #it{M} from %s, no overlap",ptype[i].Data()),
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMCMassPt[i]->SetYTitle("mass (GeV/c^{2})");
- fhMCMassPt[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCMassPt[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMCMassPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCMassPtNoOverlap[i]) ;
fhMCSelectedMassPtNoOverlap[i] = new TH2F
(Form("hSelectedMassPtNoOverlap_MC%s",pname[i].Data()),
- Form("Selected #pi^{0} (#eta) pairs mass: p_{T} vs massfrom %s, no overlap",ptype[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M} from %s, no overlap",ptype[i].Data()),
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMCSelectedMassPtNoOverlap[i]->SetYTitle("mass (GeV/c^{2})");
- fhMCSelectedMassPtNoOverlap[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCSelectedMassPtNoOverlap[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMCSelectedMassPtNoOverlap[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCSelectedMassPtNoOverlap[i]) ;
}
if( fFillSelectClHisto )
{
fhMCPtLambda0[i] = new TH2F(Form("hELambda0_MC%s",pname[i].Data()),
- Form("Selected pair, cluster from %s : p_{T} vs #lambda_{0}^{2}",ptype[i].Data()),
+ Form("Selected pair, cluster from %s : #it{p}_{T} vs #lambda_{0}^{2}",ptype[i].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhMCPtLambda0[i]->SetYTitle("#lambda_{0}^{2}");
- fhMCPtLambda0[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtLambda0[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPtLambda0[i]) ;
fhMCPtLambda1[i] = new TH2F(Form("hELambda1_MC%s",pname[i].Data()),
- Form("Selected pair, cluster from %s : p_{T} vs #lambda_{1}^{2}",ptype[i].Data()),
+ Form("Selected pair, cluster from %s : #it{p}_{T} vs #lambda_{1}^{2}",ptype[i].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhMCPtLambda1[i]->SetYTitle("#lambda_{1}^{2}");
- fhMCPtLambda1[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtLambda1[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPtLambda1[i]) ;
fhMCPtDispersion[i] = new TH2F(Form("hEDispersion_MC%s",pname[i].Data()),
- Form("Selected pair, cluster from %s : p_{T} vs dispersion^{2}",ptype[i].Data()),
+ Form("Selected pair, cluster from %s : #it{p}_{T} vs dispersion^{2}",ptype[i].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
- fhMCPtDispersion[i]->SetYTitle("D^{2}");
- fhMCPtDispersion[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtDispersion[i]->SetYTitle("#it{D}^{2}");
+ fhMCPtDispersion[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPtDispersion[i]) ;
if(fCalorimeter=="EMCAL")
{
fhMCPtLambda0NoTRD[i] = new TH2F(Form("hELambda0NoTRD_MC%s",pname[i].Data()),
- Form("Selected pair, cluster from %s : p_{T} vs #lambda_{0}^{2}, NoTRD",ptype[i].Data()),
+ Form("Selected pair, cluster from %s : #it{p}_{T} vs #lambda_{0}^{2}, NoTRD",ptype[i].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhMCPtLambda0NoTRD[i]->SetYTitle("#lambda_{0}^{2}");
- fhMCPtLambda0NoTRD[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtLambda0NoTRD[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCPtLambda0NoTRD[i]) ;
if(!fFillOnlySimpleSSHisto)
{
fhMCPtDispEta[i] = new TH2F (Form("hPtDispEta_MC%s",pname[i].Data()),
- Form("cluster from %s : #sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs p_{T}",ptype[i].Data()),
+ Form("cluster from %s : #sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs #it{p}_{T}",ptype[i].Data()),
nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
- fhMCPtDispEta[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtDispEta[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhMCPtDispEta[i]->SetYTitle("#sigma^{2}_{#eta #eta}");
outputContainer->Add(fhMCPtDispEta[i]);
fhMCPtDispPhi[i] = new TH2F (Form("hPtDispPhi_MC%s",pname[i].Data()),
- Form("cluster from %s : #sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i} - <#phi>)^{2} / #Sigma w_{i} vs p_{T}",ptype[i].Data()),
+ Form("cluster from %s : #sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i} - <#phi>)^{2} / #Sigma w_{i} vs #it{p}_{T}",ptype[i].Data()),
nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
- fhMCPtDispPhi[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtDispPhi[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhMCPtDispPhi[i]->SetYTitle("#sigma^{2}_{#phi #phi}");
outputContainer->Add(fhMCPtDispPhi[i]);
fhMCPtSumEtaPhi[i] = new TH2F (Form("hPtSumEtaPhi_MC%s",pname[i].Data()),
- Form("cluster from %s : #delta^{2}_{#eta #phi} = #Sigma w_{i}(#phi_{i} #eta_{i} ) / #Sigma w_{i} - <#phi><#eta> vs p_{T}",ptype[i].Data()),
+ Form("cluster from %s : #delta^{2}_{#eta #phi} = #Sigma w_{i}(#phi_{i} #eta_{i} ) / #Sigma w_{i} - <#phi><#eta> vs #it{p}_{T}",ptype[i].Data()),
nptbins,ptmin,ptmax, 2*ssbins,-ssmax,ssmax);
- fhMCPtSumEtaPhi[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtSumEtaPhi[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhMCPtSumEtaPhi[i]->SetYTitle("#delta^{2}_{#eta #phi}");
outputContainer->Add(fhMCPtSumEtaPhi[i]);
fhMCPtDispEtaPhiDiff[i] = new TH2F (Form("hPtDispEtaPhiDiff_MC%s",pname[i].Data()),
- Form("cluster from %s : #sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta} vs p_{T}",ptype[i].Data()),
+ Form("cluster from %s : #sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta} vs #it{p}_{T}",ptype[i].Data()),
nptbins,ptmin,ptmax,200,-10,10);
- fhMCPtDispEtaPhiDiff[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCPtDispEtaPhiDiff[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fhMCPtDispEtaPhiDiff[i]->SetYTitle("#sigma^{2}_{#phi #phi}-#sigma^{2}_{#eta #eta}");
outputContainer->Add(fhMCPtDispEtaPhiDiff[i]);
fhMCPtSphericity[i] = new TH2F (Form("hPtSphericity_MC%s",pname[i].Data()),
Form("cluster from %s : (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi}) vs E",ptype[i].Data()),
nptbins,ptmin,ptmax, 200,-1,1);
- fhMCPtSphericity[i]->SetXTitle("p_{T} (GeV/c)");
- fhMCPtSphericity[i]->SetYTitle("s = (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi})");
+ fhMCPtSphericity[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhMCPtSphericity[i]->SetYTitle("#it{s} = (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi})");
outputContainer->Add(fhMCPtSphericity[i]);
for(Int_t ie = 0; ie < 7; ie++)
}
fhMCPtLambda0FracMaxCellCut[i] = new TH2F(Form("hELambda0FracMaxCellCut_MC%s",pname[i].Data()),
- Form("Selected pair, cluster from %s : p_{T} vs #lambda_{0}^{2}, Max cell fraction of energy < 0.5 ",ptype[i].Data()),
+ Form("Selected pair, cluster from %s : #it{p}_{T} vs #lambda_{0}^{2}, Max cell fraction of energy < 0.5 ",ptype[i].Data()),
nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
fhMCPtLambda0FracMaxCellCut[i]->SetYTitle("#lambda_{0}^{2}");
- fhMCPtLambda0FracMaxCellCut[i]->SetXTitle("E (GeV)");
+ fhMCPtLambda0FracMaxCellCut[i]->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhMCPtLambda0FracMaxCellCut[i]) ;
fhMCPtFracMaxCell[i] = new TH2F(Form("hEFracMaxCell_MC%s",pname[i].Data()),
- Form("Selected pair, cluster from %s : p_{T} vs Max cell fraction of energy",ptype[i].Data()),
+ Form("Selected pair, cluster from %s : #it{p}_{T} vs Max cell fraction of energy",ptype[i].Data()),
nptbins,ptmin,ptmax,100,0,1);
- fhMCPtFracMaxCell[i]->SetYTitle("Fraction");
- fhMCPtFracMaxCell[i]->SetXTitle("E (GeV)");
+ fhMCPtFracMaxCell[i]->SetYTitle("#it{Fraction}");
+ fhMCPtFracMaxCell[i]->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhMCPtFracMaxCell[i]) ;
}//
if(fAnaType==kSSCalo)
{
- fhAsymmetry = new TH2F ("hAsymmetry","A = ( E1 - E2 ) / ( E1 + E2 ) vs E",
+ fhAsymmetry = new TH2F ("hAsymmetry","#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} ) vs #it{E}",
nptbins,ptmin,ptmax, 200, -1,1);
- fhAsymmetry->SetXTitle("E (GeV)");
- fhAsymmetry->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
+ fhAsymmetry->SetXTitle("#it{E} (GeV)");
+ fhAsymmetry->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
outputContainer->Add(fhAsymmetry);
- fhSelectedAsymmetry = new TH2F ("hSelectedAsymmetry","A = ( E1 - E2 ) / ( E1 + E2 ) vs E",
+ fhSelectedAsymmetry = new TH2F ("hSelectedAsymmetry","#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} ) vs #it{E}",
nptbins,ptmin,ptmax, 200, -1,1);
- fhSelectedAsymmetry->SetXTitle("E (GeV)");
- fhSelectedAsymmetry->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
+ fhSelectedAsymmetry->SetXTitle("#it{E} (GeV)");
+ fhSelectedAsymmetry->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
outputContainer->Add(fhSelectedAsymmetry);
fhSplitE = new TH1F
("hSplitE","Selected #pi^{0} (#eta) pairs energy sum of split sub-clusters",nptbins,ptmin,ptmax);
fhSplitE->SetYTitle("counts");
- fhSplitE->SetXTitle("E (GeV)");
+ fhSplitE->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhSplitE) ;
fhSplitPt = new TH1F
- ("hSplitPt","Selected #pi^{0} (#eta) pairs pT sum of split sub-clusters",nptbins,ptmin,ptmax);
+ ("hSplitPt","Selected #pi^{0} (#eta) pairs #it{p}_{T} sum of split sub-clusters",nptbins,ptmin,ptmax);
fhSplitPt->SetYTitle("counts");
- fhSplitPt->SetXTitle("p_{T} (GeV/c)");
+ fhSplitPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhSplitPt) ;
fhSplitPtPhi = new TH2F
- ("hSplitPtPhi","Selected #pi^{0} (#eta) pairs: sum split sub-cluster p_{T} vs #phi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
+ ("hSplitPtPhi","Selected #pi^{0} (#eta) pairs: sum split sub-cluster #it{p}_{T} vs #phi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
fhSplitPtPhi->SetYTitle("#phi (rad)");
- fhSplitPtPhi->SetXTitle("p_{T} (GeV/c)");
+ fhSplitPtPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhSplitPtPhi) ;
fhSplitPtEta = new TH2F
- ("hSplitPtEta","Selected #pi^{0} (#eta) pairs: sum split sub-cluster p_{T} vs #eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);
+ ("hSplitPtEta","Selected #pi^{0} (#eta) pairs: sum split sub-cluster #it{p}_{T} vs #eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);
fhSplitPtEta->SetYTitle("#eta");
- fhSplitPtEta->SetXTitle("p_{T} (GeV/c)");
+ fhSplitPtEta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhSplitPtEta) ;
fhNLocMaxSplitPt = new TH2F("hNLocMaxSplitPt","Number of local maxima in cluster",
nptbins,ptmin,ptmax,20,0,20);
- fhNLocMaxSplitPt ->SetYTitle("N maxima");
- fhNLocMaxSplitPt ->SetXTitle("p_{T} (GeV/c)");
+ fhNLocMaxSplitPt ->SetYTitle("#it{NLM}");
+ fhNLocMaxSplitPt ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhNLocMaxSplitPt) ;
fhMassSplitPt = new TH2F
- ("hMassSplitPt","all pairs mass: sum split sub-cluster p_{T} vs mass",
+ ("hMassSplitPt","all pairs #it{M}: sum split sub-cluster #it{p}_{T} vs #it{M}",
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMassSplitPt->SetYTitle("mass (GeV/c^{2})");
- fhMassSplitPt->SetXTitle("p_{T} (GeV/c)");
+ fhMassSplitPt->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMassSplitPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMassSplitPt) ;
fhSelectedMassSplitPt = new TH2F
- ("hSelectedMassSplitPt","Selected #pi^{0} (#eta) pairs mass: sum split sub-cluster p_{T} vs mass",
+ ("hSelectedMassSplitPt","Selected #pi^{0} (#eta) pairs #it{M}: sum split sub-cluster #it{p}_{T} vs #it{M}",
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhSelectedMassSplitPt->SetYTitle("mass (GeV/c^{2})");
- fhSelectedMassSplitPt->SetXTitle("p_{T} (GeV/c)");
+ fhSelectedMassSplitPt->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhSelectedMassSplitPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhSelectedMassSplitPt) ;
if(IsDataMC())
{
fhMassSplitPtNoOverlap = new TH2F
- ("hMassSplitPtNoOverlap","all pairs mass: sum split sub-cluster p_{T} vs mass, no overlap",
+ ("hMassSplitPtNoOverlap","all pairs #it{M}: sum split sub-cluster #it{p}_{T} vs #it{M}, no overlap",
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMassSplitPtNoOverlap->SetYTitle("mass (GeV/c^{2})");
- fhMassSplitPtNoOverlap->SetXTitle("p_{T} (GeV/c)");
+ fhMassSplitPtNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMassSplitPtNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMassSplitPtNoOverlap) ;
fhSelectedMassSplitPtNoOverlap = new TH2F
- ("hSelectedMassSplitPtNoOverlap","Selected #pi^{0} (#eta) pairs mass: sum split sub-cluster p_{T} vs mass, no overlap",
+ ("hSelectedMassSplitPtNoOverlap","Selected #pi^{0} (#eta) pairs #it{M}: sum split sub-cluster #it{p}_{T} vs #it{M}, no overlap",
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhSelectedMassSplitPtNoOverlap->SetYTitle("mass (GeV/c^{2})");
- fhSelectedMassSplitPtNoOverlap->SetXTitle("p_{T} (GeV/c)");
+ fhSelectedMassSplitPtNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhSelectedMassSplitPtNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhSelectedMassSplitPtNoOverlap) ;
fhMCPi0PtRecoPtPrim = new TH2F
- ("hMCPi0PtRecoPtPrim","p_{T,reco} vs p_{T,gen}",
+ ("hMCPi0PtRecoPtPrim","#it{p}_{T,reco} vs #it{p}_{T,gen}",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0PtRecoPtPrim ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0PtRecoPtPrim ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0PtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0PtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0PtRecoPtPrim ) ;
fhMCPi0PtRecoPtPrimNoOverlap = new TH2F
- ("hMCPi0PtRecoPtPrimNoOverlap","p_{T,reco} vs p_{T,gen}, no overlap",
+ ("hMCPi0PtRecoPtPrimNoOverlap","#it{p}_{T,reco} vs #it{p}_{T,gen}, no overlap",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0PtRecoPtPrimNoOverlap ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0PtRecoPtPrimNoOverlap ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0PtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0PtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0PtRecoPtPrimNoOverlap ) ;
fhMCPi0SelectedPtRecoPtPrim = new TH2F
- ("hMCPi0SelectedPtRecoPtPrim","p_{T,reco} vs p_{T,gen}",
+ ("hMCPi0SelectedPtRecoPtPrim","#it{p}_{T,reco} vs #it{p}_{T,gen}",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0SelectedPtRecoPtPrim ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0SelectedPtRecoPtPrim ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0SelectedPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0SelectedPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0SelectedPtRecoPtPrim ) ;
fhMCPi0SelectedPtRecoPtPrimNoOverlap = new TH2F
- ("hMCPi0SelectedPtRecoPtPrimNoOverlap","p_{T,reco} vs p_{T,gen}, no overlap",
+ ("hMCPi0SelectedPtRecoPtPrimNoOverlap","#it{p}_{T,reco} vs #it{p}_{T,gen}, no overlap",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0SelectedPtRecoPtPrimNoOverlap ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0SelectedPtRecoPtPrimNoOverlap ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0SelectedPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0SelectedPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0SelectedPtRecoPtPrimNoOverlap ) ;
fhMCPi0SplitPtRecoPtPrim = new TH2F
- ("hMCPi0SplitPtRecoPtPrim","p_{T,reco} (split sum) vs p_{T,gen}",
+ ("hMCPi0SplitPtRecoPtPrim","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0SplitPtRecoPtPrim ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0SplitPtRecoPtPrim ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0SplitPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0SplitPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0SplitPtRecoPtPrim ) ;
fhMCPi0SplitPtRecoPtPrimNoOverlap = new TH2F
- ("hMCPi0SplitPtRecoPtPrimNoOverlap","p_{T,reco} (split sum) vs p_{T,gen}, no overlap",
+ ("hMCPi0SplitPtRecoPtPrimNoOverlap","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, no overlap",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0SplitPtRecoPtPrimNoOverlap ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0SplitPtRecoPtPrimNoOverlap ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0SplitPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0SplitPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0SplitPtRecoPtPrimNoOverlap ) ;
fhMCPi0SelectedSplitPtRecoPtPrim = new TH2F
- ("hMCPi0SelectedSplitPtRecoPtPrim","p_{T,reco} (split sum) vs p_{T,gen}",
+ ("hMCPi0SelectedSplitPtRecoPtPrim","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0SelectedSplitPtRecoPtPrim ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0SelectedSplitPtRecoPtPrim ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0SelectedSplitPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0SelectedSplitPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0SelectedSplitPtRecoPtPrim ) ;
fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap = new TH2F
- ("hMCPi0SelectedSplitPtRecoPtPrimNoOverlap","p_{T,reco} (split sum) vs p_{T,gen}, no overlap",
+ ("hMCPi0SelectedSplitPtRecoPtPrimNoOverlap","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, no overlap",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap ) ;
fhMCEtaPtRecoPtPrim = new TH2F
- ("hMCEtaPtRecoPtPrim","p_{T,reco} vs p_{T,gen}",
+ ("hMCEtaPtRecoPtPrim","#it{p}_{T,reco} vs #it{p}_{T,gen}",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaPtRecoPtPrim ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaPtRecoPtPrim ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaPtRecoPtPrim ) ;
fhMCEtaPtRecoPtPrimNoOverlap = new TH2F
- ("hMCEtaPtRecoPtPrimNoOverlap","p_{T,reco} vs p_{T,gen}, no overlap",
+ ("hMCEtaPtRecoPtPrimNoOverlap","#it{p}_{T,reco} vs #it{p}_{T,gen}, no overlap",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaPtRecoPtPrimNoOverlap ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaPtRecoPtPrimNoOverlap ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaPtRecoPtPrimNoOverlap ) ;
fhMCEtaSelectedPtRecoPtPrim = new TH2F
- ("hMCEtaSelectedPtRecoPtPrim","p_{T,reco} vs p_{T,gen}",
+ ("hMCEtaSelectedPtRecoPtPrim","#it{p}_{T,reco} vs #it{p}_{T,gen}",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaSelectedPtRecoPtPrim ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaSelectedPtRecoPtPrim ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaSelectedPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaSelectedPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaSelectedPtRecoPtPrim ) ;
fhMCEtaSelectedPtRecoPtPrimNoOverlap = new TH2F
- ("hMCEtaSelectedPtRecoPtPrimNoOverlap","p_{T,reco} vs p_{T,gen}, no overlap",
+ ("hMCEtaSelectedPtRecoPtPrimNoOverlap","#it{p}_{T,reco} vs #it{p}_{T,gen}, no overlap",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaSelectedPtRecoPtPrimNoOverlap ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaSelectedPtRecoPtPrimNoOverlap ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaSelectedPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaSelectedPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaSelectedPtRecoPtPrimNoOverlap ) ;
fhMCEtaSplitPtRecoPtPrim = new TH2F
- ("hMCEtaSplitPtRecoPtPrim","p_{T,reco} (split sum) vs p_{T,gen}",
+ ("hMCEtaSplitPtRecoPtPrim","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaSplitPtRecoPtPrim ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaSplitPtRecoPtPrim ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaSplitPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaSplitPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaSplitPtRecoPtPrim ) ;
fhMCEtaSplitPtRecoPtPrimNoOverlap = new TH2F
- ("hMCEtaSplitPtRecoPtPrimNoOverlap","p_{T,reco} (split sum) vs p_{T,gen}, no overlap",
+ ("hMCEtaSplitPtRecoPtPrimNoOverlap","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, no overlap",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaSplitPtRecoPtPrimNoOverlap ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaSplitPtRecoPtPrimNoOverlap ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaSplitPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaSplitPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaSplitPtRecoPtPrimNoOverlap ) ;
fhMCEtaSelectedSplitPtRecoPtPrim = new TH2F
- ("hMCEtaSelectedSplitPtRecoPtPrim","p_{T,reco} (split sum) vs p_{T,gen}",
+ ("hMCEtaSelectedSplitPtRecoPtPrim","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaSelectedSplitPtRecoPtPrim ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaSelectedSplitPtRecoPtPrim ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaSelectedSplitPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaSelectedSplitPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaSelectedSplitPtRecoPtPrim ) ;
fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap = new TH2F
- ("hMCEtaSelectedSplitPtRecoPtPrimNoOverlap","p_{T,reco} (split sum) vs p_{T,gen}, no overlap",
+ ("hMCEtaSelectedSplitPtRecoPtPrimNoOverlap","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, no overlap",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap ) ;
for(Int_t inlm = 0; inlm < 3; inlm++)
{
fhMCPi0PtRecoPtPrimLocMax[inlm] = new TH2F
- (Form("hMCPi0PtRecoPtPrimLocMax%d",inlm+1),Form("p_{T,reco} vs p_{T,gen}, %s",nlm[inlm].Data()),
+ (Form("hMCPi0PtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0PtRecoPtPrimLocMax[inlm] ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0PtRecoPtPrimLocMax[inlm] ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0PtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0PtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0PtRecoPtPrimLocMax[inlm] ) ;
fhMCPi0SelectedPtRecoPtPrimLocMax[inlm] = new TH2F
- (Form("hMCPi0SelectedPtRecoPtPrimLocMax%d",inlm+1),Form("p_{T,reco} vs p_{T,gen}, %s",nlm[inlm].Data()),
+ (Form("hMCPi0SelectedPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0SelectedPtRecoPtPrimLocMax[inlm] ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0SelectedPtRecoPtPrimLocMax[inlm] ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0SelectedPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0SelectedPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0SelectedPtRecoPtPrimLocMax[inlm] ) ;
fhMCPi0SplitPtRecoPtPrimLocMax[inlm] = new TH2F
- (Form("hMCPi0SplitPtRecoPtPrimLocMax%d",inlm+1),Form("p_{T,reco} (split sum) vs p_{T,gen}, %s",nlm[inlm].Data()),
+ (Form("hMCPi0SplitPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0SplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0SplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0SplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0SplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0SplitPtRecoPtPrimLocMax[inlm] ) ;
fhMCPi0SelectedSplitPtRecoPtPrimLocMax[inlm] = new TH2F
- (Form("hMCPi0SelectedSplitPtRecoPtPrimLocMax%d",inlm+1),Form("p_{T,reco} (split sum) vs p_{T,gen}, %s",nlm[inlm].Data()),
+ (Form("hMCPi0SelectedSplitPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCPi0SelectedSplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCPi0SelectedSplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCPi0SelectedSplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCPi0SelectedSplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCPi0SelectedSplitPtRecoPtPrimLocMax[inlm] ) ;
fhMCEtaPtRecoPtPrimLocMax[inlm] = new TH2F
- (Form("hMCEtaPtRecoPtPrimLocMax%d",inlm+1),Form("p_{T,reco} vs p_{T,gen}, %s",nlm[inlm].Data()),
+ (Form("hMCEtaPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaPtRecoPtPrimLocMax[inlm] ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaPtRecoPtPrimLocMax[inlm] ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaPtRecoPtPrimLocMax[inlm] ) ;
fhMCEtaSelectedPtRecoPtPrimLocMax[inlm] = new TH2F
- (Form("hMCEtaSelectedPtRecoPtPrimLocMax%d",inlm+1),Form("p_{T,reco} vs p_{T,gen}, %s",nlm[inlm].Data()),
+ (Form("hMCEtaSelectedPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaSelectedPtRecoPtPrimLocMax[inlm] ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaSelectedPtRecoPtPrimLocMax[inlm] ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaSelectedPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaSelectedPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaSelectedPtRecoPtPrimLocMax[inlm] ) ;
fhMCEtaSplitPtRecoPtPrimLocMax[inlm] = new TH2F
- (Form("hMCEtaSplitPtRecoPtPrimLocMax%d",inlm+1),Form("p_{T,reco} (split sum) vs p_{T,gen}, %s",nlm[inlm].Data()),
+ (Form("hMCEtaSplitPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaSplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaSplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaSplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaSplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaSplitPtRecoPtPrimLocMax[inlm] ) ;
fhMCEtaSelectedSplitPtRecoPtPrimLocMax[inlm] = new TH2F
- (Form("hMCEtaSelectedSplitPtRecoPtPrimLocMax%d",inlm+1),Form("p_{T,reco} (split sum) vs p_{T,gen}, %s",nlm[inlm].Data()),
+ (Form("hMCEtaSelectedSplitPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
- fhMCEtaSelectedSplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("p_{T,gen} (GeV/c)");
- fhMCEtaSelectedSplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("p_{T,reco} (GeV/c)");
+ fhMCEtaSelectedSplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
+ fhMCEtaSelectedSplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
outputContainer->Add(fhMCEtaSelectedSplitPtRecoPtPrimLocMax[inlm] ) ;
}
for(Int_t i = 0; i< 6; i++)
{
fhMCPtAsymmetry[i] = new TH2F (Form("hEAsymmetry_MC%s",pname[i].Data()),
- Form("cluster from %s : A = ( E1 - E2 ) / ( E1 + E2 ) vs E",ptype[i].Data()),
+ Form("cluster from %s : #it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} ) vs #it{E}",ptype[i].Data()),
nptbins,ptmin,ptmax, 200,-1,1);
- fhMCPtAsymmetry[i]->SetXTitle("E (GeV)");
- fhMCPtAsymmetry[i]->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
+ fhMCPtAsymmetry[i]->SetXTitle("#it{E} (GeV)");
+ fhMCPtAsymmetry[i]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
outputContainer->Add(fhMCPtAsymmetry[i]);
fhMCSplitE[i] = new TH1F
- (Form("hSplitE_MC%s",pname[i].Data()),
+ (Form("hSplit#it{E}_MC%s",pname[i].Data()),
Form("cluster from %s, energy sum of split sub-clusters",ptype[i].Data()),
nptbins,ptmin,ptmax);
fhMCSplitE[i]->SetYTitle("counts");
- fhMCSplitE[i]->SetXTitle("E (GeV)");
+ fhMCSplitE[i]->SetXTitle("#it{E} (GeV)");
outputContainer->Add(fhMCSplitE[i]) ;
fhMCSplitPt[i] = new TH1F
(Form("hSplitPt_MC%s",pname[i].Data()),
- Form("cluster from %s, pT sum of split sub-clusters",ptype[i].Data()),
+ Form("cluster from %s, #it{p}_{T} sum of split sub-clusters",ptype[i].Data()),
nptbins,ptmin,ptmax);
fhMCSplitPt[i]->SetYTitle("counts");
- fhMCSplitPt[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCSplitPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCSplitPt[i]) ;
Form("Identified as #pi^{0} (#eta), cluster from %s",ptype[i].Data()),
nptbins,ptmin,ptmax,nphibins,phimin,phimax);
fhMCSplitPtPhi[i]->SetYTitle("#phi");
- fhMCSplitPtPhi[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCSplitPtPhi[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCSplitPtPhi[i]) ;
fhMCSplitPtEta[i] = new TH2F
Form("Identified as #pi^{0} (#eta), cluster from %s",
ptype[i].Data()),nptbins,ptmin,ptmax,netabins,etamin,etamax);
fhMCSplitPtEta[i]->SetYTitle("#eta");
- fhMCSplitPtEta[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCSplitPtEta[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCSplitPtEta[i]) ;
fhMCNLocMaxSplitPt[i] = new TH2F
(Form("hNLocMaxSplitPt_MC%s",pname[i].Data()),
- Form("cluster from %s, pT sum of split sub-clusters, for NLM",ptype[i].Data()),
+ Form("cluster from %s, #it{p}_{T} sum of split sub-clusters, for NLM",ptype[i].Data()),
nptbins,ptmin,ptmax,20,0,20);
- fhMCNLocMaxSplitPt[i] ->SetYTitle("N maxima");
- fhMCNLocMaxSplitPt[i] ->SetXTitle("p_{T} (GeV/c)");
+ fhMCNLocMaxSplitPt[i] ->SetYTitle("#it{NLM}");
+ fhMCNLocMaxSplitPt[i] ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCNLocMaxSplitPt[i]) ;
fhMCMassSplitPt[i] = new TH2F
(Form("hMassSplitPt_MC%s",pname[i].Data()),
- Form("all pairs mass: split p_{T} vs mass from %s",ptype[i].Data()),
+ Form("all pairs #it{M}: split #it{p}_{T} vs #it{M} from %s",ptype[i].Data()),
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMCMassSplitPt[i]->SetYTitle("mass (GeV/c^{2})");
- fhMCMassSplitPt[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCMassSplitPt[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMCMassSplitPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCMassSplitPt[i]) ;
fhMCSelectedMassSplitPt[i] = new TH2F
(Form("hSelectedMassSplitPt_MC%s",pname[i].Data()),
- Form("Selected #pi^{0} (#eta) pairs mass: split p_{T} vs mass from %s",ptype[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs #it{M}: split #it{p}_{T} vs #it{M} from %s",ptype[i].Data()),
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMCSelectedMassSplitPt[i]->SetYTitle("mass (GeV/c^{2})");
- fhMCSelectedMassSplitPt[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCSelectedMassSplitPt[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMCSelectedMassSplitPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCSelectedMassSplitPt[i]) ;
fhMCMassSplitPtNoOverlap[i] = new TH2F
(Form("hMassSplitPtNoOverlap_MC%s",pname[i].Data()),
- Form("all pairs mass: split p_{T} vs mass from %s, no overlap",ptype[i].Data()),
+ Form("all pairs #it{M}: split #it{p}_{T} vs #it{M} from %s, no overlap",ptype[i].Data()),
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMCMassSplitPtNoOverlap[i]->SetYTitle("mass (GeV/c^{2})");
- fhMCMassSplitPtNoOverlap[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCMassSplitPtNoOverlap[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMCMassSplitPtNoOverlap[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCMassSplitPtNoOverlap[i]) ;
fhMCSelectedMassSplitPtNoOverlap[i] = new TH2F
(Form("hSelectedMassSplitPtNoOverlap_MC%s",pname[i].Data()),
- Form("Selected #pi^{0} (#eta) pairs mass: split p_{T} vs mass from %s, no overlap",ptype[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs #it{M}: split #it{p}_{T} vs #it{M} from %s, no overlap",ptype[i].Data()),
nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
- fhMCSelectedMassSplitPtNoOverlap[i]->SetYTitle("mass (GeV/c^{2})");
- fhMCSelectedMassSplitPtNoOverlap[i]->SetXTitle("p_{T} (GeV/c)");
+ fhMCSelectedMassSplitPtNoOverlap[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
+ fhMCSelectedMassSplitPtNoOverlap[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhMCSelectedMassSplitPtNoOverlap[i]) ;
}
}
for(Int_t i = 0; i< 3; i++)
{
fhPtAsymmetryLocMax[i] = new TH2F(Form("hEAsymmetryLocMax%d",i+1),
- Form("Selected #pi^{0} (#eta) pairs: p_{T} vs A = ( E1 - E2 ) / ( E1 + E2 ), %s",nlm[i].Data()),
+ Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} ), %s",nlm[i].Data()),
nptbins,ptmin,ptmax,200, -1,1);
- fhPtAsymmetryLocMax[i]->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
- fhPtAsymmetryLocMax[i]->SetXTitle("p_{T} (GeV/c)");
+ fhPtAsymmetryLocMax[i]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
+ fhPtAsymmetryLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtAsymmetryLocMax[i]) ;
}
{
fhAsymmetryLambda0[ie] = new TH2F (Form("hAsymmetryLambda0_EBin%d",ie),
- Form("#lambda_{0}^{2} vs A for %d < E < %d GeV",bin[ie],bin[ie+1]),
+ Form("#lambda_{0}^{2} vs A for %d < #it{E} < %d GeV",bin[ie],bin[ie+1]),
ssbins,ssmin,ssmax , 200,-1,1);
fhAsymmetryLambda0[ie]->SetXTitle("#lambda_{0}^{2}");
fhAsymmetryLambda0[ie]->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
outputContainer->Add(fhAsymmetryLambda0[ie]);
fhAsymmetryDispEta[ie] = new TH2F (Form("hAsymmetryDispEta_EBin%d",ie),
- Form("#sigma^{2}_{#eta #eta} vs A for %d < E < %d GeV",bin[ie],bin[ie+1]),
+ Form("#sigma^{2}_{#eta #eta} vs #it{A} for %d < #it{E} < %d GeV",bin[ie],bin[ie+1]),
ssbins,ssmin,ssmax , 200,-1,1);
fhAsymmetryDispEta[ie]->SetXTitle("#sigma^{2}_{#eta #eta}");
- fhAsymmetryDispEta[ie]->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
+ fhAsymmetryDispEta[ie]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
outputContainer->Add(fhAsymmetryDispEta[ie]);
fhAsymmetryDispPhi[ie] = new TH2F (Form("hAsymmetryDispPhi_EBin%d",ie),
- Form("#sigma^{2}_{#phi #phi} vs A for %d < E < %d GeV",bin[ie],bin[ie+1]),
+ Form("#sigma^{2}_{#phi #phi} vs #it{A} for %d < #it{E} < %d GeV",bin[ie],bin[ie+1]),
ssbins,ssmin,ssmax , 200,-1,1);
fhAsymmetryDispPhi[ie]->SetXTitle("#sigma^{2}_{#phi #phi}");
- fhAsymmetryDispPhi[ie]->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
+ fhAsymmetryDispPhi[ie]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
outputContainer->Add(fhAsymmetryDispPhi[ie]);
}
for(Int_t ie = 0; ie < 7; ie++)
{
fhMCAsymmetryLambda0[ie][i] = new TH2F (Form("hMCAsymmetryLambda0_EBin%d_MC%s",ie,pname[i].Data()),
- Form("cluster from %s : #lambda_{0}^{2} vs A for %d < E < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
+ Form("cluster from %s : #lambda_{0}^{2} vs A for %d < #it{E} < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
ssbins,ssmin,ssmax , 200,-1,1);
fhMCAsymmetryLambda0[ie][i]->SetXTitle("#lambda_{0}^{2}");
- fhMCAsymmetryLambda0[ie][i]->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
+ fhMCAsymmetryLambda0[ie][i]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
outputContainer->Add(fhMCAsymmetryLambda0[ie][i]);
fhMCAsymmetryDispEta[ie][i] = new TH2F (Form("hMCAsymmetryDispEta_EBin%d_MC%s",ie,pname[i].Data()),
- Form("cluster from %s : #sigma^{2}_{#eta #eta} vs A for %d < E < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
+ Form("cluster from %s : #sigma^{2}_{#eta #eta} vs #it{A} for %d < #it{E} < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
ssbins,ssmin,ssmax , 200,-1,1);
fhMCAsymmetryDispEta[ie][i]->SetXTitle("#sigma^{2}_{#eta #eta}");
- fhMCAsymmetryDispEta[ie][i]->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
+ fhMCAsymmetryDispEta[ie][i]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
outputContainer->Add(fhMCAsymmetryDispEta[ie][i]);
fhMCAsymmetryDispPhi[ie][i] = new TH2F (Form("hMCAsymmetryDispPhi_EBin%d_MC%s",ie,pname[i].Data()),
- Form("cluster from %s : #sigma^{2}_{#phi #phi} vs A for %d < E < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
+ Form("cluster from %s : #sigma^{2}_{#phi #phi} vs #it{A} for %d < #it{E} < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
ssbins,ssmin,ssmax , 200,-1,1);
fhMCAsymmetryDispPhi[ie][i]->SetXTitle("#sigma^{2}_{#phi #phi}");
- fhMCAsymmetryDispPhi[ie][i]->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
+ fhMCAsymmetryDispPhi[ie][i]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
outputContainer->Add(fhMCAsymmetryDispPhi[ie][i]);
}
}
for(Int_t i = 0 ; i < 7 ; i++)
{
fhPtPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
- Form("Selected #pi^{0} (#eta) p_{T} distribution, %s Pile-Up event",pileUpName[i].Data()), nptbins,ptmin,ptmax);
- fhPtPileUp[i]->SetXTitle("p_{T} (GeV/c)");
+ Form("Selected #pi^{0} (#eta) #it{p}_{T} distribution, %s Pile-Up event",pileUpName[i].Data()), nptbins,ptmin,ptmax);
+ fhPtPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtPileUp[i]);
fhPtCellTimePileUp[i] = new TH2F(Form("hPtCellTimePileUp%s",pileUpName[i].Data()),
Form("Pt vs cell time in cluster, %s Pile-Up event",pileUpName[i].Data()),
nptbins,ptmin,ptmax,ntimptbins,timemin,timemax);
- fhPtCellTimePileUp[i]->SetXTitle("p_{T} (GeV/c)");
- fhPtCellTimePileUp[i]->SetYTitle("t_{cell} (ns)");
+ fhPtCellTimePileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhPtCellTimePileUp[i]->SetYTitle("#it{t}_{cell} (ns)");
outputContainer->Add(fhPtCellTimePileUp[i]);
fhPtTimeDiffPileUp[i] = new TH2F(Form("hPtTimeDiffPileUp%s",pileUpName[i].Data()),
Form("Pt vs t_{max}-t_{cell} in cluster, %s Pile-Up event",pileUpName[i].Data()),
nptbins,ptmin,ptmax,400,-200,200);
- fhPtTimeDiffPileUp[i]->SetXTitle("p_{T} (GeV/c");
- fhPtTimeDiffPileUp[i]->SetYTitle("t_{max}-t_{cell} (ns)");
+ fhPtTimeDiffPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhPtTimeDiffPileUp[i]->SetYTitle("#it{t}_{max}-#it{t}_{cell} (ns)");
outputContainer->Add(fhPtTimeDiffPileUp[i]);
}
- fhTimePtNoCut = new TH2F ("hTimePt_NoCut","time of cluster vs E of clusters, no cut", nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
- fhTimePtNoCut->SetXTitle("p_{T} (GeV/c)");
- fhTimePtNoCut->SetYTitle("time (ns)");
+ fhTimePtNoCut = new TH2F ("hTimePt_NoCut","#it{t} of cluster vs #it{E} of clusters, no cut", nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
+ fhTimePtNoCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhTimePtNoCut->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhTimePtNoCut);
- fhTimePtSPD = new TH2F ("hTimePt_SPD","time of cluster vs E of clusters, SPD cut", nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
- fhTimePtSPD->SetXTitle("p_{T} (GeV/c)");
- fhTimePtSPD->SetYTitle("time (ns)");
+ fhTimePtSPD = new TH2F ("hTimePt_SPD","#it{t} of cluster vs #it{E} of clusters, SPD cut", nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
+ fhTimePtSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhTimePtSPD->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhTimePtSPD);
- fhTimePtSPDMulti = new TH2F ("hTimePt_SPDMulti","time of cluster vs E of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
- fhTimePtSPDMulti->SetXTitle("p_{T} (GeV/c)");
- fhTimePtSPDMulti->SetYTitle("time (ns)");
+ fhTimePtSPDMulti = new TH2F ("hTimePt_SPDMulti","time of cluster vs #it{E} of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
+ fhTimePtSPDMulti->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+ fhTimePtSPDMulti->SetYTitle("#it{t} (ns)");
outputContainer->Add(fhTimePtSPDMulti);
- fhTimeNPileUpVertSPD = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimptbins,timemin,timemax,50,0,50);
+ fhTimeNPileUpVertSPD = new TH2F ("hTime_NPileUpVertSPD","#it{t} of cluster vs #it{N} pile-up SPD vertex", ntimptbins,timemin,timemax,50,0,50);
fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
- fhTimeNPileUpVertSPD->SetXTitle("time (ns)");
+ fhTimeNPileUpVertSPD->SetXTitle("#it{t} (ns)");
outputContainer->Add(fhTimeNPileUpVertSPD);
- fhTimeNPileUpVertTrack = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimptbins,timemin,timemax, 50,0,50 );
+ fhTimeNPileUpVertTrack = new TH2F ("hTime_NPileUpVertTracks","#it{t} of cluster vs #it{N} pile-up Tracks vertex", ntimptbins,timemin,timemax, 50,0,50 );
fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
- fhTimeNPileUpVertTrack->SetXTitle("time (ns)");
+ fhTimeNPileUpVertTrack->SetXTitle("#it{t} (ns)");
outputContainer->Add(fhTimeNPileUpVertTrack);
- fhTimeNPileUpVertContributors = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimptbins,timemin,timemax,50,0,50);
+ fhTimeNPileUpVertContributors = new TH2F ("hTime_NPileUpVertContributors","#it{t} of cluster vs #it{N} constributors to pile-up SPD vertex", ntimptbins,timemin,timemax,50,0,50);
fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
- fhTimeNPileUpVertContributors->SetXTitle("time (ns)");
+ fhTimeNPileUpVertContributors->SetXTitle("#it{t} (ns)");
outputContainer->Add(fhTimeNPileUpVertContributors);
- fhTimePileUpMainVertexZDistance = new TH2F ("hTime_PileUpMainVertexZDistance","time of cluster vs distance in Z pile-up SPD vertex - main SPD vertex",ntimptbins,timemin,timemax,100,0,50);
- fhTimePileUpMainVertexZDistance->SetYTitle("distance Z (cm) ");
- fhTimePileUpMainVertexZDistance->SetXTitle("time (ns)");
+ fhTimePileUpMainVertexZDistance = new TH2F ("hTime_PileUpMainVertexZDistance","#it{t} of cluster vs distance in #it{Z} pile-up SPD vertex - main SPD vertex",ntimptbins,timemin,timemax,100,0,50);
+ fhTimePileUpMainVertexZDistance->SetYTitle("distance #it{Z} (cm) ");
+ fhTimePileUpMainVertexZDistance->SetXTitle("#it{t} (ns)");
outputContainer->Add(fhTimePileUpMainVertexZDistance);
- fhTimePileUpMainVertexZDiamond = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimptbins,timemin,timemax,100,0,50);
- fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance Z (cm) ");
- fhTimePileUpMainVertexZDiamond->SetXTitle("time (ns)");
+ fhTimePileUpMainVertexZDiamond = new TH2F ("hTime_PileUpMainVertexZDiamond","#it{t} of cluster vs distance in #it{Z} pile-up SPD vertex - z diamond",ntimptbins,timemin,timemax,100,0,50);
+ fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance #it{Z} (cm) ");
+ fhTimePileUpMainVertexZDiamond->SetXTitle("#it{t} (ns)");
outputContainer->Add(fhTimePileUpMainVertexZDiamond);
- fhPtNPileUpSPDVtx = new TH2F ("hPt_NPileUpVertSPD","pT of cluster vs N pile-up SPD vertex",
+ fhPtNPileUpSPDVtx = new TH2F ("hPt_NPileUpVertSPD","#it{p}_{T} of cluster vs #it{N} pile-up SPD vertex",
nptbins,ptmin,ptmax,20,0,20);
fhPtNPileUpSPDVtx->SetYTitle("# vertex ");
- fhPtNPileUpSPDVtx->SetXTitle("p_{T} (GeV/c)");
+ fhPtNPileUpSPDVtx->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtNPileUpSPDVtx);
- fhPtNPileUpTrkVtx = new TH2F ("hPt_NPileUpVertTracks","pT of cluster vs N pile-up Tracks vertex",
+ fhPtNPileUpTrkVtx = new TH2F ("hPt_NPileUpVertTracks","#it{p}_{T} of cluster vs #it{N} pile-up Tracks vertex",
nptbins,ptmin,ptmax, 20,0,20 );
fhPtNPileUpTrkVtx->SetYTitle("# vertex ");
- fhPtNPileUpTrkVtx->SetXTitle("p_{T} (GeV/c)");
+ fhPtNPileUpTrkVtx->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtNPileUpTrkVtx);
- fhPtNPileUpSPDVtxTimeCut = new TH2F ("hPt_NPileUpVertSPD_TimeCut","pT of cluster vs N pile-up SPD vertex, |tof| < 25 ns",
+ fhPtNPileUpSPDVtxTimeCut = new TH2F ("hPt_NPileUpVertSPD_TimeCut","#it{p}_{T} of cluster vs N pile-up SPD vertex, |tof| < 25 ns",
nptbins,ptmin,ptmax,20,0,20);
fhPtNPileUpSPDVtxTimeCut->SetYTitle("# vertex ");
- fhPtNPileUpSPDVtxTimeCut->SetXTitle("p_{T} (GeV/c)");
+ fhPtNPileUpSPDVtxTimeCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtNPileUpSPDVtxTimeCut);
- fhPtNPileUpTrkVtxTimeCut = new TH2F ("hPt_NPileUpVertTracks_TimeCut","pT of cluster vs N pile-up Tracks vertex, |tof| < 25 ns",
+ fhPtNPileUpTrkVtxTimeCut = new TH2F ("hPt_NPileUpVertTracks_TimeCut","#it{p}_{T} of cluster vs N pile-up Tracks vertex, |tof| < 25 ns",
nptbins,ptmin,ptmax, 20,0,20 );
fhPtNPileUpTrkVtxTimeCut->SetYTitle("# vertex ");
- fhPtNPileUpTrkVtxTimeCut->SetXTitle("p_{T} (GeV/c)");
+ fhPtNPileUpTrkVtxTimeCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtNPileUpTrkVtxTimeCut);
- fhPtNPileUpSPDVtxTimeCut2 = new TH2F ("hPt_NPileUpVertSPD_TimeCut2","pT of cluster vs N pile-up SPD vertex, -25 < tof < 75 ns",
+ fhPtNPileUpSPDVtxTimeCut2 = new TH2F ("hPt_NPileUpVertSPD_TimeCut2","#it{p}_{T} of cluster vs N pile-up SPD vertex, -25 < tof < 75 ns",
nptbins,ptmin,ptmax,20,0,20);
fhPtNPileUpSPDVtxTimeCut2->SetYTitle("# vertex ");
- fhPtNPileUpSPDVtxTimeCut2->SetXTitle("p_{T} (GeV/c)");
+ fhPtNPileUpSPDVtxTimeCut2->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtNPileUpSPDVtxTimeCut2);
- fhPtNPileUpTrkVtxTimeCut2 = new TH2F ("hPt_NPileUpVertTracks_TimeCut2","pT of cluster vs N pile-up Tracks vertex, -25 < tof < 75 ns",
+ fhPtNPileUpTrkVtxTimeCut2 = new TH2F ("hPt_NPileUpVertTracks_TimeCut2","#it{p}_{T} of cluster vs N pile-up Tracks vertex, -25 < tof < 75 ns",
nptbins,ptmin,ptmax, 20,0,20 );
fhPtNPileUpTrkVtxTimeCut2->SetYTitle("# vertex ");
- fhPtNPileUpTrkVtxTimeCut2->SetXTitle("p_{T} (GeV/c)");
+ fhPtNPileUpTrkVtxTimeCut2->SetXTitle("#it{p}_{T} (GeV/#it{c})");
outputContainer->Add(fhPtNPileUpTrkVtxTimeCut2);
}
void AliAnaPi0EbE::InitParameters()
{
//Initialize the parameters of the analysis.
- AddToHistogramsName("AnaPi0EbE_");
+ AddToHistogramsName("AnaPi0Eb#it{E}_");
fInputAODGammaConvName = "PhotonsCTS" ;
fAnaType = kIMCalo ;
for(Int_t iaod = 0; iaod < naod ; iaod++)
{
-
AliAODPWG4Particle* pi0 = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));
Int_t pdg = pi0->GetIdentifiedParticleType();
if(IsDataMC())
{
Int_t tag = pi0->GetTag();
+ Int_t label = pi0->GetLabel();
Int_t mcIndex = GetMCIndex(tag);
fhMCE [mcIndex] ->Fill(ener);
if((mcIndex==kmcPhoton || mcIndex==kmcPi0 || mcIndex==kmcEta) && fAnaType==kSSCalo)
{
Float_t efracMC = 0;
- Int_t label = pi0->GetLabel();
Int_t momlabel = -1;
Bool_t ok = kFALSE;
}
+ if( mcIndex==kmcPi0 || mcIndex==kmcEta )
+ {
+ Float_t prodR = -1;
+ Int_t momindex = -1;
+ Int_t mompdg = -1;
+ Int_t momstatus = -1;
+
+ if(GetReader()->ReadStack())
+ {
+ TParticle* ancestor = GetMCStack()->Particle(label);
+ momindex = ancestor->GetFirstMother();
+ if(momindex < 0) return;
+ TParticle* mother = GetMCStack()->Particle(momindex);
+ mompdg = TMath::Abs(mother->GetPdgCode());
+ momstatus = mother->GetStatusCode();
+ prodR = mother->R();
+ }
+ else
+ {
+ TClonesArray * mcparticles = GetReader()->GetAODMCParticles();
+ AliAODMCParticle* ancestor = (AliAODMCParticle *) mcparticles->At(label);
+ momindex = ancestor->GetMother();
+ if(momindex < 0) return;
+ AliAODMCParticle* mother = (AliAODMCParticle *) mcparticles->At(momindex);
+ mompdg = TMath::Abs(mother->GetPdgCode());
+ momstatus = mother->GetStatus();
+ prodR = TMath::Sqrt(mother->Xv()*mother->Xv()+mother->Yv()*mother->Yv());
+ }
+
+ if( mcIndex==kmcPi0 )
+ {
+ fhMCPi0ProdVertex->Fill(pt,prodR);
+ if(prodR < 50)fhMCPi0ProdVertexInner->Fill(pt,prodR);
+
+ if (momstatus == 21) fhMCPi0PtOrigin->Fill(pt,0.5);//parton
+ else if(mompdg < 22 ) fhMCPi0PtOrigin->Fill(pt,1.5);//quark
+ else if(mompdg > 2100 && mompdg < 2210) fhMCPi0PtOrigin->Fill(pt,2.5);// resonances
+ else if(mompdg == 221) fhMCPi0PtOrigin->Fill(pt,8.5);//eta
+ else if(mompdg == 331) fhMCPi0PtOrigin->Fill(pt,9.5);//eta prime
+ else if(mompdg == 213) fhMCPi0PtOrigin->Fill(pt,4.5);//rho
+ else if(mompdg == 223) fhMCPi0PtOrigin->Fill(pt,5.5);//omega
+ else if(mompdg >= 310 && mompdg <= 323) fhMCPi0PtOrigin->Fill(pt,6.5);//k0S, k+-,k*
+ else if(mompdg == 130) fhMCPi0PtOrigin->Fill(pt,6.5);//k0L
+ else if(momstatus == 11 || momstatus == 12 ) fhMCPi0PtOrigin->Fill(pt,3.5);//resonances
+ else fhMCPi0PtOrigin->Fill(pt,7.5);//other?
+ }
+ else if (mcIndex==kmcEta )
+ {
+ fhMCEtaProdVertex->Fill(pt,prodR);
+ if(prodR < 50)fhMCEtaProdVertexInner->Fill(pt,prodR);
+
+ if (momstatus == 21) fhMCEtaPtOrigin->Fill(pt,0.5);//parton
+ else if(mompdg < 22 ) fhMCEtaPtOrigin->Fill(pt,1.5);//quark
+ else if(mompdg > 2100 && mompdg < 2210) fhMCEtaPtOrigin->Fill(pt,2.5);// resonances
+ else if(mompdg == 221) fhMCEtaPtOrigin->Fill(pt,8.5);//eta
+ else if(mompdg == 331) fhMCEtaPtOrigin->Fill(pt,9.5);//eta prime
+ else if(mompdg == 213) fhMCEtaPtOrigin->Fill(pt,4.5);//rho
+ else if(mompdg == 223) fhMCEtaPtOrigin->Fill(pt,5.5);//omega
+ else if(mompdg >= 310 && mompdg <= 323) fhMCEtaPtOrigin->Fill(pt,6.5);//k0S, k+-,k*
+ else if(mompdg == 130) fhMCEtaPtOrigin->Fill(pt,6.5);//k0L
+ else if(momstatus == 11 || momstatus == 12 ) fhMCEtaPtOrigin->Fill(pt,3.5);//resonances
+ else fhMCEtaPtOrigin->Fill(pt,7.5);//other?
+ }
+ }
+
}//Histograms with MC
}// aod loop
TH2F * fhAnglePairMCPi0; //! pair opening angle, origin is same pi0
TH2F * fhAnglePairMCEta; //! pair opening angle, origin is same eta
+ TH2F * fhMCPi0PtOrigin ; //! Mass of reoconstructed pi0 pairs in calorimeter vs mother
+ TH2F * fhMCEtaPtOrigin ; //! Mass of reoconstructed pi0 pairs in calorimeter vs mother
+ TH2F * fhMCPi0ProdVertex; //! Spectrum of selected pi0 vs production vertex
+ TH2F * fhMCEtaProdVertex; //! Spectrum of selected eta vs production vertex
+ TH2F * fhMCPi0ProdVertexInner; //! Spectrum of selected pi0 vs production vertex, below 50 cm
+ TH2F * fhMCEtaProdVertexInner; //! Spectrum of selected eta vs production vertex, below 50 cm
+
+
// Weight studies
TH2F * fhECellClusterRatio; //! e cell / e cluster vs e cluster for selected photons
AliAnaPi0EbE( const AliAnaPi0EbE & pi0ebe) ; // cpy ctor
AliAnaPi0EbE & operator = (const AliAnaPi0EbE & pi0ebe) ; // cpy assignment
- ClassDef(AliAnaPi0EbE,37)
+ ClassDef(AliAnaPi0EbE,38)
} ;
--- /dev/null
+// Configuration macro for analysis of photon-jet analysis
+// Adam Matyja based on AddTaskIsoPhoton by Gustavo Conesa & Marie Germain.
+// need to be updated to the newest version
+
+//new macro
+Bool_t kSimulation = kFALSE;
+Bool_t kUseKinematics = kFALSE;
+Bool_t kOutputAOD = kFALSE;
+Bool_t kEventSelection= kFALSE;
+Bool_t kExotic = kTRUE;
+Bool_t kNonLinearity = kFALSE;
+TString kCollisions = "pp";
+TString kTrig = "EMC7" ;
+TString kFiredTrig = "EG1" ;
+TString kClusterArray = "";
+TString kData = ""; // MC or deltaAOD
+TString kInputDataType = "ESD";
+Bool_t kTM = kTRUE;
+Bool_t kRecalTM = kTRUE;
+Int_t kMinCen = -1;
+Int_t kMaxCen = -1;
+TString kName = "";
+Bool_t kCalibE = kTRUE;
+Bool_t kCalibT = kTRUE;
+Bool_t kBadMap = kTRUE;
+Bool_t kTender = kFALSE;
+Bool_t kMix = kFALSE;
+Int_t kRunNumber = -1;
+
+AliAnalysisTaskCaloTrackCorrelation *AddTaskGammaJetCorrelation(//const Float_t cone = 0.4,
+ //const Float_t pth = 0.5,
+ const TString data = "",
+ const TString calorimeter = "EMCAL", //done
+ const Bool_t simulation = kFALSE,
+ const Bool_t eventsel = kFALSE,
+ const Bool_t exotic = kTRUE,
+ const Bool_t nonlin = kFALSE,
+ TString outputfile = "",
+ const TString col = "pp",
+ const TString trigger = "MB",
+ const TString firedTrigger = "EG1",
+ const TString clustersArray = "V1",
+ const Bool_t mix = kTRUE,
+ const Bool_t recaltm = kTRUE,
+ const Bool_t tm = kTRUE,
+ const Int_t minCen = -1,
+ const Int_t maxCen = -1,
+ const Bool_t calibE = kTRUE,
+ const Bool_t badmap = kTRUE,
+ const Bool_t calibT = kTRUE,
+ const Bool_t tender = kFALSE,
+ const Bool_t outputAOD = kFALSE,
+ const Int_t debug = -1,//done
+ const Bool_t printSettings = kFALSE,//done
+ const Double_t scaleFactor = -1,
+ const Int_t runNumber = -1
+ )
+{
+ // Creates a CaloTrackCorr task, configures it and adds it to the analysis manager.
+
+ kSimulation = simulation;
+ kCollisions = col;
+ kExotic = exotic;
+ kNonLinearity = nonlin;
+ kTrig = trigger;
+ kFiredTrig = firedTrigger;
+ kClusterArray = clustersArray;
+ kData = data;
+ kOutputAOD = outputAOD;
+ kTM = tm;
+ kRecalTM = recaltm;
+ kMinCen = minCen;
+ kMaxCen = maxCen;
+ kEventSelection= eventsel;
+ kCalibE = calibE;
+ kCalibT = calibT;
+ kBadMap = badmap;
+ kTender = tender;
+ kMix = mix;
+ kRunNumber = runNumber;
+
+ // Get the pointer to the existing analysis manager via the static access method.
+
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr)
+ {
+ ::Error("AddTask", "No analysis manager to connect to.");
+ return NULL;
+ }
+
+ // Check the analysis type using the event handlers connected to the analysis manager.
+
+ if (!mgr->GetInputEventHandler())
+ {
+ ::Error("AddTask", "This task requires an input event handler");
+ return NULL;
+ }
+
+ kInputDataType = "AOD";
+ if(!kData.Contains("delta"))
+ kInputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+
+ if(kSimulation)
+ {
+ kUseKinematics = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;
+ if (!kUseKinematics && data=="AOD" && kInputDataType != "ESD") kUseKinematics = kTRUE; //AOD primary should be available ...
+ }
+
+ cout<<"********* ACCESS KINE? "<<kUseKinematics<<endl;
+
+ // Name for containers
+
+ //kName = Form("%s_Trig%s_Cl%s_TM%d_R%1.1f_Pt%1.1f",calorimeter.Data(), kTrig.Data(),kClusterArray.Data(),kTM,cone,pth);
+ // kName = Form("%s_Trig%s_Cl%s_TM%d",calorimeter.Data(), kTrig.Data(),kClusterArray.Data(),kTM);
+ kName = Form("%s_Trig%s_Fired%s_Cl%s_TM%d",calorimeter.Data(), kTrig.Data(),kFiredTrig.Data(),kClusterArray.Data(),kTM);//<<<---changed here
+
+
+ if(kCollisions=="PbPb" && kMaxCen>=0) kName+=Form("Cen%d_%d",kMinCen,kMaxCen);
+
+ printf("<<<< NAME: %s >>>>>\n",kName.Data());
+
+ // #### Configure analysis ####
+
+ AliAnaCaloTrackCorrMaker * maker = new AliAnaCaloTrackCorrMaker();
+ printf("SCALE FACTOR %e\n",scaleFactor);
+ maker->SetScaleFactor(scaleFactor); // for MC, negative (not scaled) by default
+
+ // General frame setting and configuration
+ maker->SetReader (ConfigureReader(calorimeter,debug,printSettings) );
+ maker->SetCaloUtils(ConfigureCaloUtils(debug,printSettings));
+
+ // Analysis tasks setting and configuration
+ Int_t n = 0;//Analysis number, order is important
+
+ // Isolation settings
+ Int_t partInCone = AliIsolationCut::kNeutralAndCharged; // kOnlyCharged;
+ Int_t thresType = AliIsolationCut::kPtThresIC;// AliIsolationCut::kSumPtFracIC ;
+ Float_t cone = -1;
+ Float_t pth = -1;
+
+ maker->AddAnalysis(ConfigurePhotonAnalysis(calorimeter,debug,printSettings), n++); // Photon cluster selection
+ maker->AddAnalysis(ConfigureIsolationAnalysis(calorimeter,"Photon", partInCone,thresType, cone, pth,kFALSE,debug,printSettings), n++); // Photon isolation
+ maker->AddAnalysis(ConfigurePhotonJetAnalysis(debug,printSettings), n++);// photon-jet correlation analysis
+
+ maker->SetAnaDebug(debug) ;
+ maker->SwitchOnHistogramsMaker() ;
+ if(kData.Contains("delta")) maker->SwitchOffAODsMaker() ;
+ else maker->SwitchOnAODsMaker() ;
+
+ if(printSettings) maker->Print("");
+
+ printf("<< End Configuration of %d analysis for calorimeter %s >>\n",n, calorimeter.Data());
+ // Create task
+
+ AliAnalysisTaskCaloTrackCorrelation * task = new AliAnalysisTaskCaloTrackCorrelation (Form("CaloTrackCorr%s",kName.Data()));
+ task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
+ task->SetDebugLevel(debug);
+ task->SetBranches("ESD:AliESDRun.,AliESDHeader");
+ task->SetAnalysisMaker(maker);
+ mgr->AddTask(task);
+
+ //Create containers
+
+ if(outputfile.Length()==0) outputfile = AliAnalysisManager::GetCommonFileName();
+
+ AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(kName, TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ Form("%s",outputfile.Data()));
+
+ AliAnalysisDataContainer *cout_cuts = mgr->CreateContainer(Form("Param_%s",kName.Data()), TList::Class(),
+ AliAnalysisManager::kParamContainer,
+ "AnalysisParameters.root");
+
+ // Create ONLY the output containers for the data produced by the task.
+ // Get and connect other common input/output containers via the manager as below
+ //==============================================================================
+ mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer());
+ // AOD output slot will be used in a different way in future
+ if(!kData.Contains("delta") && outputAOD) mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
+ mgr->ConnectOutput (task, 1, cout_pc);
+ mgr->ConnectOutput (task, 2, cout_cuts);
+
+ if(!kMix)
+ {
+ UInt_t mask = SetTriggerMaskFromName();
+ task->SelectCollisionCandidates(mask);
+ }
+
+ return task;
+}
+
+//____________________________________
+AliCaloTrackReader * ConfigureReader(TString calorimeter = "EMCAL",Int_t debug = -1,Bool_t printSettings = kFALSE)
+{
+
+ AliCaloTrackReader * reader = 0;
+ if (kInputDataType == "ESD"&& kData=="MC" )
+ reader = new AliCaloTrackMCReader();
+ else if(kInputDataType=="AOD" || kData.Contains("AOD"))
+ reader = new AliCaloTrackAODReader();
+ else if(kInputDataType=="ESD")
+ reader = new AliCaloTrackESDReader();
+ else
+ printf("AliCaloTrackReader::ConfigureReader() - Data combination not known kData=%s, kInputData=%s\n",kData.Data(),kInputDataType.Data());
+
+ reader->SetDebug(debug);//10 for lots of messages
+ //reader->SetDebug(10);//10 for lots of messages
+ //reader->SetDebug(2);//10 for lots of messages
+
+ if(kSimulation)
+ {
+ // Event rejection cuts for jet-jet simulations, do not use in other
+ reader->SetPtHardAndJetPtComparison(kTRUE);
+ reader->SetPtHardAndJetPtFactor(4);
+
+ reader->SetPtHardAndClusterPtComparison(kTRUE);
+ reader->SetPtHardAndClusterPtFactor(1.5);
+ }
+
+ //Delta AOD?
+ //reader->SetDeltaAODFileName("");
+ if(kOutputAOD) reader->SwitchOnWriteDeltaAOD() ;
+
+ // MC settings
+ if(kUseKinematics){
+ if(kInputDataType == "ESD"){
+ reader->SwitchOnStack();
+ reader->SwitchOffAODMCParticles();
+ }
+ else if(kInputDataType == "AOD"){
+ reader->SwitchOffStack();
+ reader->SwitchOnAODMCParticles();
+ }
+ }
+
+ //------------------------
+ // Detector input filling
+ //------------------------
+
+ //Min cluster/track E
+ reader->SetEMCALEMin(0.3);
+ //reader->SetEMCALEMin(0.);// <<<----changed here
+ reader->SetEMCALEMax(1000);
+ reader->SetPHOSEMin(0.3);
+ reader->SetPHOSEMax(1000);
+ // reader->SetCTSPtMin(0.2);
+ reader->SetCTSPtMin(0.15);// <<<----changed here
+ reader->SetCTSPtMax(1000);
+
+ //-----------------------------------------------------------------
+ // Jet part
+ //-----------------------------------------------------------------
+ reader->SwitchOnNonStandardJets();
+ //reader->SetInputNonStandardJetBranchName("clustersAOD_ANTIKT04_B0_Filter00768_Cut00150_Skip00");
+ //reader->SetInputNonStandardJetBranchName("clustersAOD_ANTIKT04_B1_Filter00768_Cut00150_Skip00");//in PbPb
+ //reader->SetInputNonStandardJetBranchName("clustersAOD_ANTIKT04_B0_Filter00272_Cut00150_Skip00");//in pp 2.76 LHC11a,7 LHC11c
+ //reader->SetInputNonStandardJetBranchName("clustersAOD_ANTIKT04_B0_Filter00768_Cut00150_Skip02");//in pp 7 LHC13e4 MC
+ reader->SetInputNonStandardJetBranchName("clustersAOD_ANTIKT04_B0_Filter00272_Cut00150_Skip00");//in pp 7 LHC12a15f MC
+ reader->SwitchOffBackgroundJets();
+ //reader->SetInputBackgroundJetBranchName("jeteventbackground_clustersAOD_KT04_B0_Filter00768_Cut00150_Skip00");//in pp 7 LHC13e4 MC
+
+
+ // Time cuts
+ if(kSimulation)
+ {
+ reader->SetEMCALTimeCut(-1e10,1e10); // Open time cut
+ reader->SwitchOffUseEMCALTimeCut() ;
+ reader->SwitchOffUseParametrizedTimeCut();
+ }
+ else
+ {
+ if(kCalibT)
+ {
+ printf("Set time cut parameters for run %d\n",kRunNumber);
+ //reader->SetEMCALTimeCut(-20,20);
+ reader->SwitchOnUseParametrizedTimeCut();
+ if (kRunNumber >= 151636 && kRunNumber <= 155384 )
+ {
+ printf("Set time parameters for LHC11c\n");
+ reader->SetEMCALParametrizedMinTimeCut(0,-5 ); reader->SetEMCALParametrizedMinTimeCut(1,-1 ); reader->SetEMCALParametrizedMinTimeCut(2, 1.87); reader->SetEMCALParametrizedMinTimeCut(3, 0.4);
+ reader->SetEMCALParametrizedMaxTimeCut(0, 3.5); reader->SetEMCALParametrizedMaxTimeCut(1, 50); reader->SetEMCALParametrizedMaxTimeCut(2, 0.15); reader->SetEMCALParametrizedMaxTimeCut(3, 1.6);
+ }
+ else if(kRunNumber >= 156447 && kRunNumber <= 159635 )
+ {
+ printf("Set time parameters for LHC11d\n");
+ reader->SetEMCALParametrizedMinTimeCut(0,-5); reader->SetEMCALParametrizedMinTimeCut(1,-1 ); reader->SetEMCALParametrizedMinTimeCut(2, 3.5 ); reader->SetEMCALParametrizedMinTimeCut(3, 1. );
+ reader->SetEMCALParametrizedMaxTimeCut(0, 5); reader->SetEMCALParametrizedMaxTimeCut(1, 50); reader->SetEMCALParametrizedMaxTimeCut(2, 0.45); reader->SetEMCALParametrizedMaxTimeCut(3, 1.25);
+ }
+ else
+ {
+ printf("*** Fixed time cut 20 ns *** \n");
+ reader->SetEMCALTimeCut(-20,20);
+ }
+
+ }
+ else
+ {
+ reader->SwitchOffUseEMCALTimeCut();
+ reader->SetEMCALTimeCut(-1e10,1e10); // Open time cut
+ reader->SwitchOffUseParametrizedTimeCut();
+ }
+ }
+
+ reader->SwitchOnFiducialCut();
+ //reader->SwitchOffFiducialCut();// <<<----changed here
+ //reader->GetFiducialCut()->SetSimpleCTSFiducialCut(0.8, 0, 360) ;
+ reader->GetFiducialCut()->SetSimpleCTSFiducialCut(0.9, 0, 360) ;// <<<--- changed here
+
+ // Tracks
+
+ // reader->SwitchOffCTS();//here changed 0n->off
+ reader->SwitchOnCTS();//here changed 0n->off
+
+ if(kInputDataType=="ESD")
+ {
+ gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
+ AliESDtrackCuts * esdTrackCuts = CreateTrackCutsPWGJE(10041004);
+ reader->SetTrackCuts(esdTrackCuts);
+ reader->SwitchOnConstrainTrackToVertex();
+ }
+ else if(kInputDataType=="AOD")
+ {
+ reader->SwitchOnAODHybridTrackSelection(); // Check that the AODs have Hybrids!!!!
+ reader->SetTrackStatus(AliVTrack::kITSrefit);
+ //reader->SetTrackFilterMask(128); // Filter bit, not mask, use if off hybrid
+ }
+
+ // Calorimeter
+
+ reader->SetEMCALClusterListName(kClusterArray);
+ if(kClusterArray == "" && !kTender)
+ {
+ printf("**************** Standard EMCAL clusters branch analysis **************** \n");
+ reader->SwitchOnClusterRecalculation();
+ // Check in ConfigureCaloUtils that the recalibration and bad map are ON
+ }
+ else
+ {
+ printf("**************** Input for analysis is Clusterizer %s **************** \n", kClusterArray.Data());
+ reader->SwitchOffClusterRecalculation();
+ }
+
+ if(calorimeter == "EMCAL") {
+ reader->SwitchOnEMCALCells();
+ reader->SwitchOnEMCAL();
+ }
+ if(calorimeter == "PHOS") {
+ reader->SwitchOnPHOSCells();
+ reader->SwitchOnPHOS();
+ }
+
+ // for case data="deltaAOD", no need to fill the EMCAL/PHOS cluster lists
+ if(kData.Contains("delta"))
+ {
+ reader->SwitchOffEMCAL();
+ reader->SwitchOffPHOS();
+ reader->SwitchOffEMCALCells();
+ reader->SwitchOffPHOSCells();
+ }
+
+ //-----------------
+ // Event selection
+ //-----------------
+
+ //if(!kUseKinematics) reader->SetFiredTriggerClassName("CEMC7EGA-B-NOPF-CENTNOTRD"); // L1 Gamma
+ if(!kUseKinematics) {
+ if(kCollisions =="pPb" && kTrig=="EMCEGA") {
+ reader->SetFiredTriggerClassName(kFiredTrig);
+ }
+ }
+
+ // For mixing with AliAnaParticleHadronCorrelation switch it off
+ if(kMix)
+ {
+ reader->SwitchOffEventTriggerAtSE();
+ UInt_t mask = SetTriggerMaskFromName();
+ reader->SetEventTriggerMaks(mask); // Only for mixing and SwitchOffEventTriggerAtSE();
+ //reader->SetMixEventTriggerMaks(AliVEvent::kMB); // Careful, not all productions work with kMB, try kINT7, kINT1, kAnyINT
+ reader->SetMixEventTriggerMaks(AliVEvent::kAnyINT); // Careful, not all productions work with kMB, try kINT7, kINT1, kAnyINT
+
+ printf("---Trigger selection done in AliCaloTrackReader!!!\n");
+ }
+ else
+ reader->SwitchOnEventTriggerAtSE();
+
+ reader->SetZvertexCut(10.); // Open cut
+ //reader->SetZvertexCut(50.); // Open cut <<<--- changed here
+ reader->SwitchOnPrimaryVertexSelection(); // and besides primary vertex
+ //reader->SwitchOffPrimaryVertexSelection(); // and besides primary vertex <<<--- changed here
+
+ if(kEventSelection)
+ {
+ reader->SwitchOnPileUpEventRejection(); // remove pileup by default
+ // reader->SwitchOnEventSelection(); // remove pileup by default
+ reader->SwitchOnV0ANDSelection() ; // and besides v0 AND
+ }
+ else
+ {
+ reader->SwitchOffPileUpEventRejection(); // remove pileup by default
+ // reader->SwitchOffEventSelection(); // remove pileup by default
+ reader->SwitchOffV0ANDSelection() ; // and besides v0 AND
+ }
+
+ if(kCollisions=="PbPb")
+ {
+ // Centrality
+ reader->SetCentralityClass("V0M");
+ reader->SetCentralityOpt(10); // 10 (c= 0-10, 10-20 ...), 20 (c= 0-5, 5-10 ...) or 100 (c= 1, 2, 3 ..)
+ reader->SetCentralityBin(kMinCen,kMaxCen); // Accept all events, if not select range
+
+ // Event plane (only used in Maker and mixing for AliAnaPi0/AliAnaHadronCorrelation for the moment)
+ reader->SetEventPlaneMethod("V0");
+ }
+
+ if(printSettings) reader->Print("");
+ reader->Print("");
+
+ return reader;
+
+}
+
+//_______________________________________
+AliCalorimeterUtils* ConfigureCaloUtils(Int_t debug = -1,Bool_t print = kFALSE)
+{
+
+ AliCalorimeterUtils *cu = new AliCalorimeterUtils;
+ cu->SetDebug(debug);
+
+ // Remove clusters close to borders, at least max energy cell is 1 cell away
+ //cu->SetNumberOfCellsFromEMCALBorder(0);// <<<----changed here
+ cu->SetNumberOfCellsFromEMCALBorder(1);
+ cu->SetNumberOfCellsFromPHOSBorder(2);
+
+ // Search of local maxima in cluster
+ if(kCollisions=="pp" || kCollisions=="pPb")
+ {
+ cu->SetLocalMaximaCutE(0.1);
+ cu->SetLocalMaximaCutEDiff(0.03);
+ }
+ else
+ {
+ cu->SetLocalMaximaCutE(0.2);
+ cu->SetLocalMaximaCutEDiff(0.03);
+ }
+
+ cu->SwitchOffClusterPlot();
+
+ if(kRecalTM) cu->SwitchOnRecalculateClusterTrackMatching(); // Done in clusterization
+ else cu->SwitchOffRecalculateClusterTrackMatching();
+
+ cu->SwitchOnBadChannelsRemoval() ;
+ //cu->SwitchOffBadChannelsRemoval() ;// <<<----changed here
+
+ //EMCAL settings
+
+ if(!kSimulation)
+ cu->SwitchOnLoadOwnEMCALGeometryMatrices();
+
+ AliEMCALRecoUtils * recou = cu->GetEMCALRecoUtils();
+
+ if(!kSimulation)
+ {
+ cu->SwitchOnRecalibration(); // Check the reader if it is taken into account during filtering
+ if(kClusterArray == "" && !kTender) cu->SwitchOnRunDepCorrection();
+ }
+
+ cu->SwitchOnEMCALOADB();//FIX ME!!!
+
+ gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/ConfigureEMCALRecoUtils.C");
+ ConfigureEMCALRecoUtils(recou,
+ kSimulation,
+ kExotic,
+ kNonLinearity,
+ kCalibE,
+ kBadMap,
+ kCalibT);
+ recou->SetExoticCellDiffTimeCut(1e10);
+
+ if( kNonLinearity )
+ {
+// printf("ConfigureCaloUtils() - Apply non linearity to EMCAL\n");
+// //CAREFUL only for the latest simulation
+// recou->SetNonLinearityFunction(AliEMCALRecoUtils::kBeamTestCorrected);
+// recou->SetNonLinearityParam(0,9.81039e-01);
+// recou->SetNonLinearityParam(1,1.13508e-01);
+// recou->SetNonLinearityParam(2,1.00173e+00);
+// recou->SetNonLinearityParam(3,9.67998e-02);
+// recou->SetNonLinearityParam(4,2.19381e+02);
+// recou->SetNonLinearityParam(5,6.31604e+01);
+// recou->SetNonLinearityParam(6,1);
+ printf("*** SET cluster non linearity correction ***\n");
+ cu->SwitchOnCorrectClusterLinearity();
+ }
+
+
+ printf("ConfigureCaloUtils() - EMCAL Recalibration ON? %d %d\n",recou->IsRecalibrationOn(), cu->IsRecalibrationOn());
+ printf("ConfigureCaloUtils() - EMCAL BadMap ON? %d %d\n",recou->IsBadChannelsRemovalSwitchedOn(), cu->IsBadChannelsRemovalSwitchedOn());
+
+
+ // PHOS
+ cu->SwitchOffLoadOwnPHOSGeometryMatrices();
+
+ if(printSettings) cu->Print("");
+
+ return cu;
+
+}
+
+//_____________________________________
+AliAnaPhoton* ConfigurePhotonAnalysis(TString calorimeter = "EMCAL",Int_t debug = -1,Bool_t printSettings = kFALSE)
+{
+
+ AliAnaPhoton *ana = new AliAnaPhoton();
+ ana->SetDebug(debug); //10 for lots of messages
+
+ // cluster selection cuts
+
+ ana->SwitchOffFiducialCut();
+
+ ana->SetCalorimeter(calorimeter);
+
+ if(calorimeter == "PHOS")
+ {
+ ana->SetNCellCut(2);// At least 3 cells
+ ana->SetMinPt(0.3);
+ ana->SetMinDistanceToBadChannel(2, 4, 5);
+ ana->SetTimeCut(-1e10,1e10); // open cut
+ }
+ else
+ {//EMCAL
+ ana->SetNCellCut(1);// At least 2 cells
+ //ana->SetNCellCut(0);// At least 2 cells <<<----changed here
+ ana->SetMinEnergy(0.3); // avoid mip peak at E = 260 MeV
+ ana->SetMaxEnergy(1000);
+ ana->SetTimeCut(-1e10,1e10); // open cut, usual time window of [425-825] ns if time recalibration is off
+ // restrict to less than 100 ns when time calibration is on
+ ana->SetMinDistanceToBadChannel(2, 4, 6);
+ // Not useful if M02 cut is already strong
+ //ana->SetNLMCut(1, 2) ;
+ //ana->SetNLMCut(1, 10) ;//<<<----changed here
+ ana->SetNLMCut(1, 1) ;//<<<----changed here
+ }
+
+ if(kTM)
+ {
+ ana->SwitchOnTrackMatchRejection() ;
+ ana->SwitchOffTMHistoFill() ;
+ }
+ else
+ {
+ ana->SwitchOffTrackMatchRejection() ;
+ ana->SwitchOnTMHistoFill() ;
+ }
+
+
+ //PID cuts (shower shape)
+ //ana->SwitchOffCaloPID(); //<<<----changed here
+ ana->SwitchOnCaloPID(); // do PID selection, unless specified in GetCaloPID, selection not based on bayesian
+ AliCaloPID* caloPID = ana->GetCaloPID();
+ //Not used in bayesian
+
+ //EMCAL
+ caloPID->SetEMCALLambda0CutMax(0.50);//0.27 was before//0.50//<<<----changed here
+ caloPID->SetEMCALLambda0CutMin(0.10);
+
+ caloPID->SetEMCALDEtaCut(0.025);
+ caloPID->SetEMCALDPhiCut(0.030);
+
+ //PHOS
+ caloPID->SetPHOSDispersionCut(2.5);
+ caloPID->SetPHOSRCut(2.);
+ if(kInputData=="AOD") caloPID->SetPHOSRCut(2000.); // Open cut since dX, dZ not stored
+
+ ana->SwitchOnFillShowerShapeHistograms(); // Filled before photon shower shape selection <<<--- changed here
+ //ana->SwitchOffFillShowerShapeHistograms(); // Filled before photon shower shape selection
+ ana->SwitchOffFillPileUpHistograms();
+
+ // Input / output delta AOD settings
+
+ if(!kData.Contains("delta"))
+ {
+ ana->SetOutputAODName(Form("Photon%s",kName.Data()));
+ ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
+ //ana->SetOutputAODClassName("AliAODPWG4Particle"); // use if no correlation done
+ }
+ else ana->SetInputAODName(Form("Photon%s",kName.Data()));
+
+ //Set Histograms name tag, bins and ranges
+
+ ana->AddToHistogramsName(Form("AnaPhoton_TM%d_",kTM));
+ SetHistoRangeAndNBins(ana->GetHistogramRanges(),calorimeter); // see method below
+
+ // Number of particle type MC histograms
+ ana->FillNOriginHistograms(20);
+ ana->FillNPrimaryHistograms(20);
+
+ ConfigureMC(ana);
+
+ if(printSettings) ana->Print("");
+
+ return ana;
+
+}
+
+//____________________________________________________________________________________________________
+AliAnaParticleIsolation* ConfigureIsolationAnalysis(TString calorimeter = "EMCAL",
+ TString particle="Photon",
+ Int_t partInCone = AliIsolationCut::kOnlyCharged,
+ Int_t thresType = AliIsolationCut::kSumPtFracIC,
+ Float_t cone = 0.3,
+ Float_t pth = 0.3,
+ Bool_t multi = kFALSE,
+ Int_t debug = -1,
+ Bool_t printSettings = kFALSE)
+{
+
+ AliAnaParticleIsolation *ana = new AliAnaParticleIsolation();
+ //ana->SetDebug(debug);
+ ana->SetDebug(debug);
+
+ ana->SwitchOnFiducialCut();
+ //Avoid borders of EMCal
+ if(calorimeter=="EMCAL")
+ ana->GetFiducialCut()->SetSimpleEMCALFiducialCut(0.6, 86, 174) ;
+
+ // Same Eta as EMCal, cut in phi if EMCAL was triggering
+ if(particle=="Hadron" || particle.Contains("CTS"))
+ {
+ //if(kTrig.Contains("EMC"))
+ // ana->GetFiducialCut()->SetSimpleCTSFiducialCut (0.6, 260, 360) ;
+ //else
+ ana->GetFiducialCut()->SetSimpleCTSFiducialCut (0.6, 0, 360) ;
+ }
+
+ ana->SetMinPt(3);//<<---changed here
+
+ // Input / output delta AOD settings
+
+ ana->SetInputAODName(Form("%s%s",particle.Data(),kName.Data()));
+ ana->SetAODObjArrayName(Form("IC%s_%s",particle.Data(),kName.Data()));
+
+ ana->SetCalorimeter(calorimeter);
+
+ if(!kTM) ana->SwitchOnTMHistoFill();
+ else ana->SwitchOffTMHistoFill();
+
+ //if(particle=="Photon")ana->SwitchOnSSHistoFill();
+ //else ana->SwitchOffSSHistoFill();
+
+ ana->SwitchOffSSHistoFill();
+ ana->SwitchOffFillPileUpHistograms();
+
+ //Do settings for main isolation cut class
+ AliIsolationCut * ic = ana->GetIsolationCut();
+ ic->SetDebug(debug);
+
+ if(cone >0 && pth > 0)
+ {
+ ic->SetPtThreshold(pth);
+ ic->SetConeSize(cone);
+ }
+ else
+ {
+ if(kCollisions=="pp")
+ {
+ ic->SetPtThreshold(1.);//<<---changed here was 0.5,1
+ ic->SetConeSize(0.3);//<<---changed here was 0.4
+ }
+ if(kCollisions=="pPb")
+ {
+ ic->SetPtThreshold(1.0);
+ ic->SetConeSize(0.3);
+ }
+
+ if(kCollisions=="PbPb")
+ {
+ ic->SetPtThreshold(3.);
+ //ic->SetPtThreshold(1.);
+ ic->SetConeSize(0.3);
+ }
+ }
+
+ ic->SetPtFraction(0.1);
+ ic->SetSumPtThreshold(1.0) ;
+ ic->SetParticleTypeInCone(partInCone);
+ ic->SetICMethod(thresType);
+
+ //Do or not do isolation with previously produced AODs.
+ //No effect if use of SwitchOnSeveralIsolation()
+ ana->SwitchOffReIsolation();
+
+ //Multiple IC
+ if(multi)
+ {
+ ic->SetConeSize(1.); // Take all for first iteration
+ ic->SetPtThreshold(100);// Take all for first iteration
+ ana->SwitchOnSeveralIsolation() ;
+ ana->SetAODObjArrayName(Form("MultiIC%sTM%d",particle.Data(),kTM));
+
+ ana->SetNCones(4);
+ ana->SetNPtThresFrac(4);
+ ana->SetConeSizes(0,0.3); ana->SetConeSizes(1,0.4);
+ ana->SetConeSizes(2,0.5); ana->SetConeSizes(3,0.6);
+ ana->SetPtThresholds(0, 0.5); ana->SetPtThresholds(1, 1); ana->SetPtThresholds(2, 2);
+ ana->SetPtFractions (0, 0.05) ; ana->SetPtFractions (1, 0.1); ana->SetPtFractions (2, 0.2) ; ana->SetPtFractions (3, 0.3) ;
+ ana->SetSumPtThresholds(0, 1) ; ana->SetSumPtThresholds(1, 3) ; ana->SetSumPtThresholds(2, 5); ana->SetSumPtThresholds(3, 7) ;
+
+ ana->SwitchOffTMHistoFill();
+ ana->SwitchOffSSHistoFill();
+ }
+ else
+ ana->SwitchOffSeveralIsolation() ;
+
+ AliCaloPID* caloPID = ana->GetCaloPID();
+ caloPID->SetEMCALDEtaCut(0.025);
+ caloPID->SetEMCALDPhiCut(0.030);
+
+ //Set Histograms name tag, bins and ranges
+
+ if(!multi)ana->AddToHistogramsName(Form("AnaIsol%s_TM%d_",particle.Data(),kTM));
+ else ana->AddToHistogramsName(Form("AnaMultiIsol%s_TM%d_",particle.Data(),kTM));
+
+ SetHistoRangeAndNBins(ana->GetHistogramRanges(),calorimeter); // see method below
+
+ ana->SetHistoPtInConeRangeAndNBins(0, 50 , 250);
+ ana->SetHistoPtSumRangeAndNBins (0, 100, 250);
+
+ if(particle=="Hadron" || particle.Contains("CTS"))
+ {
+ ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 200) ;
+ ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-1.5, 1.5, 300) ;
+ }
+
+ ConfigureMC(ana);
+
+ if(printSettings) ic ->Print("");
+ if(printSettings) ana->Print("");
+
+ return ana;
+
+}
+
+//________________________________________________________
+void ConfigureMC(AliAnaCaloTrackCorrBaseClass* ana)
+{
+ if(kSimulation) ana->SwitchOnDataMC() ;//Access MC stack and fill more histograms, AOD MC not implemented yet.
+ else ana->SwitchOffDataMC() ;
+
+ //Set here generator name, default pythia
+ //ana->GetMCAnalysisUtils()->SetMCGenerator("");
+}
+
+//________________________________________________________
+void SetHistoRangeAndNBins (AliHistogramRanges* histoRanges,TString calorimeter = "EMCAL")
+{
+ // Set common bins for all analysis and MC histograms filling
+
+ histoRanges->SetHistoPtRangeAndNBins(-0.25, 99.75, 200) ; // Energy and pt histograms
+
+ if(calorimeter=="EMCAL")
+ {
+ histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 182*TMath::DegToRad(), 108) ;
+ histoRanges->SetHistoXRangeAndNBins(-600,90,200); // QA
+ histoRanges->SetHistoYRangeAndNBins(100,450,100); // QA
+
+ histoRanges->SetHistoEtaRangeAndNBins(-0.72, 0.72, 144) ;
+ }
+ else
+ {
+ histoRanges->SetHistoPhiRangeAndNBins(260*TMath::DegToRad(), 320*TMath::DegToRad(), 60) ;
+ histoRanges->SetHistoEtaRangeAndNBins(-0.13, 0.13, 130) ;
+ }
+
+ histoRanges->SetHistoShowerShapeRangeAndNBins(-0.1, 4.9, 500);
+
+ // Invariant mass histoRangeslysis
+ histoRanges->SetHistoMassRangeAndNBins(0., 1., 200) ;
+ histoRanges->SetHistoAsymmetryRangeAndNBins(0., 1. , 100) ;
+
+ // check if time calibration is on
+ //histoRanges->SetHistoTimeRangeAndNBins(-1000.,1000,1000);
+ histoRanges->SetHistoTimeRangeAndNBins(-400.,400,400);
+ histoRanges->SetHistoDiffTimeRangeAndNBins(-200, 200, 800);
+
+ // track-cluster residuals
+ histoRanges->SetHistoTrackResidualEtaRangeAndNBins(-0.15,0.15,300);
+ histoRanges->SetHistoTrackResidualPhiRangeAndNBins(-0.15,0.15,300);
+ histoRanges->SetHistodRRangeAndNBins(0.,0.15,150);//QA
+
+ // QA, electron, charged
+ histoRanges->SetHistoPOverERangeAndNBins(0,10.,100);
+ histoRanges->SetHistodEdxRangeAndNBins(0.,200.,200);
+
+ // QA
+ histoRanges->SetHistoFinePtRangeAndNBins(0, 10, 200) ; // bining for fhAmpId
+ histoRanges->SetHistoRatioRangeAndNBins(0.,2.,100);
+ histoRanges->SetHistoVertexDistRangeAndNBins(0.,500.,500);
+ histoRanges->SetHistoNClusterCellRangeAndNBins(0,500,500);
+ histoRanges->SetHistoZRangeAndNBins(-400,400,200);
+ histoRanges->SetHistoRRangeAndNBins(400,450,25);
+ histoRanges->SetHistoV0SignalRangeAndNBins(0,5000,500);
+ histoRanges->SetHistoV0MultiplicityRangeAndNBins(0,5000,500);
+ histoRanges->SetHistoTrackMultiplicityRangeAndNBins(0,5000,500);
+
+}
+
+//_________________
+UInt_t SetTriggerMaskFromName()
+{
+ if(kTrig=="EMC7")
+ {
+ printf("CaloTrackCorr trigger EMC7\n");
+ return AliVEvent::kEMC7;
+ }
+ else if (kTrig=="INT7")
+ {
+ printf("CaloTrackCorr trigger INT7\n");
+ return AliVEvent::kINT7;
+ }
+ else if(kTrig=="EMC1")
+ {
+ printf("CaloTrackCorr trigger EMC1\n");
+ return AliVEvent::kEMC1;
+ }
+ else if(kTrig=="MB")
+ {
+ printf("CaloTrackCorr trigger MB\n");
+ return AliVEvent::kMB;
+ }
+ else if(kTrig=="PHOS")
+ {
+ printf("CaloTrackCorr trigger PHOS\n");
+ return AliVEvent::kPHI7;
+ }
+ else if(kTrig=="PHOSPb")
+ {
+ printf("CaloTrackCorr trigger PHOSPb\n");
+ return AliVEvent::kPHOSPb;
+ }
+ else if(kTrig=="AnyINT")
+ {
+ printf("CaloTrackCorr trigger AnyINT\n");
+ return AliVEvent::kAnyINT;
+ }
+ else if(kTrig=="INT")
+ {
+ printf("CaloTrackCorr trigger AnyINT\n");
+ return AliVEvent::kAny;
+ }
+ else if(kTrig=="EMCEGA")
+ {
+ printf("CaloTrackCorr trigger EMC Gamma\n");
+ return AliVEvent::kEMCEGA;
+ }
+ else if(kTrig=="EMCEJE")
+ {
+ printf("CaloTrackCorr trigger EMC Jet\n");
+ return AliVEvent::kEMCEJE;
+ }
+ else if(kTrig=="Central")
+ {
+ printf("CaloTrackCorr trigger Central\n");
+ return AliVEvent::kCentral;
+ }
+ else if(kTrig=="CentralEGA")
+ {
+ printf("CaloTrackCorr trigger Central+EMCEGA\n");
+ return (AliVEvent::kCentral | AliVEvent::kEMCEGA);
+ }
+ else if(kTrig=="SemiCentral")
+ {
+ printf("CaloTrackCorr trigger SemiCentral\n");
+ return AliVEvent::kSemiCentral;
+ }
+ else if(kTrig=="SemiOrCentral")
+ {
+ printf("CaloTrackCorr trigger SemiCentral Or Central\n");
+ return (AliVEvent::kSemiCentral | AliVEvent::kCentral);
+ }
+ else if(kTrig=="SemiOrCentralOrAnyINT")
+ {
+ printf("CaloTrackCorr trigger SemiCentral Or Central Or AnyINT\n");
+ return (AliVEvent::kSemiCentral | AliVEvent::kCentral | AliVEvent::kAnyINT);
+ }
+
+}
+
+AliAnaParticleJetFinderCorrelation* ConfigurePhotonJetAnalysis(Int_t debug = -1,Bool_t printSettings = kFALSE){
+
+ AliAnaParticleJetFinderCorrelation *ana = new AliAnaParticleJetFinderCorrelation();
+ ana->SetDebug(debug);
+ TString particle="Photon";
+ // ### Correlation with Jet Finder AOD output
+ //AliAnaParticleJetFinderCorrelation *anacorrjet = new AliAnaParticleJetFinderCorrelation();
+ //anacorrjet->SetInputAODName(Form("%s%s_Trig%s_Cl%s",particle.Data(),calorimeter.Data(), kTrig.Data(),kClusterArray.Data()));
+ ana->SetInputAODName(Form("%s%s",particle.Data(),kName.Data()));
+
+ ana->SwitchOffFiducialCut();
+
+ ana->SetConeSize(0.4); //was 1 - cone to calculate FF
+ ana->SelectIsolated(kTRUE); // do correlation with isolated photons <<---changed here
+ ana->SetMakeCorrelationInHistoMaker(kFALSE);
+ ana->SetPtThresholdInCone(0.150);//<<---- change here
+ ana->SetDeltaPhiCutRange(TMath::Pi()/2.,TMath::Pi()*3./2.);//Mostly Open Cuts
+ ana->SetJetConeSize(0.4);//jet cone size / check the reco jet name
+ ana->SetJetMinPt(5);//min jet pt
+ ana->SetJetAreaFraction(0.8);//min area fraction was 0.6
+ ana->SetMinPt(0.3);//min cluster pt repeated from reader
+ ana->SetGammaConeSize(0.3);//isolation cone repeated from isolation ana
+
+
+ ana->SetRatioCutRange(0.01,5.); //Mostly Open Cuts //0.01-5//<<---- change here
+ ana->UseJetRefTracks(kTRUE); //Working now
+ //Set Histograms bins and ranges
+ SetHistoRangeAndNBins(ana->GetHistogramRanges(),calorimeter); // see method below 0,100,200
+ //ana->SetHistoPtRangeAndNBins(0, 50, 200) ;
+ // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
+ // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
+
+ ana->SwitchOnNonStandardJetFromReader();
+ ana->SwitchOnBackgroundJetFromReader();
+ //background subtraction for photons
+ ana->SwitchOnBackgroundSubtractionGamma();
+
+ ana->SwitchOnSaveGJTree();
+ //ana->SwitchOnMostOpposite();
+ ana->SwitchOnMostEnergetic();
+
+
+ if(kUseKinematics) ana->SwitchOnDataMC() ;//Access MC stack and fill more histograms
+ //if(printSettings)
+ ana->Print("");
+
+ return ana;
+
+
+
+
+
+}
{
printf("AddTaskPi0IMGammaCorrQA - CAREFUL : Triggered events not checked in simulation!! \n");
TString ssuffix = suffix;
- if(!ssuffix.Contains("default")) return;
+ if(!ssuffix.Contains("default")) return 0x0;
}
// Get the pointer to the existing analysis manager via the static access method.
// General frame setting and configuration
maker->SetReader ( ConfigureReader (inputDataType,minCen,maxCen,simulation,debugLevel) );
- maker->SetCaloUtils( ConfigureCaloUtils(simulation,debugLevel) );
+ maker->SetCaloUtils( ConfigureCaloUtils(calorimeter,simulation,debugLevel) );
// Analysis tasks setting and configuration
Int_t n = 0;//Analysis number, order is important
}
-//__________________________________________________________________________
-AliCalorimeterUtils* ConfigureCaloUtils(Bool_t simulation, Int_t debugLevel)
+//_______________________________________________________________________________________________
+AliCalorimeterUtils* ConfigureCaloUtils(TString calorimeter, Bool_t simulation, Int_t debugLevel)
{
AliCalorimeterUtils *cu = new AliCalorimeterUtils;
cu->SwitchOnCorrectClusterLinearity();
- if(kCalorimeter=="PHOS")
+ if(calorimeter=="PHOS")
cu->SetNumberOfSuperModulesUsed(3);
else
cu->SetNumberOfSuperModulesUsed(10);
TString outputFile = AliAnalysisManager::GetCommonFileName();
AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
- gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
- AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
-
- //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C");
- //AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(kTRUE);
+ if(kInputData=="ESD" && !kMC)
+ {
+ gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
+ AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
+ }
//Counting events tasks
- AliAnalysisTaskCounter * counterMB = new AliAnalysisTaskCounter("CounterMB");
- counterMB->SelectCollisionCandidates(AliVEvent::kMB);
-
- AliAnalysisDataContainer *coutputMB =
+ if(!kMC)
+ {
+ AliAnalysisTaskCounter * counterMB = new AliAnalysisTaskCounter("CounterMB");
+ counterMB->SelectCollisionCandidates(AliVEvent::kMB);
+
+ AliAnalysisDataContainer *coutputMB =
mgr->CreateContainer("counterMB", TList::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
- mgr->AddTask(counterMB);
- mgr->ConnectInput (counterMB, 0, cinput1);
- mgr->ConnectOutput (counterMB, 1, coutputMB);
-
- AliAnalysisTaskCounter * counterEMC = new AliAnalysisTaskCounter("CounterEMC");
- counterEMC->SelectCollisionCandidates(AliVEvent::kEMC7);
-
- AliAnalysisDataContainer *coutputEMC =
+ mgr->AddTask(counterMB);
+ mgr->ConnectInput (counterMB, 0, cinput1 );
+ mgr->ConnectOutput (counterMB, 1, coutputMB);
+
+ AliAnalysisTaskCounter * counterEMC = new AliAnalysisTaskCounter("CounterEMC");
+ counterEMC->SelectCollisionCandidates(AliVEvent::kEMC7);
+
+ AliAnalysisDataContainer *coutputEMC =
mgr->CreateContainer("counterEMC", TList::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
- mgr->AddTask(counterEMC);
- mgr->ConnectInput (counterEMC, 0, cinput1);
- mgr->ConnectOutput (counterEMC, 1, coutputEMC);
-
- AliAnalysisTaskCounter * counterINT = new AliAnalysisTaskCounter("CounterINT");
- counterINT->SelectCollisionCandidates(AliVEvent::kINT7);
-
- AliAnalysisDataContainer *coutputINT =
+ mgr->AddTask(counterEMC);
+ mgr->ConnectInput (counterEMC, 0, cinput1 );
+ mgr->ConnectOutput (counterEMC, 1, coutputEMC);
+
+ AliAnalysisTaskCounter * counterINT = new AliAnalysisTaskCounter("CounterINT");
+ counterINT->SelectCollisionCandidates(AliVEvent::kINT7);
+
+ AliAnalysisDataContainer *coutputINT =
mgr->CreateContainer("counterINT7", TList::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
- mgr->AddTask(counterINT);
- mgr->ConnectInput (counterINT, 0, cinput1);
- mgr->ConnectOutput (counterINT, 1, coutputINT);
+ mgr->AddTask(counterINT);
+ mgr->ConnectInput (counterINT, 0, cinput1 );
+ mgr->ConnectOutput (counterINT, 1, coutputINT);
+ }
+ else
+ {
+ AliAnalysisDataContainer *coutput =
+ mgr->CreateContainer("counter", TList::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
+ mgr->AddTask(counter);
+ mgr->ConnectInput (counter, 0, cinput1);
+ mgr->ConnectOutput (counter, 1, coutput);
+ }
+ // QA task
gROOT->LoadMacro("$ALICE_ROOT/PWGGA/CaloTrackCorrelations/macros/QA/AddTaskCalorimeterQA.C");
- AliAnalysisTaskCaloTrackCorrelation *taskQAEMC = AddTaskCalorimeterQA(kInputData,2011,kFALSE,kMC,"","kEMC7");
- taskQAEMC->SelectCollisionCandidates(AliVEvent::kEMC7);
- AliAnalysisTaskCaloTrackCorrelation *taskQAINT = AddTaskCalorimeterQA(kInputData,2011,kFALSE,kMC,"","kINT7");
- taskQAINT->SelectCollisionCandidates(AliVEvent::kINT7);
-
+ if(!kMC)
+ {
+ AliAnalysisTaskCaloTrackCorrelation *taskQAEMC = AddTaskCalorimeterQA("EMC",kMC,"",2012);
+ taskQAEMC->SelectCollisionCandidates(AliVEvent::kEMC7);
+ AliAnalysisTaskCaloTrackCorrelation *taskQAINT = AddTaskCalorimeterQA("default",kMC,"",2012);
+ taskQAINT->SelectCollisionCandidates(AliVEvent::kINT7);
+ }
+ else
+ {
+ AliAnalysisTaskCaloTrackCorrelation *taskQA = AddTaskCalorimeterQA("default",kMC,"",2012);
+ }
+
//-----------------------
// Run the analysis
//-----------------------
//--------------------------------------------------------
gSystem->Load("libSTEERBase.so");
+ gSystem->Load("libProof.so");
+ gSystem->Load("libOADB");
gSystem->Load("libESD.so");
gSystem->Load("libAOD.so");
gSystem->Load("libANALYSIS.so");
gSystem->Load("libANALYSISalice.so");
+ gSystem->Load("libESDfilter.so");
+
gSystem->Load("libPHOSUtils");
gSystem->Load("libEMCALUtils");
- gSystem->Load("libPWG4PartCorrBase.so");
- gSystem->Load("libPWG4PartCorrDep.so");
+
+ gSystem->Load("libTENDER.so");
+ gSystem->Load("libTENDERSupplies.so");
+
+ gSystem->Load("libCORRFW");
+ gSystem->Load("libPWGTools");
+
+ gSystem->Load("libPWGCaloTrackCorrBase");
+ gSystem->Load("libPWGGACaloTrackCorrelations");
+
//--------------------------------------------------------
//If you want to use root and par files from aliroot
// //If your analysis needs PHOS geometry uncomment following lines
// SetupPar("PHOSUtils");
// SetupPar("EMCALUtils");
-// //Create Geometry
-// SetupPar("PWG4PartCorrBase");
-// SetupPar("PWG4PartCorrDep");
+//
+// SetupPar("PWGCaloTrackCorrBase");
+// SetupPar("PWGGACaloTrackCorrelations");
+
}
outputValues[4] = alliso/*cecore*/-allisoue - trcore;
outputValues[5] = ceiso;
outputValues[6] = alliso - trcore;
- outputValues[7] = c->GetTrackDx();
- outputValues[8] = c->GetTrackDz();
+ if(fDebug)
+ printf("track-cluster dphi=%1.3f, deta=%1.3f\n",c->GetTrackDx(),c->GetTrackDz());
+ if(TMath::Abs(c->GetTrackDx())<0.1)
+ outputValues[7] = c->GetTrackDx();
+ else
+ outputValues[7] = 0.099*c->GetTrackDx()/TMath::Abs(c->GetTrackDx());
+ if(TMath::Abs(c->GetTrackDz())<0.05)
+ outputValues[8] = c->GetTrackDz();
+ else
+ outputValues[8] = 0.049*c->GetTrackDz()/TMath::Abs(c->GetTrackDz());
outputValues[9] = clsVec.Eta();
outputValues[10] = clsVec.Phi();
if(fESDCells)
}
if(!esd){
- cells = aod->GetEMCALCells();
+ if (aod)cells = aod->GetEMCALCells();
+ else cells = 0;
}
if (!cells)
esdCent = esd->GetCentrality();
}
if(!esd){
- esdCent = aod->GetCentrality();
+ if (aod){
+ esdCent = aod->GetCentrality();
+ } else {
+ esdCent = NULL;
+ return;
+ }
}
//fleche pour pointers, otherwise point.
UInt_t kind = 9;
TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
- TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
Int_t motherLabelPhoton;
Int_t pdgCodePos = 0;
Int_t pdgCodeNeg = 0;
kind = 9;
// return kFALSE; // One particle does not exist
- } else if( posDaughter->GetMother(0) != negDaughter->GetMother(0) || (posDaughter->GetMother(0) == negDaughter->GetMother(0) && posDaughter->GetMother(0) ==-1)) {
- // kind = 1;
- return 1;
+ } else if( posDaughter->GetMother(0) != negDaughter->GetMother(0) || (posDaughter->GetMother(0) == negDaughter->GetMother(0) && posDaughter->GetMother(0) ==-1)) {
+ kind = 1;
+ // return 1;
pdgCodePos=TMath::Abs(posDaughter->GetPdgCode());
pdgCodeNeg=TMath::Abs(negDaughter->GetPdgCode());
if(pdgCodePos==11 && pdgCodeNeg==11) return 10; //Electron Combinatorial
if((pdgCodePos==211 && pdgCodeNeg==11) ||(pdgCodePos==11 && pdgCodeNeg==211)) return 13; //Pion, Electron Combinatorics
if(pdgCodePos==321 || pdgCodeNeg==321) return 14; //Kaon combinatorics
}else{
-
+ TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
pdgCodePos=posDaughter->GetPdgCode();
pdgCodeNeg=negDaughter->GetPdgCode();
- motherLabelPhoton= Photon->GetMother(0);
+ motherLabelPhoton= Photon->GetMother(0);
if ( TruePhotonCandidate->GetMCParticle(fMCStack)->GetPdgCode()) pdgCode = TruePhotonCandidate->GetMCParticle(fMCStack)->GetPdgCode();
if(TMath::Abs(pdgCodePos)!=11 || TMath::Abs(pdgCodeNeg)!=11) return 2; // true from hadronic decays
UInt_t kind = 9;
TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
- AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
- AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
- AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
- Int_t pdgCodePos = 0;
- Int_t pdgCodeNeg = 0;
- Int_t pdgCode = 0;
- if(posDaughter == NULL || negDaughter == NULL) {
- kind = 9;
- } else if( posDaughter->GetMother() != negDaughter->GetMother() || (posDaughter->GetMother() == negDaughter->GetMother() && posDaughter->GetMother() ==-1)) {
- kind = 1;
- pdgCodePos=TMath::Abs(posDaughter->GetPdgCode());
- pdgCodeNeg=TMath::Abs(negDaughter->GetPdgCode());
- if(pdgCodePos==11 && pdgCodeNeg==11) kind = 10; //Electron Combinatorial
- if(pdgCodePos==11 && pdgCodeNeg==11 &&
- (posDaughter->GetMother() == negDaughter->GetMother() && posDaughter->GetMother() ==-1))kind = 15; //direct Electron Combinatorial
-
- if(pdgCodePos==211 && pdgCodeNeg==211) kind = 11; //Pion Combinatorial
- if((pdgCodePos==211 && pdgCodeNeg==2212) ||(pdgCodePos==2212 && pdgCodeNeg==211)) kind = 12; //Pion, Proton Combinatorics
- if((pdgCodePos==211 && pdgCodeNeg==11) ||(pdgCodePos==11 && pdgCodeNeg==211)) kind = 13; //Pion, Electron Combinatorics
- if(pdgCodePos==321 || pdgCodeNeg==321) kind = 14; //Kaon combinatorics
- }else{
-
- pdgCodePos=posDaughter->GetPdgCode();
- pdgCodeNeg=negDaughter->GetPdgCode();
-
- if ( Photon->GetPdgCode())
- pdgCode = Photon->GetPdgCode();
- if(TMath::Abs(pdgCodePos)!=11 || TMath::Abs(pdgCodeNeg)!=11) kind = 2; // true from hadronic decays
- else if ( !(pdgCodeNeg==pdgCodePos)){
- if(pdgCode == 111) kind = 3; // pi0 Dalitz
- else if (pdgCode == 221) kind = 4; // eta Dalitz
- else if (!(negDaughter->GetMCProcessCode() != 5 || posDaughter->GetMCProcessCode() !=5)){
- if(pdgCode == 22 && Photon->IsPrimary()){
- kind = 0; // primary photons
- } else if (pdgCode == 22){
- kind = 5; //secondary photons
+ if (AODMCTrackArray!=NULL && TruePhotonCandidate!=NULL){
+ AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
+ AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
+ Int_t pdgCodePos = 0;
+ Int_t pdgCodeNeg = 0;
+ Int_t pdgCode = 0;
+ if(posDaughter == NULL || negDaughter == NULL) {
+ kind = 9;
+ } else if( posDaughter->GetMother() != negDaughter->GetMother() || (posDaughter->GetMother() == negDaughter->GetMother() && posDaughter->GetMother() ==-1)) {
+ kind = 1;
+ pdgCodePos=TMath::Abs(posDaughter->GetPdgCode());
+ pdgCodeNeg=TMath::Abs(negDaughter->GetPdgCode());
+ if(pdgCodePos==11 && pdgCodeNeg==11) kind = 10; //Electron Combinatorial
+ if(pdgCodePos==11 && pdgCodeNeg==11 &&
+ (posDaughter->GetMother() == negDaughter->GetMother() && posDaughter->GetMother() ==-1))kind = 15; //direct Electron Combinatorial
+
+ if(pdgCodePos==211 && pdgCodeNeg==211) kind = 11; //Pion Combinatorial
+ if((pdgCodePos==211 && pdgCodeNeg==2212) ||(pdgCodePos==2212 && pdgCodeNeg==211)) kind = 12; //Pion, Proton Combinatorics
+ if((pdgCodePos==211 && pdgCodeNeg==11) ||(pdgCodePos==11 && pdgCodeNeg==211)) kind = 13; //Pion, Electron Combinatorics
+ if(pdgCodePos==321 || pdgCodeNeg==321) kind = 14; //Kaon combinatorics
+ }else{
+ AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
+ pdgCodePos=posDaughter->GetPdgCode();
+ pdgCodeNeg=negDaughter->GetPdgCode();
+
+ if ( Photon->GetPdgCode())
+ pdgCode = Photon->GetPdgCode();
+ if(TMath::Abs(pdgCodePos)!=11 || TMath::Abs(pdgCodeNeg)!=11) kind = 2; // true from hadronic decays
+ else if ( !(pdgCodeNeg==pdgCodePos)){
+ if(pdgCode == 111) kind = 3; // pi0 Dalitz
+ else if (pdgCode == 221) kind = 4; // eta Dalitz
+ else if (!(negDaughter->GetMCProcessCode() != 5 || posDaughter->GetMCProcessCode() !=5)){
+ if(pdgCode == 22 && Photon->IsPrimary()){
+ kind = 0; // primary photons
+ } else if (pdgCode == 22){
+ kind = 5; //secondary photons
+ }
}
}
}
- }
+ return kind;
+ }
return kind;
-
-
}
//________________________________________________________________________
hNGoodESDTracks(NULL),
hNGoodESDTracksVsNGoodGammas(NULL),
hNGoodESDTracksVsNGoodVGammas(NULL),
+ hNV0Tracks(NULL),
hEtaShift(NULL),
fRandom(0),
fUnsmearedPx(NULL),
hNGoodESDTracks(NULL),
hNGoodESDTracksVsNGoodGammas(NULL),
hNGoodESDTracksVsNGoodVGammas(NULL),
+ hNV0Tracks(NULL),
hEtaShift(NULL),
fRandom(0),
fUnsmearedPx(NULL),
//fQAFolder = new TList*[fnCuts];
hNEvents = new TH1I*[fnCuts];
hNGoodESDTracks = new TH1I*[fnCuts];
+ hNV0Tracks = new TH1I*[fnCuts];
hEtaShift = new TProfile*[fnCuts];
hESDConvGammaPt = new TH1F*[fnCuts];
hESDConvGammaEta = new TH1F*[fnCuts];
if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
+
+
+ if(fIsHeavyIon == 1) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
+ else if(fIsHeavyIon == 2) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
+ else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
+ fESDList[iCut]->Add(hNV0Tracks[iCut]);
+
hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
fESDList[iCut]->Add(hEtaShift[iCut]);
hNGoodESDTracksVsNGoodVGammas[iCut] = new TH2F("hNGoodESDTracksVsNVGoodVGammas","hNGoodESDTracksVsNGoodVGammas",200,-0.5,199.5,100,-0.5,99.5);
fQAFolder[iCut]->Add(hNGoodESDTracksVsNGoodVGammas[iCut]);
-
-
+
hESDConvGammaZR[iCut]= new TH2F("ESD_ConvGamma_ConversionPoint_ZR","ESD_ConvGamma_ConversionPoint_ZR",1200,-150,150,480,0,120);
fQAFolder[iCut]->Add(hESDConvGammaZR[iCut]);
hNEvents[iCut]->Fill(eventQuality);
hNGoodESDTracks[iCut]->Fill(fNumberOfESDTracks);
+
+ if(((AliConversionCuts*)fCutGammaArray->At(iCut))->IsHeavyIon() == 2) hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
+ else hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
+
if(fMCEvent){ // Process MC Particle
TH1I **hNGoodESDTracks;
TH2F **hNGoodESDTracksVsNGoodGammas;
TH2F **hNGoodESDTracksVsNGoodVGammas;
+ TH1I **hNV0Tracks;
TProfile **hEtaShift;
TRandom3 fRandom;
hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
- if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
+ if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() > 3 ){
TString TriggerNames = "Not Trigger: ";
TriggerNames = TriggerNames+ ( (AliConversionCuts*)fCutArray->At(iCut))->GetSpecialTriggerName();
hNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
//________________________________________________________________________
void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
{
+ Double_t magField = fInputEvent->GetMagneticField();
+ if( magField < 0.0 ){
+ magField = 1.0;
+ }
+ else {
+ magField = -1.0;
+ }
- Double_t magField = fInputEvent->GetMagneticField();
- if( magField < 0.0 ){
- magField = 1.0;
- }
- else {
- magField = -1.0;
- }
-
- TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
- AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
- AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
- iPhotonMCInfo = 0;
-
- if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
- Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
+ TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+ if (AODMCTrackArray != NULL && TruePhotonCandidate != NULL){
- if(posDaughter->GetMother() != negDaughter->GetMother()){
- FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
- iPhotonMCInfo = 1;
- return;
- }
- else if(posDaughter->GetMother() == -1){
- FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
- iPhotonMCInfo = 1;
- return;
- }
+ AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
+ AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
+ iPhotonMCInfo = 0;
+
+ if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
+ Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
- if(pdgCode[0]!=11 || pdgCode[1]!=11){
- iPhotonMCInfo = 1;
- return; //One Particle is not a electron
- }
- if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
- iPhotonMCInfo = 1;
- return; // Same Charge
- }
-
- AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
- AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
- AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
- Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
+ if(posDaughter->GetMother() != negDaughter->GetMother()){
+ FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
+ iPhotonMCInfo = 1;
+ return;
+ }
+ else if(posDaughter->GetMother() == -1){
+ FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
+ iPhotonMCInfo = 1;
+ return;
+ }
- if(Photon->GetPdgCode() != 22){
- hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
- iPhotonMCInfo = 1;
- return; // Mother is no Photon
- }
-
- if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
- iPhotonMCInfo = 1;
- return;// check if the daughters come from a conversion
- }
- // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
-
-
-
- // True Photon
- if(fIsFromMBHeader){
- hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
- if (fDoPhotonQA > 0) hESDTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
- }
- hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
- if(Photon->IsPrimary()){
- // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
- if(fIsFromMBHeader){
- iPhotonMCInfo = 6;
- hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
- hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
- }
- // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
- }
- else{
- if(fIsFromMBHeader){
- hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
- iPhotonMCInfo = 2;
- if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
- ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
- iPhotonMCInfo = 5;
- hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
- }
- if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
- ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
- iPhotonMCInfo = 4;
- hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
- }
- if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
- ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
- iPhotonMCInfo = 3;
- }
- }
- }
-
+ if(pdgCode[0]!=11 || pdgCode[1]!=11){
+ iPhotonMCInfo = 1;
+ return; //One Particle is not a electron
+ }
+ if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
+ iPhotonMCInfo = 1;
+ return; // Same Charge
+ }
+
+ AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
+ AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
+ AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
+ Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
+
+ if(Photon->GetPdgCode() != 22){
+ hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
+ iPhotonMCInfo = 1;
+ return; // Mother is no Photon
+ }
+
+ if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
+ iPhotonMCInfo = 1;
+ return;// check if the daughters come from a conversion
+ }
+ // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
+
+
+
+ // True Photon
+ if(fIsFromMBHeader){
+ hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+ if (fDoPhotonQA > 0) hESDTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
+ }
+ hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
+ if(Photon->IsPrimary()){
+ // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
+ if(fIsFromMBHeader){
+ iPhotonMCInfo = 6;
+ hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+ hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
+ }
+ // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
+ }
+ else{
+ if(fIsFromMBHeader){
+ hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+ iPhotonMCInfo = 2;
+ if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
+ ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
+ iPhotonMCInfo = 5;
+ hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+ }
+ if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
+ ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
+ iPhotonMCInfo = 4;
+ hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+ }
+ if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
+ ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
+ iPhotonMCInfo = 3;
+ }
+ }
+ }
+ }
+ return;
}
//________________________________________________________________________
void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
{
- TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
-
- // Loop over all primary MC particle
- for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
+ TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
- AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
- if (!particle) continue;
- if (!particle->IsPrimary()) continue;
+ if (AODMCTrackArray){
+ // Loop over all primary MC particle
+ for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
- Int_t isMCFromMBHeader = -1;
- if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
- isMCFromMBHeader
- = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
- if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
- }
-
- if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
- if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
- hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
- if(particle->GetMother() >-1){ // Meson Decay Gamma
- switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
- case 111: // Pi0
- hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
- break;
- case 113: // Rho0
- hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
- break;
- case 221: // Eta
- hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
- break;
- case 223: // Omega
- hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
- break;
- case 331: // Eta'
- hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
- break;
- case 333: // Phi
- hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
- break;
- case 3212: // Sigma
- hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
- break;
- }
- }
- }
- if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
- Double_t rConv = 0;
- for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
- AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
- if(!tmpDaughter) continue;
- if(abs(tmpDaughter->GetPdgCode()) == 11){
- rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
- }
- }
- hMCConvGammaPt[fiCut]->Fill(particle->Pt());
- if (fDoPhotonQA > 0){
- hMCConvGammaR[fiCut]->Fill(rConv);
- hMCConvGammaEta[fiCut]->Fill(particle->Eta());
- }
- }
- // Converted MC Gamma
- if(fDoMesonAnalysis){
- if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
- Double_t mesonY = 10.;
- if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
- mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
- } else{
- mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
- -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
- }
- Float_t weightedK0s= 1;
- if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
- if (particle->Pt()>0.005){
- weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
- //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
- }
- }
- hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
- hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
- hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
- }
- if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
- ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
- AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
- AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
- Float_t weighted= 1;
- if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
- if (particle->Pt()>0.005){
- weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
-// if(particle->GetPdgCode() == 221){
-// cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
-// }
- }
- }
- Double_t mesonY = 10.;
- if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
- mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
- } else{
- mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
- -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
- }
+ AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
+ if (!particle) continue;
+ if (!particle->IsPrimary()) continue;
- if(particle->GetPdgCode() == 111){
- hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
- hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
- if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
- } else if(particle->GetPdgCode() == 221){
- hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
- hMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
- if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
- }
-
- // Check the acceptance for both gammas
- if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
- ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) &&
- ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
- ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
+ Int_t isMCFromMBHeader = -1;
+ if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
+ isMCFromMBHeader
+ = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
+ if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
+ }
+
+ if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
+ if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
+ hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
+ if(particle->GetMother() >-1){ // Meson Decay Gamma
+ switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
+ case 111: // Pi0
+ hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
+ break;
+ case 113: // Rho0
+ hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
+ break;
+ case 221: // Eta
+ hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
+ break;
+ case 223: // Omega
+ hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
+ break;
+ case 331: // Eta'
+ hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
+ break;
+ case 333: // Phi
+ hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
+ break;
+ case 3212: // Sigma
+ hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
+ break;
+ }
+ }
+ }
+ if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
+ Double_t rConv = 0;
+ for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
+ AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
+ if(!tmpDaughter) continue;
+ if(abs(tmpDaughter->GetPdgCode()) == 11){
+ rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
+ }
+ }
+ hMCConvGammaPt[fiCut]->Fill(particle->Pt());
+ if (fDoPhotonQA > 0){
+ hMCConvGammaR[fiCut]->Fill(rConv);
+ hMCConvGammaEta[fiCut]->Fill(particle->Eta());
+ }
+ }
+ // Converted MC Gamma
+ if(fDoMesonAnalysis){
+ if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
+ Double_t mesonY = 10.;
+ if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
+ mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+ } else{
+ mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
+ -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+ }
+ Float_t weightedK0s= 1;
+ if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
+ if (particle->Pt()>0.005){
+ weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
+ //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
+ }
+ }
+ hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
+ hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
+ hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
+ }
+ if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
+ ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
+ AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
+ AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
+ Float_t weighted= 1;
+ if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
+ if (particle->Pt()>0.005){
+ weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
+ // if(particle->GetPdgCode() == 221){
+ // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
+ // }
+ }
+ }
+ Double_t mesonY = 10.;
+ if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
+ mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+ } else{
+ mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
+ -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+ }
- if(particle->GetPdgCode() == 111){
- hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
- } else if(particle->GetPdgCode() == 221){
- hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
- }
- }
- }
- }
- }
-
+ if(particle->GetPdgCode() == 111){
+ hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
+ hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
+ if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+ } else if(particle->GetPdgCode() == 221){
+ hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
+ hMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
+ if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+ }
+
+ // Check the acceptance for both gammas
+ if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
+ ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) &&
+ ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
+ ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
+
+ if(particle->GetPdgCode() == 111){
+ hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
+ } else if(particle->GetPdgCode() == 221){
+ hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
+ }
+ }
+ }
+ }
+ }
+ }
+ return;
}
//________________________________________________________________________
void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
{
- // Process True Mesons
- TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
- Bool_t isTruePi0 = kFALSE;
- Bool_t isTrueEta = kFALSE;
- Bool_t isTruePi0Dalitz = kFALSE;
- Bool_t isTrueEtaDalitz = kFALSE;
- Bool_t gamma0DalitzCand = kFALSE;
- Bool_t gamma1DalitzCand = kFALSE;
-
- AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
- AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
-
- iMesonMCInfo = 0;
- Int_t gamma0MCLabel = -1;
- Int_t gamma0MotherLabel = -1;
- if(!positiveMC||!negativeMC)
- return;
+ // Process True Mesons
+ TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+ Bool_t isTruePi0 = kFALSE;
+ Bool_t isTrueEta = kFALSE;
+ Bool_t isTruePi0Dalitz = kFALSE;
+ Bool_t isTrueEtaDalitz = kFALSE;
+ Bool_t gamma0DalitzCand = kFALSE;
+ Bool_t gamma1DalitzCand = kFALSE;
- if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
- gamma0MCLabel = positiveMC->GetMother();
- }
+ if (AODMCTrackArray!=NULL && TrueGammaCandidate0 != NULL){
+ AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
+ AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
+
+ iMesonMCInfo = 0;
+ Int_t gamma0MCLabel = -1;
+ Int_t gamma0MotherLabel = -1;
+ if(!positiveMC||!negativeMC)
+ return;
+
+ if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
+ gamma0MCLabel = positiveMC->GetMother();
+ }
- if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
- // Daughters Gamma 0
- AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
- if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
- if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
- if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
- gamma0MotherLabel=gammaMC0->GetMother();
- }
- }
- if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
- gamma0DalitzCand = kTRUE;
- gamma0MotherLabel=-111;
- }
- if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
- gamma0DalitzCand = kTRUE;
- gamma0MotherLabel=-221;
- }
- }
- }
- positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
- negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
-
- Int_t gamma1MCLabel = -1;
- Int_t gamma1MotherLabel = -1;
- if(!positiveMC||!negativeMC)
- return;
-
- if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
- gamma1MCLabel = positiveMC->GetMother();
- }
- if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
- // Daughters Gamma 1
- AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
- if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
- if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
- if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
- gamma1MotherLabel=gammaMC1->GetMother();
- }
- }
- if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
- gamma1DalitzCand = kTRUE;
- gamma1MotherLabel=-111;
- }
- if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
- gamma1DalitzCand = kTRUE;
- gamma1MotherLabel=-221;
- }
- }
- }
- if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
- if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
- isTruePi0=kTRUE;
- }
- if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
- isTrueEta=kTRUE;
- }
- }
-
- //Identify Dalitz candidate
- if (gamma1DalitzCand || gamma0DalitzCand){
- if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
- if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
- if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
- }
- if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
- if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
- if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
- }
- }
-
- if(isTruePi0 || isTrueEta){// True Pion or Eta
- hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
- if (fDoMesonQA > 0){
- if (isTruePi0){
- if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
- hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
- hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
- hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
- }
- } else if (isTrueEta){
- if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
- hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
- hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
- hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
- }
- }
- }
- if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
- Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
- Float_t weightedSec= 1;
- if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
- weightedSec= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, 0x0, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
- //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
- }
- hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
- iMesonMCInfo = 2;
- if (secMotherLabel >-1){
- if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
- iMesonMCInfo = 4;
- hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
- if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
- ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
- }
- if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
- iMesonMCInfo = 3;
- hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
- if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
- ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
- }
- if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122){
- iMesonMCInfo = 7;
- hESDTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
- if (fDoMesonQA > 0)hESDTrueLambdaWithPi0DaughterMCPt[fiCut]
- ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
- }
- }
- }else{ // Only primary pi0 for efficiency calculation
- Float_t weighted= 1;
- iMesonMCInfo = 6;
- if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
- if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
- weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
- // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
- }
- }
- hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
- hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
- pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
-
- if (fDoMesonQA > 0){
- if(isTruePi0){ // Only primary pi0 for resolution
- hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
- (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
-
- }
- if (isTrueEta){ // Only primary eta for resolution
- hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
- (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
- }
- }
- }
- } else if(!isTruePi0 && !isTrueEta) { // Background
- if (fDoMesonQA > 0){
- if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
- hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
- iMesonMCInfo = 1;
- } else { // No photon or without mother
- hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
- }
- }
- if( isTruePi0Dalitz || isTrueEtaDalitz ){
- // Dalitz
- iMesonMCInfo = 5;
- hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
- } else if (gamma0DalitzCand || gamma1DalitzCand){
- if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
- }
- }
+ if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
+ // Daughters Gamma 0
+ AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
+ if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
+ if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
+ if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
+ gamma0MotherLabel=gammaMC0->GetMother();
+ }
+ }
+ if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
+ gamma0DalitzCand = kTRUE;
+ gamma0MotherLabel=-111;
+ }
+ if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
+ gamma0DalitzCand = kTRUE;
+ gamma0MotherLabel=-221;
+ }
+ }
+ }
+ positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
+ negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
+
+ Int_t gamma1MCLabel = -1;
+ Int_t gamma1MotherLabel = -1;
+ if(!positiveMC||!negativeMC)
+ return;
+
+ if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
+ gamma1MCLabel = positiveMC->GetMother();
+ }
+ if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
+ // Daughters Gamma 1
+ AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
+ if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
+ if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
+ if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
+ gamma1MotherLabel=gammaMC1->GetMother();
+ }
+ }
+ if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
+ gamma1DalitzCand = kTRUE;
+ gamma1MotherLabel=-111;
+ }
+ if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
+ gamma1DalitzCand = kTRUE;
+ gamma1MotherLabel=-221;
+ }
+ }
+ }
+ if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
+ if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
+ isTruePi0=kTRUE;
+ }
+ if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
+ isTrueEta=kTRUE;
+ }
+ }
+
+ //Identify Dalitz candidate
+ if (gamma1DalitzCand || gamma0DalitzCand){
+ if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
+ if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
+ if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
+ }
+ if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
+ if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
+ if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
+ }
+ }
+
+ if(isTruePi0 || isTrueEta){// True Pion or Eta
+ hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+ if (fDoMesonQA > 0){
+ if (isTruePi0){
+ if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
+ hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
+ hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
+ hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
+ }
+ } else if (isTrueEta){
+ if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
+ hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
+ hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
+ hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
+ }
+ }
+ }
+ if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
+ Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
+ Float_t weightedSec= 1;
+ if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
+ weightedSec= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, 0x0, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
+ //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
+ }
+ hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+ iMesonMCInfo = 2;
+ if (secMotherLabel >-1){
+ if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
+ iMesonMCInfo = 4;
+ hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+ if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
+ ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
+ }
+ if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
+ iMesonMCInfo = 3;
+ hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+ if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
+ ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
+ }
+ if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122){
+ iMesonMCInfo = 7;
+ hESDTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+ if (fDoMesonQA > 0)hESDTrueLambdaWithPi0DaughterMCPt[fiCut]
+ ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
+ }
+ }
+ }else{ // Only primary pi0 for efficiency calculation
+ Float_t weighted= 1;
+ iMesonMCInfo = 6;
+ if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
+ if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
+ weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
+ // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
+ }
+ }
+ hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+ hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+ pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+
+ if (fDoMesonQA > 0){
+ if(isTruePi0){ // Only primary pi0 for resolution
+ hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
+ (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
+
+ }
+ if (isTrueEta){ // Only primary eta for resolution
+ hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
+ (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
+ }
+ }
+ }
+ } else if(!isTruePi0 && !isTrueEta) { // Background
+ if (fDoMesonQA > 0){
+ if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
+ hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+ iMesonMCInfo = 1;
+ } else { // No photon or without mother
+ hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+ }
+ }
+ if( isTruePi0Dalitz || isTrueEtaDalitz ){
+ // Dalitz
+ iMesonMCInfo = 5;
+ hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+ } else if (gamma0DalitzCand || gamma1DalitzCand){
+ if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+ }
+ }
+ }
+ return;
}
//________________________________________________________________________
void AliAnalysisTaskGammaConvV1::CalculateBackground(){
fRecCords(5),
fDaughterProp(4),
fKind(0),
- fIsHeavyIon(kFALSE),
+ fIsHeavyIon(0),
fIsMC(kFALSE),
fESDEvent(NULL),
fMCEvent(NULL)
fRecCords(5),
fDaughterProp(4),
fKind(0),
- fIsHeavyIon(kFALSE),
+ fIsHeavyIon(0),
fIsMC(kFALSE),
fESDEvent(NULL),
fMCEvent(NULL)
{
- // Default constructor
+ // Default constructor
-
- DefineInput(0, TChain::Class());
- DefineOutput(1, TList::Class());
+
+ DefineInput(0, TChain::Class());
+ DefineOutput(1, TList::Class());
}
//________________________________________________________________________
AliAnalysisTaskMaterial::~AliAnalysisTaskMaterial()
{
- // default deconstructor
+ // default deconstructor
}
//________________________________________________________________________
void AliAnalysisTaskMaterial::UserCreateOutputObjects()
{
- // Create User Output Objects
+ // Create User Output Objects
- if(fOutputList != NULL){
- delete fOutputList;
- fOutputList = NULL;
- }
- if(fOutputList == NULL){
- fOutputList = new TList();
- fOutputList->SetOwner(kTRUE);
- }
-
- fEventList = new TList();
- fEventList->SetName("EventList");
- fEventList->SetOwner(kTRUE);
- fOutputList->Add(fEventList);
-
- fTreeEvent = new TTree("Event","Event");
- fTreeEvent->Branch("primVtxZ",&fPrimVtxZ,"fPrimVtxZ/F");
- fTreeEvent->Branch("nContrVtx",&fNContrVtx,"fNContrVtx/I");
- fTreeEvent->Branch("nGoodTracksEta09",&fNESDtracksEta09,"fNESDtracksEta09/I");
- fTreeEvent->Branch("nGoodTracksEta0914",&fNESDtracksEta0914,"fNESDtracksEta0914/I");
- fTreeEvent->Branch("nGoodTracksEta14",&fNESDtracksEta14,"fNESDtracksEta14/I");
- fEventList->Add(fTreeEvent);
-
- fRecGammaList= new TList();
- fRecGammaList->SetName("RecGammaList");
- fRecGammaList->SetOwner(kTRUE);
- fOutputList->Add(fRecGammaList);
-
-
- fTreeMaterialRec = new TTree("ConvPointRec","ConvPointRec");
- fTreeMaterialRec->Branch("recCords",&fRecCords);
- fTreeMaterialRec->Branch("daughterProp",&fDaughterProp);
- fTreeMaterialRec->Branch("pt",&fGammaPt,"fGammaPt/F");
- fTreeMaterialRec->Branch("theta",&fGammaTheta,"fGammaTheta/F");
- fTreeMaterialRec->Branch("chi2ndf",&fGammaChi2NDF,"fGammaChi2NDF/F");
- if (fIsMC) {
- fTreeMaterialRec->Branch("kind",&fKind,"fKind/b");
- }
- fRecGammaList->Add(fTreeMaterialRec);
-
- if (fIsMC) {
- fAllMCGammaList = new TList();
- fAllMCGammaList->SetName("AllMCGammaList");
- fAllMCGammaList->SetOwner(kTRUE);
- fOutputList->Add(fAllMCGammaList);
-
- fTreeMaterialAllGamma = new TTree("AllGamma","AllGamma");
- fTreeMaterialAllGamma->Branch("pt",&fGammaMCPt,"fGammaMCPt/F");
- fTreeMaterialAllGamma->Branch("theta",&fGammaMCTheta,"fGammaMCTheta/F");
- fAllMCGammaList->Add(fTreeMaterialAllGamma);
-
- fAllMCConvGammaList = new TList();
- fAllMCConvGammaList->SetName("AllMCGammaConvList");
- fAllMCConvGammaList->SetOwner(kTRUE);
- fOutputList->Add(fAllMCConvGammaList);
+ if(fOutputList != NULL){
+ delete fOutputList;
+ fOutputList = NULL;
+ }
+ if(fOutputList == NULL){
+ fOutputList = new TList();
+ fOutputList->SetOwner(kTRUE);
+ }
+
+ fEventList = new TList();
+ fEventList->SetName("EventList");
+ fEventList->SetOwner(kTRUE);
+ fOutputList->Add(fEventList);
+
+ fTreeEvent = new TTree("Event","Event");
+ fTreeEvent->Branch("primVtxZ",&fPrimVtxZ,"fPrimVtxZ/F");
+ fTreeEvent->Branch("nContrVtx",&fNContrVtx,"fNContrVtx/I");
+ fTreeEvent->Branch("nGoodTracksEta09",&fNESDtracksEta09,"fNESDtracksEta09/I");
+ fTreeEvent->Branch("nGoodTracksEta0914",&fNESDtracksEta0914,"fNESDtracksEta0914/I");
+ fTreeEvent->Branch("nGoodTracksEta14",&fNESDtracksEta14,"fNESDtracksEta14/I");
+ fEventList->Add(fTreeEvent);
+
+ fRecGammaList= new TList();
+ fRecGammaList->SetName("RecGammaList");
+ fRecGammaList->SetOwner(kTRUE);
+ fOutputList->Add(fRecGammaList);
+
+ fTreeMaterialRec = new TTree("ConvPointRec","ConvPointRec");
+ fTreeMaterialRec->Branch("recCords",&fRecCords);
+ fTreeMaterialRec->Branch("daughterProp",&fDaughterProp);
+ fTreeMaterialRec->Branch("pt",&fGammaPt,"fGammaPt/F");
+ fTreeMaterialRec->Branch("theta",&fGammaTheta,"fGammaTheta/F");
+ fTreeMaterialRec->Branch("chi2ndf",&fGammaChi2NDF,"fGammaChi2NDF/F");
+ if (fIsMC) {
+ fTreeMaterialRec->Branch("kind",&fKind,"fKind/b");
+ }
+ fRecGammaList->Add(fTreeMaterialRec);
+
+ if (fIsMC) {
+ fAllMCGammaList = new TList();
+ fAllMCGammaList->SetName("AllMCGammaList");
+ fAllMCGammaList->SetOwner(kTRUE);
+ fOutputList->Add(fAllMCGammaList);
+
+ fTreeMaterialAllGamma = new TTree("AllGamma","AllGamma");
+ fTreeMaterialAllGamma->Branch("pt",&fGammaMCPt,"fGammaMCPt/F");
+ fTreeMaterialAllGamma->Branch("theta",&fGammaMCTheta,"fGammaMCTheta/F");
+ fAllMCGammaList->Add(fTreeMaterialAllGamma);
+
+ fAllMCConvGammaList = new TList();
+ fAllMCConvGammaList->SetName("AllMCGammaConvList");
+ fAllMCConvGammaList->SetOwner(kTRUE);
+ fOutputList->Add(fAllMCConvGammaList);
-// fMCConvCords = new Float_t[5];
-// fMCConvDaughterProp = new Float_t[4];
+ // fMCConvCords = new Float_t[5];
+ // fMCConvDaughterProp = new Float_t[4];
-
- fTreeMaterialConvGamma = new TTree("ConvGammaMC","ConvGammaMC");
- fTreeMaterialConvGamma->Branch("Cords",&fMCConvCords);
- fTreeMaterialConvGamma->Branch("daughterProp",&fMCConvDaughterProp);
- fTreeMaterialConvGamma->Branch("Pt",&fGammaMCConvPt,"fGammaMCConvPt/F");
- fTreeMaterialConvGamma->Branch("Theta",&fGammaMCConvTheta,"fGammaMCConvTheta/F");
- fAllMCConvGammaList->Add(fTreeMaterialConvGamma);
- }
-
- // V0 Reader Cuts
- TString cutnumber = fConversionCuts->GetCutNumber();
- PostData(1, fOutputList);
+
+ fTreeMaterialConvGamma = new TTree("ConvGammaMC","ConvGammaMC");
+ fTreeMaterialConvGamma->Branch("Cords",&fMCConvCords);
+ fTreeMaterialConvGamma->Branch("daughterProp",&fMCConvDaughterProp);
+ fTreeMaterialConvGamma->Branch("Pt",&fGammaMCConvPt,"fGammaMCConvPt/F");
+ fTreeMaterialConvGamma->Branch("Theta",&fGammaMCConvTheta,"fGammaMCConvTheta/F");
+ fAllMCConvGammaList->Add(fTreeMaterialConvGamma);
+ }
+
+ PostData(1, fOutputList);
}
//________________________________________________________________________
void AliAnalysisTaskMaterial::UserExec(Option_t *){
- fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
+ fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
- Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
- if(eventQuality != 0){// Event Not Accepted
- return;
- }
- fESDEvent = (AliESDEvent*) InputEvent();
- if (fESDEvent==NULL) return;
- if(fIsHeavyIon && !fConversionCuts->IsCentralitySelected(fESDEvent)) return;
+ Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
+ if(eventQuality != 0){// Event Not Accepted
+ return;
+ }
+ fESDEvent = (AliESDEvent*) InputEvent();
+ if (fESDEvent==NULL) return;
+ if(MCEvent()){
+ fMCEvent = MCEvent();
+ }
+
+ if(MCEvent()){
+ // Process MC Particle
+ if(fConversionCuts->GetSignalRejection() != 0){
+// if(fESDEvent->IsA()==AliESDEvent::Class()){
+ fConversionCuts->GetNotRejectedParticles( fConversionCuts->GetSignalRejection(),
+ fConversionCuts->GetAcceptedHeader(),
+ fMCEvent);
+// }
+// else if(fInputEvent->IsA()==AliAODEvent::Class()){
+// fConversionCuts->GetNotRejectedParticles( fConversionCuts->GetSignalRejection(),
+// fConversionCuts->GetAcceptedHeader(),
+// fInputEvent);
+// }
+ }
+ }
+
+ if(fIsHeavyIon > 0 && !fConversionCuts->IsCentralitySelected(fESDEvent)) return;
fNESDtracksEta09 = CountTracks09(); // Estimate Event Multiplicity
fNESDtracksEta0914 = CountTracks0914(); // Estimate Event Multiplicity
fNESDtracksEta14 = fNESDtracksEta09 + fNESDtracksEta0914;
if(fESDEvent){
if(fESDEvent->GetPrimaryVertexTracks()->GetNContributors()>0) {
fNContrVtx = fESDEvent->GetPrimaryVertexTracks()->GetNContributors();
- } else if(fESDEvent->GetPrimaryVertexTracks()->GetNContributors()<1) {
- if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
- fNContrVtx = fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
- } else if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()<1) {
- fNContrVtx = 0;
- }
- }
- }
+ } else {
+ fNContrVtx = 0;
+ }
+// else if(fESDEvent->GetPrimaryVertexTracks()->GetNContributors()<1) {
+// if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
+// fNContrVtx = fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
+// } else if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()<1) {
+// fNContrVtx = 0;
+// }
+// }
+ }
fPrimVtxZ = fESDEvent->GetPrimaryVertex()->GetZ();
- if (fTreeEvent){
- fTreeEvent->Fill();
- }
+ if (fIsHeavyIon == 2){
+ if (!(fNESDtracksEta09 > 20 && fNESDtracksEta09 < 80)) return;
+ }
- fConversionGammas=fV0Reader->GetReconstructedGammas();
- if(MCEvent()){
- fMCEvent = MCEvent();
+
+ if (fTreeEvent){
+ fTreeEvent->Fill();
}
- ProcessPhotons();
+
+ fConversionGammas=fV0Reader->GetReconstructedGammas();
+ ProcessPhotons();
if(MCEvent()){
ProcessMCPhotons();
}
- PostData(1, fOutputList);
+ PostData(1, fOutputList);
}
///________________________________________________________________________
void AliAnalysisTaskMaterial::FillMCTree(Int_t stackPos){
AliStack *MCStack = fMCEvent->Stack();
TParticle* candidate = (TParticle *)MCStack->Particle(stackPos);
+
if(fConversionCuts->PhotonIsSelectedMC(candidate,MCStack,kFALSE)){
fGammaMCPt = candidate->Pt();
fGammaMCTheta = candidate->Theta();
fGammaMCConvTheta = candidate->Theta();
TParticle* daughter1 = (TParticle *)MCStack->Particle(candidate->GetFirstDaughter());
TParticle* daughter2 = (TParticle *)MCStack->Particle(candidate->GetLastDaughter());
- fMCConvCords(0) = (Float_t)daughter1->Vx();
- fMCConvCords(1) = (Float_t)daughter1->Vy();
- fMCConvCords(2) = (Float_t)daughter1->Vz();
- fMCConvCords(3) = (Float_t)daughter1->R();
- fMCConvCords(4) = (Float_t)daughter1->Phi();
-
- fMCConvDaughterProp(0) = (Float_t)daughter1->Pt();
- fMCConvDaughterProp(1) = (Float_t)daughter1->Theta();
- fMCConvDaughterProp(2) = (Float_t)daughter2->Pt();
- fMCConvDaughterProp(3) = (Float_t)daughter2->Theta();
+ fMCConvCords(0) = (Float_t)daughter1->Vx();
+ fMCConvCords(1) = (Float_t)daughter1->Vy();
+ fMCConvCords(2) = (Float_t)daughter1->Vz();
+ fMCConvCords(3) = (Float_t)daughter1->R();
+ fMCConvCords(4) = (Float_t)daughter1->Phi();
+ fMCConvDaughterProp(0) = (Float_t)daughter1->Pt();
+ fMCConvDaughterProp(1) = (Float_t)daughter1->Theta();
+ fMCConvDaughterProp(2) = (Float_t)daughter2->Pt();
+ fMCConvDaughterProp(3) = (Float_t)daughter2->Theta();
+
if (fTreeMaterialConvGamma){
fTreeMaterialConvGamma->Fill();
}
AliStack *ffMCStack = fMCEvent->Stack();
for(Int_t i = 0; i < ffMCStack->GetNprimary(); i++) {
TParticle* particle = (TParticle *)ffMCStack->Particle(i);
- if (!particle) continue;
+ if (!particle) continue;
+ Int_t isMCFromMBHeader = -1;
+ if(fConversionCuts->GetSignalRejection() != 0){
+ isMCFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(i, ffMCStack, fESDEvent);
+ if(isMCFromMBHeader == 0) continue;
+ }
if (particle->GetPdgCode() == 111 && particle->GetFirstDaughter() >= ffMCStack->GetNprimary()){
// cout << "Undecayed pi0 found with mother: " << particle->GetMother(0) << endl;
for (Int_t j = 0; j < 2 ; j++){
///________________________________________________________________________
void AliAnalysisTaskMaterial::ProcessPhotons(){
- // Fill Histograms for QA and MC
- for(Int_t firstGammaIndex=0;firstGammaIndex<fConversionGammas->GetEntriesFast();firstGammaIndex++){
- AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fConversionGammas->At(firstGammaIndex));
- if (gamma ==NULL) continue;
- if(!fConversionCuts->PhotonIsSelected(gamma,fESDEvent)) continue;
+ // Fill Histograms for QA and MC
+ for(Int_t firstGammaIndex=0;firstGammaIndex<fConversionGammas->GetEntriesFast();firstGammaIndex++){
+ AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fConversionGammas->At(firstGammaIndex));
+ if (gamma ==NULL) continue;
+ if(!fConversionCuts->PhotonIsSelected(gamma,fESDEvent)) continue;
- fGammaPt = gamma->GetPhotonPt();
+ fGammaPt = gamma->GetPhotonPt();
fGammaTheta = gamma->GetPhotonTheta();
fGammaChi2NDF = gamma->GetChi2perNDF();
- fRecCords(0) = (Float_t)gamma->GetConversionX();
- fRecCords(1) = (Float_t)gamma->GetConversionY();
- fRecCords(2) = (Float_t)gamma->GetConversionZ();
- fRecCords(3) = (Float_t)gamma->GetConversionRadius();
- fRecCords(4) = (Float_t)gamma->GetPhotonPhi();
-
+ fRecCords(0) = (Float_t)gamma->GetConversionX();
+ fRecCords(1) = (Float_t)gamma->GetConversionY();
+ fRecCords(2) = (Float_t)gamma->GetConversionZ();
+ fRecCords(3) = (Float_t)gamma->GetConversionRadius();
+ fRecCords(4) = (Float_t)gamma->GetPhotonPhi();
+
AliESDtrack * negTrack = fConversionCuts->GetESDTrack(fESDEvent, gamma->GetTrackLabelNegative());
- AliESDtrack * posTrack = fConversionCuts->GetESDTrack(fESDEvent, gamma->GetTrackLabelPositive());
- fDaughterProp(0) = (Float_t)posTrack->Pt();
- fDaughterProp(1) = (Float_t)posTrack->Theta();
- fDaughterProp(2) = (Float_t)negTrack->Pt();
- fDaughterProp(3) = (Float_t)negTrack->Theta();
+ AliESDtrack * posTrack = fConversionCuts->GetESDTrack(fESDEvent, gamma->GetTrackLabelPositive());
+ fDaughterProp(0) = (Float_t)posTrack->Pt();
+ fDaughterProp(1) = (Float_t)posTrack->Theta();
+ fDaughterProp(2) = (Float_t)negTrack->Pt();
+ fDaughterProp(3) = (Float_t)negTrack->Theta();
fKind = 9;
TParticle *posDaughter = gamma->GetPositiveMCDaughter(fMCStack);
TParticle *negDaughter = gamma->GetNegativeMCDaughter(fMCStack);
// cout << "generate Daughters: "<<posDaughter << "\t" << negDaughter << endl;
-
+
+ if(fMCStack && fConversionCuts->GetSignalRejection() != 0){
+ Int_t isPosFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(gamma->GetMCLabelPositive(), fMCStack, fESDEvent);
+ Int_t isNegFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(gamma->GetMCLabelNegative(), fMCStack, fESDEvent);
+ if( (isNegFromMBHeader < 1) || (isPosFromMBHeader < 1)) continue;
+ }
+
if(posDaughter == NULL || negDaughter == NULL){
fKind = 9; // garbage
// cout << "one of the daughters not available" << endl;
}
}
if (fTreeMaterialRec){
- fTreeMaterialRec->Fill();
- }
+ fTreeMaterialRec->Fill();
+ }
}
}
//________________________________________________________________________
Int_t AliAnalysisTaskMaterial::CountTracks09(){
- Int_t fNumberOfESDTracks = 0;
- if(fInputEvent->IsA()==AliESDEvent::Class()){
- // Using standard function for setting Cuts
- Bool_t selectPrimaries=kTRUE;
- AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
- EsdTrackCuts->SetMaxDCAToVertexZ(2);
- EsdTrackCuts->SetEtaRange(-0.9, 0.9);
- EsdTrackCuts->SetPtRange(0.15);
-
- for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
- AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
- if(!curTrack) continue;
- if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
- }
- delete EsdTrackCuts;
- EsdTrackCuts=0x0;
- }
- else if(fInputEvent->IsA()==AliAODEvent::Class()){
- for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
- AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
- if(!curTrack->IsPrimaryCandidate()) continue;
- if(abs(curTrack->Eta())>0.9) continue;
- if(curTrack->Pt()<0.15) continue;
- if(abs(curTrack->ZAtDCA())>2) continue;
- fNumberOfESDTracks++;
- }
- }
+ Int_t fNumberOfESDTracks = 0;
+ if(fInputEvent->IsA()==AliESDEvent::Class()){
+ // Using standard function for setting Cuts
+
+ AliStack *fMCStack = NULL;
+ if (fMCEvent){
+ fMCStack= fMCEvent->Stack();
+ if (!fMCStack) return 0;
+ }
+
+ Bool_t selectPrimaries=kTRUE;
+ AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
+ EsdTrackCuts->SetMaxDCAToVertexZ(2);
+ EsdTrackCuts->SetEtaRange(-0.9, 0.9);
+ EsdTrackCuts->SetPtRange(0.15);
+
+ for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
+ if(!curTrack) continue;
+ if(EsdTrackCuts->AcceptTrack(curTrack) ){
+ if (fMCEvent){
+ if(fMCStack && fConversionCuts->GetSignalRejection() != 0){
+ Int_t isFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack, fESDEvent);
+ if( (isFromMBHeader < 1) ) continue;
+ }
+ }
+ fNumberOfESDTracks++;
+ }
+ }
+ delete EsdTrackCuts;
+ EsdTrackCuts=0x0;
+ } else if(fInputEvent->IsA()==AliAODEvent::Class()){
+ for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
+ if(!curTrack->IsPrimaryCandidate()) continue;
+ if(abs(curTrack->Eta())>0.9) continue;
+ if(curTrack->Pt()<0.15) continue;
+ if(abs(curTrack->ZAtDCA())>2) continue;
+ fNumberOfESDTracks++;
+ }
+ }
- return fNumberOfESDTracks;
+ return fNumberOfESDTracks;
}
+//________________________________________________________________________
Int_t AliAnalysisTaskMaterial::CountTracks0914(){
+ Int_t fNumberOfESDTracks = 0;
+ if(fInputEvent->IsA()==AliESDEvent::Class()){
+ // Using standard function for setting Cuts
+
+ AliStack *fMCStack = NULL;
+ if (fMCEvent){
+ fMCStack= fMCEvent->Stack();
+ if (!fMCStack) return 0;
+ }
- Int_t fNumberOfESDTracks = 0;
- if(fInputEvent->IsA()==AliESDEvent::Class()){
- // Using standard function for setting Cuts
- AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
- EsdTrackCuts->SetMaxDCAToVertexZ(5);
- EsdTrackCuts->SetEtaRange(0.9, 1.4);
- EsdTrackCuts->SetPtRange(0.15);
-
- for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
- AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
- if(!curTrack) continue;
- if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
- }
- EsdTrackCuts->SetEtaRange(-1.4, -0.9);
- for(Int_t iTracks = 0; iTracks < fESDEvent->GetNumberOfTracks(); iTracks++){
- AliESDtrack* curTrack = fESDEvent->GetTrack(iTracks);
- if(!curTrack) continue;
- if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
- }
- delete EsdTrackCuts;
- EsdTrackCuts=0x0;
- }
- else if(fInputEvent->IsA()==AliAODEvent::Class()){
- for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
- AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
- if(abs(curTrack->Eta())<0.9 || abs(curTrack->Eta())>1.4 ) continue;
- if(curTrack->Pt()<0.15) continue;
- if(abs(curTrack->ZAtDCA())>5) continue;
- fNumberOfESDTracks++;
- }
- }
-
- return fNumberOfESDTracks;
+ AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
+ EsdTrackCuts->SetMaxDCAToVertexZ(5);
+ EsdTrackCuts->SetEtaRange(0.9, 1.4);
+ EsdTrackCuts->SetPtRange(0.15);
+
+ for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
+ if(!curTrack) continue;
+ if(EsdTrackCuts->AcceptTrack(curTrack) ){
+ if (fMCEvent){
+ if(fMCStack && fConversionCuts->GetSignalRejection() != 0){
+ Int_t isFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack, fESDEvent);
+ if( (isFromMBHeader < 1) ) continue;
+ }
+ }
+ fNumberOfESDTracks++;
+ }
+ }
+ EsdTrackCuts->SetEtaRange(-1.4, -0.9);
+ for(Int_t iTracks = 0; iTracks < fESDEvent->GetNumberOfTracks(); iTracks++){
+ AliESDtrack* curTrack = fESDEvent->GetTrack(iTracks);
+ if(!curTrack) continue;
+ if(EsdTrackCuts->AcceptTrack(curTrack) ){
+ if (fMCEvent){
+ if(fMCStack && fConversionCuts->GetSignalRejection() != 0){
+ Int_t isFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack, fESDEvent);
+ if( (isFromMBHeader < 1) ) continue;
+ }
+ }
+ fNumberOfESDTracks++;
+ }
+ }
+ delete EsdTrackCuts;
+ EsdTrackCuts=0x0;
+ } else if(fInputEvent->IsA()==AliAODEvent::Class()){
+ for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
+ if(abs(curTrack->Eta())<0.9 || abs(curTrack->Eta())>1.4 ) continue;
+ if(curTrack->Pt()<0.15) continue;
+ if(abs(curTrack->ZAtDCA())>5) continue;
+ fNumberOfESDTracks++;
+ }
+ }
+
+ return fNumberOfESDTracks;
}
//________________________________________________________________________
class AliAnalysisTaskMaterial : public AliAnalysisTaskSE{
- public:
-
- AliAnalysisTaskMaterial();
- AliAnalysisTaskMaterial(const char *name);
- virtual ~AliAnalysisTaskMaterial();
-
- virtual void UserCreateOutputObjects();
- virtual void UserExec(Option_t *option);
- virtual void Terminate(Option_t *);
-
- void SetIsMC(Bool_t isMC){fIsMC=isMC;}
- void SetV0Reader(AliV0ReaderV1 *v0Reader){fV0Reader=v0Reader;}
- void SetConversionCuts(AliConversionCuts* conversionCuts,Bool_t IsHeavyIon ){
- fConversionCuts=conversionCuts;
- fIsHeavyIon = IsHeavyIon;
- }
-
- private:
-
- void ProcessPhotons();
- void ProcessMCPhotons();
- void FillMCTree(Int_t stackPos);
- Int_t CountTracks0914();
- Int_t CountTracks09();
-
- AliV0ReaderV1 *fV0Reader;
- TClonesArray *fConversionGammas; //Reconstructed Photons;
- AliConversionCuts *fConversionCuts; // Cuts used by the V0Reader
- TList *fOutputList;
- TList *fEventList;
- TList *fRecGammaList;
- TList *fAllMCGammaList;
- TList *fAllMCConvGammaList;
- TTree* fTreeEvent;
- TTree* fTreeMaterialRec;
- TTree* fTreeMaterialAllGamma;
- TTree* fTreeMaterialConvGamma;
- Float_t fPrimVtxZ;
- Int_t fNContrVtx;
- Int_t fNESDtracksEta09;
- Int_t fNESDtracksEta0914;
- Int_t fNESDtracksEta14;
- Float_t fGammaMCPt;
- Float_t fGammaMCTheta;
- Float_t fGammaMCConvPt;
- Float_t fGammaMCConvTheta;
- TVectorF fMCConvCords;
- TVectorF fMCConvDaughterProp;
- Float_t fGammaPt;
- Float_t fGammaTheta;
- Float_t fGammaChi2NDF;
- TVectorF fRecCords;
- TVectorF fDaughterProp;
- UChar_t fKind;
-
-
- Bool_t fIsHeavyIon;
- Bool_t fIsMC;
- AliESDEvent *fESDEvent;
- AliMCEvent *fMCEvent;
-
- AliAnalysisTaskMaterial(const AliAnalysisTaskMaterial&); // not implemented
- AliAnalysisTaskMaterial& operator=(const AliAnalysisTaskMaterial&); // not implemented
-
-
- ClassDef(AliAnalysisTaskMaterial, 1);
+ public:
+
+ AliAnalysisTaskMaterial();
+ AliAnalysisTaskMaterial(const char *name);
+ virtual ~AliAnalysisTaskMaterial();
+
+ virtual void UserCreateOutputObjects();
+ virtual void UserExec(Option_t *option);
+ virtual void Terminate(Option_t *);
+
+ void SetIsMC(Bool_t isMC){fIsMC=isMC;}
+ void SetV0Reader(AliV0ReaderV1 *v0Reader){fV0Reader=v0Reader;}
+ void SetConversionCuts(AliConversionCuts* conversionCuts,Int_t IsHeavyIon ){
+ fConversionCuts=conversionCuts;
+ fIsHeavyIon = IsHeavyIon;
+ }
+
+ private:
+
+ void ProcessPhotons();
+ void ProcessMCPhotons();
+ void FillMCTree(Int_t stackPos);
+ Int_t CountTracks0914();
+ Int_t CountTracks09();
+
+ AliV0ReaderV1 *fV0Reader;
+ TClonesArray *fConversionGammas; //Reconstructed Photons;
+ AliConversionCuts *fConversionCuts; // Cuts used by the V0Reader
+ TList *fOutputList;
+ TList *fEventList;
+ TList *fRecGammaList;
+ TList *fAllMCGammaList;
+ TList *fAllMCConvGammaList;
+ TTree* fTreeEvent;
+ TTree* fTreeMaterialRec;
+ TTree* fTreeMaterialAllGamma;
+ TTree* fTreeMaterialConvGamma;
+ Float_t fPrimVtxZ;
+ Int_t fNContrVtx;
+ Int_t fNESDtracksEta09;
+ Int_t fNESDtracksEta0914;
+ Int_t fNESDtracksEta14;
+ Float_t fGammaMCPt;
+ Float_t fGammaMCTheta;
+ Float_t fGammaMCConvPt;
+ Float_t fGammaMCConvTheta;
+ TVectorF fMCConvCords;
+ TVectorF fMCConvDaughterProp;
+ Float_t fGammaPt;
+ Float_t fGammaTheta;
+ Float_t fGammaChi2NDF;
+ TVectorF fRecCords;
+ TVectorF fDaughterProp;
+ UChar_t fKind;
+
+
+ Int_t fIsHeavyIon;
+ Bool_t fIsMC;
+ AliESDEvent *fESDEvent;
+ AliMCEvent *fMCEvent;
+
+ AliAnalysisTaskMaterial(const AliAnalysisTaskMaterial&); // not implemented
+ AliAnalysisTaskMaterial& operator=(const AliAnalysisTaskMaterial&); // not implemented
+
+
+ ClassDef(AliAnalysisTaskMaterial, 1);
};
#endif
//________________________________________________________________________
AliAnalysisTaskResolution::AliAnalysisTaskResolution() : AliAnalysisTaskSE(),
- fV0Reader(NULL),
- fConversionGammas(NULL),
- fConversionCuts(NULL),
- fTreeEvent(NULL),
- fTreeResolution(NULL),
- fPrimVtxZ(0.),
- fNContrVtx(0),
- fNESDtracksEta09(0),
- fNESDtracksEta0914(0),
- fNESDtracksEta14(0),
- fGammaRecCoords(5),
- fGammaMCCoords(5),
- fChi2ndf(0),
- fIsHeavyIon(kFALSE),
- fOutputList(NULL),
- fEventList(NULL),
- fResolutionList(NULL),
- fESDEvent(NULL),
- fMCEvent(NULL)
+ fV0Reader(NULL),
+ fConversionGammas(NULL),
+ fConversionCuts(NULL),
+ fTreeEvent(NULL),
+ fTreeResolution(NULL),
+ fPrimVtxZ(0.),
+ fNContrVtx(0),
+ fNESDtracksEta09(0),
+ fNESDtracksEta0914(0),
+ fNESDtracksEta14(0),
+ fGammaRecCoords(5),
+ fGammaMCCoords(5),
+ fChi2ndf(0),
+ fIsHeavyIon(0),
+ fIsMC(kFALSE),
+ fOutputList(NULL),
+ fEventList(NULL),
+ fResolutionList(NULL),
+ fESDEvent(NULL),
+ fMCEvent(NULL)
{
}
-
//________________________________________________________________________
AliAnalysisTaskResolution::AliAnalysisTaskResolution(const char *name) : AliAnalysisTaskSE(name),
- fV0Reader(NULL),
- fConversionGammas(NULL),
- fConversionCuts(NULL),
- fTreeEvent(NULL),
- fTreeResolution(NULL),
- fPrimVtxZ(0.),
- fNContrVtx(0),
- fNESDtracksEta09(0),
- fNESDtracksEta0914(0),
- fNESDtracksEta14(0),
- fGammaRecCoords(5),
- fGammaMCCoords(5),
- fChi2ndf(0),
- fIsHeavyIon(kFALSE),
- fOutputList(NULL),
- fEventList(NULL),
- fResolutionList(NULL),
- fESDEvent(NULL),
- fMCEvent(NULL)
+ fV0Reader(NULL),
+ fConversionGammas(NULL),
+ fConversionCuts(NULL),
+ fTreeEvent(NULL),
+ fTreeResolution(NULL),
+ fPrimVtxZ(0.),
+ fNContrVtx(0),
+ fNESDtracksEta09(0),
+ fNESDtracksEta0914(0),
+ fNESDtracksEta14(0),
+ fGammaRecCoords(5),
+ fGammaMCCoords(5),
+ fChi2ndf(0),
+ fIsHeavyIon(0),
+ fIsMC(kFALSE),
+ fOutputList(NULL),
+ fEventList(NULL),
+ fResolutionList(NULL),
+ fESDEvent(NULL),
+ fMCEvent(NULL)
{
- // Default constructor
+ // Default constructor
- DefineInput(0, TChain::Class());
- DefineOutput(1, TList::Class());
+ DefineInput(0, TChain::Class());
+ DefineOutput(1, TList::Class());
}
//________________________________________________________________________
AliAnalysisTaskResolution::~AliAnalysisTaskResolution()
{
- // default deconstructor
+ // default deconstructor
}
//________________________________________________________________________
void AliAnalysisTaskResolution::UserCreateOutputObjects()
{
- // Create User Output Objects
+ // Create User Output Objects
- if(fOutputList != NULL){
- delete fOutputList;
- fOutputList = NULL;
- }
- if(fOutputList == NULL){
- fOutputList = new TList();
- fOutputList->SetOwner(kTRUE);
- }
-
- fEventList = new TList();
- fEventList->SetName("EventList");
- fEventList->SetOwner(kTRUE);
- fOutputList->Add(fEventList);
-
- fTreeEvent = new TTree("Event","Event");
- fTreeEvent->Branch("primVtxZ",&fPrimVtxZ,"fPrimVtxZ/F");
- fTreeEvent->Branch("nContrVtx",&fNContrVtx,"fNContrVtx/I");
- fTreeEvent->Branch("nGoodTracksEta09",&fNESDtracksEta09,"fNESDtracksEta09/I");
- fTreeEvent->Branch("nGoodTracksEta0914",&fNESDtracksEta0914,"fNESDtracksEta0914/I");
- fTreeEvent->Branch("nGoodTracksEta14",&fNESDtracksEta14,"fNESDtracksEta14/I");
- fEventList->Add(fTreeEvent);
-
- fResolutionList = new TList();
- fResolutionList->SetName("ResolutionList");
- fResolutionList->SetOwner(kTRUE);
- fOutputList->Add(fResolutionList);
-
- fTreeResolution = new TTree("Resolution","Resolution");
- fTreeResolution->Branch("RecCoords",&fGammaRecCoords);
- fTreeResolution->Branch("MCCoords",&fGammaMCCoords);
- fTreeResolution->Branch("chi2ndf",&fChi2ndf,"fChi2ndf/F");
- fResolutionList->Add(fTreeResolution);
- // V0 Reader Cuts
- TString cutnumber = fConversionCuts->GetCutNumber();
-
- PostData(1, fOutputList);
+ if(fOutputList != NULL){
+ delete fOutputList;
+ fOutputList = NULL;
+ }
+ if(fOutputList == NULL){
+ fOutputList = new TList();
+ fOutputList->SetOwner(kTRUE);
+ }
+
+ fEventList = new TList();
+ fEventList->SetName("EventList");
+ fEventList->SetOwner(kTRUE);
+ fOutputList->Add(fEventList);
+
+ fTreeEvent = new TTree("Event","Event");
+ fTreeEvent->Branch("primVtxZ",&fPrimVtxZ,"fPrimVtxZ/F");
+ fTreeEvent->Branch("nContrVtx",&fNContrVtx,"fNContrVtx/I");
+ fTreeEvent->Branch("nGoodTracksEta09",&fNESDtracksEta09,"fNESDtracksEta09/I");
+ fTreeEvent->Branch("nGoodTracksEta0914",&fNESDtracksEta0914,"fNESDtracksEta0914/I");
+ fTreeEvent->Branch("nGoodTracksEta14",&fNESDtracksEta14,"fNESDtracksEta14/I");
+ fEventList->Add(fTreeEvent);
+
+ if (fIsMC){
+ fResolutionList = new TList();
+ fResolutionList->SetName("ResolutionList");
+ fResolutionList->SetOwner(kTRUE);
+ fOutputList->Add(fResolutionList);
+
+ fTreeResolution = new TTree("Resolution","Resolution");
+ fTreeResolution->Branch("RecCoords",&fGammaRecCoords);
+ fTreeResolution->Branch("MCCoords",&fGammaMCCoords);
+ fTreeResolution->Branch("chi2ndf",&fChi2ndf,"fChi2ndf/F");
+ fResolutionList->Add(fTreeResolution);
+ }
+ PostData(1, fOutputList);
}
//________________________________________________________________________
void AliAnalysisTaskResolution::UserExec(Option_t *){
- fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
-
- Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
- if(eventQuality != 0){// Event Not Accepted
- return;
- }
- fESDEvent = (AliESDEvent*) InputEvent();
- if (fESDEvent==NULL) return;
- if(fIsHeavyIon && !fConversionCuts->IsCentralitySelected(fESDEvent)) return;
- fNESDtracksEta09 = CountTracks09(); // Estimate Event Multiplicity
- fNESDtracksEta0914 = CountTracks0914(); // Estimate Event Multiplicity
- fNESDtracksEta14 = fNESDtracksEta09 + fNESDtracksEta0914;
- if(fESDEvent){
- if(fESDEvent->GetPrimaryVertexTracks()->GetNContributors()>0) {
- fNContrVtx = fESDEvent->GetPrimaryVertexTracks()->GetNContributors();
- } else if(fESDEvent->GetPrimaryVertexTracks()->GetNContributors()<1) {
- if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
- fNContrVtx = fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
- } else if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()<1) {
- fNContrVtx = 0;
- }
- }
- }
- fPrimVtxZ = fESDEvent->GetPrimaryVertex()->GetZ();
-
- if (fTreeEvent){
- fTreeEvent->Fill();
- }
+ fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
- fConversionGammas=fV0Reader->GetReconstructedGammas();
+ Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
+ if(eventQuality != 0){// Event Not Accepted
+ return;
+ }
+ fESDEvent = (AliESDEvent*) InputEvent();
+ if (fESDEvent==NULL) return;
if(MCEvent()){
fMCEvent = MCEvent();
}
- ProcessPhotons();
- PostData(1, fOutputList);
+
+ if(MCEvent()){
+ // Process MC Particle
+ if(fConversionCuts->GetSignalRejection() != 0){
+// if(fESDEvent->IsA()==AliESDEvent::Class()){
+ fConversionCuts->GetNotRejectedParticles( fConversionCuts->GetSignalRejection(),
+ fConversionCuts->GetAcceptedHeader(),
+ fMCEvent);
+// }
+// else if(fInputEvent->IsA()==AliAODEvent::Class()){
+// fConversionCuts->GetNotRejectedParticles( fConversionCuts->GetSignalRejection(),
+// fConversionCuts->GetAcceptedHeader(),
+// fInputEvent);
+// }
+ }
+ }
+
+
+ if(fIsHeavyIon > 0 && !fConversionCuts->IsCentralitySelected(fESDEvent)) return;
+ fNESDtracksEta09 = CountTracks09(); // Estimate Event Multiplicity
+ fNESDtracksEta0914 = CountTracks0914(); // Estimate Event Multiplicity
+ fNESDtracksEta14 = fNESDtracksEta09 + fNESDtracksEta0914;
+ if(fESDEvent){
+ if(fESDEvent->GetPrimaryVertexTracks()->GetNContributors()>0) {
+ fNContrVtx = fESDEvent->GetPrimaryVertexTracks()->GetNContributors();
+ } else {
+ fNContrVtx = 0;
+ }
+// else if(fESDEvent->GetPrimaryVertexTracks()->GetNContributors()<1) {
+// if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
+// fNContrVtx = fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
+// } else if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()<1) {
+// fNContrVtx = 0;
+// }
+// }
+ }
+ fPrimVtxZ = fESDEvent->GetPrimaryVertex()->GetZ();
+
+ if (fIsHeavyIon == 2){
+ if (!(fNESDtracksEta09 > 20 && fNESDtracksEta09 < 80)) return;
+ }
+
+
+ if (fTreeEvent){
+ fTreeEvent->Fill();
+ }
+
+ fConversionGammas=fV0Reader->GetReconstructedGammas();
+ ProcessPhotons();
+ PostData(1, fOutputList);
}
void AliAnalysisTaskResolution::ProcessPhotons(){
// Fill Histograms for QA and MC
- for(Int_t firstGammaIndex=0;firstGammaIndex<fConversionGammas->GetEntriesFast();firstGammaIndex++){
- AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fConversionGammas->At(firstGammaIndex));
- if (gamma ==NULL) continue;
- if(!fConversionCuts->PhotonIsSelected(gamma,fESDEvent)) continue;
- fGammaRecCoords(0) = gamma->GetPhotonPt();
- fGammaRecCoords(1) = gamma->GetPhotonPhi();
- fGammaRecCoords(2) = gamma->GetPhotonEta();
- fGammaRecCoords(3) = gamma->GetConversionRadius();
- fGammaRecCoords(4) = gamma->GetConversionZ();
- fChi2ndf = gamma->GetChi2perNDF();
- if(fMCEvent){
+ for(Int_t firstGammaIndex=0;firstGammaIndex<fConversionGammas->GetEntriesFast();firstGammaIndex++){
+ AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fConversionGammas->At(firstGammaIndex));
+ if (gamma ==NULL) continue;
+ if(!fConversionCuts->PhotonIsSelected(gamma,fESDEvent)) continue;
+ fGammaRecCoords(0) = gamma->GetPhotonPt();
+ fGammaRecCoords(1) = gamma->GetPhotonPhi();
+ fGammaRecCoords(2) = gamma->GetPhotonEta();
+ fGammaRecCoords(3) = gamma->GetConversionRadius();
+ fGammaRecCoords(4) = gamma->GetConversionZ();
+ fChi2ndf = gamma->GetChi2perNDF();
+ if(MCEvent()){
// cout << "generating MC stack"<< endl;
AliStack *fMCStack = fMCEvent->Stack();
if (!fMCStack) continue;
TParticle *posDaughter = gamma->GetPositiveMCDaughter(fMCStack);
TParticle *negDaughter = gamma->GetNegativeMCDaughter(fMCStack);
// cout << "generate Daughters: "<<posDaughter << "\t" << negDaughter << endl;
+ if(fMCStack && fConversionCuts->GetSignalRejection() != 0){
+ Int_t isPosFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(gamma->GetMCLabelPositive(), fMCStack, fESDEvent);
+ Int_t isNegFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(gamma->GetMCLabelNegative(), fMCStack, fESDEvent);
+ if( (isNegFromMBHeader < 1) || (isPosFromMBHeader < 1)) continue;
+ }
if(posDaughter == NULL || negDaughter == NULL){
continue;
continue;
else if (!(negDaughter->GetUniqueID() != 5 || posDaughter->GetUniqueID() !=5)){
if(pdgCode == 22){
- fGammaMCCoords(0) = truePhotonCanditate->Pt();
- fGammaMCCoords(1) = gamma->GetNegativeMCDaughter(fMCStack)->Phi();
- fGammaMCCoords(2) = gamma->GetNegativeMCDaughter(fMCStack)->Eta();
- fGammaMCCoords(3) = gamma->GetNegativeMCDaughter(fMCStack)->R();
- fGammaMCCoords(4) = gamma->GetNegativeMCDaughter(fMCStack)->Vz();
-
- if (fTreeResolution){
- fTreeResolution->Fill();
+ fGammaMCCoords(0) = truePhotonCanditate->Pt();
+ fGammaMCCoords(1) = gamma->GetNegativeMCDaughter(fMCStack)->Phi();
+ fGammaMCCoords(2) = gamma->GetNegativeMCDaughter(fMCStack)->Eta();
+ fGammaMCCoords(3) = gamma->GetNegativeMCDaughter(fMCStack)->R();
+ fGammaMCCoords(4) = gamma->GetNegativeMCDaughter(fMCStack)->Vz();
+
+ if (fTreeResolution){
+ fTreeResolution->Fill();
}
}
} else continue; //garbage
} else continue; //garbage
}
- }
+ }
}
}
//________________________________________________________________________
Int_t AliAnalysisTaskResolution::CountTracks09(){
- Int_t fNumberOfESDTracks = 0;
- if(fInputEvent->IsA()==AliESDEvent::Class()){
- // Using standard function for setting Cuts
- Bool_t selectPrimaries=kTRUE;
- AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
- EsdTrackCuts->SetMaxDCAToVertexZ(2);
- EsdTrackCuts->SetEtaRange(-0.9, 0.9);
- EsdTrackCuts->SetPtRange(0.15);
-
- for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
- AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
- if(!curTrack) continue;
- // if(fMCEvent && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
- // if(!((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack)) continue;
- // }
- if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
- }
- delete EsdTrackCuts;
- EsdTrackCuts=0x0;
- }
- else if(fInputEvent->IsA()==AliAODEvent::Class()){
- for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
- AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
- if(!curTrack->IsPrimaryCandidate()) continue;
- if(abs(curTrack->Eta())>0.9) continue;
- if(curTrack->Pt()<0.15) continue;
- if(abs(curTrack->ZAtDCA())>2) continue;
- fNumberOfESDTracks++;
- }
- }
+ Int_t fNumberOfESDTracks = 0;
+ if(fInputEvent->IsA()==AliESDEvent::Class()){
+ // Using standard function for setting Cuts
+
+ AliStack *fMCStack = NULL;
+ if (MCEvent()){
+ fMCStack= fMCEvent->Stack();
+ if (!fMCStack) return 0;
+ }
+
+ Bool_t selectPrimaries=kTRUE;
+ AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
+ EsdTrackCuts->SetMaxDCAToVertexZ(2);
+ EsdTrackCuts->SetEtaRange(-0.9, 0.9);
+ EsdTrackCuts->SetPtRange(0.15);
+
+ for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
+ if(!curTrack) continue;
+ if(EsdTrackCuts->AcceptTrack(curTrack) ){
+ if (fMCEvent){
+ if(fMCStack && fConversionCuts->GetSignalRejection() != 0){
+ Int_t isFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack, fESDEvent);
+ if( (isFromMBHeader < 1) ) continue;
+ }
+ }
+ fNumberOfESDTracks++;
+ }
+ }
+ delete EsdTrackCuts;
+ EsdTrackCuts=0x0;
+ } else if(fInputEvent->IsA()==AliAODEvent::Class()){
+ for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
+ if(!curTrack->IsPrimaryCandidate()) continue;
+ if(abs(curTrack->Eta())>0.9) continue;
+ if(curTrack->Pt()<0.15) continue;
+ if(abs(curTrack->ZAtDCA())>2) continue;
+ fNumberOfESDTracks++;
+ }
+ }
- return fNumberOfESDTracks;
+ return fNumberOfESDTracks;
}
+//________________________________________________________________________
Int_t AliAnalysisTaskResolution::CountTracks0914(){
+ Int_t fNumberOfESDTracks = 0;
+ if(fInputEvent->IsA()==AliESDEvent::Class()){
+ // Using standard function for setting Cuts
+
+ AliStack *fMCStack = NULL;
+ if (MCEvent()){
+ fMCStack= fMCEvent->Stack();
+ if (!fMCStack) return 0;
+ }
- // Using standard function for setting Cuts ; We use TPCOnlyTracks for outer eta region
- //Bool_t selectPrimaries=kTRUE;
- // EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
- Int_t fNumberOfESDTracks = 0;
- if(fInputEvent->IsA()==AliESDEvent::Class()){
- // Using standard function for setting Cuts
- AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
- EsdTrackCuts->SetMaxDCAToVertexZ(5);
- EsdTrackCuts->SetEtaRange(0.9, 1.4);
- EsdTrackCuts->SetPtRange(0.15);
-
- for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
- AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
- if(!curTrack) continue;
- // if(fMCEvent && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
- // if(!((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack)) continue;
- // }
- if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
- }
- EsdTrackCuts->SetEtaRange(-1.4, -0.9);
- for(Int_t iTracks = 0; iTracks < fESDEvent->GetNumberOfTracks(); iTracks++){
- AliESDtrack* curTrack = fESDEvent->GetTrack(iTracks);
- if(!curTrack) continue;
- if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
- }
- delete EsdTrackCuts;
- EsdTrackCuts=0x0;
- }
- else if(fInputEvent->IsA()==AliAODEvent::Class()){
- for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
- AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
-// if(!curTrack->IsPrimaryCandidate()) continue;
- if(abs(curTrack->Eta())<0.9 || abs(curTrack->Eta())>1.4 ) continue;
- if(curTrack->Pt()<0.15) continue;
- if(abs(curTrack->ZAtDCA())>5) continue;
- fNumberOfESDTracks++;
- }
- }
-
- return fNumberOfESDTracks;
+ AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
+ EsdTrackCuts->SetMaxDCAToVertexZ(5);
+ EsdTrackCuts->SetEtaRange(0.9, 1.4);
+ EsdTrackCuts->SetPtRange(0.15);
+
+ for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
+ if(!curTrack) continue;
+ if(EsdTrackCuts->AcceptTrack(curTrack) ){
+ if (fMCEvent){
+ if(fMCStack && fConversionCuts->GetSignalRejection() != 0){
+ Int_t isFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack, fESDEvent);
+ if( (isFromMBHeader < 1) ) continue;
+ }
+ }
+ fNumberOfESDTracks++;
+ }
+ }
+ EsdTrackCuts->SetEtaRange(-1.4, -0.9);
+ for(Int_t iTracks = 0; iTracks < fESDEvent->GetNumberOfTracks(); iTracks++){
+ AliESDtrack* curTrack = fESDEvent->GetTrack(iTracks);
+ if(!curTrack) continue;
+ if(EsdTrackCuts->AcceptTrack(curTrack) ){
+ if (fMCEvent){
+ if(fMCStack && fConversionCuts->GetSignalRejection() != 0){
+ Int_t isFromMBHeader
+ = fConversionCuts->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack, fESDEvent);
+ if( (isFromMBHeader < 1) ) continue;
+ }
+ }
+ fNumberOfESDTracks++;
+ }
+ }
+ delete EsdTrackCuts;
+ EsdTrackCuts=0x0;
+ } else if(fInputEvent->IsA()==AliAODEvent::Class()){
+ for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
+ if(abs(curTrack->Eta())<0.9 || abs(curTrack->Eta())>1.4 ) continue;
+ if(curTrack->Pt()<0.15) continue;
+ if(abs(curTrack->ZAtDCA())>5) continue;
+ fNumberOfESDTracks++;
+ }
+ }
+
+ return fNumberOfESDTracks;
}
//________________________________________________________________________
void AliAnalysisTaskResolution::Terminate(Option_t *)
{
-// if (fStreamMaterial){
-// fStreamMaterial->GetFile()->Write();
-// }
-// if (fStreamResolution){
-// fStreamResolution->GetFile()->Write();
-// }
+
}
class AliAnalysisTaskResolution : public AliAnalysisTaskSE{
- public:
- AliAnalysisTaskResolution();
- AliAnalysisTaskResolution(const char *name);
- virtual ~AliAnalysisTaskResolution();
+ public:
+ AliAnalysisTaskResolution();
+ AliAnalysisTaskResolution(const char *name);
+ virtual ~AliAnalysisTaskResolution();
- virtual void UserCreateOutputObjects();
- virtual void UserExec(Option_t *option);
- virtual void Terminate(Option_t *);
+ virtual void UserCreateOutputObjects();
+ virtual void UserExec(Option_t *option);
+ virtual void Terminate(Option_t *);
- void SetV0Reader(AliV0ReaderV1 *v0Reader){fV0Reader=v0Reader;}
- void SetConversionCuts(AliConversionCuts* conversionCuts,Bool_t IsHeavyIon ){
- fConversionCuts=conversionCuts;
- fIsHeavyIon = IsHeavyIon;
- }
+ void SetV0Reader(AliV0ReaderV1 *v0Reader){fV0Reader=v0Reader;}
+ void SetConversionCuts(AliConversionCuts* conversionCuts,Int_t IsHeavyIon ){
+ fConversionCuts=conversionCuts;
+ fIsHeavyIon = IsHeavyIon;
+ }
+ void SetIsMC(Bool_t isMC){fIsMC=isMC;}
+
+ private:
- private:
+ void ProcessPhotons();
+ Int_t CountTracks0914();
+ Int_t CountTracks09();
- void ProcessPhotons();
- Int_t CountTracks0914();
- Int_t CountTracks09();
+ AliV0ReaderV1 *fV0Reader;
+ TClonesArray *fConversionGammas; //Reconstructed Photons;
+ AliConversionCuts *fConversionCuts; // Cuts used by the V0Reader
+ TTree *fTreeEvent;
+ TTree *fTreeResolution;
+ Float_t fPrimVtxZ;
+ Int_t fNContrVtx;
+ Int_t fNESDtracksEta09;
+ Int_t fNESDtracksEta0914;
+ Int_t fNESDtracksEta14;
+ TVectorF fGammaRecCoords;
+ TVectorF fGammaMCCoords;
+ Float_t fChi2ndf;
+ Int_t fIsHeavyIon;
+ Bool_t fIsMC;
+ TList *fOutputList;
+ TList *fEventList;
+ TList *fResolutionList;
+ AliESDEvent *fESDEvent;
+ AliMCEvent *fMCEvent;
- AliV0ReaderV1 *fV0Reader;
- TClonesArray *fConversionGammas; //Reconstructed Photons;
- AliConversionCuts *fConversionCuts; // Cuts used by the V0Reader
- TTree *fTreeEvent;
- TTree *fTreeResolution;
- Float_t fPrimVtxZ;
- Int_t fNContrVtx;
- Int_t fNESDtracksEta09;
- Int_t fNESDtracksEta0914;
- Int_t fNESDtracksEta14;
- TVectorF fGammaRecCoords;
- TVectorF fGammaMCCoords;
- Float_t fChi2ndf;
- Bool_t fIsHeavyIon;
- TList *fOutputList;
- TList *fEventList;
- TList *fResolutionList;
- AliESDEvent *fESDEvent;
- AliMCEvent *fMCEvent;
+ AliAnalysisTaskResolution(const AliAnalysisTaskResolution&); // not implemented
+ AliAnalysisTaskResolution& operator=(const AliAnalysisTaskResolution&); // not implemented
- AliAnalysisTaskResolution(const AliAnalysisTaskResolution&); // not implemented
- AliAnalysisTaskResolution& operator=(const AliAnalysisTaskResolution&); // not implemented
-
- ClassDef(AliAnalysisTaskResolution, 0);
+ ClassDef(AliAnalysisTaskResolution, 1);
};
#endif
#include "AliV0ReaderV1.h"
#include "AliAODMCParticle.h"
#include "AliAODMCHeader.h"
+#include "AliTRDTriggerAnalysis.h"
class iostream;
"HeavyIon",//0
"CentralityMin",//1
"CentralityMax",//2
- "SelectV0AND",//3
- "MultiplicityMethod",//4
+ "SelectSpecialTrigger",//3
+ "SelectSpecialSubTriggerClass",//4
"RemovePileUp",//5
"RejectExtraSignals",//6
"V0FinderType",//7
fUseTOFpid(kFALSE),
fMultiplicityMethod(0),
fSpecialTrigger(0),
+ fSpecialSubTrigger(0),
fRemovePileUp(kFALSE),
fOpeningAngle(0.005),
fPsiPairCut(10000),
fAddedSignalPDGCode(0),
fPreSelCut(kFALSE),
fTriggerSelectedManually(kFALSE),
- fSpecialTriggerName("")
+ fSpecialTriggerName(""),
+ fSpecialSubTriggerName(""),
+ fNSpecialSubTriggerOptions(0)
{
InitPIDResponse();
fUseTOFpid(ref.fUseTOFpid),
fMultiplicityMethod(ref.fMultiplicityMethod),
fSpecialTrigger(ref.fSpecialTrigger),
+ fSpecialSubTrigger(ref.fSpecialSubTrigger),
fRemovePileUp(ref.fRemovePileUp),
fOpeningAngle(ref.fOpeningAngle),
fPsiPairCut(ref.fPsiPairCut),
fAddedSignalPDGCode(ref.fAddedSignalPDGCode),
fPreSelCut(ref.fPreSelCut),
fTriggerSelectedManually(ref.fTriggerSelectedManually),
- fSpecialTriggerName(ref.fSpecialTriggerName)
+ fSpecialTriggerName(ref.fSpecialTriggerName),
+ fSpecialSubTriggerName(ref.fSpecialSubTriggerName),
+ fNSpecialSubTriggerOptions(ref.fNSpecialSubTriggerOptions)
{
// Copy Constructor
for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=ref.fCuts[jj];}
cout << "I have to find: " << fNameHistoReweightingPi0.Data() << endl;
TH1D *hReweightMCHistPi0temp = (TH1D*)f->Get(fNameHistoReweightingPi0.Data());
hReweightMCHistPi0 = new TH1D(*hReweightMCHistPi0temp);
- hReweightMCHistPi0->SetDirectory(0);
if (hReweightMCHistPi0) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingPi0.Data(),fPathTrFReweighting.Data() ));
else AliWarning(Form("%s not found in %s", fNameHistoReweightingPi0.Data() ,fPathTrFReweighting.Data()));
+ hReweightMCHistPi0->SetDirectory(0);
}
if (fNameFitDataPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
cout << "I have to find: " << fNameFitDataPi0.Data() << endl;
cout << "I have to find: " << fNameHistoReweightingEta.Data() << endl;
TH1D *hReweightMCHistEtatemp = (TH1D*)f->Get(fNameHistoReweightingEta.Data());
hReweightMCHistEta = new TH1D(*hReweightMCHistEtatemp);
- hReweightMCHistEta->SetDirectory(0);
if (hReweightMCHistEta) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
else AliWarning(Form("%s not found in %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
+ hReweightMCHistEta->SetDirectory(0);
}
if (fNameFitDataEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
cout << "I have to find: " << fNameHistoReweightingK0s.Data() << endl;
TH1D *hReweightMCHistK0stemp = (TH1D*)f->Get(fNameHistoReweightingK0s.Data());
hReweightMCHistK0s = new TH1D(*hReweightMCHistK0stemp);
- hReweightMCHistK0s->SetDirectory(0);
if (hReweightMCHistK0s) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
else AliWarning(Form("%s not found in %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
+ hReweightMCHistK0s->SetDirectory(0);
}
if (fNameFitDataK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
return kTRUE;
} else return kFALSE;
- case kselectV0AND:
+ case kSelectSpecialTriggerAlias:
if( SetSelectSpecialTrigger(value)) {
- fCuts[kselectV0AND] = value;
+ fCuts[kSelectSpecialTriggerAlias] = value;
UpdateCutString();
return kTRUE;
} else return kFALSE;
- case kmultiplicityMethod:
- if( SetMultiplicityMethod(value)) {
- fCuts[kmultiplicityMethod] = value;
+ case kSelectSubTriggerClass:
+ if( SetSelectSubTriggerClass(value)) {
+ fCuts[kSelectSubTriggerClass] = value;
UpdateCutString();
return kTRUE;
} else return kFALSE;
printf("\t only events where SDD was present will be analysed \n");
} else if (fSpecialTrigger == 3){
printf("\t only events where SDD was present will be analysed and triggered by VOAND\n");
- } else if (fSpecialTrigger > 3){
- printf("\t only events triggered by %s \n", fSpecialTriggerName.Data());
+ } else if (fSpecialTrigger > 3){
+ printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
}
} else if (fIsHeavyIon == 1){
printf("Running in PbPb mode \n");
if (fSpecialTrigger == 0){
printf("\t only events triggered by kMB, kCentral, kSemiCentral will be analysed \n");
} else if (fSpecialTrigger > 4){
- printf("\t only events triggered by %s \n", fSpecialTriggerName.Data());
+ printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
}
} else if (fIsHeavyIon == 2){
printf("Running in pPb mode \n");
if (fSpecialTrigger == 0){
printf("\t only events triggered by kINT7 will be analysed \n");
} else if (fSpecialTrigger > 4){
- printf("\t only events triggered by %s \n", fSpecialTriggerName.Data());
+ printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
}
}
+ printf("MC event cuts: \n");
+ if (fRejectExtraSignals == 0) printf("\t no rejection was applied \n");
+ else if (fRejectExtraSignals == 1) printf("\t only MB header will be inspected \n");
+ else if (fRejectExtraSignals > 1) printf("\t special header have been selected \n");
+
printf("Electron cuts: \n");
if (fEtaCutMin > -0.1) printf("\t %3.2f < eta_{e} < %3.2f\n", fEtaCutMin, fEtaCut );
else printf("\t eta_{e} < %3.2f\n", fEtaCut );
return kTRUE;
}
///________________________________________________________________________
-Int_t AliConversionCuts::SetSelectSpecialTrigger(Int_t selectSpecialTrigger)
+Bool_t AliConversionCuts::SetSelectSpecialTrigger(Int_t selectSpecialTrigger)
{// Set Cut
switch(selectSpecialTrigger){
break;
// allows to run MB & 6 other different trigger classes in parallel with the same photon cut
case 4:
- fSpecialTrigger=4; // different trigger class as MB
+ fSpecialTrigger=4; // trigger alias kTRD
+ fOfflineTriggerMask=AliVEvent::kTRD;
fTriggerSelectedManually = kTRUE;
+ fSpecialTriggerName="AliVEvent::kTRD";
break;
case 5:
- fSpecialTrigger=4; // different trigger class as MB
+ fSpecialTrigger=5; // trigger alias kEMC
+ fOfflineTriggerMask=AliVEvent::kEMC7 | AliVEvent::kEMC8 | AliVEvent::kEMC1 ;
fTriggerSelectedManually = kTRUE;
+ fSpecialTriggerName="AliVEvent::kEMC7/kEMC8/kEMC1";
break;
case 6:
- fSpecialTrigger=4; // different trigger class as MB
+ fSpecialTrigger=6; // trigger alias kPHI
+ fOfflineTriggerMask=AliVEvent::kPHI7 | AliVEvent::kPHI1 | AliVEvent::kPHI8 | AliVEvent::kPHOSPb;
fTriggerSelectedManually = kTRUE;
+ fSpecialTriggerName="AliVEvent::kPHI7/kPHI1/kPHI8/kPHOSPb";
break;
case 7:
- fSpecialTrigger=4; // different trigger class as MB
+ fSpecialTrigger=7; // trigger alias kHighMult
+ fOfflineTriggerMask=AliVEvent::kHighMult;
fTriggerSelectedManually = kTRUE;
+ fSpecialTriggerName="AliVEvent::kHighMult";
break;
case 8:
- fSpecialTrigger=4; // different trigger class as MB
+ fSpecialTrigger=8; // trigger alias kEMCEGA
+ fOfflineTriggerMask=AliVEvent::kEMCEGA;
fTriggerSelectedManually = kTRUE;
+ fSpecialTriggerName="AliVEvent::kEMCEGA";
break;
case 9:
- fSpecialTrigger=4; // different trigger class as MB
+ fSpecialTrigger=9; // trigger alias kEMCEJE
+ fOfflineTriggerMask=AliVEvent::kEMCEJE;
fTriggerSelectedManually = kTRUE;
+ fSpecialTriggerName="AliVEvent::kEMCEJE";
break;
default:
AliError("Warning: Special Trigger Not known");
- return kFALSE;
+ return 0;
}
- return kTRUE;
+ return 1;
+}
+
+///________________________________________________________________________
+Bool_t AliConversionCuts::SetSelectSubTriggerClass(Int_t selectSpecialSubTriggerClass)
+{// Set Cut
+
+ if (fSpecialTrigger == 1){ //V0AND with different detectors
+ switch(selectSpecialSubTriggerClass){
+ case 0: //with VZERO
+ fSpecialTrigger=1;
+ fSpecialSubTrigger=0;
+// AliInfo("Info: Nothing to be done");
+ break;
+ case 1: //with TZERO
+ fSpecialTrigger=0;
+ fSpecialSubTrigger=0;
+ fOfflineTriggerMask=AliVEvent::kINT8;
+ fTriggerSelectedManually = kTRUE;
+ fSpecialTriggerName="AliVEvent::kINT8";
+ break;
+ default:
+ AliError("Warning: Special Subtrigger Class Not known");
+ return 0;
+ }
+
+ } else if (fSpecialTrigger == 4){ // Subdivision of TRD trigger classes
+ switch(selectSpecialSubTriggerClass){
+ case 0: // all together
+ fSpecialSubTrigger=0;
+ fSpecialSubTriggerName="";
+// AliInfo("Info: Nothing to be done");
+ break;
+ case 1: // 7WUHSH - V0AND with single electron in TRD & EMCAL
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="7WUHEE";
+ break;
+ case 2: // 8WUHSH - T0AND with single electron in TRD & EMCAL
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="8WUHEE";
+ break;
+ case 3: // 7WUHSE - V0AND with single high pt electron in TRD
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="7WUHSE";
+ break;
+ case 4: // 8WUHSE - T0AND with single high pt electron in TRD
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="8WUHSE";
+ break;
+ case 5: // 7WUHJE - V0AND with jet in TRD
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="7WUHJT";
+ break;
+ case 6: // 8WUHJE - T0AND with jet in TRD
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="8WUHJT";
+ break;
+ case 7: // 7WUHQU - V0AND with dielectron pair in TRD
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="7WUHQU";
+ break;
+ case 8: // 8WUHQU - T0AND with dielectron pair in TRD
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="8WUHQU";
+ break;
+ default:
+ AliError("Warning: Special Subtrigger Class Not known");
+ return 0;
+ }
+ } else if (fSpecialTrigger == 5){ // Subdivision of kEMC trigger classes
+ switch(selectSpecialSubTriggerClass){
+ case 0: // all together
+ fSpecialSubTrigger=0;
+ fSpecialSubTriggerName="";
+// AliInfo("Info: Nothing to be done");
+ break;
+ case 1: // CEMC1 - V0OR and EMCAL fired
+ fOfflineTriggerMask=AliVEvent::kEMC1;
+ fSpecialTriggerName="AliVEvent::kEMC1";
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="CEMC1";
+ break;
+ case 2: // CEMC7 - V0AND and EMCAL fired
+ fSpecialSubTrigger=1;
+ fOfflineTriggerMask=AliVEvent::kEMC7;
+ fSpecialTriggerName="AliVEvent::kEMC7";
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="CEMC7";
+ break;
+ case 3: // CEMC8 - T0OR and EMCAL fired
+ fOfflineTriggerMask=AliVEvent::kEMC8;
+ fSpecialTriggerName="AliVEvent::kEMC8";
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="CEMC8";
+ break;
+ default:
+ AliError("Warning: Special Subtrigger Class Not known");
+ return 0;
+ }
+ } else if (fSpecialTrigger == 6){ // Subdivision of kPHI trigger classes
+ switch(selectSpecialSubTriggerClass){
+ case 0: // all together
+ fSpecialSubTrigger=0;
+ fSpecialSubTriggerName="";
+// AliInfo("Info: Nothing to be done");
+ break;
+ case 1: // CEMC1 - V0OR and EMCAL fired
+ fOfflineTriggerMask=AliVEvent::kPHI1;
+ fSpecialTriggerName="AliVEvent::kPHI1";
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="CPHI1";
+ break;
+ case 2: // CEMC7 - V0AND and EMCAL fired
+ fSpecialSubTrigger=1;
+ fOfflineTriggerMask=AliVEvent::kPHI7;
+ fSpecialTriggerName="AliVEvent::kPHI7";
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="CPHI7";
+ break;
+ case 3: // CEMC8 - T0OR and EMCAL fired
+ fOfflineTriggerMask=AliVEvent::kPHI8;
+ fSpecialTriggerName="AliVEvent::kPHI8";
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="CPHI8";
+ break;
+ default:
+ AliError("Warning: Special Subtrigger Class Not known");
+ return 0;
+ }
+ } else if (fSpecialTrigger == 7){ // Subdivision of kHighMult trigger classes
+ switch(selectSpecialSubTriggerClass){
+ case 0: // all together
+ fSpecialSubTrigger=0;
+ fSpecialSubTriggerName="";
+// AliInfo("Info: Nothing to be done");
+ break;
+ case 1: // CSHM1 - V0OR and high mult fired
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="CSHM1";
+ break;
+ case 2: // CSHM7 - V0AND and high mult fired
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="CSHM7";
+ break;
+ case 3: // CSHM8 - T0OR and high mult fired
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="CSHM8";
+ break;
+ default:
+ AliError("Warning: Special Subtrigger Class Not known");
+ return 0;
+ }
+ } else if (fSpecialTrigger == 8){ // Subdivision of kEMCEGA trigger classes
+ switch(selectSpecialSubTriggerClass){
+ case 0: // all together
+ fSpecialSubTrigger=0;
+ fSpecialSubTriggerName="";
+// AliInfo("Info: Nothing to be done");
+ break;
+ case 1: // 7EGA - CINT7 EGA
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="7EGA";
+ break;
+ case 2: // 8EGA - CINT8 EGA
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="8EGA";
+ break;
+ case 3: // 7EG1 - CINT7 EG1
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="7EG1";
+ break;
+ case 4: // 8EG1 - CINT8 EG1
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="8EG1";
+ break;
+ case 5: // 7EG2 - CINT7 EG2
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="7EG2";
+ break;
+ case 6: // 8EG2 - CINT8 EG2
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="8EG2";
+ break;
+ default:
+ AliError("Warning: Special Subtrigger Class Not known");
+ return 0;
+ }
+ } else if (fSpecialTrigger == 9){ // Subdivision of kEMCEGA trigger classes
+ switch(selectSpecialSubTriggerClass){
+ case 0: // all together
+ fSpecialSubTrigger=0;
+ fSpecialSubTriggerName="";
+// AliInfo("Info: Nothing to be done");
+ break;
+ case 1: // 7EJE - CINT7 EJE
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="7EJE";
+ break;
+ case 2: // 8EJE - CINT8 EJE
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="8EJE";
+ break;
+ case 3: // 7EJ1 - CINT7 EJ1
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="7EJ1";
+ break;
+ case 4: // 8EJ1 - CINT8 EJ1
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="8EJ1";
+ break;
+ case 5: // 7EJ2 - CINT7 EJ2
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="7EJ2";
+ break;
+ case 6: // 8EJ2 - CINT8 EJ2
+ fSpecialSubTrigger=1;
+ fNSpecialSubTriggerOptions=1;
+ fSpecialSubTriggerName="8EJ2";
+ break;
+ default:
+ AliError("Warning: Special Subtrigger Class Not known");
+ return 0;
+ }
+ }
+ return 1;
}
+
///________________________________________________________________________
Bool_t AliConversionCuts::SetMultiplicityMethod(Int_t multiplicityMethod)
{
{ 13, 11}, // 85
{ 0, 0} // 90
};
-
- Int_t column = -1;
+ Int_t column = 0;
if(event->IsA()==AliESDEvent::Class()) column = 0;
if(event->IsA()==AliAODEvent::Class()) column = 1;
Bool_t AliConversionCuts::IsTriggerSelected(AliVEvent *fInputEvent)
{
- AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+ AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+// AliTRDTriggerAnalysis *trdSelection= new AliTRDTriggerAnalysis();
+// trdSelection->CalcTriggers(fInputEvent);
+
+ UInt_t isSelected = AliVEvent::kAny;
+ TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1"))->GetPeriodName();
+ // cout << periodName.Data() << endl;
+
+ if (fInputHandler==NULL) return kFALSE;
+ if( fInputHandler->GetEventSelection() || fInputEvent->IsA()==AliAODEvent::Class()) {
+
+ TString firedTrigClass = fInputEvent->GetFiredTriggerClasses();
+ if (!fTriggerSelectedManually){
+ if (fPreSelCut) fOfflineTriggerMask = AliVEvent::kAny;
+ else {
+ if (fIsHeavyIon == 1) fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
+ else if (fIsHeavyIon == 2) fOfflineTriggerMask = AliVEvent::kINT7;
+ else if (periodName.CompareTo("LHC11c") == 0 || periodName.CompareTo("LHC11d") == 0 || periodName.CompareTo("LHC11e") == 0 || periodName.CompareTo("LHC11f") == 0 || periodName.CompareTo("LHC11g") == 0 || periodName.CompareTo("LHC12a") == 0 || periodName.CompareTo("LHC12b") == 0 || periodName.CompareTo("LHC12c") == 0 || periodName.CompareTo("LHC12d") == 0 || periodName.CompareTo("LHC12f") == 0 || periodName.CompareTo("LHC12g") == 0 || periodName.CompareTo("LHC12h") == 0 || periodName.CompareTo("LHC12i") == 0 ||periodName.CompareTo("LHC13g") == 0 ) {
+ fOfflineTriggerMask = AliVEvent::kINT7;
+ // cout << "will take kINT7 as trigger mask" << endl;
+ }
+ else fOfflineTriggerMask = AliVEvent::kMB;
+ }
+ }
+ // Get the actual offline trigger mask for the event and AND it with the
+ // requested mask. If no mask requested select by default the event.
+ // if (fPreSelCut) cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask for Precut: " << fOfflineTriggerMask << endl;
+ // else cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask: " << fOfflineTriggerMask << endl;
+
+ if (fOfflineTriggerMask){
+ isSelected = fOfflineTriggerMask & fInputHandler->IsEventSelected();
+ if (isSelected && !fPreSelCut){
+// if (fSpecialTriggerName.Contains("kTRD")){ // make special selection for TRD trigger
+// Bool_t bTRDHasFiredConfirmed= 0; // bool whether the TRD has triggered and has been read out due to that trigger & should have triggered
+// Bool_t bTRDClassContainedInTriggerList= 1; //check whether the trigger list contains the requested trigger
+// if (fSpecialSubTrigger>0){
+// if (fSpecialSubTriggerName.Contains("HSE")){
+// bTRDHasFiredConfirmed = trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHSE);
+// } else if (fSpecialSubTriggerName.Contains("HJT")){
+// bTRDHasFiredConfirmed = trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHJT);
+// } else if (fSpecialSubTriggerName.Contains("HEE")){
+// bTRDHasFiredConfirmed = trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHEE);
+// } else if (fSpecialSubTriggerName.Contains("HQU")){
+// bTRDHasFiredConfirmed = trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHQU);
+// }
+// if (!firedTrigClass.Contains(fSpecialSubTriggerName.Data())) bTRDClassContainedInTriggerList = 0;
+// } else {
+// bTRDHasFiredConfirmed = trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHQU) || trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHSE) || trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHJT) || trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHEE);
+// }
+// if (!bTRDHasFiredConfirmed || !bTRDClassContainedInTriggerList) isSelected = 0;
+// } else { // more general condition for all other sub-triggers
+// if (fSpecialTriggerName.Contains("kEMCE"))cout << fSpecialTriggerName.Data() << "\t" <<fSpecialSubTriggerName.Data()<< endl;
+ if (fSpecialSubTrigger>0){
+ if (!firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 0;
+ }
+// if (fSpecialTriggerName.Contains("kEMCE"))cout <<firedTrigClass << endl;
+// }
+ }
+ }
+ }
+ fIsSDDFired = !(fInputHandler->IsEventSelected() & AliVEvent::kFastOnly);
+
+ // Fill Histogram
+ if(hTriggerClass){
+ if (fIsSDDFired) hTriggerClass->Fill(33);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClass->Fill(0);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClass->Fill(1);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClass->Fill(2);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClass->Fill(3);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClass->Fill(4);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClass->Fill(5);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClass->Fill(6);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClass->Fill(6);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClass->Fill(7);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClass->Fill(7);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClass->Fill(8);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClass->Fill(8);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClass->Fill(9);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClass->Fill(9);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClass->Fill(10);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClass->Fill(10);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClass->Fill(11);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClass->Fill(12);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClass->Fill(13);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClass->Fill(13);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClass->Fill(13);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClass->Fill(14);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClass->Fill(15);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClass->Fill(16);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClass->Fill(17);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClass->Fill(18);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClass->Fill(19);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClass->Fill(20);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClass->Fill(20);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClass->Fill(21);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClass->Fill(22);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClass->Fill(23);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClass->Fill(24);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClass->Fill(25);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClass->Fill(26);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClass->Fill(27);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClass->Fill(28);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClass->Fill(29);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClass->Fill(30);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClass->Fill(31);
+ if (!fInputHandler->IsEventSelected()) hTriggerClass->Fill(34);
+ }
- UInt_t isSelected = AliVEvent::kAny;
- TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1"))->GetPeriodName();
-// cout << periodName.Data() << endl;
-
- if (fInputHandler==NULL) return kFALSE;
- if( fInputHandler->GetEventSelection() || fInputEvent->IsA()==AliAODEvent::Class()) {
- if (!fTriggerSelectedManually){
- if (fPreSelCut) fOfflineTriggerMask = AliVEvent::kAny;
- else {
- if (fIsHeavyIon == 1) fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
- else if (fIsHeavyIon == 2) fOfflineTriggerMask = AliVEvent::kINT7;
- else if (periodName.CompareTo("LHC11c") == 0 || periodName.CompareTo("LHC11d") == 0 || periodName.CompareTo("LHC11e") == 0 || periodName.CompareTo("LHC11f") == 0 || periodName.CompareTo("LHC11g") == 0 || periodName.CompareTo("LHC12a") == 0 || periodName.CompareTo("LHC12b") == 0 || periodName.CompareTo("LHC12c") == 0 || periodName.CompareTo("LHC12d") == 0 || periodName.CompareTo("LHC12f") == 0 || periodName.CompareTo("LHC12g") == 0 || periodName.CompareTo("LHC12h") == 0 || periodName.CompareTo("LHC12i") == 0 ||periodName.CompareTo("LHC13g") == 0 ) {
- fOfflineTriggerMask = AliVEvent::kINT7;
-// cout << "will take kINT7 as trigger mask" << endl;
- }
- else fOfflineTriggerMask = AliVEvent::kMB;
- }
- }
- // Get the actual offline trigger mask for the event and AND it with the
- // requested mask. If no mask requested select by default the event.
-// if (fPreSelCut) cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask for Precut: " << fOfflineTriggerMask << endl;
-// else cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask: " << fOfflineTriggerMask << endl;
-
- if (fOfflineTriggerMask)
- isSelected = fOfflineTriggerMask & fInputHandler->IsEventSelected();
- }
- fIsSDDFired = !(fInputHandler->IsEventSelected() & AliVEvent::kFastOnly);
-
- // Fill Histogram
- if(hTriggerClass){
- if (fIsSDDFired) hTriggerClass->Fill(33);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClass->Fill(0);
- if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClass->Fill(1);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClass->Fill(2);
- if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClass->Fill(3);
- if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClass->Fill(4);
- if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClass->Fill(5);
- if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClass->Fill(6);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClass->Fill(6);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClass->Fill(7);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClass->Fill(7);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClass->Fill(8);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClass->Fill(8);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClass->Fill(9);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClass->Fill(9);
- if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClass->Fill(10);
- if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClass->Fill(10);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClass->Fill(11);
- if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClass->Fill(12);
- if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClass->Fill(13);
- if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClass->Fill(13);
- if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClass->Fill(13);
- if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClass->Fill(14);
- if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClass->Fill(15);
- if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClass->Fill(16);
- if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClass->Fill(17);
- if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClass->Fill(18);
- if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClass->Fill(19);
- if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClass->Fill(20);
- if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClass->Fill(20);
- if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClass->Fill(21);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClass->Fill(22);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClass->Fill(23);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClass->Fill(24);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClass->Fill(25);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClass->Fill(26);
- if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClass->Fill(27);
- if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClass->Fill(28);
- if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClass->Fill(29);
- if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClass->Fill(30);
- if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClass->Fill(31);
- if (!fInputHandler->IsEventSelected()) hTriggerClass->Fill(34);
- }
-
- if(hTriggerClassSelected && isSelected){
- if (!fIsSDDFired) hTriggerClassSelected->Fill(33);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassSelected->Fill(0);
- if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassSelected->Fill(1);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClassSelected->Fill(2);
- if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClassSelected->Fill(3);
- if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassSelected->Fill(4);
- if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClassSelected->Fill(5);
- if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClassSelected->Fill(6);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClassSelected->Fill(6);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClassSelected->Fill(7);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClassSelected->Fill(7);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClassSelected->Fill(8);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClassSelected->Fill(8);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClassSelected->Fill(9);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClassSelected->Fill(9);
- if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassSelected->Fill(10);
- if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClassSelected->Fill(10);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClassSelected->Fill(11);
- if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClassSelected->Fill(12);
- if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClassSelected->Fill(13);
- if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClassSelected->Fill(13);
- if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClassSelected->Fill(13);
- if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClassSelected->Fill(14);
- if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClassSelected->Fill(15);
- if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClassSelected->Fill(16);
- if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClassSelected->Fill(17);
- if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClassSelected->Fill(18);
- if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClassSelected->Fill(19);
- if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClassSelected->Fill(20);
- if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClassSelected->Fill(20);
- if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClassSelected->Fill(21);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClassSelected->Fill(22);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClassSelected->Fill(23);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClassSelected->Fill(24);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClassSelected->Fill(25);
- if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClassSelected->Fill(26);
- if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClassSelected->Fill(27);
- if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClassSelected->Fill(28);
- if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClassSelected->Fill(29);
- if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClassSelected->Fill(30);
- if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClassSelected->Fill(31);
- }
-
- if(!isSelected)return kFALSE;
+ if(hTriggerClassSelected && isSelected){
+ if (!fIsSDDFired) hTriggerClassSelected->Fill(33);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassSelected->Fill(0);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassSelected->Fill(1);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClassSelected->Fill(2);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClassSelected->Fill(3);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassSelected->Fill(4);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClassSelected->Fill(5);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClassSelected->Fill(6);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClassSelected->Fill(6);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClassSelected->Fill(7);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClassSelected->Fill(7);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClassSelected->Fill(8);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClassSelected->Fill(8);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClassSelected->Fill(9);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClassSelected->Fill(9);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassSelected->Fill(10);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClassSelected->Fill(10);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClassSelected->Fill(11);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClassSelected->Fill(12);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClassSelected->Fill(13);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClassSelected->Fill(13);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClassSelected->Fill(13);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClassSelected->Fill(14);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClassSelected->Fill(15);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClassSelected->Fill(16);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClassSelected->Fill(17);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClassSelected->Fill(18);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClassSelected->Fill(19);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClassSelected->Fill(20);
+ // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClassSelected->Fill(20);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClassSelected->Fill(21);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClassSelected->Fill(22);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClassSelected->Fill(23);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClassSelected->Fill(24);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClassSelected->Fill(25);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClassSelected->Fill(26);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClassSelected->Fill(27);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClassSelected->Fill(28);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClassSelected->Fill(29);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClassSelected->Fill(30);
+ if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClassSelected->Fill(31);
+ }
- return kTRUE;
+ if(!isSelected)return kFALSE;
+
+ return kTRUE;
}
if(MCEvent->IsA()==AliMCEvent::Class()){
cHeader = dynamic_cast<AliGenCocktailEventHeader*>(dynamic_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
if(cHeader) headerFound = kTRUE;
- fMCStack = dynamic_cast<AliStack*>(dynamic_cast<AliMCEvent*>(MCEvent)->Stack());
+ if(dynamic_cast<AliMCEvent*>(MCEvent))fMCStack = dynamic_cast<AliStack*>(dynamic_cast<AliMCEvent*>(MCEvent)->Stack());
}
if(MCEvent->IsA()==AliAODEvent::Class()){ // MCEvent is a AODEvent in case of AOD
cHeaderAOD = dynamic_cast<AliAODMCHeader*>(MCEvent->FindListObject(AliAODMCHeader::StdBranchName()));
}
else if(InputEvent->IsA()==AliAODEvent::Class()){
TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
- AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
- if(!aodMCParticle) return 1; // Photon Without a Mother ? --> Accepted
- if(!aodMCParticle->IsPrimary()){
- if( aodMCParticle->GetMother() < 0) return 1;// Secondary Particle without Mother??
- return IsParticleFromBGEvent(aodMCParticle->GetMother(),MCStack,InputEvent);
- }
- index = abs(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index))->GetLabel());
- for(Int_t i = 0;i<fnHeaders;i++){
- if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
- accepted = 1;
- if(i == 0) accepted = 2; // MB Header
+ if (AODMCTrackArray){
+ AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
+ if(!aodMCParticle) return 1; // Photon Without a Mother ? --> Accepted
+ if(!aodMCParticle->IsPrimary()){
+ if( aodMCParticle->GetMother() < 0) return 1;// Secondary Particle without Mother??
+ return IsParticleFromBGEvent(aodMCParticle->GetMother(),MCStack,InputEvent);
}
- }
+ index = abs(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index))->GetLabel());
+ for(Int_t i = 0;i<fnHeaders;i++){
+ if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
+ accepted = 1;
+ if(i == 0) accepted = 2; // MB Header
+ }
+ }
+ }
}
return accepted;
//_________________________________________________________________________
Float_t AliConversionCuts::GetWeightForMeson(TString period, Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
- if (!(period.CompareTo("LHC12f1a") == 0 || period.CompareTo("LHC12f1b") == 0 || period.CompareTo("LHC12i3") == 0 || period.CompareTo("LHC11a10a") == 0 || period.CompareTo("LHC11a10b") == 0 || period.CompareTo("LHC11a10b_bis") == 0 || period.CompareTo("LHC11a10a_bis") == 0 || period.CompareTo("LHC11a10b_plus") == 0 || period.Contains("LHC13d2")|| period.Contains("LHC14a1") ||
- period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.CompareTo("LHC14b2") == 0 )) return 1.;
-
- Int_t kCaseGen = 0;
- for (Int_t i = 0; i < fnHeaders; i++){
- if (index >= fNotRejectedStart[i] && index < fNotRejectedEnd[i]+1){
- if (fGeneratorNames[i].CompareTo("Pythia") == 0){
- kCaseGen = 1;
- } else if (fGeneratorNames[i].CompareTo("DPMJET") == 0){
- kCaseGen = 2;
- } else if (fGeneratorNames[i].CompareTo("HIJING") == 0 ||
- fGeneratorNames[i].CompareTo("Hijing") == 0 ||
- fGeneratorNames[i].Contains("hijing")){
- kCaseGen = 3;
- } else if (fGeneratorNames[i].CompareTo("BOX") == 0){
- kCaseGen = 4;
- } else if (fGeneratorNames[i].CompareTo("PARAM") == 0){
- kCaseGen = 5;
- } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound") == 0){
- kCaseGen = 6;
- } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Pythia") == 0){
- kCaseGen = 1;
- } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Phojet") == 0){
- kCaseGen = 2;
- } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Hijing") == 0){
- kCaseGen = 3;
- }
- if (period.Contains("LHC13d2") || period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.Contains("LHC14a1") || period.CompareTo("LHC14b2") == 0 ){
- kCaseGen = 3;
- }
- }
- }
- if (kCaseGen == 0) return 1;
-
-
- Double_t mesonPt = 0;
- Double_t mesonMass = 0;
- Int_t PDGCode = 0;
- if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
- mesonPt = ((TParticle*)MCStack->Particle(index))->Pt();
- mesonMass = ((TParticle*)MCStack->Particle(index))->GetCalcMass();
- PDGCode = ((TParticle*)MCStack->Particle(index))->GetPdgCode();
- }
- else if(InputEvent->IsA()==AliAODEvent::Class()){
- TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
- AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
- mesonPt = aodMCParticle->Pt();
- mesonMass = aodMCParticle->GetCalcMass();
- PDGCode = aodMCParticle->GetPdgCode();
- }
-
- Float_t functionResultMC = 1.;
- if (kCaseGen == 1){ // Pythia 6
- Float_t dNdyMC = 2.1462;
- Float_t nMC = 7.06055;
- Float_t tMC = 0.12533;
- if ( PDGCode == 111){
- dNdyMC = 2.1462;
- nMC = 7.06055;
- tMC = 0.12533;
- } else if ( PDGCode == 221){
- dNdyMC = 0.2357;
- nMC = 5.9105;
- tMC = 0.1525;
- }
- functionResultMC = dNdyMC / ( 2 * TMath::Pi())*(nMC-1.)*(nMC-2.) / (nMC*tMC*(nMC*tMC+mesonMass*(nMC-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nMC*tMC), -nMC);
- } else if (kCaseGen == 2){ // Phojet
- Float_t dNdyMC = 2.35978;
- Float_t nMC = 6.81795;
- Float_t tMC = 0.11492;
- if ( PDGCode == 111){
- dNdyMC = 2.35978;
- nMC = 6.81795;
- tMC = 0.11492;
- } else if ( PDGCode == 221){
- dNdyMC = 0.3690;
- nMC = 5.55809;
- tMC = 0.13387;
- }
- functionResultMC = dNdyMC / ( 2 * TMath::Pi())*(nMC-1.)*(nMC-2.) / (nMC*tMC*(nMC*tMC+mesonMass*(nMC-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nMC*tMC), -nMC);
- } else if (kCaseGen == 4){ // BOX generators pp
-// functionResultMC = 1./sqrt(1.-mesonMass*mesonMass/((mesonMass*mesonMass+mesonPt*mesonPt)*cosh(mesonY)*cosh(mesonY)));
- Float_t a = 0.23437;
- Float_t b = 5.6661;
- Float_t c = -1430.5863;
- Float_t d = -0.6966624;
- Float_t e = 252.3742;
- if ( PDGCode == 111){
- a = 0.23437;
- b = 5.6661;
- c = -1430.5863;
- d = -0.6966624;
- e = 252.3742;
- } else if ( PDGCode == 221){
- a = 0.10399;
- b = 4.35311;
- c = -12.17723;
- d = -0.01172;
- e =1.85140;
- }
- functionResultMC = a*TMath::Power(mesonPt,-1.*(b+c/(TMath::Power(mesonPt,d)+e)))*1./mesonPt *1./1.6 *1./(2.* TMath::Pi());
-// cout << functionResultMC << endl;
- } else if (kCaseGen == 3 ){ // HIJING
- if ( PDGCode == 111 && fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0){
- functionResultMC = hReweightMCHistPi0->Interpolate(mesonPt);
- }
- if ( PDGCode == 221 && fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0){
- functionResultMC = hReweightMCHistEta->Interpolate(mesonPt);
- }
- if ( PDGCode == 310 && fDoReweightHistoMCK0s && hReweightMCHistK0s!= 0x0){
- functionResultMC = hReweightMCHistK0s->Interpolate(mesonPt);
- }
- }
+ if (!(period.CompareTo("LHC12f1a") == 0 || period.CompareTo("LHC12f1b") == 0 || period.CompareTo("LHC12i3") == 0 || period.CompareTo("LHC11a10a") == 0 || period.CompareTo("LHC11a10b") == 0 || period.CompareTo("LHC11a10b_bis") == 0 || period.CompareTo("LHC11a10a_bis") == 0 || period.CompareTo("LHC11a10b_plus") == 0 || period.Contains("LHC13d2")|| period.Contains("LHC14a1") ||
+ period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.CompareTo("LHC14b2") == 0 )) return 1.;
+
+ Int_t kCaseGen = 0;
+ for (Int_t i = 0; i < fnHeaders; i++){
+ if (index >= fNotRejectedStart[i] && index < fNotRejectedEnd[i]+1){
+ if (fGeneratorNames[i].CompareTo("Pythia") == 0){
+ kCaseGen = 1;
+ } else if (fGeneratorNames[i].CompareTo("DPMJET") == 0){
+ kCaseGen = 2;
+ } else if (fGeneratorNames[i].CompareTo("HIJING") == 0 ||
+ fGeneratorNames[i].CompareTo("Hijing") == 0 ||
+ fGeneratorNames[i].Contains("hijing")){
+ kCaseGen = 3;
+ } else if (fGeneratorNames[i].CompareTo("BOX") == 0){
+ kCaseGen = 4;
+ } else if (fGeneratorNames[i].CompareTo("PARAM") == 0){
+ kCaseGen = 5;
+ } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound") == 0){
+ kCaseGen = 6;
+ } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Pythia") == 0){
+ kCaseGen = 1;
+ } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Phojet") == 0){
+ kCaseGen = 2;
+ } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Hijing") == 0){
+ kCaseGen = 3;
+ }
+ if (period.Contains("LHC13d2") || period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.Contains("LHC14a1") || period.CompareTo("LHC14b2") == 0 ){
+ kCaseGen = 3;
+ }
+ }
+ }
+ if (kCaseGen == 0) return 1;
- Float_t functionResultData = 1;
- if (kCaseGen == 1 || kCaseGen == 2 || kCaseGen == 4 ){
- Float_t dNdyData = 2.2328;
- Float_t nData = 7.1473;
- Float_t tData = 0.1346;
- if ( PDGCode == 111){
- dNdyData = 2.2328;
- nData = 7.1473;
- tData = 0.1346;
- } else if ( PDGCode == 221){
- dNdyData = 0.38992; //be careful this fit is not optimal, eta in data still has problems
- nData = 5.72778;
- tData = 0.13835;
- }
- functionResultData = dNdyData / ( 2 * TMath::Pi())*(nData-1.)*(nData-2.) / (nData*tData*(nData*tData+mesonMass*(nData-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nData*tData), -nData);
-// cout << functionResultData << endl;
- } else {
- if ( PDGCode == 111 && fDoReweightHistoMCPi0 && fFitDataPi0!= 0x0){
- functionResultData = fFitDataPi0->Eval(mesonPt);
- }
- if ( PDGCode == 221 && fDoReweightHistoMCEta && fFitDataEta!= 0x0){
- functionResultData = fFitDataEta->Eval(mesonPt);
- }
- if ( PDGCode == 310 && fDoReweightHistoMCK0s && fFitDataK0s!= 0x0){
- functionResultData = fFitDataK0s->Eval(mesonPt);
- }
- }
+ Double_t mesonPt = 0;
+ Double_t mesonMass = 0;
+ Int_t PDGCode = 0;
+ if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
+ mesonPt = ((TParticle*)MCStack->Particle(index))->Pt();
+ mesonMass = ((TParticle*)MCStack->Particle(index))->GetCalcMass();
+ PDGCode = ((TParticle*)MCStack->Particle(index))->GetPdgCode();
+ }
+ else if(InputEvent->IsA()==AliAODEvent::Class()){
+ TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+ if (AODMCTrackArray){
+ AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
+ mesonPt = aodMCParticle->Pt();
+ mesonMass = aodMCParticle->GetCalcMass();
+ PDGCode = aodMCParticle->GetPdgCode();
+ } else {
+ return 1;
+ }
+ }
- Double_t weight = 1;
- if (PDGCode == 111 || PDGCode == 221){
- if (functionResultData != 0. && functionResultMC != 0. && isfinite(functionResultData) && isfinite(functionResultMC)){
- weight = functionResultData/functionResultMC;
- if ( kCaseGen == 3){
- if (PDGCode == 111){
- if (!(fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0 && PDGCode == 111)){
- weight = 1.;
- }
- }
- if (PDGCode == 221){
- if (!(fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0 && PDGCode == 221)){
- weight = 1.;
- }
- }
- }
- if (!isfinite(functionResultData)) weight = 1.;
- if (!isfinite(weight)) weight = 1.;
- }
- } else if (PDGCode == 310 && functionResultMC != 0 && isfinite(functionResultMC)){
- weight = functionResultMC;
- }
+ Float_t functionResultMC = 1.;
+ if (kCaseGen == 1){ // Pythia 6
+ Float_t dNdyMC = 2.1462;
+ Float_t nMC = 7.06055;
+ Float_t tMC = 0.12533;
+ if ( PDGCode == 111){
+ dNdyMC = 2.1462;
+ nMC = 7.06055;
+ tMC = 0.12533;
+ } else if ( PDGCode == 221){
+ dNdyMC = 0.2357;
+ nMC = 5.9105;
+ tMC = 0.1525;
+ }
+ functionResultMC = dNdyMC / ( 2 * TMath::Pi())*(nMC-1.)*(nMC-2.) / (nMC*tMC*(nMC*tMC+mesonMass*(nMC-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nMC*tMC), -nMC);
+ } else if (kCaseGen == 2){ // Phojet
+ Float_t dNdyMC = 2.35978;
+ Float_t nMC = 6.81795;
+ Float_t tMC = 0.11492;
+ if ( PDGCode == 111){
+ dNdyMC = 2.35978;
+ nMC = 6.81795;
+ tMC = 0.11492;
+ } else if ( PDGCode == 221){
+ dNdyMC = 0.3690;
+ nMC = 5.55809;
+ tMC = 0.13387;
+ }
+ functionResultMC = dNdyMC / ( 2 * TMath::Pi())*(nMC-1.)*(nMC-2.) / (nMC*tMC*(nMC*tMC+mesonMass*(nMC-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nMC*tMC), -nMC);
+ } else if (kCaseGen == 4){ // BOX generators pp
+ // functionResultMC = 1./sqrt(1.-mesonMass*mesonMass/((mesonMass*mesonMass+mesonPt*mesonPt)*cosh(mesonY)*cosh(mesonY)));
+ Float_t a = 0.23437;
+ Float_t b = 5.6661;
+ Float_t c = -1430.5863;
+ Float_t d = -0.6966624;
+ Float_t e = 252.3742;
+ if ( PDGCode == 111){
+ a = 0.23437;
+ b = 5.6661;
+ c = -1430.5863;
+ d = -0.6966624;
+ e = 252.3742;
+ } else if ( PDGCode == 221){
+ a = 0.10399;
+ b = 4.35311;
+ c = -12.17723;
+ d = -0.01172;
+ e =1.85140;
+ }
+ functionResultMC = a*TMath::Power(mesonPt,-1.*(b+c/(TMath::Power(mesonPt,d)+e)))*1./mesonPt *1./1.6 *1./(2.* TMath::Pi());
+ // cout << functionResultMC << endl;
+ } else if (kCaseGen == 3 ){ // HIJING
+ if ( PDGCode == 111 && fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0){
+ functionResultMC = hReweightMCHistPi0->Interpolate(mesonPt);
+ }
+ if ( PDGCode == 221 && fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0){
+ functionResultMC = hReweightMCHistEta->Interpolate(mesonPt);
+ }
+ if ( PDGCode == 310 && fDoReweightHistoMCK0s && hReweightMCHistK0s!= 0x0){
+ functionResultMC = hReweightMCHistK0s->Interpolate(mesonPt);
+ }
+ }
-// if (fModCentralityClass == 0 && fCentralityMin == 4 && fCentralityMax == 6 && PDGCode == 111){
-// cout << period.Data() << "\t" << kCaseGen << "\t" <<fModCentralityClass<< "\t" <<fCentralityMin<< "\t" <<fCentralityMax << "\t" << mesonPt << "\t" <<mesonMass<< "\t"<<functionResultData << "\t"<< functionResultMC << "\t" << weight <<endl;
-// }
- return weight;
+ Float_t functionResultData = 1;
+ if (kCaseGen == 1 || kCaseGen == 2 || kCaseGen == 4 ){
+ Float_t dNdyData = 2.2328;
+ Float_t nData = 7.1473;
+ Float_t tData = 0.1346;
+ if ( PDGCode == 111){
+ dNdyData = 2.2328;
+ nData = 7.1473;
+ tData = 0.1346;
+ } else if ( PDGCode == 221){
+ dNdyData = 0.38992; //be careful this fit is not optimal, eta in data still has problems
+ nData = 5.72778;
+ tData = 0.13835;
+ }
+ functionResultData = dNdyData / ( 2 * TMath::Pi())*(nData-1.)*(nData-2.) / (nData*tData*(nData*tData+mesonMass*(nData-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nData*tData), -nData);
+ // cout << functionResultData << endl;
+ } else {
+ if ( PDGCode == 111 && fDoReweightHistoMCPi0 && fFitDataPi0!= 0x0){
+ functionResultData = fFitDataPi0->Eval(mesonPt);
+ }
+ if ( PDGCode == 221 && fDoReweightHistoMCEta && fFitDataEta!= 0x0){
+ functionResultData = fFitDataEta->Eval(mesonPt);
+ }
+ if ( PDGCode == 310 && fDoReweightHistoMCK0s && fFitDataK0s!= 0x0){
+ functionResultData = fFitDataK0s->Eval(mesonPt);
+ }
+
+ }
+
+ Double_t weight = 1;
+ if (PDGCode == 111 || PDGCode == 221){
+ if (functionResultData != 0. && functionResultMC != 0. && isfinite(functionResultData) && isfinite(functionResultMC)){
+ weight = functionResultData/functionResultMC;
+ if ( kCaseGen == 3){
+ if (PDGCode == 111){
+ if (!(fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0 && PDGCode == 111)){
+ weight = 1.;
+ }
+ }
+ if (PDGCode == 221){
+ if (!(fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0 && PDGCode == 221)){
+ weight = 1.;
+ }
+ }
+ }
+ if (!isfinite(functionResultData)) weight = 1.;
+ if (!isfinite(weight)) weight = 1.;
+ }
+ } else if (PDGCode == 310 && functionResultMC != 0 && isfinite(functionResultMC)){
+ weight = functionResultMC;
+ }
+
+ // if (fModCentralityClass == 0 && fCentralityMin == 4 && fCentralityMax == 6 && PDGCode == 111){
+ // cout << period.Data() << "\t" << kCaseGen << "\t" <<fModCentralityClass<< "\t" <<fCentralityMin<< "\t" <<fCentralityMax << "\t" << mesonPt << "\t" <<mesonMass<< "\t"<<functionResultData << "\t"<< functionResultMC << "\t" << weight <<endl;
+ // }
+ return weight;
}
///________________________________________________________________________
AliConversionCuts* AliConversionCuts::GetStandardCuts2010PbPb(){
kisHeavyIon,
kCentralityMin,
kCentralityMax,
- kselectV0AND,
- kmultiplicityMethod,
+ kSelectSpecialTriggerAlias,
+ kSelectSubTriggerClass,
kremovePileUp,
kExtraSignals,
kv0FinderType,
Bool_t SetPhotonAsymmetryCut(Int_t doPhotonAsymmetryCut);
Bool_t SetRemovePileUp(Int_t removePileUp);
Bool_t SetMultiplicityMethod(Int_t multiplicityMethod);
- Int_t SetSelectSpecialTrigger(Int_t selectSpecialTrigger);
+ Bool_t SetSelectSpecialTrigger(Int_t selectSpecialTrigger);
+ Bool_t SetSelectSubTriggerClass (Int_t selectSpecialSubTriggerClass);
Bool_t SetCosPAngleCut(Int_t cosCut);
Bool_t SetPsiPairCut(Int_t psiCut);
Bool_t SetSharedElectronCut(Int_t sharedElec);
Bool_t fUseTOFpid; // flag to use tof pid
Int_t fMultiplicityMethod; // selected multiplicity method
Int_t fSpecialTrigger; // flag
+ Int_t fSpecialSubTrigger; // flag
Bool_t fRemovePileUp; //flag
Float_t fOpeningAngle; // min opening angle for meson
Float_t fPsiPairCut;
Bool_t fPreSelCut; // Flag for preselection cut used in V0Reader
Bool_t fTriggerSelectedManually; // Flag for manual trigger selection
TString fSpecialTriggerName; // Name of the Special Triggers
+ TString fSpecialSubTriggerName; // Name of the Special Triggers
+ Int_t fNSpecialSubTriggerOptions;
private:
ClassDef(AliConversionCuts,8)
Float_t dcaToVertexZ = b[1];
Double_t clsToF = GetNFindableClustersTPC(lTrack);
- if (fHistTrackDCAxyPtbefore) fHistTrackDCAxyPtbefore->Fill(dcaToVertexXY,lTrack->Pt());
- if (fHistTrackDCAzPtbefore) fHistTrackDCAzPtbefore->Fill( dcaToVertexZ, lTrack->Pt());
- if (fHistTrackNFindClsPtTPCbefore) fHistTrackNFindClsPtTPCbefore->Fill( clsToF, lTrack->Pt());
if (fHistCutIndex) fHistCutIndex->Fill(kPionIn);
if (fHistCutIndex) fHistCutIndex->Fill(kNoTracks);
return kFALSE;
}
+ if (fHistTrackDCAxyPtbefore) fHistTrackDCAxyPtbefore->Fill(dcaToVertexXY,lTrack->Pt());
+ if (fHistTrackDCAzPtbefore) fHistTrackDCAzPtbefore->Fill( dcaToVertexZ, lTrack->Pt());
+ if (fHistTrackNFindClsPtTPCbefore) fHistTrackNFindClsPtTPCbefore->Fill( clsToF, lTrack->Pt());
+
if ( ! lTrack->GetConstrainedParam() ){
return kFALSE;
gSystem->Load("libSTEERBase.so");
gSystem->Load("libTENDER.so");
gSystem->Load("libTENDERSupplies.so");
-
+
-
-
-
-
if( trainConfig == 1 ) { // No eta shift |Y| < 0.8
+
ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540023310262371"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100 //Tracks 2011
} else if( trainConfig == 2 ) { // No eta shift |Y| < 0.8
} else if ( trainConfig == 34 ) {
ConvCutarray[0] = "8000011007093603007200000000"; ElecCutarray[0] = "9047540083310262370"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100 //Tracks 2011 + kBoth + Photon R > 35 cm + No weights
-}
+
+} else if ( trainConfig == 35 ) {
+
+ ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540083300262370"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100 //Tracks 2011 + kBoth + NoPsiPair + No weights
+
+} else if ( trainConfig == 36 ) {
+
+ ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540023310262370"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100 //Tracks 2011 + kAny no Weights
+}
+
cutarray[ 1] = "0000012002092970028280400000"; mesonCutArray[1] = "01525065000000"; //variation psi pair 0.2
cutarray[ 2] = "0000012002092970028250000000"; mesonCutArray[2] = "01525065000000"; //variation cosPA -1
cutarray[ 3] = "0000012002092970028250400000"; mesonCutArray[3] = "01525055000000"; //variation alpha 0.75
+ } else if (trainConfig == 22) {
+ cutarray[ 0] = "0004011002092970028250400000"; mesonCutArray[0] = "01525065000000"; // trigger kTRD
+ cutarray[ 1] = "0005011002092970028250400000"; mesonCutArray[1] = "01525065000000"; // trigger kEMC
+ cutarray[ 2] = "0006011002092970028250400000"; mesonCutArray[2] = "01525065000000"; // trigger kPHI
+ cutarray[ 3] = "0007011002092970028250400000"; mesonCutArray[3] = "01525065000000"; // trigger kHighMult
+ } else if (trainConfig == 23) {
+ cutarray[ 0] = "0008011002092970028250400000"; mesonCutArray[0] = "01525065000000"; // trigger kEMCEGA
+ cutarray[ 1] = "0009011002092970028250400000"; mesonCutArray[1] = "01525065000000"; // trigger kEMCEJE
+ cutarray[ 2] = "0000011002092970028250400000"; mesonCutArray[2] = "01525065000000"; // minimum bias
+ cutarray[ 3] = "0001111002092970028250400000"; mesonCutArray[3] = "01525065000000"; // trigger kINT8
+ } else if (trainConfig == 24) {
+ cutarray[ 0] = "0004211002092970028250400000"; mesonCutArray[0] = "01525065000000"; // trigger kTRD CINT8 HEE
+ cutarray[ 1] = "0004411002092970028250400000"; mesonCutArray[1] = "01525065000000"; // trigger kTRD CINT8 HSE
+ cutarray[ 2] = "0004611002092970028250400000"; mesonCutArray[2] = "01525065000000"; // trigger kTRD CINT8 HJE
+ cutarray[ 3] = "0004811002092970028250400000"; mesonCutArray[3] = "01525065000000"; // trigger kTRD CINT8 HQU
+ } else if (trainConfig == 25) {
+ cutarray[ 0] = "0004111002092970028250400000"; mesonCutArray[0] = "01525065000000"; // trigger kTRD CINT7 HEE
+ cutarray[ 1] = "0004311002092970028250400000"; mesonCutArray[1] = "01525065000000"; // trigger kTRD CINT7 HSE
+ cutarray[ 2] = "0004511002092970028250400000"; mesonCutArray[2] = "01525065000000"; // trigger kTRD CINT7 HJE
+ cutarray[ 3] = "0004711002092970028250400000"; mesonCutArray[3] = "01525065000000"; // trigger kTRD CINT7 HQU
+ } else if (trainConfig == 26) {
+ cutarray[ 0] = "0005211002092970028250400000"; mesonCutArray[0] = "01525065000000"; // trigger kEMC7
+ cutarray[ 1] = "0005311002092970028250400000"; mesonCutArray[1] = "01525065000000"; // trigger kEMC8
+ cutarray[ 2] = "0006211002092970028250400000"; mesonCutArray[2] = "01525065000000"; // trigger kPHI7
+ cutarray[ 3] = "0006311002092970028250400000"; mesonCutArray[3] = "01525065000000"; // trigger kPHI8
+ } else if (trainConfig == 27) {
+ cutarray[ 0] = "0005111002092970028250400000"; mesonCutArray[0] = "01525065000000"; // trigger kEMC1
+ cutarray[ 1] = "0007111002092970028250400000"; mesonCutArray[1] = "01525065000000"; // trigger kSHM1
+ cutarray[ 2] = "0007211002092970028250400000"; mesonCutArray[2] = "01525065000000"; // trigger kSHM7
+ cutarray[ 3] = "0007311002092970028250400000"; mesonCutArray[3] = "01525065000000"; // trigger kSHM8
+ } else if (trainConfig == 28) {
+ cutarray[ 0] = "0008111002092970028250400000"; mesonCutArray[0] = "01525065000000"; // trigger kEMCEGA + CINT7
+ cutarray[ 1] = "0008211002092970028250400000"; mesonCutArray[1] = "01525065000000"; // trigger kEMCEGA + CINT8
+ cutarray[ 2] = "0008311002092970028250400000"; mesonCutArray[2] = "01525065000000"; // trigger kEMCEG1 + CINT7
+ cutarray[ 3] = "0008411002092970028250400000"; mesonCutArray[3] = "01525065000000"; // trigger kEMCEG1 + CINT8
+ } else if (trainConfig == 29) {
+ cutarray[ 0] = "0008511002092970028250400000"; mesonCutArray[0] = "01525065000000"; // trigger kEMCEG2 + CINT7
+ cutarray[ 1] = "0008611002092970028250400000"; mesonCutArray[1] = "01525065000000"; // trigger kEMCEG2 + CINT8
+ cutarray[ 2] = "0009111002092970028250400000"; mesonCutArray[2] = "01525065000000"; // trigger kEMCEJE + CINT7
+ cutarray[ 3] = "0009211002092970028250400000"; mesonCutArray[3] = "01525065000000"; // trigger kEMCEJE + CINT8
+ } else if (trainConfig == 30) {
+ cutarray[ 0] = "0009311002092970028250400000"; mesonCutArray[0] = "01525065000000"; // trigger kEMCEJ1 + CINT7
+ cutarray[ 1] = "0009411002092970028250400000"; mesonCutArray[1] = "01525065000000"; // trigger kEMCEJ1 + CINT8
+ cutarray[ 2] = "0009511002092970028250400000"; mesonCutArray[2] = "01525065000000"; // trigger kEMCEJ2 + CINT7
+ cutarray[ 3] = "0009611002092970028250400000"; mesonCutArray[3] = "01525065000000"; // trigger kEMCEJ2 + CINT8
} else {
Error(Form("GammaConvV1_%i",trainConfig), "wrong trainConfig variable no cuts have been specified for the configuration");
return;
}
- TList *ConvCutList = new TList();
- TList *MesonCutList = new TList();
+ TList *ConvCutList = new TList();
+ TList *MesonCutList = new TList();
- TList *HeaderList = new TList();
- TObjString *Header2 = new TObjString("BOX");
- HeaderList->Add(Header2);
+ TList *HeaderList = new TList();
+ TObjString *Header2 = new TObjString("BOX");
+ HeaderList->Add(Header2);
- ConvCutList->SetOwner(kTRUE);
- AliConversionCuts **analysisCuts = new AliConversionCuts*[numberOfCuts];
- MesonCutList->SetOwner(kTRUE);
- AliConversionMesonCuts **analysisMesonCuts = new AliConversionMesonCuts*[numberOfCuts];
+ ConvCutList->SetOwner(kTRUE);
+ AliConversionCuts **analysisCuts = new AliConversionCuts*[numberOfCuts];
+ MesonCutList->SetOwner(kTRUE);
+ AliConversionMesonCuts **analysisMesonCuts = new AliConversionMesonCuts*[numberOfCuts];
- for(Int_t i = 0; i<numberOfCuts; i++){
- analysisCuts[i] = new AliConversionCuts();
- analysisCuts[i]->InitializeCutsFromCutString(cutarray[i].Data());
- ConvCutList->Add(analysisCuts[i]);
+ for(Int_t i = 0; i<numberOfCuts; i++){
+ analysisCuts[i] = new AliConversionCuts();
+ analysisCuts[i]->InitializeCutsFromCutString(cutarray[i].Data());
+ ConvCutList->Add(analysisCuts[i]);
+
+ analysisCuts[i]->SetFillCutHistograms("",kFALSE);
+
+ analysisMesonCuts[i] = new AliConversionMesonCuts();
+ analysisMesonCuts[i]->InitializeCutsFromCutString(mesonCutArray[i].Data());
+ MesonCutList->Add(analysisMesonCuts[i]);
+ analysisMesonCuts[i]->SetFillCutHistograms("");
+ analysisCuts[i]->SetAcceptedHeader(HeaderList);
+
+ }
- analysisCuts[i]->SetFillCutHistograms("",kFALSE);
- analysisMesonCuts[i] = new AliConversionMesonCuts();
- analysisMesonCuts[i]->InitializeCutsFromCutString(mesonCutArray[i].Data());
- MesonCutList->Add(analysisMesonCuts[i]);
- analysisMesonCuts[i]->SetFillCutHistograms("");
- analysisCuts[i]->SetAcceptedHeader(HeaderList);
- }
-
- task->SetConversionCutList(numberOfCuts,ConvCutList);
- task->SetMesonCutList(numberOfCuts,MesonCutList);
- task->SetMoveParticleAccordingToVertex(kTRUE);
- task->SetDoMesonAnalysis(kTRUE);
- task->SetDoMesonQA(enableQAMesonTask); //Attention new switch for Pi0 QA
- task->SetDoPhotonQA(enableQAPhotonTask); //Attention new switch small for Photon QA
+ task->SetConversionCutList(numberOfCuts,ConvCutList);
+ task->SetMesonCutList(numberOfCuts,MesonCutList);
+ task->SetMoveParticleAccordingToVertex(kTRUE);
+ task->SetDoMesonAnalysis(kTRUE);
+ task->SetDoMesonQA(enableQAMesonTask); //Attention new switch for Pi0 QA
+ task->SetDoPhotonQA(enableQAPhotonTask); //Attention new switch small for Photon QA
- //connect containers
- AliAnalysisDataContainer *coutput =
- mgr->CreateContainer(Form("GammaConvV1_%i",trainConfig), TList::Class(),
- AliAnalysisManager::kOutputContainer,Form("GammaConvV1_%i.root",trainConfig));
+ //connect containers
+ AliAnalysisDataContainer *coutput =
+ mgr->CreateContainer(Form("GammaConvV1_%i",trainConfig), TList::Class(),
+ AliAnalysisManager::kOutputContainer,Form("GammaConvV1_%i.root",trainConfig));
- mgr->AddTask(task);
- mgr->ConnectInput(task,0,cinput);
- mgr->ConnectOutput(task,1,coutput);
+ mgr->AddTask(task);
+ mgr->ConnectInput(task,0,cinput);
+ mgr->ConnectOutput(task,1,coutput);
- return;
+ return;
}
void AddTask_Material(TString V0ReaderCutNumber = "0000000060084001001500000000",
- TString TaskCutnumber = "0000000090092663743800000000",
+ TString TaskCutnumber = "0000000090092663743800000000",
Bool_t IsMC = kFALSE,
Int_t IsHeavyIon = 0,
TString cutnumberAODBranch = "0000000060084001001500000",
Bool_t doEtaShiftV0Reader = kFALSE
){
-
- // Suitable Cutnumbers for the V0 Reader for
- // PbPb: V0ReaderCutNumber = "1000000060084001001500000000"; (V0Mult MC)
- // or V0ReaderCutNumber = "5000000060084001001500000000" (TPC mult MC)
- // pPb: V0ReaderCutNumber = "8000000060084001001500000000";
- // pp: V0ReaderCutNumber = "0000000060084001001500000000";
+
+ // Suitable Cutnumbers for the V0 Reader for
+ // PbPb: V0ReaderCutNumber = "1000000060084001001500000000"; (V0Mult MC)
+ // or V0ReaderCutNumber = "5000000060084001001500000000" (TPC mult MC)
+ // pPb: V0ReaderCutNumber = "8000000060084001001500000000";
+ // pp: V0ReaderCutNumber = "0000000060084001001500000000";
- // ================= Load Librariers =================================
- gSystem->Load("libCore.so");
- gSystem->Load("libTree.so");
- gSystem->Load("libGeom.so");
- gSystem->Load("libVMC.so");
- gSystem->Load("libPhysics.so");
- gSystem->Load("libMinuit");
- gSystem->Load("libSTEERBase");
- gSystem->Load("libESD");
- gSystem->Load("libAOD");
- gSystem->Load("libANALYSIS");
- gSystem->Load("libANALYSISalice");
- gSystem->Load("libPWGGAGammaConv.so");
- gSystem->Load("libCDB.so");
- gSystem->Load("libSTEER.so");
- gSystem->Load("libSTEERBase.so");
- gSystem->Load("libTENDER.so");
- gSystem->Load("libTENDERSupplies.so");
-
- // ================== GetAnalysisManager ===============================
- AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
- if (!mgr) {
- Error(Form("AddTask_GammaConvV1_%i",trainConfig), "No analysis manager found.");
- return ;
- }
+ // ================= Load Librariers =================================
+ gSystem->Load("libCore.so");
+ gSystem->Load("libTree.so");
+ gSystem->Load("libGeom.so");
+ gSystem->Load("libVMC.so");
+ gSystem->Load("libPhysics.so");
+ gSystem->Load("libMinuit");
+ gSystem->Load("libSTEERBase");
+ gSystem->Load("libESD");
+ gSystem->Load("libAOD");
+ gSystem->Load("libANALYSIS");
+ gSystem->Load("libANALYSISalice");
+ gSystem->Load("libPWGGAGammaConv.so");
+ gSystem->Load("libCDB.so");
+ gSystem->Load("libSTEER.so");
+ gSystem->Load("libSTEERBase.so");
+ gSystem->Load("libTENDER.so");
+ gSystem->Load("libTENDERSupplies.so");
+
+ // ================== GetAnalysisManager ===============================
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ Error(Form("AddTask_GammaConvV1_%i",trainConfig), "No analysis manager found.");
+ return ;
+ }
- // ================== GetInputEventHandler =============================
- AliVEventHandler *inputHandler=mgr->GetInputEventHandler();
-
- //========= Add PID Reponse to ANALYSIS manager ====
- if(!(AliPIDResponse*)mgr->GetTask("PIDResponseTask")){
- gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
- AddTaskPIDResponse(isMC);
- }
- AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
- if( !(AliV0ReaderV1*)mgr->GetTask("V0ReaderV1") ){
- AliV0ReaderV1 *fV0ReaderV1 = new AliV0ReaderV1("V0ReaderV1");
-
- fV0ReaderV1->SetUseOwnXYZCalculation(kTRUE);
- fV0ReaderV1->SetCreateAODs(kFALSE);// AOD Output
- fV0ReaderV1->SetUseAODConversionPhoton(kTRUE);
+ // ================== GetInputEventHandler =============================
+ AliVEventHandler *inputHandler=mgr->GetInputEventHandler();
+
+ //========= Add PID Reponse to ANALYSIS manager ====
+ if(!(AliPIDResponse*)mgr->GetTask("PIDResponseTask")){
+ gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
+ AddTaskPIDResponse(isMC);
+ }
+ AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
+ if( !(AliV0ReaderV1*)mgr->GetTask("V0ReaderV1") ){
+ AliV0ReaderV1 *fV0ReaderV1 = new AliV0ReaderV1("V0ReaderV1");
+
+ fV0ReaderV1->SetUseOwnXYZCalculation(kTRUE);
+ fV0ReaderV1->SetCreateAODs(kFALSE);// AOD Output
+ fV0ReaderV1->SetUseAODConversionPhoton(kTRUE);
- if (!mgr) {
- Error("AddTask_V0ReaderV1", "No analysis manager found.");
- return;
- }
+ if (!mgr) {
+ Error("AddTask_V0ReaderV1", "No analysis manager found.");
+ return;
+ }
- // Set AnalysisCut Number
- AliConversionCuts *fCuts=NULL;
- if(V0ReaderCutNumber!=""){
- fCuts= new AliConversionCuts(V0ReaderCutNumber.Data(),V0ReaderCutNumber.Data());
- fCuts->SetPreSelectionCutFlag(kTRUE);
- if(fCuts->InitializeCutsFromCutString(V0ReaderCutNumber.Data())){
- if (IsHeavyIon==2){
- fCuts->SelectCollisionCandidates(AliVEvent::kINT7);
- fCuts->DoEtaShift(doEtaShiftV0Reader);
- }
- fV0ReaderV1->SetConversionCuts(fCuts);
- fCuts->SetFillCutHistograms("",kTRUE);
- }
- }
-
-
- if(inputHandler->IsA()==AliAODInputHandler::Class()){
- // AOD mode
- fV0ReaderV1->SetDeltaAODBranchName(Form("GammaConv_%s_gamma",cutnumberAODBranch.Data()));
- }
- fV0ReaderV1->Init();
+ // Set AnalysisCut Number
+ AliConversionCuts *fCuts=NULL;
+ if(V0ReaderCutNumber!=""){
+ fCuts= new AliConversionCuts(V0ReaderCutNumber.Data(),V0ReaderCutNumber.Data());
+ fCuts->SetPreSelectionCutFlag(kTRUE);
+ if(fCuts->InitializeCutsFromCutString(V0ReaderCutNumber.Data())){
+ if (IsHeavyIon==2){
+ fCuts->SelectCollisionCandidates(AliVEvent::kINT7);
+ fCuts->DoEtaShift(doEtaShiftV0Reader);
+ }
+ fV0ReaderV1->SetConversionCuts(fCuts);
+ fCuts->SetFillCutHistograms("",kTRUE);
+ }
+ }
+
+
+ if(inputHandler->IsA()==AliAODInputHandler::Class()){
+ // AOD mode
+ fV0ReaderV1->SetDeltaAODBranchName(Form("GammaConv_%s_gamma",cutnumberAODBranch.Data()));
+ }
+ fV0ReaderV1->Init();
- AliLog::SetGlobalLogLevel(AliLog::kInfo);
+ AliLog::SetGlobalLogLevel(AliLog::kInfo);
- //connect input V0Reader
- mgr->AddTask(fV0ReaderV1);
- mgr->ConnectInput(fV0ReaderV1,0,cinput);
+ //connect input V0Reader
+ mgr->AddTask(fV0ReaderV1);
+ mgr->ConnectInput(fV0ReaderV1,0,cinput);
- } else {
- Error("AddTask_V0ReaderV1", "Cannot execute AddTask, V0ReaderV1 already exists.");
- }
+ } else {
+ Error("AddTask_V0ReaderV1", "Cannot execute AddTask, V0ReaderV1 already exists.");
+ }
- // suitable cuts for the material Task:
- // PbPb: TaskCutnumber = "5680001060092663044803000000"; TPC mult in MC - 60-80% central
- // or: TaskCutnumber = "1680001060092663044803000000"; V0 mult in MC - 60-80% central
- // pPb: TaskCutnumber = "8000000090092663743800000000";
- // pp: TaskCutnumber = "0000000090092663743800000000";
+ // suitable cuts for the material Task:
+ // PbPb: TaskCutnumber = "5680001060092663044803000000"; TPC mult in MC - 60-80% central
+ // or: TaskCutnumber = "1680001060092663044803000000"; V0 mult in MC - 60-80% central
+ // pPb: TaskCutnumber = "8000000090092663743800000000";
+ // pp: TaskCutnumber = "0000000090092663743800000000";
- AliConversionCuts *analysisCuts = new AliConversionCuts();
- analysisCuts->InitializeCutsFromCutString(TaskCutnumber.Data());
- analysisCuts->SetFillCutHistograms("",kFALSE);
-
- AliAnalysisTaskMaterial *fMaterial= new AliAnalysisTaskMaterial(Form("%s_Material",(analysisCuts->GetCutNumber()).Data()));
- fMaterial->SetConversionCuts(analysisCuts,IsHeavyIon);
- fMaterial->SetIsMC(IsMC);
- mgr->AddTask(fMaterial);
-
- AliAnalysisDataContainer *coutput1 =
- mgr->CreateContainer(Form("GammaConvMaterial_%s",TaskCutnumber.Data()), TList::Class(),
- AliAnalysisManager::kOutputContainer,Form("GammaConv_Material_%s.root",TaskCutnumber.Data()));
+ AliConversionCuts *analysisCuts = new AliConversionCuts();
+ analysisCuts->InitializeCutsFromCutString(TaskCutnumber.Data());
+ analysisCuts->SetFillCutHistograms("",kFALSE);
+
+ AliAnalysisTaskMaterial *fMaterial= new AliAnalysisTaskMaterial(Form("%s_Material",(analysisCuts->GetCutNumber()).Data()));
+ fMaterial->SetConversionCuts(analysisCuts,IsHeavyIon);
+ fMaterial->SetIsMC(IsMC);
+ mgr->AddTask(fMaterial);
+
+ AliAnalysisDataContainer *coutput1 =
+ mgr->CreateContainer(Form("GammaConvMaterial_%s",TaskCutnumber.Data()), TList::Class(),
+ AliAnalysisManager::kOutputContainer,Form("GammaConv_Material_%s.root",TaskCutnumber.Data()));
- AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
- mgr->ConnectInput(fMaterial, 0, cinput1 );
- mgr->ConnectOutput (fMaterial, 1, coutput1);
- //connect containers
- return ;
+ AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
+ mgr->ConnectInput(fMaterial, 0, cinput1 );
+ mgr->ConnectOutput (fMaterial, 1, coutput1);
+ //connect containers
+ return ;
}
-void AddTask_Resolution( TString V0ReaderCutNumber = "0000000060084001001500000000",
- TString TaskCutnumber = "0000000090092663743800000000",
+void AddTask_Resolution( TString V0ReaderCutNumber = "8000000060084001001500000000",
+ TString TaskCutnumber = "8000011092092170008260400000",
Bool_t IsMC = kTRUE,
Int_t IsHeavyIon = 0,
TString cutnumberAODBranch = "0000000060084001001500000",
Bool_t doEtaShiftV0Reader = kFALSE
){
-
- // Suitable Cutnumbers for the V0 Reader for
- // PbPb: V0ReaderCutNumber = "100000006008400100150000000"; (V0Mult MC)
- // or V0ReaderCutNumber = "500000006008400100150000000" (TPC mult MC)
- // pPb: V0ReaderCutNumber = "800000006008400100150000000";
- // pp: V0ReaderCutNumber = "000000006008400100150000000";
+
+ // Suitable Cutnumbers for the V0 Reader for
+ // PbPb: V0ReaderCutNumber = "100000006008400100150000000"; (V0Mult MC)
+ // or V0ReaderCutNumber = "500000006008400100150000000" (TPC mult MC)
+ // pPb: V0ReaderCutNumber = "800000006008400100150000000";
+ // pp: V0ReaderCutNumber = "000000006008400100150000000";
- //get the current analysis manager
- // ================= Load Librariers =================================
- gSystem->Load("libCore.so");
- gSystem->Load("libTree.so");
- gSystem->Load("libGeom.so");
- gSystem->Load("libVMC.so");
- gSystem->Load("libPhysics.so");
- gSystem->Load("libMinuit");
- gSystem->Load("libSTEERBase");
- gSystem->Load("libESD");
- gSystem->Load("libAOD");
- gSystem->Load("libANALYSIS");
- gSystem->Load("libANALYSISalice");
- gSystem->Load("libPWGGAGammaConv.so");
- gSystem->Load("libCDB.so");
- gSystem->Load("libSTEER.so");
- gSystem->Load("libSTEERBase.so");
- gSystem->Load("libTENDER.so");
- gSystem->Load("libTENDERSupplies.so");
-
- // ================== GetAnalysisManager ===============================
- AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
- if (!mgr) {
- Error(Form("AddTask_GammaConvV1_%i",trainConfig), "No analysis manager found.");
- return ;
- }
+ //get the current analysis manager
+ // ================= Load Librariers =================================
+ gSystem->Load("libCore.so");
+ gSystem->Load("libTree.so");
+ gSystem->Load("libGeom.so");
+ gSystem->Load("libVMC.so");
+ gSystem->Load("libPhysics.so");
+ gSystem->Load("libMinuit");
+ gSystem->Load("libSTEERBase");
+ gSystem->Load("libESD");
+ gSystem->Load("libAOD");
+ gSystem->Load("libANALYSIS");
+ gSystem->Load("libANALYSISalice");
+ gSystem->Load("libPWGGAGammaConv.so");
+ gSystem->Load("libCDB.so");
+ gSystem->Load("libSTEER.so");
+ gSystem->Load("libSTEERBase.so");
+ gSystem->Load("libTENDER.so");
+ gSystem->Load("libTENDERSupplies.so");
+
+ // ================== GetAnalysisManager ===============================
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ Error(Form("AddTask_GammaConvV1_%i",trainConfig), "No analysis manager found.");
+ return ;
+ }
- // ================== GetInputEventHandler =============================
- AliVEventHandler *inputHandler=mgr->GetInputEventHandler();
-
- //========= Add PID Reponse to ANALYSIS manager ====
- if(!(AliPIDResponse*)mgr->GetTask("PIDResponseTask")){
- gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
- AddTaskPIDResponse(isMC);
- }
+ // ================== GetInputEventHandler =============================
+ AliVEventHandler *inputHandler=mgr->GetInputEventHandler();
+
+ //========= Add PID Reponse to ANALYSIS manager ====
+ if(!(AliPIDResponse*)mgr->GetTask("PIDResponseTask")){
+ gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
+ AddTaskPIDResponse(isMC);
+ }
- AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
- if( !(AliV0ReaderV1*)mgr->GetTask("V0ReaderV1") ){
- AliV0ReaderV1 *fV0ReaderV1 = new AliV0ReaderV1("V0ReaderV1");
-
- fV0ReaderV1->SetUseOwnXYZCalculation(kTRUE);
- fV0ReaderV1->SetCreateAODs(kFALSE);// AOD Output
- fV0ReaderV1->SetUseAODConversionPhoton(kTRUE);
+ AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
+ if( !(AliV0ReaderV1*)mgr->GetTask("V0ReaderV1") ){
+ AliV0ReaderV1 *fV0ReaderV1 = new AliV0ReaderV1("V0ReaderV1");
+
+ fV0ReaderV1->SetUseOwnXYZCalculation(kTRUE);
+ fV0ReaderV1->SetCreateAODs(kFALSE);// AOD Output
+ fV0ReaderV1->SetUseAODConversionPhoton(kTRUE);
- if (!mgr) {
- Error("AddTask_V0ReaderV1", "No analysis manager found.");
- return;
- }
+ if (!mgr) {
+ Error("AddTask_V0ReaderV1", "No analysis manager found.");
+ return;
+ }
- // Set AnalysisCut Number
- AliConversionCuts *fCuts=NULL;
- if(V0ReaderCutNumber!=""){
- fCuts= new AliConversionCuts(V0ReaderCutNumber.Data(),V0ReaderCutNumber.Data());
- fCuts->SetPreSelectionCutFlag(kTRUE);
- if(fCuts->InitializeCutsFromCutString(V0ReaderCutNumber.Data())){
- if (IsHeavyIon==2){
- fCuts->SelectCollisionCandidates(AliVEvent::kINT7);
- fCuts->DoEtaShift(doEtaShiftV0Reader);
- }
- fV0ReaderV1->SetConversionCuts(fCuts);
- fCuts->SetFillCutHistograms("",kTRUE);
- }
- }
-
-
- if(inputHandler->IsA()==AliAODInputHandler::Class()){
- // AOD mode
- fV0ReaderV1->SetDeltaAODBranchName(Form("GammaConv_%s_gamma",cutnumberAODBranch.Data()));
- }
- fV0ReaderV1->Init();
+ // Set AnalysisCut Number
+ AliConversionCuts *fCuts=NULL;
+ if(V0ReaderCutNumber!=""){
+ fCuts= new AliConversionCuts(V0ReaderCutNumber.Data(),V0ReaderCutNumber.Data());
+ fCuts->SetPreSelectionCutFlag(kTRUE);
+ if(fCuts->InitializeCutsFromCutString(V0ReaderCutNumber.Data())){
+ if (IsHeavyIon==2){
+ fCuts->SelectCollisionCandidates(AliVEvent::kINT7);
+ fCuts->DoEtaShift(doEtaShiftV0Reader);
+ }
+ fV0ReaderV1->SetConversionCuts(fCuts);
+ fCuts->SetFillCutHistograms("",kTRUE);
+ }
+ }
+
+
+ if(inputHandler->IsA()==AliAODInputHandler::Class()){
+ // AOD mode
+ fV0ReaderV1->SetDeltaAODBranchName(Form("GammaConv_%s_gamma",cutnumberAODBranch.Data()));
+ }
+ fV0ReaderV1->Init();
- AliLog::SetGlobalLogLevel(AliLog::kInfo);
+ AliLog::SetGlobalLogLevel(AliLog::kInfo);
- //connect input V0Reader
- mgr->AddTask(fV0ReaderV1);
- mgr->ConnectInput(fV0ReaderV1,0,cinput);
+ //connect input V0Reader
+ mgr->AddTask(fV0ReaderV1);
+ mgr->ConnectInput(fV0ReaderV1,0,cinput);
- } else {
- Error("AddTask_V0ReaderV1", "Cannot execute AddTask, V0ReaderV1 already exists.");
- }
+ } else {
+ Error("AddTask_V0ReaderV1", "Cannot execute AddTask, V0ReaderV1 already exists.");
+ }
- // suitable cuts for the material Task:
- // PbPb: TaskCutnumber = "5680001060092663044803000000"; TPC mult in MC - 60-80% central
- // or: TaskCutnumber = "1680001060092663044803000000"; V0 mult in MC - 60-80% central
- // pPb: TaskCutnumber = "8000000090092663743800000000";
- // pp: TaskCutnumber = "0000000090092663743800000000";
+ // suitable cuts for the material Task:
+ // PbPb: TaskCutnumber = "5680001060092663044803000000"; TPC mult in MC - 60-80% central
+ // or: TaskCutnumber = "1680001060092663044803000000"; V0 mult in MC - 60-80% central
+ // pPb: TaskCutnumber = "8000000090092663743800000000";
+ // pp: TaskCutnumber = "0000000090092663743800000000";
-
- AliConversionCuts *analysisCuts = new AliConversionCuts();
- analysisCuts->InitializeCutsFromCutString(TaskCutnumber.Data());
- analysisCuts->SetFillCutHistograms("",kFALSE);
+
+ AliConversionCuts *analysisCuts = new AliConversionCuts();
+ analysisCuts->InitializeCutsFromCutString(TaskCutnumber.Data());
+ analysisCuts->SetFillCutHistograms("",kFALSE);
- AliAnalysisTaskResolution *fResolution= new AliAnalysisTaskResolution(Form("%s_Resolution",(analysisCuts->GetCutNumber()).Data()));
- fResolution->SetConversionCuts(analysisCuts,IsHeavyIon);
-// fResolution->SetIsMC(IsMC);
- mgr->AddTask(fResolution);
- AliAnalysisDataContainer *coutput1 =
- mgr->CreateContainer(Form("GammaConvResolution_%s",TaskCutnumber.Data()), TList::Class(),
- AliAnalysisManager::kOutputContainer,Form("GammaConv_Resolution_%s.root",TaskCutnumber.Data()));
+ AliAnalysisTaskResolution *fResolution= new AliAnalysisTaskResolution(Form("%s_Resolution",(analysisCuts->GetCutNumber()).Data()));
+ fResolution->SetConversionCuts(analysisCuts,IsHeavyIon);
+ fResolution->SetIsMC(IsMC);
+ mgr->AddTask(fResolution);
+ AliAnalysisDataContainer *coutput1 =
+ mgr->CreateContainer(Form("GammaConvResolution_%s",TaskCutnumber.Data()), TList::Class(),
+ AliAnalysisManager::kOutputContainer,Form("GammaConv_Resolution_%s.root",TaskCutnumber.Data()));
- AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
- mgr->ConnectInput(fResolution, 0, cinput1 );
- mgr->ConnectOutput (fResolution, 1, coutput1);
+ AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
+ mgr->ConnectInput(fResolution, 0, cinput1 );
+ mgr->ConnectOutput (fResolution, 1, coutput1);
//connect containers
- return fResolution;
+ return fResolution;
}
AliPHOSCorrelations* AddTaskPi0Correlations ( const char* name = "Pi0Corr",
- const char* options = "11h",
- UInt_t offlineTriggerMask = AliVEvent::kCentral,
- AliPHOSCorrelations::TriggerSelection internalTriggerSelection = AliPHOSCorrelations::kNoSelection,
- Double_t sigmaWidth = 3.,
- Int_t downCentLimit = 0,
- Int_t upCentLimit = 90 )
+ const char* options = "11h",
+ UInt_t offlineTriggerMask = AliVEvent::kCentral,
+ AliPHOSCorrelations::TriggerSelection internalTriggerSelection = AliPHOSCorrelations::kNoSelection,
+ Double_t sigmaWidth = 3.,
+ Int_t downCentLimit = 0,
+ Int_t upCentLimit = 90 )
{
- //Author: Ponomarenko Daniil
+ //Author: Ponomarenko Daniil (Daniil.Ponomarenko@cern.ch)
/* $Id$ */
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
//_______________________________________________________________________________
AliPHOSCorrelations::AliPHOSCorrelations()
:AliAnalysisTaskSE(),
- fPHOSGeo(0x0),
+ fPHOSGeo(0x0),
fOutputContainer(0x0),
fMinClusterEnergy(0.3),
fMinBCDistance(0),
fNEMRPBins(9),
fAssocBins(),
fCheckHibridGlobal(kOnlyHibridTracks),
+ fPHOSEvent(false),
fPeriod(kUndefinedPeriod),
fInternalTriggerSelection(kNoSelection),
fMaxAbsVertexZ(10.),
fCentCutoffDown(0.),
fCentCutoffUp(90),
fMassInvMean(0.135),
- fMassInvSigma(0.01),
+ fMassInvSigma(0.05),
fSigmaWidth(0.),
+ fMassMeanP0(-20.9476),
+ fMassMeanP1(0.1300),
+ fMassSigmaP0(0.005),
+ fMassSigmaP1(-0.0001),
fEvent(0x0),
fEventESD(0x0),
fEventAOD(0x0),
fV0Cpol(0.),fV0Apol(0.),
fEPcalibFileName("$ALICE_ROOT/OADB/PHOS/PHOSflat.root"),
fVertexVector(),
- fVtxBin(0),
+ fVtxBin(0),
fCentralityEstimator("V0M"),
fCentrality(0.),
fCentBin(0),
fCaloPhotonsPHOS(0x0),
fTracksTPC(0x0),
fCaloPhotonsPHOSLists(0x0),
- fTracksTPCLists(0x0)
+ fTracksTPCLists(0x0)
{
//Deafult constructor, no memory allocations here
}
//_______________________________________________________________________________
AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period)
:AliAnalysisTaskSE(name),
- fPHOSGeo(0x0),
+ fPHOSGeo(0x0),
fOutputContainer(0x0),
fMinClusterEnergy(0.3),
fMinBCDistance(0),
fNEMRPBins(9),
fAssocBins(),
fCheckHibridGlobal(kOnlyHibridTracks),
+ fPHOSEvent(false),
fPeriod(period),
fInternalTriggerSelection(kNoSelection),
fMaxAbsVertexZ(10.),
fCentCutoffDown(0.),
fCentCutoffUp(90),
fMassInvMean(0.135),
- fMassInvSigma(0.01),
+ fMassInvSigma(0.05),
fSigmaWidth(0.),
+ fMassMeanP0(-20.9476),
+ fMassMeanP1(0.1300),
+ fMassSigmaP0(0.005),
+ fMassSigmaP1(-0.0001),
fEvent(0x0),
fEventESD(0x0),
fEventAOD(0x0),
fV0Cpol(0.),fV0Apol(0.),
fEPcalibFileName("$ALICE_ROOT/OADB/PHOS/PHOSflat.root"),
fVertexVector(),
- fVtxBin(0),
+ fVtxBin(0),
fCentralityEstimator("V0M"),
fCentrality(0.),
fCentBin(0),
fCaloPhotonsPHOS(0x0),
fTracksTPC(0x0),
fCaloPhotonsPHOSLists(0x0),
- fTracksTPCLists(0x0)
+ fTracksTPCLists(0x0)
{
// Constructor
// Output slots #0 write into a TH1 container
fVertex[0]=0; fVertex[1]=0; fVertex[2]=0;
- fPHOSGeo = AliPHOSGeometry::GetInstance("IHEP");
+ SetGeometry();
+
+ ZeroingVariables();
}
//_______________________________________________________________________________
AliPHOSCorrelations::~AliPHOSCorrelations()
// Create histograms
// Called once
const Int_t nRuns=200 ;
+ const Int_t ptMult = 200;
+ const Double_t ptMin = 0.;
+ const Double_t ptMax = 20.;
// Create histograms
if(fOutputContainer != NULL) { delete fOutputContainer; }
fOutputContainer->Add(new TH2F("hSelEvents","Event selection", kTotalSelected+1, 0., double(kTotalSelected+1), nRuns,0.,float(nRuns))) ;
fOutputContainer->Add(new TH2F("hCentrality","Event centrality", 100,0.,100.,nRuns,0.,float(nRuns))) ;
fOutputContainer->Add(new TH2F("phiRPflat","RP distribution with TPC flat", 100, 0., 2.*TMath::Pi(),20,0.,100.)) ;
- fOutputContainer->Add(new TH2F("massWindow","mean & sigma", 100,0.1,0.18,100,0.,0.5));
+ fOutputContainer->Add(new TH2F("massWindow","mean & sigma", 100,0.095,0.185,500,0.,0.05));
+ fOutputContainer->Add(new TH2F("hCluEvsClu","ClusterMult vs E",200,0.,10.,100,0.,100.)) ;
// Set hists, with track's and cluster's angle distributions.
+ SetHistPtNumTrigger(ptMult, ptMin, ptMax);
SetHistEtaPhi();
SetHistPHOSClusterMap();
- SetHistCutDistribution();
- SetHistPtAssoc();
+ SetHistMass(ptMult, ptMin, ptMax);
+ SetHistPtAssoc(ptMult, ptMin, ptMax);
// Setup photon lists
Int_t kapacity = fNVtxZBins * GetNumberOfCentralityBins() * fNEMRPBins;
PostData(1, fOutputContainer);
}
//_______________________________________________________________________________
+void AliPHOSCorrelations::SetHistPtNumTrigger(Int_t ptMult, Double_t ptMin, Double_t ptMax)
+{
+ TString spid[4]={"all","cpv","disp","both"} ;
+ for(Int_t ipid=0; ipid<4; ipid++)
+ {
+ fOutputContainer->Add(new TH2F(Form("nTrigger_%s", spid[ipid].Data()), Form("Num of trigger particle %s", spid[ipid].Data()), ptMult+300, ptMin, ptMax, 10000, 0, 1 ) );
+ TH2F *h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Pt [GEV]");
+ h->GetYaxis()->SetTitle("#varepsilon"); // 1/efficiensy
+ }
+}
+//_______________________________________________________________________________
void AliPHOSCorrelations::SetHistEtaPhi()
{
// Set hists, with track's and cluster's angle distributions.
h->GetYaxis()->SetTitle("#eta");
}
//_______________________________________________________________________________
-void AliPHOSCorrelations::SetHistCutDistribution()
+void AliPHOSCorrelations::SetHistMass(Int_t ptMult, Double_t ptMin, Double_t ptMax)
{
// Set other histograms.
// cout<<"\nSetting output SetHist_CutDistribution...";
-
- Int_t PtMult = 100;
- Double_t PtMin = 0.;
- Double_t PtMax = 20.;
+
Double_t massMin = fMassInvMean-fMassInvSigma;
Double_t massMax = fMassInvMean+fMassInvSigma;
+ TString spid[4]={"all","cpv","disp","both"} ;
- // Real ++++++++++++++++++++++++++++++
+ TH2F * h;
- fOutputContainer->Add(new TH2F("all_mpt"," Only standard cut's ", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
- TH2F * h = static_cast<TH2F*>(fOutputContainer->Last()) ;
- h->GetXaxis()->SetTitle("Mass [GeV]");
- h->GetYaxis()->SetTitle("Pt [GEV]");
+ for(Int_t ipid=0; ipid<4; ipid++)
+ {
+ // Real ++++++++++++++++++++++++++++++
- fOutputContainer->Add(new TH2F("cpv_mpt"," CPV cut ", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
- h = static_cast<TH2F*>(fOutputContainer->Last()) ;
- h->GetXaxis()->SetTitle("Mass [GeV]");
- h->GetYaxis()->SetTitle("Pt [GEV]");
+ fOutputContainer->Add(new TH2F(Form("%s_mpt",spid[ipid].Data() )," real ", 100, massMin, massMax, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
- fOutputContainer->Add(new TH2F("disp_mpt"," Disp cut ", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
- h = static_cast<TH2F*>(fOutputContainer->Last()) ;
- h->GetXaxis()->SetTitle("Mass [GeV]");
- h->GetYaxis()->SetTitle("Pt [GEV]");
+ // MIX +++++++++++++++++++++++++
- fOutputContainer->Add(new TH2F("both_mpt"," Both cuts (CPV + Disp) ", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
- h = static_cast<TH2F*>(fOutputContainer->Last()) ;
- h->GetXaxis()->SetTitle("Mass [GeV]");
- h->GetYaxis()->SetTitle("Pt [GEV]");
+ fOutputContainer->Add(new TH2F(Form("mix_%s_mpt",spid[ipid].Data() )," mix ", 100, massMin, massMax, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
+ // Real ++++++++++++++++++++++++++++++
- // MIX +++++++++++++++++++++++++
+ fOutputContainer->Add(new TH2F(Form("%s_mpt_left",spid[ipid].Data() )," real ", 100, 0.05, 0.1, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
- fOutputContainer->Add(new TH2F("mix_all_mpt"," Only standard cut's (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
- h = static_cast<TH2F*>(fOutputContainer->Last()) ;
- h->GetXaxis()->SetTitle("Mass [GeV]");
- h->GetYaxis()->SetTitle("Pt [GEV]");
+ fOutputContainer->Add(new TH2F(Form("%s_mpt_right",spid[ipid].Data() )," real ", 100, 0.2, 0.4, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
- fOutputContainer->Add(new TH2F("mix_cpv_mpt"," CPV cut (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
- h = static_cast<TH2F*>(fOutputContainer->Last()) ;
- h->GetXaxis()->SetTitle("Mass [GeV]");
- h->GetYaxis()->SetTitle("Pt [GEV]");
+ // MIX +++++++++++++++++++++++++
- fOutputContainer->Add(new TH2F("mix_disp_mpt"," Disp cut (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
- h = static_cast<TH2F*>(fOutputContainer->Last()) ;
- h->GetXaxis()->SetTitle("Mass [GeV]");
- h->GetYaxis()->SetTitle("Pt [GEV]");
+ fOutputContainer->Add(new TH2F(Form("mix_%s_mpt_left",spid[ipid].Data() )," mix ", 100, 0.05, 0.1, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
- fOutputContainer->Add(new TH2F("mix_both_mpt"," Both cuts (CPV + Disp) (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
- h = static_cast<TH2F*>(fOutputContainer->Last()) ;
- h->GetXaxis()->SetTitle("Mass [GeV]");
- h->GetYaxis()->SetTitle("Pt [GEV]");
+ fOutputContainer->Add(new TH2F(Form("mix_%s_mpt_right",spid[ipid].Data() )," mix ", 100, 0.2, 0.4, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
+ }
+
+ // Calibration PHOS Module Pi0peak {REAL}
+ for(Int_t mod=1; mod<4; mod++){
+ fOutputContainer->Add(new TH2F(Form("both%d_mpt",mod),Form("Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
+
+ // Calibration PHOS Module Pi0peak {MIX}
+ fOutputContainer->Add(new TH2F(Form("mix_both%d_mpt",mod),Form(" Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
+
+ }
+
+ // For efficiensy.
+ for(Int_t ipid=0; ipid<4; ipid++)
+ {
+ // Real ++++++++++++++++++++++++++++++
+ fOutputContainer->Add(new TH2F(Form("%s_mpt_eff",spid[ipid].Data() )," real ", 100, massMin, massMax, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
- // Calibration Pi0peak {REAL}
+ // MIX +++++++++++++++++++++++++
+
+ fOutputContainer->Add(new TH2F(Form("mix_%s_mpt_eff",spid[ipid].Data() )," mix ", 100, massMin, massMax, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
+
+ // Real ++++++++++++++++++++++++++++++
+
+ fOutputContainer->Add(new TH2F(Form("%s_mpt_left_eff",spid[ipid].Data() )," real ", 100, 0.05, 0.1, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
+
+ fOutputContainer->Add(new TH2F(Form("%s_mpt_right_eff",spid[ipid].Data() )," real ", 100, 0.2, 0.4, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
+
+ // MIX +++++++++++++++++++++++++
+
+ fOutputContainer->Add(new TH2F(Form("mix_%s_mpt_left_eff",spid[ipid].Data() )," mix ", 100, 0.05, 0.1, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
+
+ fOutputContainer->Add(new TH2F(Form("mix_%s_mpt_right_eff",spid[ipid].Data() )," mix ", 100, 0.2, 0.4, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Mass [GeV]");
+ h->GetYaxis()->SetTitle("Pt [GEV]");
+ }
+
+ // Calibration PHOS Module Pi0peak {REAL}
for(Int_t mod=1; mod<4; mod++){
- fOutputContainer->Add(new TH2F(Form("both%d_mpt",mod),Form("Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+ fOutputContainer->Add(new TH2F(Form("both%d_mpt_eff",mod),Form("Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, ptMult, ptMin, ptMax ) );
h = static_cast<TH2F*>(fOutputContainer->Last()) ;
h->GetXaxis()->SetTitle("Mass [GeV]");
h->GetYaxis()->SetTitle("Pt [GEV]");
- // Calibration Pi0peak {MIX}
- fOutputContainer->Add(new TH2F(Form("mix_both%d_mpt",mod),Form(" Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, PtMult, PtMin, PtMax ) );
- h = static_cast<TH2F*>(fOutputContainer->FindObject("mix_both1_mpt")) ;
+ // Calibration PHOS Module Pi0peak {MIX}
+ fOutputContainer->Add(new TH2F(Form("mix_both%d_mpt_eff",mod),Form(" Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, ptMult, ptMin, ptMax ) );
+ h = static_cast<TH2F*>(fOutputContainer->Last()) ;
h->GetXaxis()->SetTitle("Mass [GeV]");
h->GetYaxis()->SetTitle("Pt [GEV]");
// cout<<" OK!"<<endl;
}
//_______________________________________________________________________________
-void AliPHOSCorrelations::SetHistPtAssoc()
+void AliPHOSCorrelations::SetHistPtAssoc(Int_t ptMult, Double_t ptMin, Double_t ptMax)
{
Double_t pi = TMath::Pi();
Int_t EtaMult = 20;
Float_t EtaMin = -1.;
Float_t EtaMax = 1.;
- Int_t PtTrigMult = 100;
- Float_t PtTrigMin = 0.;
- Float_t PtTrigMax = 20.;
TString spid[4]={"all","cpv","disp","both"} ;
+ Int_t PhotonsInMod[6] = {1, 2, 3, 12, 13, 23};
for (int i = 0; i<fAssocBins.GetSize()-1; i++){
for(Int_t ipid=0; ipid<4; ipid++){
fOutputContainer->Add(new TH3F(Form("%s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)),
Form("%s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)),
- PtTrigMult, PtTrigMin, PtTrigMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) );
+ ptMult, ptMin, ptMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) );
TH3F * h = static_cast<TH3F*>(fOutputContainer->Last()) ;
h->GetXaxis()->SetTitle("Pt_{triger} [GEV]");
h->GetYaxis()->SetTitle("#phi [rad]");
fOutputContainer->Add(new TH3F(Form("mix_%s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)),
Form("Mixed %s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)),
- PtTrigMult, PtTrigMin, PtTrigMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) );
+ ptMult, ptMin, ptMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) );
h = static_cast<TH3F*>(fOutputContainer->Last()) ;
h->GetXaxis()->SetTitle("Pt_{triger} [GEV]");
h->GetYaxis()->SetTitle("#phi [rad]");
h->GetZaxis()->SetTitle("#eta");
+
+ for(Int_t m=0; m<6; m++)
+ {
+ fOutputContainer->Add(new TH3F(Form("mix_%s_ptphieta_ptAssoc_%3.1f_mod%i",spid[ipid].Data(),fAssocBins.At(i+1), PhotonsInMod[m]),
+ Form("Mixed %s_ptphieta_ptAssoc_%3.1f_mod%i",spid[ipid].Data(),fAssocBins.At(i+1), PhotonsInMod[m]),
+ ptMult, ptMin, ptMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) );
+ h = static_cast<TH3F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Pt_{triger} [GEV]");
+ h->GetYaxis()->SetTitle("#phi [rad]");
+ h->GetZaxis()->SetTitle("#eta");
+ }
+
+ for(Int_t itpc=1; itpc<3; itpc++)
+ {
+ fOutputContainer->Add(new TH3F(Form("mix_%s_ptphieta_ptAssoc_%3.1f_tpc%i",spid[ipid].Data(),fAssocBins.At(i+1), itpc),
+ Form("Mixed %s_ptphieta_ptAssoc_%3.1f_tpc%i",spid[ipid].Data(),fAssocBins.At(i+1), itpc),
+ ptMult, ptMin, ptMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) );
+ h = static_cast<TH3F*>(fOutputContainer->Last()) ;
+ h->GetXaxis()->SetTitle("Pt_{triger} [GEV]");
+ h->GetYaxis()->SetTitle("#phi [rad]");
+ h->GetZaxis()->SetTitle("#eta");
+ }
}
}
}
PostData(1, fOutputContainer);
return ;
}
-
+
+ ZeroingVariables();
+
fEventESD = dynamic_cast<AliESDEvent*>(fEvent);
fEventAOD = dynamic_cast<AliAODEvent*>(fEvent);
- {
- FillHistogram("hTriggerPassedEvents", 0);
-
- Bool_t isMB = (fEvent->GetTriggerMask() & (ULong64_t(1)<<1));
- Bool_t isCentral = (fEvent->GetTriggerMask() & (ULong64_t(1)<<4));
- Bool_t isSemiCentral = (fEvent->GetTriggerMask() & (ULong64_t(1)<<7));
-
- if (isMB) FillHistogram("hTriggerPassedEvents", 2.);
- if (isCentral) FillHistogram("hTriggerPassedEvents", 3.);
- if (isSemiCentral) FillHistogram("hTriggerPassedEvents", 4.);
- }
-
- // For first event from data only:
- if( fRunNumber<0)
- {
- if (fDebug >= 1) cout<<"Mean: "<< fMassInvMean << " Sigma: "<< fMassInvSigma
- <<" Sigma Width: " <<fSigmaWidth <<endl;
- if (!fSigmaWidth) FillHistogram("massWindow", fMassInvMean, fMassInvSigma);
- else FillHistogram("massWindow", fMassInvMean, fMassInvSigma*fSigmaWidth);
- }
+ TestTrigger();
// Step 1(done once):
if( fRunNumber != fEvent->GetRunNumber() )
{
fRunNumber = fEvent->GetRunNumber();
fInternalRunNumber = ConvertToInternalRunNumber(fRunNumber);
+ //SetGeometry();
SetESDTrackCuts();
}
LogProgress(1);
// Step 5: Event Photons (PHOS Clusters) selectionMakeFlat
SelectPhotonClusters();
- if( ! fCaloPhotonsPHOS->GetEntriesFast() ) LogSelection(kHasPHOSClusters, fInternalRunNumber);
+ if( ! fCaloPhotonsPHOS->GetEntriesFast() )
+ LogSelection(kHasPHOSClusters, fInternalRunNumber);
LogProgress(6);
// Step 6: Event Associated particles (TPC Tracks) selection
LogProgress(7);
// Step 7: Consider pi0 (photon/cluster) pairs.
- ConsiderPi0s();
+ //ConsiderPi0s();
+ ConsiderPi0sME();
// Step 8; Mixing
ConsiderPi0sMix();
-
ConsiderTracksMix();
- //this->ConsiderPi0sTracksMix(); // Read how make mix events!
+ //ConsiderTracksMixME();
LogProgress(8);
// Step 9: Make TPC's mask
}
else
{
-// AliError("Event has 0x0 Primary Vertex, defaulting to origo");
+ //AliError("Event has 0x0 Primary Vertex, defaulting to origo");
fVertex[0] = 0;
fVertex[1] = 0;
fVertex[2] = 0;
// clear (or create) array for holding events photons/clusters
if(fCaloPhotonsPHOS)
fCaloPhotonsPHOS->Clear();
- else{
+ else
+ {
fCaloPhotonsPHOS = new TClonesArray("AliCaloPhoton",200);
+ fCaloPhotonsPHOS->SetOwner();
}
- Int_t nclu = fEvent->GetNumberOfCaloClusters() ;
Int_t inPHOS=0 ;
- for (Int_t i=0; i<nclu; i++) {
- AliVCluster *clu = fEvent->GetCaloCluster(i);
- if ( !clu->IsPHOS() ) continue ;
- if( clu->E()< fMinClusterEnergy) continue; // reject cluster
+ for (Int_t i=0; i<fEvent->GetNumberOfCaloClusters(); i++)
+ {
+ AliVCluster *clu = fEvent->GetCaloCluster(i);
+ if (!clu->IsPHOS() || clu->E()< fMinClusterEnergy) continue; // reject cluster
+ Float_t position[3];
+ clu->GetPosition(position);
+ TVector3 global(position) ;
+ Int_t relId[4] ;
+ fPHOSGeo->GlobalPos2RelId(global,relId) ;
+ Int_t modPHOS = relId[0] ;
+ Int_t cellXPHOS = relId[2];
+ Int_t cellZPHOS = relId[3] ;
+
Double_t distBC=clu->GetDistanceToBadChannel();
if(distBC<fMinBCDistance)
continue ;
if(TMath::Abs(tof) > fTOFCut ) continue ;
}
TLorentzVector lorentzMomentum;
- Double_t ecore = clu->GetMCEnergyFraction();
+ Double_t ecore = clu->GetCoreEnergy();
+ //Double_t ecore = clu->E();
- clu->GetMomentum(lorentzMomentum, fVertex);
- lorentzMomentum*=ecore/lorentzMomentum.E() ;
+ FillHistogram("hCluEvsClu", clu->E(), clu->GetNCells()) ;
+
+ Double_t origo[3] = {0,0,0}; // don't rely on event vertex, assume (0,0,0) ?
+ //clu->GetMomentum(lorentzMomentum, fVertex);
+ clu->GetMomentum(lorentzMomentum, origo);
+
if(inPHOS>=fCaloPhotonsPHOS->GetSize()){
fCaloPhotonsPHOS->Expand(inPHOS+50) ;
inPHOS++ ;
ph->SetCluster(clu);
- Float_t cellId=clu->GetCellAbsId(0) ;
- Int_t mod = (Int_t)TMath:: Ceil(cellId/(56*64) ) ;
- ph->SetModule(mod) ;
+ /*Float_t cellId=clu->GetCellAbsId(0) ;
+ Int_t mod = (Int_t)TMath:: Ceil(cellId/(56*64) ) ; */
+ ph->SetModule(modPHOS) ;
+
+ lorentzMomentum*=ecore/lorentzMomentum.E() ;
- ph->SetNCells(clu->GetNCells());
+ //ph->SetNCells(clu->GetNCells());
+ ph->SetMomV2(&lorentzMomentum) ;
ph->SetDispBit(clu->GetDispersion()<2.5) ;
ph->SetCPVBit(clu->GetEmcCpvDistance()>2.) ;
- Float_t position[3];
- clu->GetPosition(position);
- TVector3 global(position) ;
- Int_t relId[4] ;
- fPHOSGeo->GlobalPos2RelId(global,relId) ;
- Int_t modPHOS = relId[0] ;
- Int_t cellXPHOS = relId[2];
- Int_t cellZPHOS = relId[3] ;
-
FillHistogram(Form("QA_cluXZE_mod%i", modPHOS), cellXPHOS, cellZPHOS, lorentzMomentum.E() ) ;
}
}
//_______________________________________________________________________________
void AliPHOSCorrelations::ConsiderPi0s()
{
+ // Must consider only PHOS events in real distribution.
+ if (fPHOSEvent)
+ {
+ const Int_t nPHOS=fCaloPhotonsPHOS->GetEntriesFast() ;
+ for(Int_t i1=0; i1 < nPHOS-1; i1++)
+ {
+ AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
+ for (Int_t i2=i1+1; i2<nPHOS; i2++)
+ {
+ AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i2) ;
+ TLorentzVector p12 = *ph1 + *ph2;
+
+ Double_t phiTrigger=p12.Phi() ;
+ Double_t etaTrigger=p12.Eta() ;
+
+ Double_t m=p12.M() ;
+ Double_t pt=p12.Pt() ;
+ Double_t eff = 1./GetEfficiency(pt);
+ int mod1 = ph1->Module() ;
+ int mod2 = ph2->Module() ;
+
+ FillHistogram("clu_phieta",phiTrigger,etaTrigger);
+ FillHistogram("clusingle_phieta",ph1->Phi(), ph1->Eta());
+ FillHistogram("clusingle_phieta",ph2->Phi(), ph2->Eta());
+
+
+ FillHistogram("all_mpt",m, pt);
+ FillHistogram("all_mpt_left",m, pt);
+ FillHistogram("all_mpt_right",m, pt);
+
+ FillHistogram("all_mpt_eff",m, pt, eff);
+ FillHistogram("all_mpt_left_eff",m, pt, eff);
+ FillHistogram("all_mpt_right_eff",m, pt, eff);
+
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ {
+ FillHistogram("cpv_mpt",m, pt);
+ FillHistogram("cpv_mpt_left",m, pt);
+ FillHistogram("cpv_mpt_right",m, pt);
+
+ FillHistogram("cpv_mpt_eff",m, pt, eff);
+ FillHistogram("cpv_mpt_left_eff",m, pt, eff);
+ FillHistogram("cpv_mpt_right_eff",m, pt, eff);
+ }
- const Int_t nPHOS=fCaloPhotonsPHOS->GetEntriesFast() ;
- for(Int_t i1=0; i1 < nPHOS-1; i1++){
- AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
- for (Int_t i2=i1+1; i2<nPHOS; i2++){
- AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i2) ;
- TLorentzVector p12 = *ph1 + *ph2;
+ if ( ph1->IsDispOK() && ph2->IsDispOK() )
+ {
+ FillHistogram("disp_mpt",m, pt);
+ FillHistogram("disp_mpt_left",m, pt);
+ FillHistogram("disp_mpt_right",m, pt);
+
+ FillHistogram("disp_mpt_eff",m, pt, eff);
+ FillHistogram("disp_mpt_left_eff",m, pt, eff);
+ FillHistogram("disp_mpt_right_eff",m, pt, eff);
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ {
+ FillHistogram("both_mpt",m, pt);
+ FillHistogram("both_mpt_left",m, pt);
+ FillHistogram("both_mpt_right",m, pt);
+
+ FillHistogram("both_mpt_eff",m, pt, eff);
+ FillHistogram("both_mpt_left_eff",m, pt, eff);
+ FillHistogram("both_mpt_right_eff",m, pt, eff);
+ if(mod1 == mod2) // for each module
+ {
+ FillHistogram(Form("both%d_mpt",mod1),m, pt);
+ FillHistogram(Form("both%d_mpt_eff",mod1),m, pt, eff);
+ }
+ }
+ }
- Double_t phiTrigger=p12.Phi() ;
- Double_t etaTrigger=p12.Eta() ;
+ if(!TestMass(m,pt)) continue;
- Double_t m=p12.M() ;
- Double_t pt=p12.Pt() ;
- int mod1 = ph1->Module() ;
- int mod2 = ph2->Module() ;
-
+ FillHistogram("nTrigger_all", pt, 1./eff);
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ FillHistogram("nTrigger_cpv", pt, 1./eff);
+ if ( ph1->IsDispOK() && ph2->IsDispOK() )
+ {
+ FillHistogram("nTrigger_disp", pt, 1./eff);
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ FillHistogram("nTrigger_both", pt, 1./eff);
+ }
- FillHistogram("clu_phieta",phiTrigger,etaTrigger);
- FillHistogram("clusingle_phieta",ph1->Phi(), ph1->Eta());
- FillHistogram("clusingle_phieta",ph2->Phi(), ph2->Eta());
+ // Take track's angles and compare with cluster's angles.
+ for(Int_t i3=0; i3<fTracksTPC->GetEntriesFast(); i3++){
+ TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i3);
+ Double_t phiAssoc = track->Phi();
+ Double_t etaAssoc = track->Eta();
+ Double_t ptAssoc = track->Pt();
- FillHistogram("all_mpt",m, pt);
-
- if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
- FillHistogram("cpv_mpt",m, pt);
-
- if ( ph1->IsDispOK() && ph2->IsDispOK() ){
- FillHistogram("disp_mpt",m, pt);
- if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) {
- FillHistogram("both_mpt",m, pt);
- if(mod1 == mod2) FillHistogram(Form("both%d_mpt",mod1),m, pt);
- }
+ Double_t dPhi = phiTrigger - phiAssoc;
+ while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi();
+ while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi();
+
+ Double_t dEta = etaTrigger - etaAssoc;
+
+ Double_t ptAssocBin=GetAssocBin(ptAssoc) ;
+ FillHistogram(Form("all_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff);
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ FillHistogram(Form("cpv_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff);
+
+ if ( ph1->IsDispOK() && ph2->IsDispOK() ){
+ FillHistogram(Form("disp_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff);
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ FillHistogram(Form("both_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff);
+ }
+ }
+ }
+ }
}
-
- if(!TestMass(m,pt)) continue;
-
- // Take track's angles and compare with cluster's angles.
- for(Int_t i3=0; i3<fTracksTPC->GetEntriesFast(); i3++){
- TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i3);
-
- Double_t phiAssoc = track->Phi();
- Double_t etaAssoc = track->Eta();
- Double_t ptAssoc = track->Pt();
-
- Double_t dPhi = phiAssoc - phiTrigger;
- while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi();
- while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi();
-
- Double_t dEta = etaAssoc - etaTrigger;
-
- Double_t ptAssocBin=GetAssocBin(ptAssoc) ;
- FillHistogram(Form("all_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);
- if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
- FillHistogram(Form("cpv_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);
-
- if ( ph1->IsDispOK() && ph2->IsDispOK() ){
- FillHistogram(Form("disp_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);
- if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
- FillHistogram(Form("both_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);
- }
- }
- }
- }
}
//_______________________________________________________________________________
void AliPHOSCorrelations::ConsiderPi0sMix()
{
- TList * arrayList = GetCaloPhotonsPHOSList(fVtxBin, fCentBin, fEMRPBin);
- for(Int_t evi=0; evi<arrayList->GetEntries();evi++){
- TClonesArray * mixPHOS = static_cast<TClonesArray*>(arrayList->At(evi));
- for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++){
- AliCaloPhoton * ph1 = (AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
- for(Int_t i2=0; i2<mixPHOS->GetEntriesFast(); i2++){
- AliCaloPhoton * ph2 = (AliCaloPhoton*)mixPHOS->At(i2) ;
- TLorentzVector p12 = *ph1 + *ph2;
- Double_t m=p12.M() ;
- Double_t pt=p12.Pt() ;
- int mod1 = ph1->Module() ;
- int mod2 = ph2->Module() ;
-
- FillHistogram("mix_all_mpt", m, pt);
- if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
- FillHistogram("mix_cpv_mpt",m, pt);
- if ( ph1->IsDispOK() && ph2->IsDispOK() ){
- FillHistogram("mix_disp_mpt",m, pt);
- if ( ph1->IsCPVOK() && ph2->IsCPVOK() ){
- FillHistogram("mix_both_mpt",m, pt);
- if (mod1 == mod2) FillHistogram(Form("mix_both%d_mpt",mod1),m, pt);
- }
- }
+ // We must consider only PHOS events in real distribution.
+ //UInt_t currentOfflineTriggerMask = GetCollisionCandidates();
+ if (fPHOSEvent)
+ {
+
+ TList * arrayList = GetCaloPhotonsPHOSList(fVtxBin, fCentBin, fEMRPBin);
+ for(Int_t evi=0; evi<arrayList->GetEntries();evi++)
+ {
+ TClonesArray * mixPHOS = static_cast<TClonesArray*>(arrayList->At(evi));
+ for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++)
+ {
+ AliCaloPhoton * ph1 = (AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
+ for(Int_t i2=0; i2<mixPHOS->GetEntriesFast(); i2++)
+ {
+ AliCaloPhoton * ph2 = (AliCaloPhoton*)mixPHOS->At(i2) ;
+ TLorentzVector p12 = *ph1 + *ph2;
+ Double_t m=p12.M() ;
+ Double_t pt=p12.Pt() ;
+ Double_t eff = 1./GetEfficiency(pt);
+
+ int mod1 = ph1->Module() ;
+ int mod2 = ph2->Module() ;
+
+ FillHistogram("mix_all_mpt", m, pt);
+ FillHistogram("mix_all_mpt_left",m, pt);
+ FillHistogram("mix_all_mpt_right",m, pt);
+
+ FillHistogram("mix_all_mpt_eff", m, pt, eff);
+ FillHistogram("mix_all_mpt_left_eff",m, pt, eff);
+ FillHistogram("mix_all_mpt_right_eff",m, pt, eff);
+
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ {
+ FillHistogram("mix_cpv_mpt",m, pt);
+ FillHistogram("mix_cpv_mpt_left",m, pt);
+ FillHistogram("mix_cpv_mpt_right",m, pt);
+
+ FillHistogram("mix_cpv_mpt_eff",m, pt, eff);
+ FillHistogram("mix_cpv_mpt_left_eff",m, pt, eff);
+ FillHistogram("mix_cpv_mpt_right_eff",m, pt, eff);
+ }
+ if ( ph1->IsDispOK() && ph2->IsDispOK() )
+ {
+ FillHistogram("mix_disp_mpt",m, pt);
+ FillHistogram("mix_disp_mpt_left",m, pt);
+ FillHistogram("mix_disp_mpt_right",m, pt);
+
+ FillHistogram("mix_disp_mpt_eff",m, pt, eff);
+ FillHistogram("mix_disp_mpt_left_eff",m, pt, eff);
+ FillHistogram("mix_disp_mpt_right_eff",m, pt, eff);
+
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ {
+ FillHistogram("mix_both_mpt",m, pt);
+ FillHistogram("mix_both_mpt_left",m, pt);
+ FillHistogram("mix_both_mpt_right",m, pt);
+
+ FillHistogram("mix_both_mpt_eff",m, pt, eff);
+ FillHistogram("mix_both_mpt_left_eff",m, pt, eff);
+ FillHistogram("mix_both_mpt_right_eff",m, pt, eff);
+
+ if (mod1 == mod2) // for each module
+ {
+ FillHistogram(Form("mix_both%d_mpt",mod1),m, pt);
+ FillHistogram(Form("mix_both%d_mpt_eff",mod1),m, pt, eff);
+ }
+ }
+ }
+ }
+ }
+ }
}
- }
- }
}
//_______________________________________________________________________________
void AliPHOSCorrelations::ConsiderTracksMix()
{
- TList * arrayList = GetTracksTPCList(fVtxBin, fCentBin, fEMRPBin);
- for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++) {
- AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
- for (Int_t i2=0; i2<fCaloPhotonsPHOS->GetEntriesFast(); i2++){
- AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i2) ;
- TLorentzVector p12 = *ph1 + *ph2;
- Double_t phiTrigger=p12.Phi() ;
- Double_t etaTrigger=p12.Eta() ;
-
- Double_t m=p12.M() ;
- Double_t pt=p12.Pt() ;
-
- if(!TestMass(m,pt)) continue;
- for(Int_t evi=0; evi<arrayList->GetEntries();evi++){
- TClonesArray * mixTracks = static_cast<TClonesArray*>(arrayList->At(evi));
- for(Int_t i3=0; i3<mixTracks->GetEntriesFast(); i3++){
- TLorentzVector * track = (TLorentzVector*)mixTracks->At(i3);
-
- Double_t phiAssoc = track->Phi();
- Double_t etaAssoc = track->Eta();
- Double_t ptAssoc = track->Pt();
-
- Double_t ptAssocBin=GetAssocBin(ptAssoc) ;
-
- Double_t dPhi = phiAssoc - phiTrigger;
- while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi();
- while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi();
+ TList * arrayList = GetTracksTPCList(fVtxBin, fCentBin, fEMRPBin);
+ for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++) {
+ AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
+ for (Int_t i2=0; i2<fCaloPhotonsPHOS->GetEntriesFast(); i2++){
+ AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i2) ;
+ TLorentzVector p12 = *ph1 + *ph2;
+ Double_t phiTrigger=p12.Phi() ;
+ Double_t etaTrigger=p12.Eta() ;
- Double_t dEta = etaAssoc - etaTrigger;
-
- FillHistogram(Form("mix_all_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);
- if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
- FillHistogram(Form("mix_cpv_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);
-
- if ( ph1->IsDispOK() && ph2->IsDispOK() ){
- FillHistogram(Form("mix_disp_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);
- if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
- FillHistogram(Form("mix_both_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);
- }
+ Double_t m=p12.M() ;
+ Double_t pt=p12.Pt() ;
+ Double_t eff = 1./GetEfficiency(pt);
+ Int_t mod1 = ph1->Module();
+ Int_t mod2 = ph2->Module();
+
+
+ if(!TestMass(m,pt)) continue;
+
+ for(Int_t evi=0; evi<arrayList->GetEntries();evi++){
+ TClonesArray * mixTracks = static_cast<TClonesArray*>(arrayList->At(evi));
+ for(Int_t i3=0; i3<mixTracks->GetEntriesFast(); i3++){
+ TLorentzVector * track = (TLorentzVector*)mixTracks->At(i3);
+
+ Double_t phiAssoc = track->Phi();
+ Double_t etaAssoc = track->Eta();
+ Double_t ptAssoc = track->Pt();
+
+ Double_t ptAssocBin=GetAssocBin(ptAssoc) ;
+
+ Double_t dPhi = phiTrigger - phiAssoc;
+ while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi();
+ while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi();
+
+ Double_t dEta = etaTrigger - etaAssoc;
+
+ FillHistogram(Form("mix_all_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff);
+ FillHistogram(Form("mix_all_ptphieta_ptAssoc_%3.1f_mod%i",ptAssocBin, GetModCase(mod1, mod2)), pt, dPhi, dEta, eff);
+ FillHistogram(Form("mix_all_ptphieta_ptAssoc_%3.1f_tpc%i",ptAssocBin, CheckTriggerEta(etaTrigger)), pt, dPhi, dEta, eff);
+
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ {
+ FillHistogram(Form("mix_cpv_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff);
+ FillHistogram(Form("mix_cpv_ptphieta_ptAssoc_%3.1f_mod%i",ptAssocBin, GetModCase(mod1, mod2)), pt, dPhi, dEta, eff);
+ FillHistogram(Form("mix_cpv_ptphieta_ptAssoc_%3.1f_tpc%i",ptAssocBin, CheckTriggerEta(etaTrigger)), pt, dPhi, dEta, eff);
+ }
+
+ if ( ph1->IsDispOK() && ph2->IsDispOK() ) {
+ FillHistogram(Form("mix_disp_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff);
+ FillHistogram(Form("mix_disp_ptphieta_ptAssoc_%3.1f_mod%i",ptAssocBin, GetModCase(mod1, mod2)), pt, dPhi, dEta, eff);
+ FillHistogram(Form("mix_disp_ptphieta_ptAssoc_%3.1f_tpc%i",ptAssocBin, CheckTriggerEta(etaTrigger)), pt, dPhi, dEta, eff);
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ {
+ FillHistogram(Form("mix_both_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff);
+ FillHistogram(Form("mix_both_ptphieta_ptAssoc_%3.1f_mod%i",ptAssocBin, GetModCase(mod1, mod2)), pt, dPhi, dEta, eff);
+ FillHistogram(Form("mix_both_ptphieta_ptAssoc_%3.1f_tpc%i",ptAssocBin, CheckTriggerEta(etaTrigger)), pt, dPhi, dEta, eff);
+ }
+ }
+ }
+ }
+ }
}
- }
- }
- }
}
+
+//_______________________________________________________________________________
+void AliPHOSCorrelations::ConsiderPi0sME()
+{
+ //Seek Most Energetic (ME) Pi0 and work whit it.
+ // Must consider only PHOS events in real distribution.
+ if (fPHOSEvent)
+ {
+ const Int_t nPHOS=fCaloPhotonsPHOS->GetEntriesFast() ;
+ for(Int_t i1=0; i1 < nPHOS-1; i1++)
+ {
+ AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
+ for (Int_t i2=i1+1; i2<nPHOS; i2++)
+ {
+ AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i2) ;
+ TLorentzVector p12 = *ph1 + *ph2;
+
+ Double_t phiTrigger=p12.Phi() ;
+ Double_t etaTrigger=p12.Eta() ;
+
+ Double_t m=p12.M() ;
+ Double_t pt=p12.Pt() ;
+ Double_t eff = 1./GetEfficiency(pt);
+ int mod1 = ph1->Module() ;
+ int mod2 = ph2->Module() ;
+
+ FillHistogram("clu_phieta",phiTrigger,etaTrigger);
+ FillHistogram("clusingle_phieta",ph1->Phi(), ph1->Eta());
+ FillHistogram("clusingle_phieta",ph2->Phi(), ph2->Eta());
+
+
+ FillHistogram("all_mpt",m, pt);
+ FillHistogram("all_mpt_left",m, pt);
+ FillHistogram("all_mpt_right",m, pt);
+
+ FillHistogram("all_mpt_eff",m, pt, eff);
+ FillHistogram("all_mpt_left_eff",m, pt, eff);
+ FillHistogram("all_mpt_right_eff",m, pt, eff);
+
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ {
+ FillHistogram("cpv_mpt",m, pt);
+ FillHistogram("cpv_mpt_left",m, pt);
+ FillHistogram("cpv_mpt_right",m, pt);
+
+ FillHistogram("cpv_mpt_eff",m, pt, eff);
+ FillHistogram("cpv_mpt_left_eff",m, pt, eff);
+ FillHistogram("cpv_mpt_right_eff",m, pt, eff);
+ }
+
+ if ( ph1->IsDispOK() && ph2->IsDispOK() )
+ {
+ FillHistogram("disp_mpt",m, pt);
+ FillHistogram("disp_mpt_left",m, pt);
+ FillHistogram("disp_mpt_right",m, pt);
+
+ FillHistogram("disp_mpt_eff",m, pt, eff);
+ FillHistogram("disp_mpt_left_eff",m, pt, eff);
+ FillHistogram("disp_mpt_right_eff",m, pt, eff);
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ {
+ FillHistogram("both_mpt",m, pt);
+ FillHistogram("both_mpt_left",m, pt);
+ FillHistogram("both_mpt_right",m, pt);
+
+ FillHistogram("both_mpt_eff",m, pt, eff);
+ FillHistogram("both_mpt_left_eff",m, pt, eff);
+ FillHistogram("both_mpt_right_eff",m, pt, eff);
+ if(mod1 == mod2) // for each module
+ {
+ FillHistogram(Form("both%d_mpt",mod1),m, pt);
+ FillHistogram(Form("both%d_mpt_eff",mod1),m, pt, eff);
+ }
+ }
+ }
+
+ if(!TestMass(m,pt)) continue;
+
+ Int_t modCase = GetModCase(mod1, mod2);
+
+ TestPi0ME(kPidAll, p12, modCase);
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ TestPi0ME(kPidCPV, p12, modCase);
+ if ( ph1->IsDispOK() && ph2->IsDispOK() )
+ {
+ TestPi0ME(kPidDisp, p12, modCase);
+ if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+ TestPi0ME(kPidBoth, p12, modCase);
+ }
+ }
+ }
+
+ TString spid[4]={"all","cpv","disp","both"} ;
+ for (int ipid = 0; ipid < 4; ipid++)
+ {
+ if (fMEExists[ipid])
+ FillHistogram(Form("nTrigger_%s", spid[ipid].Data()), fMEPt[ipid], GetEfficiency(fMEPt[ipid]));
+ }
+
+ // Take track's angles and compare with cluster's angles.
+ for(Int_t i3=0; i3<fTracksTPC->GetEntriesFast(); i3++){
+ TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i3);
+
+ Double_t phiAssoc = track->Phi();
+ Double_t etaAssoc = track->Eta();
+ Double_t ptAssoc = track->Pt();
+
+ Double_t ptAssocBin=GetAssocBin(ptAssoc) ;
+ Double_t dPhi(0.), dEta(0.);
+
+ for (int ipid = 0; ipid < 4; ipid++)
+ {
+ if (fMEExists[ipid])
+ {
+ dPhi = fMEPhi[ipid] - phiAssoc;
+ while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi();
+ while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi();
+ dEta = fMEEta[ipid] - etaAssoc;
+ FillHistogram(Form("%s_ptphieta_ptAssoc_%3.1f", spid[ipid].Data(), ptAssocBin), fMEPt[ipid], dPhi, dEta, 1./GetEfficiency(fMEPt[ipid]) );
+ }
+ }
+ }
+ }
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::ConsiderTracksMixME()
+{
+ TString spid[4]={"all","cpv","disp","both"} ;
+
+ TList * arrayList = GetTracksTPCList(fVtxBin, fCentBin, fEMRPBin);
+
+ for(Int_t evi=0; evi<arrayList->GetEntries();evi++){
+ TClonesArray * mixTracks = static_cast<TClonesArray*>(arrayList->At(evi));
+ for(Int_t i3=0; i3<mixTracks->GetEntriesFast(); i3++){
+ TLorentzVector * track = (TLorentzVector*)mixTracks->At(i3);
+
+ Double_t phiAssoc = track->Phi();
+ Double_t etaAssoc = track->Eta();
+ Double_t ptAssoc = track->Pt();
+
+ Double_t ptAssocBin=GetAssocBin(ptAssoc) ;
+
+ Double_t dPhi(0.), dEta(0.);
+
+ for (int ipid = 0; ipid < 4; ipid++)
+ {
+ if (fMEExists[ipid])
+ {
+ dPhi = fMEPhi[ipid] - phiAssoc;
+ while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi();
+ while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi();
+ dEta = fMEEta[ipid] - etaAssoc;
+
+ FillHistogram(Form("mix_%s_ptphieta_ptAssoc_%3.1f", spid[ipid].Data(), ptAssocBin), fMEPt[ipid], dPhi, dEta, 1./GetEfficiency(fMEPt[ipid]));
+ FillHistogram(Form("mix_%s_ptphieta_ptAssoc_%3.1f_mod%i", spid[ipid].Data(), ptAssocBin, fMEModCase[ipid]), fMEPt[ipid], dPhi, dEta, 1./GetEfficiency(fMEPt[ipid]));
+ FillHistogram(Form("mix_%s_ptphieta_ptAssoc_%3.1f_tpc%i", spid[ipid].Data(), ptAssocBin, CheckTriggerEta(fMEEta[ipid])), fMEPt[ipid], dPhi, dEta, 1./GetEfficiency(fMEPt[ipid]));
+ }
+ }
+ }
+ }
+}
+
//_______________________________________________________________________________
TList* AliPHOSCorrelations::GetCaloPhotonsPHOSList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin){
}
}
//_______________________________________________________________________________
-Double_t AliPHOSCorrelations::GetAssocBin(Double_t pt){
+Double_t AliPHOSCorrelations::GetAssocBin(Double_t pt) const
+{
//Calculates bin
for(Int_t i=1; i<fAssocBins.GetSize(); i++){
if(pt>fAssocBins.At(i-1) && pt<fAssocBins.At(i))
// Estimate if this track can be used for the RP calculation. If all right - return "TRUE"
{
Float_t pt=t->Pt();
- if(pt<0.5 || pt>10.) return kFALSE ;
+ if(pt<0.5 || pt>20.) return kFALSE ;
if(fabs( t->Eta() )>0.8) return kFALSE;
if(!fESDtrackCuts->AcceptTrack(t)) return kFALSE ;
return kTRUE ;
// Estimate if this track can be used for the RP calculation. If all right - return "TRUE"
{
Float_t pt=t->Pt();
- if(pt<0.5 || pt>10.) return kFALSE ;
+ if(pt<0.5 || pt>20.) return kFALSE ;
if(fabs( t->Eta() )>0.8) return kFALSE;
if(fCheckHibridGlobal == kOnlyHibridTracks)
{
return kTRUE ;
}
-//_______________________________________________________________________________
-void AliPHOSCorrelations::SetPeriod(Period period)
-{
- fPeriod = period;
-}
-
//_______________________________________________________________________________
void AliPHOSCorrelations::LogProgress(int step)
// Fill "step by step" hist
//FillHistogram("hTotSelEvents", step+0.5);
}
//_______________________________________________________________________________
-Bool_t AliPHOSCorrelations::TestMass(Double_t m, Double_t /*pt*/)
+Bool_t AliPHOSCorrelations::TestMass(Double_t m, Double_t pt)
{
//Check if mair in pi0 peak window
//To make pT-dependent
- if (fSigmaWidth == 0.)
+ if (!fSigmaWidth) // Default big window
+ {
+ FillHistogram("massWindow", fMassInvMean, fMassInvSigma);
return (fMassInvMean-fMassInvSigma<m && m<fMassInvMean+fMassInvSigma) ;
- else
- return (fMassInvMean-fMassInvSigma*fSigmaWidth<m && m<fMassInvMean+fMassInvSigma*fSigmaWidth) ;
+ }
+ else // Parametrization
+ {
+ FillHistogram("massWindow", MassMeanFunktion(pt), MassSigmaFunktion(pt)*fSigmaWidth);
+ /*cout <<"MinMass: " << MassMeanFunktion(pt)-MassSigmaFunktion(pt)*fSigmaWidth
+ <<" m: "<<m
+ <<" pt: "<<pt
+ <<" MaxMass "<< MassMeanFunktion(pt)+MassSigmaFunktion(pt)*fSigmaWidth<<endl;*/
+ return ( MassMeanFunktion(pt)-MassSigmaFunktion(pt)*fSigmaWidth<m && m<MassMeanFunktion(pt)+MassSigmaFunktion(pt)*fSigmaWidth );
+ }
}
//_______________________________________________________________________________
-void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x)const
+Double_t AliPHOSCorrelations::MassMeanFunktion(Double_t &pt) const
+{
+ // Parametrization mean of mass window
+ return ( fMassMeanP1+TMath::Power(1.25,-pt+fMassMeanP0) );
+}
+//_______________________________________________________________________________
+Double_t AliPHOSCorrelations::MassSigmaFunktion(Double_t &pt) const
{
+ // Parametrization sigma of mass window
+ //TODO:: Kill falling at large pT.
+ return ( fabs(fMassSigmaP0 + fMassSigmaP1*pt) );
+}
+//_____________________________________________________________________________
+void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x)const{
//FillHistogram
TH1 * hist = dynamic_cast<TH1*>(fOutputContainer->FindObject(key)) ;
if(hist)
else
AliError(Form("can not find histogram (of instance TH1) <%s> ",key)) ;
}
-//_______________________________________________________________________________
-void AliPHOSCorrelations::FillHistogram(const char * key, Double_t x, Double_t y) const
-{
- //Fills 2D histograms with key
+//_____________________________________________________________________________
+void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x,Double_t y)const{
+ //FillHistogram
+ TH1 * th1 = dynamic_cast<TH1*> (fOutputContainer->FindObject(key));
+ if(th1)
+ th1->Fill(x, y) ;
+ else
+ AliError(Form("can not find histogram (of instance TH1) <%s> ",key)) ;
+}
+
+//_____________________________________________________________________________
+void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x,Double_t y, Double_t z) const{
+ //Fills 1D histograms with key
TObject * obj = fOutputContainer->FindObject(key);
-
+
TH2 * th2 = dynamic_cast<TH2*> (obj);
if(th2) {
- th2->Fill(x, y) ;
+ th2->Fill(x, y, z) ;
return;
}
+ TH3 * th3 = dynamic_cast<TH3*> (obj);
+ if(th3) {
+ th3->Fill(x, y, z) ;
+ return;
+ }
+
AliError(Form("can not find histogram (of instance TH2) <%s> ",key)) ;
}
-//_______________________________________________________________________________
-void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const
-{
- //Fills 3D histograms with key
+//_____________________________________________________________________________
+void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x,Double_t y, Double_t z, Double_t w) const{
+ //Fills 1D histograms with key
TObject * obj = fOutputContainer->FindObject(key);
-
+
TH3 * th3 = dynamic_cast<TH3*> (obj);
if(th3) {
- th3->Fill(x, y, z) ;
+ th3->Fill(x, y, z, w) ;
return;
}
-
+
AliError(Form("can not find histogram (of instance TH3) <%s> ",key)) ;
}
//_____________________________________________________________________________
}
}
}
-
+//_____________________________________________________________________________
+Double_t AliPHOSCorrelations::GetEfficiency(Double_t x) const {
+ //Efficiency for Both2core only!
+
+ Double_t e =1.;
+ // From 0 to 5 - 11h for different centrality.
+ /*0: 0-5%
+ 1: 5-10%
+ 2: 10-20%
+ 3: 20-40%
+ 4: 40-60%
+ 5: 60-80%
+ 6: 0-20%
+ 7: 0-10%*/
+ Double_t par0[9] = {-798863, 339.714, 6407.1, -457.778, 1283.65, -117.075, -19.3764, 0, 0};
+ Double_t par1[9] = {-799344, -1852.1, 3326.29, -384.229, 504.046, 562.608, 130.518, 0, 0};
+ Double_t par2[9] = {-858904, -1923.28, 5350.74, -568.946, 945.497, 419.647, 101.911, 0, 0};
+ Double_t par3[9] = {-795652, -1495.97, 2926.46, -357.804, 478.961, 551.127, 128.86, 0, 0};
+ Double_t par4[9] = {-891951, 279626, -123110, -5464.75, 27470.8, 283264, 15355.1, 192762, 44828.6};
+ Double_t par5[9] = {-1.1094e+06, -986.915, 2127.71, -268.908, 375.594, 380.791, 89.4053, 0, 0};
+ // Double_t par6[7] = {4.86106e+09, 4.47013e+08, -1.48079e+09, 1.47233e+08, -2.62356e+08, -1.00639e+08, -2.45629e+07, 0, 0};
+ // Double_t par7[7] = {-1.36243e+06, -26011.1, 135838, -12161.3, 24956.8, 4985.4, 1285.57, 0, 0};
+
+ // 8 for pPb13 and 0-100%
+ Double_t par8[9] = {6.87095e+06, 8.36553e+06, -3.29572e+06, 2.18688e+06, -739490, 521666, 106661, 0, 0};
+
+
+ Double_t* pFitPoint;
+
+ if(fPeriod == kLHC11h)
+ {
+ if(x<1.) x = 1.;
+
+ if (fCentrality<=5) pFitPoint = &par0[0];
+ if (fCentrality>5 && fCentrality<=10) pFitPoint = &par1[0];
+ if (fCentrality>10 && fCentrality<=20) pFitPoint = &par2[0];
+ if (fCentrality>20 && fCentrality<=40) pFitPoint = &par3[0];
+ if (fCentrality>40 && fCentrality<=60) pFitPoint = &par4[0];
+ if (fCentrality>60) pFitPoint = &par5[0];
+
+ Double_t pFit[9];
+ for (int i = 0; i < 10; ++i)
+ {
+ pFit[i] = *(pFitPoint+i);
+ }
+
+ if (fCentrality>40 && fCentrality<=60)
+ e = TMath::Exp(-(((((1.+(pFit[1]*x))+(pFit[2]*(x*x)))+(pFit[5]*(x*(x*x))))+(pFit[7]*(x*(x*(x*x)))))/((((pFit[3]*x)+(pFit[4]*(x*x)))+(pFit[6]*(x*(x*x))))+(pFit[8]*(x*(x*(x*x))))))) ;
+ else
+ e = TMath::Exp(-((((1.+(pFit[1]*x))+(pFit[2]*(x*x)))+(pFit[5]*(x*(x*x))))/(((pFit[3]*x)+(pFit[4]*(x*x)))+(pFit[6]*(x*(x*x)))))) ;
+ }
+ else
+ if( fPeriod == kLHC13 )
+ {
+ pFitPoint = &par8[0];
+ Double_t pFit[9];
+ for( int i = 0; i < 10; i++ )
+ {
+ pFit[i] = *(pFitPoint+i);
+ }
+
+ e = TMath::Exp(-((((pFit[0]+(pFit[1]*x))+(pFit[2]*(x*x)))+(pFit[5]*(x*(x*x))))/(((1.+(pFit[3]*x))+(pFit[4]*(x*x)))+(pFit[6]*(x*(x*x)))))) ;
+ }
+ else
+ {
+ // No case
+ AliWarning(Form("No efficiensy choise."));
+ e = 1.;
+ }
+
+ return e;
+}
+//_____________________________________________________________________________
+Int_t AliPHOSCorrelations::GetModCase(Int_t &mod1, Int_t &mod2) const {
+
+ // Return modules pair namber.
+ if(mod1 == mod2)
+ {
+ if(mod1 == 1) return 1;
+ if(mod1 == 2) return 2;
+ if(mod1 == 3) return 3;
+ }
+ else
+ {
+ if(mod1 == 1 || mod2 == 1)
+ if(mod1 == 2 || mod2 == 2)
+ return 12;
+
+ if(mod1 == 1 || mod2 == 1)
+ if(mod1 == 3 || mod2 == 3)
+ return 13;
+ if(mod1 == 2 || mod2 == 2)
+ if(mod1 == 3 || mod2 == 3)
+ return 23;
+ }
+
+ AliError(Form("No choise for mod1 = %i, mod2 = %i", mod1, mod2));
+ return 1;
+}
+//_____________________________________________________________________________
+void AliPHOSCorrelations::TestTrigger(){
+ FillHistogram("hTriggerPassedEvents", 0); // All events
+ if (fEvent->GetFiredTriggerClasses().Contains("PHI7") )
+ FillHistogram("hTriggerPassedEvents", 1.); // 13 events
+ if (fEvent->GetFiredTriggerClasses().Contains("PHS") )
+ FillHistogram("hTriggerPassedEvents", 2.); // 11h events
+
+ if (fEvent->GetFiredTriggerClasses().Contains("PHI7") || fEvent->GetFiredTriggerClasses().Contains("PHS"))
+ fPHOSEvent = true;
+
+ if( fDebug >= 2 )
+ AliInfo( Form("Event passed offline phos trigger test: %s ", fEvent->GetFiredTriggerClasses().Data() ) );
+
+ //fPHOSEvent = true;
+}
+//_____________________________________________________________________________
+Int_t AliPHOSCorrelations::CheckTriggerEta(Double_t eta){
+ if (eta>=0.)
+ return 1;
+ return 2;
+}
+//_____________________________________________________________________________
+void AliPHOSCorrelations::TestPi0ME(Int_t ipid, TLorentzVector p12, Int_t modCase)
+{
+ Double_t phiTrigger=p12.Phi() ;
+ Double_t etaTrigger=p12.Eta() ;
+ Double_t pt=p12.Pt() ;
+
+ if (pt >= fMEPt[ipid])
+ {
+ fMEPt[ipid] = pt;
+ fMEPhi[ipid] = phiTrigger;
+ fMEEta[ipid] = etaTrigger;
+ fMEModCase[ipid] = modCase;
+ fMEExists[ipid] = true;
+ }
+}
+//_____________________________________________________________________________
+void AliPHOSCorrelations::ZeroingVariables(){
+ for (int i = 0; i < 4; ++i)
+ {
+ fMEPhi[i] = fMEEta[i] = fMEPt[i] = -99;
+ fMEModCase[i] = 1;
+ fMEExists[i] = false;
+
+ }
+}
+
enum Period { kUndefinedPeriod, kLHC10h, kLHC11h, kLHC13 };
enum EventSelection { kTotal, kInternalTriggerMaskSelection, kHasVertex, kHasAbsVertex, kHasCentrality, kCentUnderUpperBinUpperEdge, kHasPHOSClusters, kHasTPCTracks, kTotalSelected };
enum HibridCheckVeriable { kOnlyHibridTracks, kWithOutHibridTracks, kAllTracks };
+ enum PID { kPidAll, kPidCPV, kPidDisp, kPidBoth};
enum TriggerSelection { kNoSelection, kCentralInclusive, kCentralExclusive, kSemiCentralInclusive, kSemiCentralExclusive, kMBInclusive, kMBExclusive };
void EnableTOFCut(Bool_t enable = kTRUE, Double_t TOFCut = 100.e-9){fTOFCutEnabled=enable; fTOFCut=TOFCut;}
void SetMassWindow(Double_t massMean = 0.135, Double_t massSigma = 0.01) { fMassInvMean = massMean; fMassInvSigma = massSigma; }
void SetSigmaWidth(Double_t sigmaWidth= 0) { fSigmaWidth = sigmaWidth; }
- void SetPeriod(Period period);
+ void SetMassMeanParametrs(Double_t p0 = -20.9476, Double_t p1 = 0.1300) {fMassMeanP0 = p0; fMassMeanP1 = p1;} // from mass fit
+ void SetMassSigmaParametrs(Double_t p0 = 0.005, Double_t p1 = -0.0001) {fMassSigmaP0 = p0; fMassSigmaP1 = p1;} // from mass fit
+ void SetPeriod(Period period) { fPeriod = period; }
void SetCentralityBorders (double down = 0., double up = 90.) ;
void SetPtAssocBins(TArrayD * arr){fAssocBins.Set(arr->GetSize(), arr->GetArray()) ;}
AliPHOSCorrelations& operator=(const AliPHOSCorrelations&); // not implemented
// Histograms and trees.
- void SetHistPtAssoc(); // Set massive of histograms (1-5).
- void SetHistCutDistribution(); // Set other histograms.
+ void SetHistPtNumTrigger(Int_t ptMult, Double_t ptMin, Double_t ptMax); // Set massive of histograms (1-5).
+ void SetHistPtAssoc(Int_t ptMult, Double_t ptMin, Double_t ptMax); // Set massive of histograms (1-5).
+ void SetHistMass(Int_t ptMult, Double_t ptMin, Double_t ptMax); // Set other histograms.
void SetHistEtaPhi(); // Set hists, with track's and cluster's angle distributions.
- void FillTrackEtaPhi(); // Distribution by track's angles.
void SetHistPHOSClusterMap(); // XZE distribution in PHOS.
- void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key.
+ void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key
void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key
- void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key.
+ void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key
+ void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z, Double_t w) const ; //Fill 3D histogram witn name key
+ void FillTrackEtaPhi(); // Distribution by track's angles.
void SetESDTrackCuts(); // AliESDtrack cuts ( for esd data )
Bool_t TestMass(Double_t m, Double_t pt) ;
- Double_t GetAssocBin(Double_t pt) ;
+ Double_t MassMeanFunktion(Double_t &pt) const ;
+ Double_t MassSigmaFunktion(Double_t &pt) const ;
+
+ Double_t GetAssocBin(Double_t pt) const ;
+
+ Double_t GetEfficiency(Double_t pt) const ; // Return Pi0 efficiency for current pT.
+
+ Int_t GetModCase(Int_t &mod1, Int_t &mod2) const; // Produce part of module neme for pTetaPhi histogram in mixed events.
Int_t ConvertToInternalRunNumber(Int_t run);
- void FillTriggerProgress();
+ void TestTrigger();
Bool_t RejectTriggerMaskSelection();
void SetVertex();
Double_t ApplyFlatteningV0A(Double_t phi, Double_t c) ; //Apply centrality-dependent flattening.
Double_t ApplyFlatteningV0C(Double_t phi, Double_t c) ; //Apply centrality-dependent flattening.
+ void ZeroingVariables();
virtual void SelectPhotonClusters();
void SelectAccosiatedTracks();
void ConsiderPi0s();
+ void ConsiderPi0sME();
void ConsiderPi0sMix(); // MIX for catch Mass
void ConsiderTracksMix(); // MIX for catch Yeild
+ void ConsiderTracksMixME();
+
+ void TestPi0ME(Int_t ipid, TLorentzVector p12, Int_t modCase);
+ Int_t CheckTriggerEta(Double_t eta);
TList* GetCaloPhotonsPHOSList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin);
TList* GetTracksTPCList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin);
// Control variables
Int_t fCheckHibridGlobal; // For checking/dischecking/passingcheck: t->IsHybridGlobalConstrainedGlobal();
+ Bool_t fPHOSEvent; // PHOS event trigger.
// Behavior / cuts
Period fPeriod;
Double_t fMassInvSigma ; //
Double_t fSigmaWidth; // 0 = wide
+ // Funktion of window mass parametrs: [mass, pt]
+ Double_t fMassMeanP0;
+ Double_t fMassMeanP1;
+ Double_t fMassSigmaP0;
+ Double_t fMassSigmaP1;
+
AliVEvent* fEvent; //! Current event
AliESDEvent* fEventESD; //! Current event, if ESD.
AliAODEvent* fEventAOD; //! Current event, if AOD.
Float_t fRP ; //! Reaction plane calculated with full TPC
Int_t fEMRPBin; //! Event Mixing Reaction Plane Bin
+ Double_t fMEPhi[4], fMEEta[4], fMEPt[4];
+ Bool_t fMEExists[4];
+ Int_t fMEModCase[4];
+
TClonesArray * fCaloPhotonsPHOS ; //! PHOS photons in current event
TClonesArray * fTracksTPC ; //! TPC Tracks in current event
if(isMC) //handle MC data
PHOSSupply->SetMCProduction(options) ;
+
+ //Need MagFeild
+ ((AliInputEventHandler*)mgr->GetInputEventHandler())->SetNeedField(kTRUE);
+
mgr->AddTask(tenderTask);
// Connect input/output
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+// Extension to Pi0FlowMC, using parametrized weights.
+// Authors: Boris Polishchuk
+// Date : 09.07.2013
+
+#include "AliStack.h"
+#include "TParticle.h"
+#include "AliCaloPhoton.h"
+#include "TH1.h"
+
+#include "AliAnalysisTaskPi0FlowMCParamWeights.h"
+
+ClassImp(AliAnalysisTaskPi0FlowMCParamWeights);
+
+AliAnalysisTaskPi0FlowMCParamWeights::AliAnalysisTaskPi0FlowMCParamWeights(const char* name, AliAnalysisTaskPi0Flow::Period period)
+: AliAnalysisTaskPi0FlowMC(name, period)
+{}
+
+AliAnalysisTaskPi0FlowMCParamWeights::~AliAnalysisTaskPi0FlowMCParamWeights()
+{}
+
+void AliAnalysisTaskPi0FlowMCParamWeights::UserCreateOutputObjects()
+{
+ // Do Pi0FlowMC CreateOuputObjects and call Sumw2 for newly created histograms.
+ AliAnalysisTaskPi0FlowMC::UserCreateOutputObjects();
+
+ TH1 * hist = 0;
+ char key[80];
+
+ const int kNPID = 14;
+ const char* pidNames[kNPID] = {"All", "Allcore", "Disp", "Disp2", "Dispcore", "Disp2core", "CPV", "CPVcore", "CPV2", "CPV2core", "Both", "Bothcore", "Both2", "Both2core"};
+
+ for(UInt_t iBin=0; iBin<GetNumberOfCentralityBins(); iBin++) {
+ for(Int_t ipid=0; ipid < kNPID; ipid++){
+
+ sprintf(key,"hPi0%s_cen%d", pidNames[ipid],iBin);
+ hist = dynamic_cast<TH1*>(fOutputContainer->FindObject(key));
+ hist->Sumw2(); printf(" ->Sumw2 invoked for %s.\n",key);
+
+ sprintf(key,"hMiPi0%s_cen%d", pidNames[ipid],iBin);
+ hist = dynamic_cast<TH1*>(fOutputContainer->FindObject(key));
+ hist->Sumw2(); printf(" ->Sumw2 invoked for %s.\n",key);
+ }
+ }
+
+}
+
+Double_t AliAnalysisTaskPi0FlowMCParamWeights::PrimaryWeight(Int_t primary){
+ //Check who is the primary and introduce weight to correct primary spectrum
+
+ if(primary<0 || primary>=fStack->GetNtrack())
+ return 1 ;
+ //trace primaries up to IP
+ TParticle* particle = fStack->Particle(primary);
+
+ Double_t r=particle->R() ;
+ Int_t mother = particle->GetFirstMother() ;
+ while(mother>-1){
+ if(r<1.)
+ break ;
+ particle = fStack->Particle(mother);
+ mother = particle->GetFirstMother() ;
+ r=particle->R() ;
+ }
+
+ return TMath::Max(0.,PrimaryParticleWeight(particle)) ;
+}
+
+Double_t AliAnalysisTaskPi0FlowMCParamWeights::PrimaryParticleWeight(TParticle * particle){
+ //Weight for particle
+
+
+ // pi0 weight (MC/Data):
+ // w = (par[0]+par[1]*x[0]+par[2]*x[0]*x[0]+par[3]*x[0]*x[0]*x[0])/(1.+par[3]*x[0]+par[4]*x[0]*x[0]+par[5]*x[0]*x[0]*x[0]);
+
+ Int_t pdg = particle->GetPdgCode() ;
+ Double_t x = particle->Pt() ;
+ Int_t mother = particle->GetFirstMother() ;
+ while(TMath::Abs(pdg)<100){//gamma, electrons, muons
+ if(mother>-1){
+ TParticle * tmpP=fStack->Particle(mother) ;
+ pdg=tmpP->GetPdgCode() ;
+ x = tmpP->Pt() ;
+ mother = tmpP->GetFirstMother() ;
+ }
+ else{ //direct photon/electron....
+ return 1.;
+ }
+ }
+
+
+ //lhc13e7
+ Double_t w = 15.9695 -26.2752*x + 16.7259*x*x -4.77561*x*x*x +0.602569*x*x*x*x;
+
+ //single pi0: 0-25GeV-flat
+ //Double_t w = 1.48592 -2.78259*x + 2.01851*x*x -0.661467*x*x*x +0.0980217*x*x*x*x;
+
+ //single pi0: 0-6GeV-flat
+ //Double_t w = 55.6309 -102.175*x + 73.7241*x*x -24.3558*x*x*x +3.74631*x*x*x*x;
+
+ return 1./w;
+
+}
+
+
+
--- /dev/null
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+// Authors: Boris Polishchuk
+// Date : 09.07.2013
+
+#ifndef ALIANALYSISTASKPI0FLOWMCPARAMWEIGHTS_H
+#define ALIANALYSISTASKPI0FLOWMCPARAMWEIGHTS_H
+
+#include "AliAnalysisTaskPi0FlowMC.h"
+
+class AliAnalysisTaskPi0FlowMCParamWeights : public AliAnalysisTaskPi0FlowMC
+{
+public:
+
+ AliAnalysisTaskPi0FlowMCParamWeights(const char* name = "AliAnalysisTaskPi0Flow", Period period = AliAnalysisTaskPi0Flow::kUndefinedPeriod);
+ virtual ~AliAnalysisTaskPi0FlowMCParamWeights();
+
+ void UserCreateOutputObjects();
+ // void SetParameters(Double_t p0,Double_t p1,Double_t p2,Double_t p3,Double_t p4,Double_t p5);
+
+private:
+
+ AliAnalysisTaskPi0FlowMCParamWeights(const AliAnalysisTaskPi0FlowMCParamWeights&); // not implemented
+ AliAnalysisTaskPi0FlowMCParamWeights& operator=(const AliAnalysisTaskPi0FlowMCParamWeights&); // not implemented
+
+protected:
+
+ Double_t PrimaryWeight(Int_t primary);
+ Double_t PrimaryParticleWeight(TParticle * particle);
+
+ ClassDef(AliAnalysisTaskPi0FlowMCParamWeights, 1); // PHOS analysis task
+};
+
+#endif // ALIANALYSISTASKPI0FLOWMCPARAMWEIGHTS_H
--- /dev/null
+int drawMB=0;
+
+void GetNU(int side=0){
+
+gStyle->SetOptStat(0);
+
+ TFile * f = new TFile("flow11h_QA.root") ;
+
+ TFile * f2 = new TFile("flow11hMB_QA.root") ;
+
+ char what[20];
+ if(side==0) sprintf(what,"phiRPV0Aflat") ;
+ if(side==1) sprintf(what,"phiRPV0Cflat") ;
+ if(side==2) sprintf(what,"phiRPflat") ;
+
+ TH2F* h=f->Get(what);
+ TH2F* h2=f2->Get(what);
+
+ TH3D* hPHOSphi=f->Get("hPHOSphi");
+
+ TF1 *fu=new TF1("fu","[0]*(1+2*[1]*TMath::Cos(2*x)+2*[2]*TMath::Sin(2*x))",1,5);
+
+ TH1D* hcos=new TH1D("cos","cos",10,0.,50.);
+ TH1D* hsin=new TH1D("sin","sin",10,0.,50.);
+ TH1D* hcosMB=new TH1D("cosMB","cosMB",10,0.,50.);
+ TH1D* hsinMB=new TH1D("sinMB","sinMB",10,0.,50.);
+ TH1D* hsinv2=new TH1D("sinv2","sinv2",10,0.,50.);
+
+ for(int cen=1;cen<=10;cen++){
+ char name[255];
+ sprintf(name,"phi_%d",cen);
+ TH3D* hphi = hPHOSphi->Clone(name);
+ hphi->GetXaxis()->SetRangeUser((cen-1)*5,(cen)*5);
+ TH1D* hCos=hphi->Project3D("z");
+
+ double meanC=0,meanS=0,errC=0,errS=0,mean=0;
+
+ for(int i=0;i<hCos->GetXaxis()->GetNbins();i++){
+ double bin=hCos->GetBinContent(i+1);
+ double err=hCos->GetBinError(i+1);
+ double phi=hCos->GetBinCenter(i+1);
+ mean+=bin;
+ meanC+=TMath::Cos(2*phi)*bin;
+ meanS+=TMath::Sin(2*phi)*bin;
+ errC+=TMath::Cos(2*phi)*err;
+ errS+=TMath::Cos(2*phi)*err;
+ }
+ meanC/=mean;
+ meanS/=mean;
+ errC/=mean;
+ errS/=mean;
+
+ cout<<"i: "<<cen<<", cos: "<<meanC<<"+-"<<errC<<", sin: "<<meanS<<"+-"<<errS<<endl;
+
+ char name[255];
+ sprintf(name,"EP_cen%d",cen);
+ TH1D * h1D = h->ProjectionX(name,cen,cen) ;
+ sprintf(name,"MB_cen%d",cen);
+ TH1D * h1DMB = h2->ProjectionX(name,cen,cen) ;
+
+ h1D->Fit(fu,"q0");
+
+ double sinv2 = meanS*fu->GetParameter(1) - meanC*fu->GetParameter(2);
+ double err = meanS*fu->GetParError(1) + errS*fu->GetParameter(1);
+
+ hsinv2->SetBinContent(cen,sinv2);
+ hsinv2->SetBinError(cen,err);
+
+ hcos->SetBinContent(cen,fu->GetParameter(1));
+ hcos->SetBinError(cen,fu->GetParError(1));
+ hsin->SetBinContent(cen,fu->GetParameter(2));
+ hsin->SetBinError(cen,fu->GetParError(2));
+
+ h1DMB->Fit(fu,"q0");
+
+ hcosMB->SetBinContent(cen,fu->GetParameter(1));
+ hcosMB->SetBinError(cen,fu->GetParError(1));
+ hsinMB->SetBinContent(cen,fu->GetParameter(2));
+ hsinMB->SetBinError(cen,fu->GetParError(2));
+ }
+
+ if(side==0) hcos->SetTitle("V0A EP");
+ if(side==1) hcos->SetTitle("V0C EP");
+ if(side==2) hcos->SetTitle("TPC EP");
+
+ hcos->SetMarkerStyle(20) ;
+ hcos->SetMarkerColor(2) ;
+ hcos->SetLineColor(2) ;
+ hcos->SetLineWidth(3);
+
+ hcos->SetMinimum(-0.01) ;
+ hcos->SetMaximum(0.01) ;
+ hcos->SetXTitle("centrality") ;
+ hcos->SetYTitle("<cos2#Psi> and <sin2#Psi") ;
+
+ hsin->SetMarkerStyle(20) ;
+ hsin->SetMarkerColor(3) ;
+ hsin->SetLineColor(3) ;
+ hsin->SetLineWidth(2);
+
+ hcosMB->SetMarkerStyle(25) ;
+ hcosMB->SetMarkerColor(2) ;
+ hcosMB->SetLineColor(2) ;
+ hcosMB->SetLineWidth(3);
+
+ hsinMB->SetMarkerStyle(25) ;
+ hsinMB->SetMarkerColor(3) ;
+ hsinMB->SetLineColor(3) ;
+ hsinMB->SetLineWidth(2);
+
+ hsinv2->SetMarkerStyle(20) ;
+ hsinv2->SetMarkerColor(4) ;
+ hsinv2->SetLineColor(4) ;
+ hsinv2->SetLineWidth(2);
+
+
+ hcos->Draw("pl") ;
+ hsin->Draw("pl same") ;
+ hsinv2->Draw("pl same");
+ if(drawMB){
+ hcosMB->Draw("pl same") ;
+ hsinMB->Draw("pl same") ;
+ }
+
+ TLegend * leg = new TLegend(0.6,0.7,0.9,0.9) ;
+ leg->AddEntry(hcos,"cos2#Psi","p") ;
+ leg->AddEntry(hsin,"sin2#Psi","p") ;
+ leg->AddEntry(hsinv2,"sin2#phi*cos2#Psi - cos2#phi*sin2#Psi","p") ;
+
+ if(drawMB){
+ leg->AddEntry(hcosMB,"cos2#Psi, kMB","p") ;
+ leg->AddEntry(hsinMB,"sin2#Psi, kMB","p") ;
+ }
+ leg->Draw() ;
+}
--- /dev/null
+#include "Methods.h"
+
+const Double_t kMean=0.135 ; //Approximate peak position to facilitate error estimate
+Int_t effcor=1; //correct on efficiency
+
+Double_t PeakPosition(Double_t pt){
+ //Fit to the measured peak position
+ return 4.99292e-003*exp(-pt*9.32300e-001)+1.34944e-001 ;
+}
+Double_t PeakWidth(Double_t pt){
+ //fit to the measured peak width
+ Double_t a=0.0068 ;
+ Double_t b=0.0025 ;
+ Double_t c=0.000319 ;
+ return TMath::Sqrt(a*a+b*b/pt/pt+c*c*pt*pt) ;
+}
+
+Double_t CB(Double_t * x, Double_t * par){
+ //Parameterization of Real/Mixed ratio
+ Double_t m=par[1] ;
+ Double_t s=par[2] ;
+ Double_t dx=(x[0]-m)/s ;
+ return par[0]*exp(-dx*dx/2.)+par[3] + par[4]*(x[0]-kMean) /*+ par[5]*(x[0]-kMean)*(x[0]-kMean) */;
+}
+Double_t CB2(Double_t * x, Double_t * par){
+ //Another parameterization of Real/Mixed ratio
+ Double_t m=par[1] ;
+ Double_t s=par[2] ;
+ Double_t dx=(x[0]-m)/s ;
+ return par[0]*exp(-dx*dx/2.)+par[3]+par[4]*(x[0]-kMean) + par[5]*(x[0]-kMean)*(x[0]-kMean) /*+ par[6]*(x[0]-kMean)*(x[0]-kMean)*(x[0]-kMean)*/;
+}
+Double_t CBs(Double_t * x, Double_t * par){
+ //Parameterizatin of signal
+ Double_t m=par[1] ;
+ Double_t s=par[2] ;
+ Double_t dx=(x[0]-m)/s ;
+ return par[0]*exp(-dx*dx/2.)/TMath::Sqrt(TMath::TwoPi())/s+par[3] ;
+}
+Double_t BG1(Double_t * x, Double_t * par){
+ //Normalizatino of Mixed
+ return par[0] + par[1]*(x[0]-kMean) /*+ par[2]*(x[0]-kMean)*(x[0]-kMean)*/;
+}
+Double_t BG2(Double_t * x, Double_t * par){
+ //Another normalization of Mixed
+ return par[0]+par[1]*(x[0]-kMean) + par[2]*(x[0]-kMean)*(x[0]-kMean) /*+ par[3]*(x[0]-kMean)*(x[0]-kMean)*(x[0]-kMean)*/;
+}
+
+void Method1(Int_t cen=1,Int_t side=1){
+//side = 1 - VOC, side = 0 - V0A
+//side = 2 - TPC 3 sub method, 3 - TPC 2 sub method
+
+ //Fit Real/Mixed ratio, normalize Mixed and subtract it from Real
+
+// TH1F * hCen = GetCen() ;
+// TH2F * hCenPHOS = GetCenPHOS() ;
+
+
+ char kind[15], w[25];
+ sprintf(w,""); //Weight: no weight - "NW", with weight - ""
+
+ char PID[25] ;
+ sprintf(PID,"Both2core") ;
+ char key[55];
+ char kind[15],kind2[15] ; //Reaction plane
+ char d[15]; //detector
+ sprintf(kind,"") ; //"" for real
+ sprintf(kind2,"") ; //"" for mixed
+
+ if(side==1)sprintf(d,"V0C");
+ else if(side==0)sprintf(d,"V0A");
+ else sprintf(d,"TPC");
+
+ TH3D *h3DR, *h3DM;
+cout<<"Getting histos from data..."<<endl;
+ h3DR = (TH3D*)GetRealMixed(cen,w,d,kind,kind2,PID,1);
+ h3DM = (TH3D*)GetRealMixed(cen,w,d,kind,kind2,PID,0);
+
+ TH1F * hCen = GetCen() ;
+ TH2F * hCenPHOS = GetCenPHOS() ;
+cout<<"Finished"<<endl;
+
+ // sprintf(kind,"") ; //"" for all
+ const Double_t nphi=5;
+ Double_t xphi[6];
+ for(Int_t i=0;i<=nphi;i++){
+ xphi[i]=TMath::PiOver2()*i/nphi ;
+// cout<<xphi[i]<<" ";
+ }
+//cout<<endl;
+
+ if(cen==21)
+ sprintf(inname,"../flow11h_Apr14.root");
+ //Read resolution
+ TFile * f = new TFile(inname) ;
+
+ TH2F * hcos2AC = (TH2F*)f->Get("cos2V0AC");
+ TH2F * hcos2FAC= (TH2F*)f->Get("cos2FAC");
+ Double_t resAC = GetCos(hcos2AC,cen);
+ resAC=resAC ;
+
+ hcos2AC = (TH2F*)f->Get("cos2V0ATPC");
+ Double_t resAT = GetCos(hcos2AC,cen);
+ resAT=resAT ;
+
+ hcos2AC = (TH2F*)f->Get("cos2V0CTPC");
+ Double_t resCT = GetCos(hcos2AC,cen);
+ resCT=resCT ;
+
+ hcos2AC = (TH2F*)f->Get("cos2AC");
+ Double_t resT = GetRes(hcos2AC,cen);
+
+ //side = 1 - VOC, side = 0 - V0A
+ //side = 2 - TPC 3 sub method, 3 - TPC 2 sub method
+
+ Double_t res=1;
+ if(side==1) res = TMath::Sqrt(resAC*resCT/resAT);
+ else if(side==0)res = TMath::Sqrt(resAC*resAT/resCT);
+ else if(side==2)res = TMath::Sqrt(resAT*resCT/resAC);
+ else res = resT;
+
+// res=1./res ;
+
+ cout<<"RP resolution = "<< res <<endl;
+
+ PPRstyle();
+cout<<"Init... ";
+ //Fit real only
+ //Linear Bg
+ char key2[155];
+ sprintf(key,"PID%s_cen%d",kind,cen) ;
+ sprintf(key2,"%s_mr1",key) ;
+ TH1D * mr1 = new TH1D(key2,"Mass",nbin,xa) ;
+ sprintf(key2,"%s_sr1",key) ;
+ TH1D * sr1 = new TH1D(key2,"Width",nbin,xa) ;
+ sprintf(key2,"%s_ar1",key) ;
+ TH2D * ar1 = new TH2D(key2,"a",nbin,xa,nphi,xphi) ;
+ sprintf(key2,"%s_br1",key) ;
+ TH2D * br1 = new TH2D(key2,"b",nbin,xa,nphi,xphi) ;
+ sprintf(key2,"%s_yr1",key) ;
+ TH2D * nr1 = new TH2D(key2,"Raw yield",nbin,xa,nphi,xphi) ;
+ sprintf(key2,"%s_yr1int",key) ;
+ TH2D * nr1int = new TH2D(key2,"Raw yield, integrated",nbin,xa,nphi,xphi) ;
+
+ //Quadratic Bg
+ sprintf(key2,"%s_mr2",key) ;
+ TH1D * mr2 = new TH1D(key2,"Mass",nbin,xa) ;
+ sprintf(key2,"%s_sr2",key) ;
+ TH1D * sr2 = new TH1D(key2,"Width",nbin,xa) ;
+ sprintf(key2,"%s_ar2",key) ;
+ TH2D * ar2 = new TH2D(key2,"a",nbin,xa,nphi,xphi) ;
+ sprintf(key2,"%s_br2",key) ;
+ TH2D * br2 = new TH2D(key2,"b",nbin,xa,nphi,xphi) ;
+ sprintf(key2,"%s_cr2",key) ;
+ TH2D * cr2 = new TH2D(key2,"c",nbin,xa,nphi,xphi) ;
+ sprintf(key2,"%s_yr2",key) ;
+ TH2D * nr2 = new TH2D(key2,"Raw yield",nbin,xa,nphi,xphi) ;
+ sprintf(key2,"%s_yr2int",key) ;
+
+ TH2D * nr2int = new TH2D(key2,"Raw yield, integrated",nbin,xa,nphi,xphi) ;
+
+ TF1 * fit1 = new TF1("fit1",CB,0.,1.,5) ;
+ fit1->SetParName(0,"A") ;
+ fit1->SetParName(1,"m_{0}") ;
+ fit1->SetParName(2,"#sigma") ;
+ fit1->SetParName(3,"a_{0}") ;
+ fit1->SetParName(4,"a_{1}") ;
+ fit1->SetLineWidth(2) ;
+ fit1->SetLineColor(2) ;
+ TF1 * fgs = new TF1("gs",CBs,0.,1.,4) ;
+ fgs->SetLineColor(2) ;
+ fgs->SetLineWidth(1) ;
+
+ TF1 * fit2 = new TF1("fit2",CB2,0.,1.,6) ;
+ fit2->SetParName(0,"A") ;
+ fit2->SetParName(1,"m_{0}") ;
+ fit2->SetParName(2,"#sigma") ;
+ fit2->SetParName(3,"a_{0}") ;
+ fit2->SetParName(4,"a_{1}") ;
+ fit2->SetParName(5,"a_{2}") ;
+
+ fit2->SetLineWidth(2) ;
+ fit2->SetLineColor(4) ;
+ fit2->SetLineStyle(2) ;
+ TF1 * fbg1 = new TF1("bg1",BG1,0.,1.,2) ;
+ TF1 * fbg2 = new TF1("bg2",BG2,0.,1.,3) ;
+
+ //calculate average mass and width for all pt bins
+ TCanvas * cav = new TCanvas("Average","Average",10,10,800,750) ;
+ cav->Divide(3,4) ;
+
+cout<<"Finished"<<endl;
+
+cout<<"Do avarage minv... ";
+ for(Int_t i=1;i<=nbin;i++){
+ h3DR->GetYaxis()->SetRangeUser(xa[i-1],xa[i]) ;
+ h3DM->GetYaxis()->SetRangeUser(xa[i-1],xa[i]) ;
+ Double_t pt=(xa[i]+xa[i-1])/2. ;
+ TH2D * hpav = (TH2D*)h3DR->Project3D("x");
+ TH2D * hpmav= (TH2D*)h3DM->Project3D("x") ;
+ hpav->Sumw2() ;
+ hpmav->Sumw2() ;
+ if(i<7){
+ hpav->Rebin(2) ;
+ hpmav->Rebin(2) ;
+ }
+ else{
+ hpav->Rebin(2) ;
+ hpmav->Rebin(2) ;
+ }
+ for(Int_t ib=1; ib<=hpav->GetNbinsX();ib++){if(hpav->GetBinContent(ib)==0)hpav->SetBinError(ib,1.);}
+ for(Int_t ib=1; ib<=hpav->GetNbinsX();ib++){if(hpmav->GetBinContent(ib)==0)hpmav->SetBinError(ib,1.);}
+ TH1D * hpm2av = (TH1D*)hpmav->Clone("Bg1av") ;
+ TH1D * hpcopyav = (TH1D*)hpav->Clone("hpcopyav") ;
+ TH1D * hp2av = (TH1D*)hpav->Clone("hp2av") ;
+ TH1D * hpm3av = (TH1D*)hpmav->Clone("Bg2av") ;
+ TH1D * hp3av = (TH1D*)hpav->Clone("hp3av") ;
+
+ hpcopyav->Divide(hpmav) ;
+ sprintf(key,"%3.1f<p_{t}<%3.1f GeV/c",xa[i-1],xa[i]) ;
+ hpcopyav->SetTitle(key) ;
+ hpcopyav->SetMarkerStyle(20) ;
+ hpcopyav->SetMarkerSize(0.7) ;
+
+ fit1->SetParameters(TMath::Min(0.3,0.001*i),0.14,0.01,0.008,-0.0002,0) ;
+
+ fit1->SetParLimits(2,0.003,0.03) ; //peak width
+ fit1->SetParLimits(1,0.1,0.2); //peak mean
+ fit1->SetParLimits(0,0.,10.) ; //peak height
+
+ cav->cd(i) ;
+ Double_t rangeMin=0.1 ;
+ Double_t rangeMax=0.25 ; //TMath::Min(0.15+i*0.05,0.3) ;
+// if(cen==0)rangeMax=0.30; //TMath::Min(0.15+i*0.05,0.3) ;
+ hpcopyav->Fit("fit1","Q","",rangeMin,rangeMax) ;
+ hpcopyav->Fit("fit1","MQ","",rangeMin,rangeMax) ;
+
+ mr1->SetBinContent(i,fit1->GetParameter(1)) ;
+ mr1->SetBinError(i,fit1->GetParError(1)) ;
+ sr1->SetBinContent(i,TMath::Abs(fit1->GetParameter(2))) ;
+ sr1->SetBinError(i,fit1->GetParError(2)) ;
+
+ fit2->SetParameters(fit1->GetParameters()) ;
+ fit2->SetParameter(5,0) ;
+ hpcopyav->Fit("fit2","+Q","",rangeMin,rangeMax) ;
+ hpcopyav->Fit("fit2","+MQ","",rangeMin,rangeMax) ;
+ hpcopyav->GetXaxis()->SetRangeUser(0.05,0.3) ;
+
+ cav->Update() ;
+
+ mr2->SetBinContent(i,fit2->GetParameter(1)) ;
+ mr2->SetBinError(i,fit2->GetParError(1)) ;
+ sr2->SetBinContent(i,TMath::Abs(fit2->GetParameter(2))) ;
+ sr2->SetBinError(i,fit2->GetParError(2)) ;
+
+
+ delete hpav ;
+// delete hpcopyav ;
+ delete hp2av ;
+ delete hpmav;
+ delete hpm2av;
+ }
+cout<<"Finished"<<endl;
+
+ h3DR->GetYaxis()->SetRangeUser(0.,19.) ;
+ h3DM->GetYaxis()->SetRangeUser(0.,19.) ;
+
+cout<<"Do dNdPhi bins... ";
+//!!!!!!!!!!!!!!!!!DNDPHI bins:
+
+ for(Int_t iphi=1;iphi<=nphi;iphi++){
+
+ h3DR->GetZaxis()->SetRange(iphi,iphi) ;
+ h3DM->GetZaxis()->SetRange(iphi,iphi) ;
+
+ TH2D * h = (TH2D*)h3DR->Project3D("yx");
+ TH2D * hm= (TH2D*)h3DM->Project3D("yx") ;
+ h->SetName("sliceRe") ;
+ hm->SetName("sliceMi") ;
+
+ h3DR->GetZaxis()->SetRange(11-iphi,11-iphi) ;
+ h3DM->GetZaxis()->SetRange(11-iphi,11-iphi) ;
+
+ TH2D * ha = (TH2D*)h3DR->Project3D("yx");
+ TH2D * hma= (TH2D*)h3DM->Project3D("yx") ;
+
+ h->Add(ha) ; delete ha ;
+ hm->Add(hma); delete hma ;
+
+ sprintf(key2,"mggFit%d_Signal",iphi) ;
+ TCanvas * c3 = new TCanvas(key2,key2,10,10,800,750) ;
+ c3->Divide(3,4) ;
+
+ sprintf(key2,"mggFit%d",iphi) ;
+ TCanvas * c1 = new TCanvas(key2,key2,10,10,800,750) ;
+ c1->Divide(3,4) ;
+ c1->cd(0) ;
+
+// TCanvas * c2=0,*c4=0,*c5=0,*c6=0 ;
+ TAxis * pta=h->GetYaxis() ;
+ TAxis * ma=h->GetXaxis() ;
+
+//loop over pT bins
+ for(Int_t i=1;i<=nbin;i++){
+ c1->cd(i) ;
+ Int_t imin=pta->FindBin(xa[i-1]+0.0001);
+ Int_t imax=pta->FindBin(xa[i]-0.0001) ;
+ Double_t pt=(xa[i]+xa[i-1])/2. ;
+ TH1D * hp = h->ProjectionX("re",imin,imax) ;
+ hp->Sumw2() ;
+ TH1D * hpm= hm->ProjectionX("mi",imin,imax) ;
+ hpm->Sumw2() ;
+
+ if(i<7){
+ hp->Rebin(2) ;
+ hpm->Rebin(2) ;
+ }
+ else{
+ hp->Rebin(2) ;
+ hpm->Rebin(2) ;
+ }
+
+ for(Int_t ib=1; ib<=hp->GetNbinsX();ib++){if(hp->GetBinContent(ib)==0)hp->SetBinError(ib,1.);}
+ for(Int_t ib=1; ib<=hp->GetNbinsX();ib++){if(hpm->GetBinContent(ib)==0)hpm->SetBinError(ib,1.);}
+ TH1D * hpm2 = (TH1D*)hpm->Clone("Bg1") ;
+ TH1D * hpcopy = (TH1D*)hp->Clone("hpcopy") ;
+ TH1D * hp2 = (TH1D*)hp->Clone("hp2") ;
+ hpcopy->Divide(hpm) ;
+ sprintf(key,"%3.1f<p_{t}<%3.1f GeV/c",xa[i-1],xa[i]) ;
+ hpcopy->SetTitle(key) ;
+ hpcopy->SetMarkerStyle(20) ;
+ hpcopy->SetMarkerSize(0.7) ;
+
+ fit1->SetParameters(TMath::Min(0.3,0.0001*i),0.135,0.008,0.008,-0.0002,0) ;
+ fit1->FixParameter(1,mr1->GetBinContent(i)) ;
+ fit1->FixParameter(2,sr1->GetBinContent(i)) ;
+
+// fit1->SetParLimits(2,0.005,0.015) ;
+// fit1->SetParLimits(0,0.,1.) ;
+
+ Double_t rangeMin=0.08 ;
+ Double_t rangeMax=0.25 ; //TMath::Min(0.15+i*0.05,0.3) ;
+// if(cen==0)rangeMax=0.25 ;
+
+ hpcopy->Fit("fit1","NQ","",rangeMin,rangeMax) ;
+ hpcopy->Fit("fit1","MQ","",rangeMin,rangeMax) ;
+
+ ar1->SetBinContent(i,iphi,fit1->GetParameter(3)) ;
+ ar1->SetBinError(i,iphi,fit1->GetParError(3)) ;
+ br1->SetBinContent(i,iphi,fit1->GetParameter(4)) ;
+ br1->SetBinError(i,iphi,fit1->GetParError(4)) ;
+
+ fit2->SetParameters(fit1->GetParameters()) ;
+ fit2->FixParameter(1,mr2->GetBinContent(i)) ;
+ fit2->FixParameter(2,sr2->GetBinContent(i)) ;
+// fit2->SetParLimits(2,0.005,0.015) ;
+// fit2->SetParLimits(0,0.,1.) ;
+ fit2->SetParameter(5,0) ;
+
+ hpcopy->Fit("fit2","+NQ","",rangeMin,rangeMax) ;
+ hpcopy->Fit("fit2","+MQ","",rangeMin,rangeMax) ;
+
+ ar2->SetBinContent(i,iphi,fit2->GetParameter(3)) ;
+ ar2->SetBinError(i,iphi,fit2->GetParError(3)) ;
+ br2->SetBinContent(i,iphi,fit2->GetParameter(4)) ;
+ br2->SetBinError(i,iphi,fit2->GetParError(4)) ;
+ cr2->SetBinContent(i,iphi,fit2->GetParameter(5)) ;
+ cr2->SetBinError(i,iphi,fit2->GetParError(5)) ;
+
+ hpcopy->GetXaxis()->SetRangeUser(0.05,0.3) ;
+// hpcopy->Draw() ;
+/* if(c5)
+ c5->Update() ;
+ else
+ if(c2)
+ c2->Update() ;
+ else
+*/
+ c1->Update() ;
+ // if(getchar()=='q')return ;
+
+
+ fbg1->SetParameters(fit1->GetParameter(3),fit1->GetParameter(4),fit1->GetParameter(5));
+ fbg2->SetParameters(fit2->GetParameter(3),fit2->GetParameter(4),fit2->GetParameter(5),fit2->GetParameter(6));
+
+ hpm->Multiply(fbg1) ;
+ hpm2->Multiply(fbg2) ;
+ hp->Add(hpm,-1.) ;
+ hp2->Add(hpm2,-1.) ;
+
+ c3->cd(i) ;
+
+ fgs->SetParameters(hp->Integral(13,15)/3.,fit1->GetParameter(1),fit1->GetParameter(2),0.) ;
+ fgs->SetParLimits(1,0.05,0.15);
+ fgs->FixParameter(1,mr1->GetBinContent(i)) ;
+ fgs->FixParameter(2,sr1->GetBinContent(i)) ;
+
+ hp->Fit(fgs,"Q","",rangeMin,rangeMax) ;
+ hp->SetMaximum(hp2->GetMaximum()*1.1) ;
+ hp->SetMinimum(hp2->GetMinimum()*1.1) ;
+ hp->SetMarkerStyle(20) ;
+ hp->SetMarkerSize(0.7) ;
+
+ //0.96 - due to 2 sigma
+ nr1->SetBinContent(i,iphi,fgs->GetParameter(0)) ;
+ nr1->SetBinError(i,iphi,fgs->GetParError(0)) ;
+
+ Int_t intBinMin=hp->GetXaxis()->FindBin(fgs->GetParameter(1)-4.*TMath::Abs(fgs->GetParameter(2))) ;
+ Int_t intBinMax=hp->GetXaxis()->FindBin(fgs->GetParameter(1)+4.*TMath::Abs(fgs->GetParameter(2))) ;
+ Double_t errStat=hpm->Integral(intBinMin,intBinMax);
+ Double_t npiInt=hp->Integral(intBinMin,intBinMax) ;
+ Double_t norm=fbg1->GetParameter(0) ;
+ Double_t normErr=fbg1->GetParError(0) ;
+ if(npiInt>0.){
+ nr1int->SetBinContent(i,iphi,npiInt) ;
+ nr1int->SetBinError(i,iphi,TMath::Sqrt(npiInt + norm*errStat + normErr*normErr*errStat*errStat + norm*norm*errStat)) ;
+ }
+ hp2->GetXaxis()->SetRangeUser(0.05,0.3) ;
+ hp2->SetMaximum(hp2->GetMaximum()*1.1) ;
+ hp2->SetMinimum(hp2->GetMinimum()*1.1) ;
+ hp2->SetMarkerStyle(20) ;
+ hp2->SetMarkerSize(0.7) ;
+
+ fgs->FixParameter(1,mr2->GetBinContent(i)) ;
+ fgs->FixParameter(2,sr2->GetBinContent(i)) ;
+ hp2->Fit(fgs,"Q","",rangeMin,rangeMax) ;
+ nr2->SetBinContent(i,iphi,fgs->GetParameter(0)) ;
+ nr2->SetBinError(i,iphi,fgs->GetParError(0)) ;
+ npiInt=hp2->Integral(intBinMin,intBinMax) ;
+ norm=fbg2->GetParameter(0) ;
+ normErr=fbg2->GetParError(0) ;
+ if(npiInt>0.){
+ nr2int->SetBinContent(i,iphi,npiInt) ;
+ nr2int->SetBinError(i,iphi,TMath::Sqrt(npiInt + norm*errStat + normErr*normErr*errStat*errStat + norm*norm*errStat)) ;
+ }
+ hp2->SetTitle(key) ;
+ hp2->Draw() ;
+
+ c3->Update() ;
+
+ delete hp ;
+// delete hp2 ;
+// delete hpcopy ;
+ delete hpm ;
+ delete hpm2 ;
+ }
+
+ delete h ;
+ delete hm ;
+
+ }
+
+cout<<"Fit histos init... ";
+ TH1D * v2A1 = new TH1D("v2all1","v_{2} two harmonics",nbin,xa) ;
+ TH1D * v2A2 = new TH1D("v2all2","v_{2} two harmonics",nbin,xa) ;
+ TH1D * v2A1int = new TH1D("v2all1int","v_{2} two harmonics",nbin,xa) ;
+ TH1D * v2A2int = new TH1D("v2all2int","v_{2} two harmonics",nbin,xa) ;
+
+ TH1D * v2F1 = new TH1D("v2gap1","v_{2} two harmonics",nbin,xa) ;
+ TH1D * v2F2 = new TH1D("v2gap2","v_{2} two harmonics",nbin,xa) ;
+ TH1D * v2F1int = new TH1D("v2gap1int","v_{2} two harmonics",nbin,xa) ;
+ TH1D * v2F2int = new TH1D("v2gap2int","v_{2} two harmonics",nbin,xa) ;
+
+ TH1D * v2A1s= new TH1D("v2all1S","v_{2} single harmonic",nbin,xa) ;
+ TH1D * v2A2s= new TH1D("v2all2S","v_{2} single harmonic",nbin,xa) ;
+ TH1D * v2A1ints= new TH1D("v2all1intS","v_{2} single harmonic",nbin,xa) ;
+ TH1D * v2A2ints= new TH1D("v2all2intS","v_{2} single harmonic",nbin,xa) ;
+
+ TH1D * v2F1s= new TH1D("v2gap1S","v_{2} single harmonic",nbin,xa) ;
+ TH1D * v2F2s= new TH1D("v2gap2S","v_{2} single harmonic",nbin,xa) ;
+ TH1D * v2F1ints= new TH1D("v2gap1intS","v_{2} single harmonic",nbin,xa) ;
+ TH1D * v2F2ints= new TH1D("v2gap2intS","v_{2} single harmonic",nbin,xa) ;
+
+
+ TH2D * hA1 = nr1->Clone("hA1");
+ TH2D * hA2 = nr2->Clone("hA2");
+ TH2D * hA1int = nr1int->Clone("hA1int");
+ TH2D * hA2int = nr2int->Clone("hA2int");
+
+cout<<"Finished"<<endl;
+
+ Int_t col[4]={kRed,kBlue,kGreen+3,kMagenta} ;
+ Int_t sym[4]={20,21,24,25} ;
+
+ // TF1 * fit = new TF1("fit","[0]*(1+2.*[1]*cos(2*(x-[2])))",0.,5.) ;
+ TF1 * v2fit = new TF1("v2fit","[0]*(1+2.*[1]*cos(2.*x)+2.*[2]*cos(4.*x) )",0.,5.) ;
+ v2fit->SetLineColor(2) ;
+ TF1 * v2fit2 = new TF1("v2fit","[0]*(1+2.*[1]*cos(2.*x) )",0.,5.) ;
+ TCanvas * c = new TCanvas("fit","fit") ;
+ c->Divide(3,4);
+
+cout<<"Fit dNdPhi... ";
+ for(Int_t i=1; i<=v2A1->GetNbinsX() ;i++){ //over pt
+ c->cd(i);
+ char hname[100];
+ sprintf(hname,"A1%d",i);
+ TH1D * tmp0 = hA1->ProjectionY(hname,i,i) ;
+ tmp0->SetTitle(Form("%3.1f<p_{t}<%3.1f GeV",xa[i-1],xa[i])) ;
+ tmp0->SetXTitle("#Delta#phi (rad)") ;
+ tmp0->SetYTitle("dN/d#phi (a.u.)") ;
+ tmp0->SetMarkerStyle(sym[0]) ;
+ tmp0->SetMarkerColor(col[0]) ;
+
+ v2fit2->SetLineStyle(1) ;
+ v2fit2->SetLineColor(col[0]) ;
+ v2fit2->SetParameters(tmp0->GetBinContent(5),0.1) ;
+ tmp0->Fit(v2fit2,"Qi") ;
+ v2A1s->SetBinContent(i,v2fit2->GetParameter(1)) ;
+ v2A1s->SetBinError(i,v2fit2->GetParError(1)) ;
+
+
+ sprintf(hname,"A2%d",i);
+ //tmp2d = (TH2D*)hA2->Clone(hname);
+ TH1D * tmp1 = hA2->ProjectionY(hname,i,i) ;
+ tmp1->SetMarkerStyle(sym[1]) ;
+ tmp1->SetMarkerColor(col[1]) ;
+ v2fit2->SetLineColor(col[1]) ;
+ v2fit2->SetParameters(tmp1->GetBinContent(5),0.1) ;
+ v2fit2->SetLineColor(col[1]) ;
+ tmp1->Fit(v2fit2,"Qi") ;
+ v2A2s->SetBinContent(i,v2fit2->GetParameter(1)) ;
+ v2A2s->SetBinError(i,v2fit2->GetParError(1)) ;
+
+ sprintf(hname,"A1int%d",i);
+ TH1D * tmp2 = hA1int->ProjectionY(hname,i,i) ;
+ tmp2->SetMarkerStyle(sym[2]) ;
+ tmp2->SetMarkerColor(col[2]) ;
+ v2fit2->SetParameters(tmp2->GetBinContent(5),0.1) ;
+ v2fit2->SetLineStyle(5) ;
+ v2fit2->SetLineColor(col[2]) ;
+ tmp2->Fit(v2fit2,"i") ;
+ v2A1ints->SetBinContent(i,v2fit2->GetParameter(1)) ;
+ v2A1ints->SetBinError(i,v2fit2->GetParError(1)) ;
+
+ sprintf(hname,"A2int%d",i);
+ //tmp2d = (TH2D*)hA2int->Clone(hname);
+ TH1D * tmp3 = hA2int->ProjectionY(hname,i,i) ;
+ tmp3->SetMarkerStyle(sym[3]) ;
+ tmp3->SetMarkerColor(col[3]) ;
+ v2fit2->SetParameters(tmp3->GetBinContent(5),0.1) ;
+ v2fit2->SetLineColor(col[3]) ;
+ tmp3->Fit(v2fit2,"Qi") ;
+ v2A2ints->SetBinContent(i,v2fit2->GetParameter(1)) ;
+ v2A2ints->SetBinError(i,v2fit2->GetParError(1)) ;
+
+ tmp0->Draw() ;
+ tmp1->Draw("same") ;
+// tmp2->Scale(6.28) ;
+// tmp3->Scale(6.28) ;
+ tmp2->Draw("same") ;
+ tmp3->Draw("same") ;
+ }
+cout<<"Finished"<<endl;
+
+ TH1D *effcorrect = v2A1s->Clone("effcorrect");
+ TH1D *effcorrect2 = v2A1s->Clone("effcorrect2");
+
+ Double_t eff=0, err=0;
+ if(strcmp(PID,"Both2core")==0){
+ if(cen==0) {eff=.03; err=.04;}
+ if(cen==1) {eff=.08; err=.04;}
+ if(cen==2) {eff=.03; err=.03;}
+ if(cen==3) {eff=.02; err=.02;}
+ if(cen==4) {eff=.02; err=.02;}
+ if(cen==5) {eff=.01; err=.02;}
+ if(cen==10) {eff=.05; err=.02;}
+ if(cen==11) {eff=.02; err=.02;}
+ if(cen==20) {eff=.02; err=.02;}
+ if(cen==21) {eff=.05; err=.02;}
+
+ eff=eff*2.*TMath::Pi()/5./sin(2.*TMath::Pi()/5.)/4.;
+ err=err*2.*TMath::Pi()/5./sin(2.*TMath::Pi()/5.)/4.;
+
+cout<<"res: T="<<resT<<", resolution="<<res<<endl;
+
+ eff=eff*res/resT;
+ err=err*res/resT;
+ cout<<"Pi0 efficiency correction before resolution correction: "<<eff<<"+-"<<err<<endl;
+ }
+
+ Double_t x[100],y[100],ex[100],ey[100] ;
+
+ for(Int_t i=0;i<effcorrect->GetNbinsX();i++){
+ effcorrect->SetBinContent(i,eff);
+ effcorrect->SetBinError(i,err);
+ effcorrect2->SetBinContent(i,eff);
+ effcorrect2->SetBinError(i,0);
+ }
+
+/*
+ if(effcor){
+ v2A1s->Add(effcorrect);
+ v2A2s->Add(effcorrect);
+ v2A1ints->Add(effcorrect);
+ v2A2ints->Add(effcorrect);
+ }
+
+ v2A1s->Scale(res) ;
+ v2A2s->Scale(res) ;
+ v2A1ints->Scale(res) ;
+ v2A2ints->Scale(res) ;
+*/
+
+//return 1;
+
+ v2A1s->SetMarkerStyle(sym[0]) ;
+ v2A1s->SetMarkerColor(col[0]) ;
+ v2A2s->SetMarkerStyle(sym[1]) ;
+ v2A2s->SetMarkerColor(col[1]) ;
+ v2A1ints->SetMarkerStyle(sym[2]) ;
+ v2A1ints->SetMarkerColor(col[2]) ;
+ v2A2ints->SetMarkerStyle(sym[3]) ;
+ v2A2ints->SetMarkerColor(col[3]) ;
+
+ TCanvas * c2 = new TCanvas("v2","v2") ;
+ TH1D * box = new TH1D("box","V_{2}{RP} with different fit methods",150,0.,20.) ;
+ box->SetMinimum(0.) ;
+ box->SetMaximum(0.5) ;
+ box->SetXTitle("p_{t}^{#pi} (GeV/c)") ;
+ box->SetYTitle("v{2}") ;
+ box->Draw() ;
+ v2A1s->Draw("same") ;
+ v2A1ints->Draw("same") ;
+ v2A2s->Draw("same") ;
+ v2A2ints->Draw("same") ;
+
+ TLegend * l = new TLegend(0.6,0.7,0.9,0.9) ;
+ l->AddEntry(v2A1s,"Fit, pol1","p") ;
+ l->AddEntry(v2A2s,"Fit, pol2","p") ;
+ l->AddEntry(v2A1ints,"Int, pol1","p") ;
+ l->AddEntry(v2A2ints,"Int, pol2","p") ;
+
+ l->Draw() ;
+
+// return ;
+
+ TCanvas * cmass = new TCanvas("Mass","Pi0 mass vs pT") ;
+
+ mr1->SetMarkerStyle(20);
+ mr2->SetMarkerStyle(21);
+ mr1->Draw();
+ mr2->SetLineColor(2);
+ mr2->SetMarkerColor(2);
+ mr2->Draw("same");
+
+ TLegend * l = new TLegend(0.6,0.7,0.9,0.9) ;
+ l->AddEntry(mr1,"pol1","p") ;
+ l->AddEntry(mr2,"pol2","p") ;
+
+ l->Draw() ;
+
+ TCanvas * cwidth = new TCanvas("Width","Pi0 width vs pT") ;
+
+ sr1->SetMarkerStyle(20);
+ sr2->SetMarkerStyle(21);
+ sr1->Draw();
+ sr2->SetLineColor(2);
+ sr2->SetMarkerColor(2);
+ sr2->Draw("same");
+
+ TLegend * l = new TLegend(0.6,0.7,0.9,0.9) ;
+ l->AddEntry(mr1,"pol1","p") ;
+ l->AddEntry(mr2,"pol2","p") ;
+
+ l->Draw() ;
+
+//!!!!!!!!!!!!!!!!!!!!!!final v2 plot
+ TCanvas * c5 = new TCanvas("v2_res","v2 res") ;
+
+
+ TH1D * v2Astat = new TH1D("v2allStat","v_{2}",nbin,xa) ;
+ TH1D * v2Asys = new TH1D("v2allSys","v_{2}",nbin,xa) ;
+
+ for(Int_t i=1; i<=v2A1->GetNbinsX() ;i++){
+ Double_t mean=
+ v2A1s->GetBinContent(i)/v2A1s->GetBinError(i)/v2A1s->GetBinError(i)
+ +v2A2s->GetBinContent(i)/v2A2s->GetBinError(i)/v2A2s->GetBinError(i)
+ +v2A1ints->GetBinContent(i)/v2A1ints->GetBinError(i)/v2A1ints->GetBinError(i)
+ +v2A2ints->GetBinContent(i)/v2A2ints->GetBinError(i)/v2A2ints->GetBinError(i) ;
+ Double_t weight=
+ 1./v2A1s->GetBinError(i)/v2A1s->GetBinError(i)
+ +1./v2A2s->GetBinError(i)/v2A2s->GetBinError(i)
+ +1./v2A1ints->GetBinError(i)/v2A1ints->GetBinError(i)
+ +1./v2A2ints->GetBinError(i)/v2A2ints->GetBinError(i) ;
+
+ mean/=weight ;
+
+ Double_t rms = (v2A1s->GetBinContent(i) - mean)*(v2A1s->GetBinContent(i) - mean)/v2A1s->GetBinError(i)/v2A1s->GetBinError(i) + (v2A2s->GetBinContent(i) - mean)*(v2A2s->GetBinContent(i) - mean)/v2A2s->GetBinError(i)/v2A2s->GetBinError(i) + (v2A1ints->GetBinContent(i) - mean)*(v2A1ints->GetBinContent(i) - mean)/v2A1ints->GetBinError(i)/v2A1ints->GetBinError(i) + (v2A2ints->GetBinContent(i) - mean)*(v2A2ints->GetBinContent(i) - mean)/v2A2ints->GetBinError(i)/v2A2ints->GetBinError(i);
+ Double_t statErr = TMath::Min(v2A1s->GetBinError(i),v2A2s->GetBinError(i)) ;
+// TMath::Min(v2A1ints->GetBinError(i),v2A2ints->GetBinError(i))) ;
+cout<<rms<<endl;
+
+ rms/=weight;
+
+ Double_t ptbin = v2A1->GetBinCenter(i);
+ Double_t sys=TMath::Sqrt(rms);
+
+ cout<<"Sys error for pT="<<ptbin<<" is "<<sys<<" in percent: "<<sys/mean<<endl;
+ cout<<"Sys error due to eff corr: "<<eff/res<<" in percent: "<<eff/res/mean<<endl;
+
+ Double_t mean_corr = mean ;// - v2ch * Ntrack_cen7080 / Ntrack_cen;
+
+ v2Astat->SetBinContent(i,mean_corr) ;
+ v2Astat->SetBinError(i,statErr) ;
+ v2Asys->SetBinContent(i,mean_corr) ;
+ v2Asys->SetBinError(i,sys) ;
+
+ }
+
+ if(effcor){
+ v2Astat->Add(effcorrect2);
+ v2Asys->Add(effcorrect);
+ }
+
+ v2Asys->Scale(1/res) ;
+ v2Astat->Scale(1/res) ;
+
+ v2Asys->SetFillStyle(1001) ;
+ v2Asys->SetFillColor(kYellow) ;
+
+ v2Astat->SetMarkerColor(kOrange+7) ;
+ v2Astat->SetMarkerStyle(20) ;
+ v2Astat->SetLineColor(kOrange+7) ;
+
+ /*
+ v2Fsys->SetFillStyle(0) ;
+ v2Fsys->SetFillColor(0) ;
+ v2Fsys->SetLineColor(kBlue+3) ;
+ */
+
+ v2Astat->SetMarkerColor(kOrange+7) ;
+ v2Astat->SetMarkerStyle(20) ;
+ v2Astat->SetLineColor(kOrange+7) ;
+
+ /*
+ v2Fstat->SetMarkerColor(kBlue+3) ;
+ v2Fstat->SetMarkerStyle(21) ;
+ v2Fstat->SetLineColor(kBlue+3) ;
+ */
+
+ v2Asys->SetXTitle("p_{t} (GeV/c)") ;
+ v2Asys->SetYTitle("v_{2}") ;
+
+ box->Draw() ;
+ v2Asys->Draw("sameE1") ;
+ // v2Fsys->Draw("E2same") ;
+ v2Astat->Draw("same") ;
+ // v2Fstat->Draw("same") ;
+
+ char nname[255];
+ TFile fout("v2_method1_QA.root","update");
+ sprintf(nname,"v2sys_m1_%s_%s_%d_%d",w,PID,cen,side) ;
+ v2Asys->SetName(nname) ;
+ sprintf(nname,"v2stat_m1_%s_%s_%d_%d",w,PID,cen,side) ;
+ v2Astat->SetName(nname) ;
+
+ v2Asys->Write(0,TObject::kOverwrite) ;
+ v2Astat->Write(0,TObject::kOverwrite) ;
+ fout.Close() ;
+}
+
+
+//-----------------------------------------------------------------------------
+PPRstyle()
+{
+
+ //////////////////////////////////////////////////////////////////////
+ //
+ // ROOT style macro for the TRD TDR
+ //
+ //////////////////////////////////////////////////////////////////////
+
+ gStyle->SetPalette(1);
+ gStyle->SetCanvasBorderMode(-1);
+ gStyle->SetCanvasBorderSize(1);
+ gStyle->SetCanvasColor(10);
+
+ gStyle->SetFrameFillColor(10);
+ gStyle->SetFrameBorderSize(1);
+ gStyle->SetFrameBorderMode(-1);
+ gStyle->SetFrameLineWidth(1.2);
+ gStyle->SetFrameLineColor(1);
+
+ gStyle->SetHistFillColor(0);
+ gStyle->SetHistLineWidth(1);
+ gStyle->SetHistLineColor(1);
+
+ gStyle->SetPadColor(10);
+ gStyle->SetPadBorderSize(1);
+ gStyle->SetPadBorderMode(-1);
+
+ gStyle->SetStatColor(10);
+ gStyle->SetTitleColor(kBlack,"X");
+ gStyle->SetTitleColor(kBlack,"Y");
+
+ gStyle->SetLabelSize(0.04,"X");
+ gStyle->SetLabelSize(0.04,"Y");
+ gStyle->SetLabelSize(0.04,"Z");
+ gStyle->SetTitleSize(0.04,"X");
+ gStyle->SetTitleSize(0.04,"Y");
+ gStyle->SetTitleSize(0.04,"Z");
+ gStyle->SetTitleFont(42,"X");
+ gStyle->SetTitleFont(42,"Y");
+ gStyle->SetTitleFont(42,"X");
+ gStyle->SetLabelFont(42,"X");
+ gStyle->SetLabelFont(42,"Y");
+ gStyle->SetLabelFont(42,"Z");
+ gStyle->SetStatFont(42);
+
+ gStyle->SetTitleOffset(1.0,"X");
+ gStyle->SetTitleOffset(1.4,"Y");
+
+ gStyle->SetFillColor(kWhite);
+ gStyle->SetTitleFillColor(kWhite);
+
+ gStyle->SetOptDate(0);
+ gStyle->SetOptTitle(1);
+ gStyle->SetOptStat(0);
+ gStyle->SetOptFit(0);
+
+}
+
--- /dev/null
+//AA analysis - V2 calculation with Kentaro Miki method
+//27 march 2011. First attempt
+//28 march 2011. DP's fixes
+
+#include "Methods.h"
+
+Int_t effcor = 1;
+Int_t drawopt=0;
+Bool_t reject=kTRUE;
+Double_t mean=0.137;
+Double_t width=2*0.007;
+
+//======================================================
+Double_t fbg2(Double_t *x, Double_t *par)
+{ //pol 4 - to fit v2 bg
+ if (reject && x[0] > mean-width && x[0] < mean+width) {
+ TF1::RejectPoint();
+ }
+ return par[0] + par[1]*(x[0] - mean) + par[2]*(x[0] - mean)*(x[0] - mean) + par[3]*(x[0] - mean)*(x[0] - mean)*(x[0] - mean) + par[4]*(x[0] - mean)*(x[0] - mean)*(x[0] - mean)*(x[0] - mean);
+}
+//======================================================
+Double_t fbg(Double_t *x, Double_t *par)
+{ //pol 3 - to fit v2 bg
+ if (reject && x[0] > mean-width && x[0] < mean+width) {
+ TF1::RejectPoint();
+ }
+ return par[0] + par[1]*(x[0] - mean) + par[2]*(x[0] - mean)*(x[0] - mean) + par[3]*(x[0] - mean)*(x[0] - mean)*(x[0] - mean);
+}
+//======================================================
+Double_t fitMgg1(Double_t *x, Double_t *par){
+// gauss + pol 1
+ Double_t fitval = par[0]*TMath::Exp(-(x[0]-par[1])*(x[0]-par[1])/2./par[2]/par[2])+par[3]+par[4]*(x[0]-mean);
+ return fitval;
+}
+//======================================================
+Double_t fitBg1(Double_t *x, Double_t *par)
+{ // pol 1
+ Double_t fitval = par[0]+par[1]*(x[0]-mean);
+ return fitval;
+}
+//======================================================
+Double_t fitMgg2(Double_t *x, Double_t *par)
+{ //gauss + pol 2
+ Double_t fitval = par[0]*TMath::Exp(-(x[0]-par[1])*(x[0]-par[1])/2./par[2]/par[2])+par[3]+par[4]*(x[0]-mean)+par[5]*(x[0]-mean)*(x[0]-mean);
+ return fitval;
+}
+//======================================================
+Double_t fitBg2(Double_t *x, Double_t *par)
+{
+ Double_t fitval = par[0]+par[1]*(x[0]-mean)+par[2]*(x[0]-mean)*(x[0]-mean);
+ return fitval;
+}
+//======================================================
+Double_t fitV2p1(Double_t *x, Double_t *par){
+// gauss + pol 2
+// Double_t fitval = par[0]*TMath::Exp(-(x[0]-par[1])*(x[0]-par[1])/2./par[2]/par[2])+
+// par[3]+par[4]*(x[0]-mean)+par[5]*(x[0]-mean)*(x[0]-mean);
+Double_t fitval = par[0]*TMath::Exp(-(x[0]-mean)*(x[0]-mean)/2./width/width)+
+ par[3]+par[4]*(x[0]-mean)+par[5]*(x[0]-mean)*(x[0]-mean);
+
+ return fitval;
+}
+//======================================================
+Double_t fitV2p2(Double_t *x, Double_t *par){
+// gauss + pol 3
+// Double_t fitval = par[0]*TMath::Exp(-(x[0]-par[1])*(x[0]-par[1])/2./par[2]/par[2])+
+// par[3]+par[4]*(x[0]-mean)+par[5]*(x[0]-mean)*(x[0]-mean)+par[6]*(x[0]-mean)*(x[0]-mean)*(x[0]-mean);
+
+Double_t fitval = par[0]*TMath::Exp(-(x[0]-mean)*(x[0]-mean)/2./width/width)+
+ par[3]+par[4]*(x[0]-mean)+par[5]*(x[0]-mean)*(x[0]-mean)+par[6]*(x[0]-mean)*(x[0]-mean)*(x[0]-mean);
+
+ return fitval;
+}
+
+//======================================================
+Double_t fitV2mix(Double_t *x, Double_t *par){
+// gauss + pol1*mixed
+ TH1D * hm = (TH1D*)gROOT->FindObjectAny("v2m") ;
+ Double_t mix = hm->GetBinContent(hm->GetXaxis()->FindBin(x[0])) ;
+ Double_t fitval = par[0]*TMath::Exp(-(x[0]-par[1])*(x[0]-par[1])/2./par[2]/par[2])+
+ (par[3]+par[4]*(x[0]-par[1]))*mix;
+ return fitval;
+}
+
+//======================================================
+Double_t fitGauss(Double_t *x, Double_t *par)
+{
+ Double_t fitval = par[0]*TMath::Exp(-(x[0]-par[1])*(x[0]-par[1])/2./par[2]/par[2]);
+ return fitval;
+}
+//======================================================
+void CalcV2(TH1D * h, Double_t &v2, Double_t &v2err){
+
+ v2=0.;
+ v2err=0;
+ Double_t N=0 ;
+ Double_t C=0 ;
+ TAxis * x=h->GetXaxis() ;
+ for(Int_t i=1;i<=h->GetNbinsX();i++){
+ Double_t phi=x->GetBinCenter(i) ;
+ Double_t cj=TMath::Cos(2.*phi) ;
+ N+=h->GetBinContent(i) ;
+ C+=cj*h->GetBinContent(i) ;
+ }
+ if(N>0.)
+ v2=C/N ;
+ else
+ return ;
+ for(Int_t i=1;i<=h->GetNbinsX();i++){
+ Double_t phi=x->GetBinCenter(i) ;
+ Double_t cj=TMath::Cos(2.*phi) ;
+ v2err+=(N*cj-C)*(N*cj-C)*h->GetBinContent(i)/N/N/N/N ;
+ }
+ if(v2err<0)v2err=0 ;
+ v2err=TMath::Sqrt(v2err) ;
+
+}
+//======================================================
+void ScaleMixed(TH1D * v2,TH1D * v2m,TH1D * v2mScaled){
+//Scale v2m to reproduce v2 around the pi0 peak
+ //left side
+ Double_t leftMin=0.04 ;
+ Double_t leftMax=0.1 ;
+ Int_t iMinLeft=v2->GetXaxis()->FindBin(leftMin+0.00001) ;
+ Int_t iMaxLeft=v2->GetXaxis()->FindBin(leftMax-0.00001) ;
+
+ //right side
+ Double_t rightMin=0.16;
+ Double_t rightMax=0.4 ;
+ Int_t iMinRight=v2->GetXaxis()->FindBin(rightMin+0.00001) ;
+ Int_t iMaxRight=v2->GetXaxis()->FindBin(rightMax-0.00001) ;
+
+ Double_t a=0.,b=0.,c=0.,d=0.,e=0. ;
+
+ for(Int_t i=iMinLeft; i<=iMaxLeft;i++){
+ Double_t rY=v2->GetBinContent(i) ;
+ Double_t eY=v2->GetBinError(i) ;
+ Double_t mY=v2m->GetBinContent(i) ;
+ if(eY==0.)continue ;
+ a+=rY/eY/eY ;
+ b+=1./eY/eY ;
+ c+=mY/eY/eY ;
+ d+=mY*rY/eY/eY ;
+ e+=mY*mY/eY/eY ;
+ }
+
+ for(Int_t i=iMinRight; i<=iMaxRight;i++){
+ Double_t rY=v2->GetBinContent(i) ;
+ Double_t eY=v2->GetBinError(i) ;
+ Double_t mY=v2m->GetBinContent(i) ;
+ if(eY==0.)continue ;
+ a+=rY/eY/eY ;
+ b+=1./eY/eY ;
+ c+=mY/eY/eY ;
+ d+=mY*rY/eY/eY ;
+ e+=mY*mY/eY/eY ;
+ }
+
+ Double_t aSlope = 1.;//(a*c-d*b)/(c*c-e*b) ;
+// Double_t aSlope = (a*c-d*b)/(c*c-e*b) ;
+
+ Double_t aConst = (a - aSlope*c)/b ;
+
+ for(Int_t i=1; i<=v2mScaled->GetNbinsX();i++){
+// v2mScaled->SetBinContent(i+1,aConst+aSlope*v2m->GetBinContent(i)) ;
+// v2mScaled->SetBinError(i+1,aSlope*v2m->GetBinError(i)) ;
+ v2mScaled->SetBinContent(i,aConst+aSlope*v2m->GetBinContent(i)) ;
+ v2mScaled->SetBinError(i,aSlope*v2m->GetBinError(i)) ;
+ }
+}
+//================================================//MAIN
+void Method2(Int_t cen=1,Int_t side=1){
+//side = 1 - VOC, side = 0 - V0A
+//side = 2 - TPC 3 sub method, 3 - TPC 2 sub method
+
+ gStyle->SetFillStyle(1) ;
+ gStyle->SetOptFit(0);
+ gStyle->SetOptStat(0);
+// gStyle->SetOptTitle(0);
+
+// TH2F* hCenTrack = (TH2F*)f->Get("hCenPHOS") ;
+
+ char PID[25] ;
+ sprintf(PID,"Both2core") ;
+ char key[55];
+ char kind[15],kind2[15] ; //Reaction plain
+ char d[15] ; //detector
+ sprintf(kind,"") ; //"" for real
+ sprintf(kind2,"") ; //"" for mixed
+ char w[15]; //weight
+ sprintf(w,""); //NW
+
+ if(side==1)sprintf(d,"V0C");
+ else if(side==0)sprintf(d,"V0A");
+ else sprintf(d,"TPC");
+
+ TH3F *h3DR, *h3DM;
+ h3DR = GetRealMixed(cen,w,d,kind,kind2,PID,1);
+ h3DM = GetRealMixed(cen,w,d,kind,kind2,PID,0);
+
+ TH1F * hCen = GetCen() ;
+ TH2F * hCenPHOS = GetCenPHOS() ;
+
+ if(cen==21)
+ sprintf(inname,"../flow11h_Apr14.root");
+
+ TFile * f = new TFile(inname) ;
+
+ //Read resolution
+ TH2F * hcos2AC = (TH2F*)f->Get("cos2V0AC");
+ TH2F * hcos2FAC= (TH2F*)f->Get("cos2FAC");
+ Double_t resAC = GetCos(hcos2AC,cen);
+ resAC=resAC ;
+
+ hcos2AC = (TH2F*)f->Get("cos2V0ATPC");
+ Double_t resAT = GetCos(hcos2AC,cen);
+ resAT=resAT ;
+
+ hcos2AC = (TH2F*)f->Get("cos2V0CTPC");
+ Double_t resCT = GetCos(hcos2AC,cen);
+ resCT=resCT ;
+
+ hcos2AC = (TH2F*)f->Get("cos2AC");
+ Double_t resT = GetRes(hcos2AC,cen);
+ resT=resT ;
+
+ Double_t res=1;
+ if(side==1) res = TMath::Sqrt(resAC*resCT/resAT);
+ else if(side==0)res = TMath::Sqrt(resAC*resAT/resCT);
+ else if(side==2)res = TMath::Sqrt(resAT*resCT/resAC);
+ else res = resT;
+
+ cout<<"res = "<<res <<endl;
+
+//--------------------------------------------------------------------
+ //invariant mass rebin
+ Int_t nRebin=2 ;
+
+ sprintf(key,"v2Pi_mixed%d",cen) ;
+ TH1D * v2Pi_mix = new TH1D(key,"V2 pi0 using mixed",nbin,xa) ;
+ sprintf(key,"v2Pi_pol1%d",cen) ;
+ TH1D * v2Pi_pol1 = new TH1D(key,"V2 pi0 using pol1",nbin,xa) ;
+ sprintf(key,"v2Pi_pol2%d",cen) ;
+ TH1D * v2Pi_pol2 = new TH1D(key,"V2 pi0 using pol2",nbin,xa) ;
+
+ sprintf(key,"nSig%d",cen) ;
+ TH1D * nSig = new TH1D(key,"n Pi0",nbin,xa) ;
+ sprintf(key,"nSig2%d",cen) ;
+ TH1D * nSig2 = new TH1D(key,"n Pi0",nbin,xa) ;
+
+
+ sprintf(key,"v2sys_m2_%s_%s_%d_%d",w,PID,cen,side) ;
+ TH1D * v2Asys = new TH1D(key,"V2 sys method2",nbin,xa) ;
+ sprintf(key,"v2stat_m2_%s_%s_%d_%d",w,PID,cen,side) ;
+ TH1D * v2Astat = new TH1D(key,"V2 stat method2",nbin,xa) ;
+
+ TCanvas * cf = new TCanvas("cf","yield vs phi",10,10,400,400) ;
+ cf->SetFillColor(0) ;
+ cf->SetFillStyle(0) ;
+ cf->Range(0,0,1,1);
+ cf->SetBorderSize(0);
+
+ TCanvas * cinv = new TCanvas("cinv","inv mass",10,10,400,400) ;
+
+ TCanvas * c4= new TCanvas("c4","v2 vs minv",10,10,800,800);
+ c4->SetFillColor(0) ;
+ c4->SetFillStyle(0) ;
+ c4->Range(0,0,1,1);
+ c4->SetBorderSize(0);
+ c4->Divide(3,2) ;
+
+ TCanvas * c3= new TCanvas("c3","v2 vs minv",10,10,800,800);
+ c3->SetFillColor(0) ;
+ c3->SetFillStyle(0) ;
+ c3->Range(0,0,1,1);
+ c3->SetBorderSize(0);
+ c3->Divide(3,2) ;
+
+//========================================================== minv
+ TF1 *fitMgg1 = new TF1("fitMgg1",fitMgg1,0.,0.4,5);
+ fitMgg1->SetLineWidth(2) ;
+ fitMgg1->SetLineColor(2) ;
+ TF1 *fitMgg2 = new TF1("fitMgg2",fitMgg2,0.,0.4,6);
+ fitMgg2->SetLineWidth(2) ;
+ fitMgg2->SetLineColor(4) ;
+ fitMgg2->SetLineStyle(7) ;
+ TF1 *fitGauss = new TF1("fitGauss",fitGauss,0.,0.4,3);
+ fitGauss->SetLineWidth(2) ;
+ fitGauss->SetLineColor(2) ;
+
+ TF1 *fitV2p1 = new TF1("fitV2p1",fitV2p1,0.,0.4,6);
+ fitV2p1->SetLineWidth(2) ;
+ fitV2p1->SetLineColor(3) ;
+ TF1 *fitV2p2 = new TF1("fitV2p2",fitV2p2,0.,0.4,7);
+ fitV2p2->SetLineWidth(2) ;
+ fitV2p2->SetLineColor(6) ;
+ fitV2p2->SetLineStyle(7) ;
+
+ TF1 *fitV2mix = new TF1("fitV2mix",fitV2mix,0.,0.4,5);
+ fitV2mix->SetLineWidth(2) ;
+ fitV2mix->SetLineColor(kRed) ;
+ fitV2mix->SetLineStyle(1) ;
+
+ TF1 *fitBg1 = new TF1("fitBg1",fitBg1,0.,0.4,2);
+ TF1 *fitBg2 = new TF1("fitBg2",fitBg2,0.,0.4,3);
+
+ TF1 * fit= new TF1("fit","[0]*(1+2*[1]*cos(2.*(x)))",0.,10.) ;
+ TF1 * fitv4= new TF1("fitv4","[0]*(1+2*[1]*cos(2.*(x))+2*[2]*cos(4.*(x)))",0.,10.) ;
+
+ TF1 *f1=new TF1("f1",fbg,0.0,0.4,4);
+ f1->SetLineColor(2) ;
+ TF1 *f2=new TF1("f2",fbg2,0.0,0.4,5);
+ f2->SetLineColor(4) ;
+ f2->SetLineStyle(4) ;
+
+ TF1 * unit = new TF1("unit","1.",0.,10.) ;
+
+ TF1 * fconst = new TF1("fconst","[0]",0.,1.) ;
+ //============================
+
+ char name[255] ;
+ TAxis * axis = v2Pi_mix->GetXaxis() ;
+ for(Int_t ii=1;ii<=nbin;ii++){ //over pT bins
+ if(ii<7)
+ c3->cd(ii) ;
+ else
+ c4->cd(ii-6) ;
+ if(ii>4)
+ nRebin=2 ;
+ cinv->cd() ;
+
+ Double_t ptmin=axis->GetBinLowEdge(ii);
+ Double_t ptmax=axis->GetBinUpEdge(ii);
+
+ h3DR->GetYaxis()->SetRangeUser(ptmin+0.0001,ptmax-0.0001) ;
+ h3DR->GetXaxis()->SetRangeUser(0.0,0.5) ;
+
+ h3DM->GetYaxis()->SetRangeUser(ptmin+0.0001,ptmax-0.0001) ;
+ h3DM->GetXaxis()->SetRangeUser(0.0,0.5) ;
+
+// h3DR->Rebin(nRebin,"");
+// h3DM->Rebin(nRebin,"");
+
+ //V2 vs minv for real
+ TH1D* v2 = (TH1D*)h3DR->Project3D("x") ;
+ sprintf(name,"v2_%d",ii) ;
+ v2->SetName(name) ;
+ sprintf(name,"%3.1f<p_{t}<%3.1f GeV/c",ptmin,ptmax) ;
+ v2->SetTitle(name) ;
+ //V2 vs minv for mixed
+ TH1D* v2m = (TH1D*)h3DM->Project3D("x");
+// sprintf(name,"v2m_%d",ii) ;
+ sprintf(name,"v2m") ;
+ v2m->SetName(name) ;
+
+ TH1D* hRatio =(TH1D*) h3DR->Project3D("x");
+ sprintf(name,"Ratio_%d",ii) ;
+ hRatio->SetName(name) ;
+ TH1D* hInvmassM1d = (TH1D*)h3DM->Project3D("x");
+ sprintf(name,"Mixed_%d",ii) ;
+ hInvmassM1d->SetName(name) ;
+
+ v2->Rebin(nRebin) ;
+ v2m->Rebin(nRebin) ;
+
+ sprintf(name,"v2v4_%d",ii) ;
+ TH1D * v2v4=(TH1D*)v2->Clone(name);
+ sprintf(name,"v2mv4_%d",ii) ;
+ TH1D * v2mv4=(TH1D*)v2m->Clone(name);
+
+ hRatio->Rebin(nRebin) ;
+ hInvmassM1d->Rebin(nRebin) ;
+
+ hRatio->Sumw2();
+ hRatio->Divide(hInvmassM1d);
+ hRatio->Fit(fconst,"q0","",0.18,0.2) ;
+ hRatio->Scale(1./fconst->GetParameter(0)) ;
+
+
+ if(cen>0)
+ fitMgg1->SetParameters(TMath::Min(0.3,0.0003*ii),0.137,0.0107,0.008,-0.0002,0) ;
+ else
+ fitMgg1->SetParameters(TMath::Min(0.3,0.0003*ii),0.137,0.0077,0.01,-0.0002,0) ;
+
+ fitMgg1->SetParLimits(2,0.005,0.015) ;
+ fitMgg1->SetParLimits(1,0.125,0.145);
+// fitMgg1->SetParLimits(0,0.,1.) ;
+
+ cinv->cd() ;
+ hRatio->Fit(fitMgg1,"qr0","",0.07,0.25); //fit and draw InvMass real/mixed
+ hRatio->Fit(fitMgg1,"qrM0","",0.07,0.25); //fit and draw InvMass real/mixed
+ fitMgg2->SetParameters(fitMgg1->GetParameters());
+ fitMgg2->SetParameter(5,0.) ;
+ hRatio->Fit(fitMgg2,"qr0+","",0.07,0.25); //fit and draw InvMass real/mixed
+ cinv->Update();
+
+ Double_t mean1 = fitMgg1->GetParameter(1) ;
+ Double_t mean1_e = fitMgg1->GetParError(1);
+ Double_t sigma1 =TMath::Abs(fitMgg1->GetParameter(2)) ;
+
+ mean=mean1;
+ width=2.*sigma1;
+ cout<< "Bin " << ii <<": sigma: "<<sigma1<<endl;
+
+ fitBg1->SetParameters(fitMgg1->GetParameter(3),fitMgg1->GetParameter(4)) ;
+ fitBg2->SetParameters(fitMgg2->GetParameter(3),fitMgg2->GetParameter(4),fitMgg2->GetParameter(5)) ;
+
+
+ //=========================================================== get v2 real vs minv (200 bins)
+ v2->Reset() ;
+ v2->Sumw2();
+
+ v2m->Reset() ;
+ v2m->Sumw2();
+
+ v2v4->Reset() ;
+ v2v4->Sumw2();
+
+ v2mv4->Reset() ;
+ v2mv4->Sumw2();
+
+
+ Int_t mMean = v2->FindBin(mean1) ;
+
+ Int_t mMin2 = v2->FindBin(mean1-sigma1) ;
+ Int_t mMax2 = v2->FindBin(mean1+sigma1) ;
+
+ //======================================== get v2 Real vs minv (200 bins)
+ for(Int_t i=1;i<=v2->GetNbinsX();i++){
+// h3DR->GetXaxis()->SetRange(1+(i-1)*nRebin,(i)*nRebin) ;
+// TH1D * tmp =(TH1D*) h3DR->Project3D("z") ;
+// sprintf(name,"real_%d_%d",ii,i);
+// tmp->SetName(name);
+ Int_t iptMin=h3DM->GetYaxis()->FindBin(ptmin+0.0001) ;
+ Int_t iptMax=h3DM->GetYaxis()->FindBin(ptmax-0.0001) ;
+
+ TH1D * tmp =(TH1D*) h3DR->ProjectionZ(Form("real_%d_%d",ii,i),1+(i-1)*nRebin,(i)*nRebin,iptMin,iptMax) ;
+ Double_t v2mean=0,v2err=0 ;
+ CalcV2(tmp,v2mean,v2err) ;
+ v2->SetBinContent(i,v2mean);
+ v2->SetBinError(i,v2err);
+
+fit->SetParameters(tmp->GetBinContent(1),0.1);
+tmp->Fit(fit,"qr0");
+v2->SetBinContent(i,fit->GetParameter(1));
+v2->SetBinError(i,fit->GetParError(1));
+tmp->Draw();
+
+cout<<"v2{CalcV2}: "<<v2mean<<"+-"<<v2err<<", v2{Fit}: "<<fit->GetParameter(1)<<"+-"<<fit->GetParError(1)<<endl;
+
+ delete tmp ;
+}
+
+
+ //======================================== get v2 mixed vs minv (200 bins)
+ for(Int_t i=1;i<=v2m->GetNbinsX();i++){
+ h3DM->GetXaxis()->SetRange(1+(i-1)*nRebin,(i)*nRebin) ;
+ TH1D * tmp2 = (TH1D*)h3DM->Project3D("z") ;
+ sprintf(name,"mixed_%d_%d",ii,i);
+ tmp2->SetName(name);
+
+/* Double_t v2mean=0,v2err=0 ;
+ CalcV2(tmp2,v2mean,v2err) ;
+ v2m->SetBinContent(i,v2mean);
+ v2m->SetBinError(i,v2err);
+*/
+tmp2->Fit(fit,"qr0");
+v2m->SetBinContent(i,fit->GetParameter(1));
+v2m->SetBinError(i,fit->GetParError(1));
+
+ delete tmp2 ;
+ }
+
+
+ ///////////////////////////////////////////////with single harmonic v2
+ //====================================== fit v2 real to find background
+
+ //This is to find v2Bg with v2Real fit with polynomial functions with gap
+/*
+ reject=kTRUE;
+ Double_t mMin_BgFit=0.05 ;
+ Double_t mMax_BgFit=0.30 ;
+ Double_t mMax_BgFit2=0.40 ;
+
+ f1->SetParameters(0.1,0.,0.,0.);
+ v2->Fit(f1,"qM","",mMin_BgFit,mMax_BgFit);
+
+ f2->SetParameters(0.1,0.,0.,0.,0.);
+ v2->Fit(f2,"qM+","",mMin_BgFit,mMax_BgFit2);
+*/
+
+ //Scale Mixed V2 to reproduce real V2
+ TH1D * v2mScaled = (TH1D*)v2m->Clone(name) ;
+ ScaleMixed(v2,v2m,v2mScaled) ;
+
+ sprintf(name,"%_bg",v2->GetName()) ;
+ TH1D * v2bg = (TH1D*)v2->Clone(name) ;
+
+ fitV2p1->SetParameters(0.1,0.135,0.05,0.1,0.) ;
+ fitV2p1->FixParameter(1,fitMgg1->GetParameter(1)) ;
+ fitV2p1->FixParameter(2,fitMgg1->GetParameter(2)) ;
+ v2->Fit(fitV2p1,"q","",0.07,0.25) ;
+ fitV2p2->SetParameters(0.1,0.135,0.05,0.1,0.) ;
+ fitV2p2->FixParameter(1,fitMgg2->GetParameter(1)) ;
+ fitV2p2->FixParameter(2,fitMgg2->GetParameter(2)) ;
+ v2->Fit(fitV2p2,"q+","",0.07,0.25) ;
+ fitV2mix->FixParameter(1,fitMgg1->GetParameter(1)) ;
+ fitV2mix->FixParameter(2,fitMgg1->GetParameter(2)) ;
+ v2->Fit(fitV2mix,"q+","",0.07,0.25) ;
+
+
+
+ //==========Draw===================
+ if(ii<7)
+ c3->cd(ii) ;
+ else
+ c4->cd(ii-6) ;
+
+
+ spectrum_1 = new TPad("1", "1",0.001,0.32,0.99,0.99);
+ spectrum_1->Draw();
+ spectrum_1->cd();
+ spectrum_1->Range(0,0,1,1);
+ spectrum_1->SetFillColor(0);
+ spectrum_1->SetFillStyle(1);
+ spectrum_1->SetBorderSize(1);
+ spectrum_1->SetBottomMargin(0.0);
+ spectrum_1->SetTopMargin(0.03);
+ spectrum_1->SetLeftMargin(0.1);
+ spectrum_1->SetRightMargin(0.05);
+ // spectrum_1->SetLogx();
+ // spectrum_1->SetLogy();
+
+ v2->GetXaxis()->SetRangeUser(0.05,0.3) ;
+ v2->SetMarkerStyle(20) ;
+ v2->SetMarkerSize(0.8) ;
+ v2->SetYTitle("v_{2}^{raw}") ;
+ v2->GetYaxis()->SetTitleSize(0.08) ;
+ v2->GetYaxis()->SetTitleOffset(0.40) ;
+// v2->SetMinimum(0.) ;
+// v2->SetMaximum(0.3);
+ v2->Draw();
+ v2m->SetMarkerStyle(24) ;
+ v2m->SetMarkerSize(0.8) ;
+ v2m->SetMarkerColor(6) ;
+ v2m->SetLineColor(6) ;
+// v2m->Draw("same");
+ v2mScaled->SetLineColor(kOrange) ;
+ v2mScaled->SetLineWidth(3) ;
+ v2mScaled->SetFillColor(kOrange) ;
+ v2mScaled->SetFillStyle(1001) ;
+// v2mScaled->Draw("sameL");
+
+
+ if(ii==1){
+ TLegend * lv2 = new TLegend(0.54,0.59,0.94,0.9) ;
+ lv2->AddEntry(v2,"Data","p") ;
+ lv2->AddEntry(fitV2mix,"Fit, mixed + G","l") ;
+ lv2->AddEntry(fitV2p1,"Fit, pol2 + G","l") ;
+ lv2->AddEntry(fitV2p2,"Fit, pol3 + G","l") ;
+ lv2->Draw();
+ }
+
+ TLine * linea = new TLine(mean-width,0,mean-width,1.) ;
+ linea->Draw() ;
+ TLine * linea2 = new TLine(mean+width,0,mean+width,1.) ;
+ linea2->Draw() ;
+
+ //Evalulate V2
+ //
+ // v2^S = v2^Total - Bg/Signal (v2^Total - v2^Bg)
+ //
+ //Bg/signal
+ Double_t bgS = 0 ;
+
+ TH1D * hm = (TH1D*)gROOT->FindObjectAny("v2m") ;
+ Double_t mix = hm->GetBinContent(hm->GetXaxis()->FindBin(fitMgg1->GetParameter(1))) ;
+
+ if(fitMgg1->GetParameter(0)>0.) bgS = fitMgg1->Eval(fitMgg1->GetParameter(1))/fitMgg1->GetParameter(0)-1. ;
+ Double_t v2M = fitV2mix->Eval(fitMgg1->GetParameter(1)) + bgS*fitV2mix->GetParameter(0) ;
+ Double_t errA = fitV2mix->GetParError(0) + fitV2mix->GetParError(3)*mix ;
+ Double_t sA = fitMgg1->GetParError(0)/fitMgg1->GetParameter(0) ;
+ Double_t sB = fitMgg1->GetParError(3)/fitMgg1->GetParameter(3) ;
+ Double_t errB = bgS*fitV2mix->GetParError(0) ; ;
+ Double_t errC = bgS*TMath::Sqrt(sA*sA+sB*sB)*fitV2mix->GetParameter(0) ;
+ Double_t v2Merr = TMath::Sqrt(errA*errA+errB*errB+errC*errC) ;
+
+ v2Pi_mix->SetBinContent(ii,v2M) ;
+ v2Pi_mix->SetBinError(ii,v2Merr) ;
+
+ v2M = fitV2p1->Eval(fitMgg1->GetParameter(1)) + bgS*fitV2p1->GetParameter(0) ;
+// v2Merr = bgS*fitV2p1->GetParError(0) ;
+ v2Pi_pol1->SetBinContent(ii,v2M) ;
+ v2Pi_pol1->SetBinError(ii,v2Merr) ;
+
+ if(fitMgg2->GetParameter(0)>0.) bgS = fitMgg2->Eval(fitMgg2->GetParameter(1))/fitMgg2->GetParameter(0)-1. ;
+ Double_t v2M = fitV2p2->Eval(fitMgg1->GetParameter(1)) + bgS*fitV2p2->GetParameter(0) ;
+// Double_t v2Merr = bgS*fitV2p2->GetParError(0) ;
+ v2Pi_pol2->SetBinContent(ii,v2M) ;
+ v2Pi_pol2->SetBinError(ii,v2Merr) ;
+
+ if(ii<7)
+ c3->cd(ii) ;
+ else
+ c4->cd(ii-6) ;
+
+ TPad *spectrum_2 = new TPad("2", "2",0.001,0.01,0.99,0.32);
+ spectrum_2->SetFillColor(0) ;
+ spectrum_2->SetFillStyle(0) ;
+ spectrum_2->SetLogy(0) ;
+ // spectrum_2->SetGridy() ;
+ spectrum_2->Draw();
+ spectrum_2->Range(0,0,1,1);
+ spectrum_2->SetFillColor(0);
+ spectrum_2->SetBorderSize(1);
+ spectrum_2->SetTopMargin(0.0);
+ spectrum_2->SetBottomMargin(0.25);
+ spectrum_2->SetLeftMargin(0.1);
+ spectrum_2->SetRightMargin(0.05);
+ // spectrum_2->SetLogx();
+ spectrum_2->cd() ;
+
+
+
+ //================================================= S/Bg
+
+ hRatio->SetMarkerStyle(20) ;
+ hRatio->SetMarkerSize(0.8) ;
+ hRatio->GetXaxis()->SetRangeUser(0.05,0.3) ;
+// hRatio->SetMaximum(hRatio->GetMaximum()*1.6) ;
+// hRatio->GetMinimum(0.0014) ;
+// hRatio->GetMinimum(0.002) ;
+ hRatio->GetXaxis()->SetLabelSize(0.1) ;
+ hRatio->SetLabelOffset(0.05) ;
+ hRatio->SetLabelSize(0.1) ;
+ hRatio->GetXaxis()->SetTitleOffset(0.8);
+ hRatio->SetXTitle("m_{#gamma#gamma} (GeV/c^{2})");
+ hRatio->GetXaxis()->SetTitleSize(0.14) ;
+ hRatio->SetYTitle("Real/Mixed");
+ hRatio->GetYaxis()->SetTitleSize(0.12) ;
+ hRatio->GetYaxis()->SetTitleOffset(0.40) ;
+ hRatio->GetYaxis()->SetLabelOffset(0.01) ;
+ hRatio->GetYaxis()->SetNdivisions(503) ;
+ hRatio->GetYaxis()->SetLabelSize(0.1) ;
+ hRatio->Draw();
+ TLine * line = new TLine(mean-width,0,mean-width,0.1) ;
+ line->Draw() ;
+ TLine * line2 = new TLine(mean+width,0,mean+width,0.1) ;
+ line2->Draw() ;
+
+ // Get Signal and Background if pi0 yield
+
+ hRatio->Fit(fconst,"+0rq","",mean-width,mean+width) ; // fit Real2mixed ratio with const
+ Double_t nRe_const=fconst->GetParameter(0) ;
+ Double_t nReErr_const=fconst->GetParError(0) ;
+
+ Double_t nBg_lin=fitBg1->Integral(mean-width,mean+width)/2./width ; // N in bg = fitbg1 integral under pi0 peak
+ Double_t nBgErr_lin=fitMgg1->GetParError(3); //fitBg1->GetParError(0);
+
+ Double_t nBg_quad=fitBg2->Integral(mean-width,mean+width)/2./width ; // N in bg = fitbg1 integral under pi0 peak
+ Double_t nBgErr_quad=fitMgg2->GetParError(3); //fitBg2->GetParError(0);
+
+ nSig->SetBinContent(ii,(nRe_const - nBg_lin)/nBg_lin) ;
+ nSig->SetBinError(ii,TMath::Sqrt(nReErr_const*nReErr_const + nBgErr_lin*nBgErr_lin)) ;
+ nSig2->SetBinContent(ii,(nRe_const - nBg_quad)/nBg_quad) ;
+ nSig2->SetBinError(ii,TMath::Sqrt(nReErr_const*nReErr_const + nBgErr_quad*nBgErr_quad)) ;
+
+ c3->Update() ;
+
+ }
+
+
+ TCanvas * csig = new TCanvas("signal","signal") ;
+
+ TLegend *leg_n = new TLegend(0.1,0.9,0.5,0.7);
+ leg_n->AddEntry(nSig,"N real with bg linear fit","p");
+ leg_n->AddEntry(nSig2,"N real with bg quad fit","p");
+
+ nSig->Draw("p");
+ nSig->SetLineWidth(6);
+ nSig2->SetMarkerStyle(21);
+ nSig2->SetMarkerColor(2);
+ nSig2->SetLineColor(2);
+ nSig2->SetLineWidth(5);
+ nSig2->Draw("psame");
+
+ leg_n->Draw();
+
+//============================================= Draw every v2
+
+ v2Pi_mix->SetMarkerStyle(21) ;
+ v2Pi_mix->SetLineColor(kOrange) ;
+ v2Pi_mix->SetMarkerColor(kOrange) ;
+ v2Pi_mix->Draw() ;
+
+ v2Pi_pol1->SetMarkerStyle(25) ;
+ v2Pi_pol1->SetLineColor(kOrange) ;
+ v2Pi_pol1->SetMarkerColor(kOrange) ;
+ v2Pi_pol1->Draw("same") ;
+
+ v2Pi_pol2->SetMarkerStyle(23) ;
+ v2Pi_pol2->SetLineColor(6) ;
+ v2Pi_pol2->SetMarkerColor(6) ;
+ v2Pi_pol2->Draw("same");
+
+
+ TLegend *leg_v2 = new TLegend(0.1,0.9,0.5,0.7);
+ leg_v2->AddEntry(v2Pi_mix,"Corrected Mixed","p");
+ leg_v2->AddEntry(v2Pi_pol1,"Bg fitted with pol1","p");
+ leg_v2->AddEntry(v2Pi_pol2,"Bg fitted with pol2","p");
+ leg_v2->Draw();
+
+ //calculate sys errors
+ TCanvas * csys = new TCanvas("V2sys","V2sys") ;
+ for(Int_t i=1; i<=v2Pi_mix->GetNbinsX() ;i++){
+// Double_t mean=v2Pi_mix->GetBinContent(i);
+
+ Double_t mean = v2Pi_pol1->GetBinContent(i)/v2Pi_pol1->GetBinError(i)/v2Pi_pol1->GetBinError(i) + v2Pi_pol2->GetBinContent(i)/v2Pi_pol2->GetBinError(i)/v2Pi_pol2->GetBinError(i);
+
+ Double_t weight=
+ 1./v2Pi_pol1->GetBinError(i)/v2Pi_pol1->GetBinError(i)
+ +1./v2Pi_pol2->GetBinError(i)/v2Pi_pol2->GetBinError(i) ;
+
+ mean/=weight;
+
+ Double_t rms =
+ (v2Pi_pol1->GetBinContent(i)-mean)*(v2Pi_pol1->GetBinContent(i)-mean)/v2Pi_pol1->GetBinError(i)/v2Pi_pol1->GetBinError(i)
+ +(v2Pi_pol2->GetBinContent(i)-mean)*(v2Pi_pol2->GetBinContent(i)-mean)/v2Pi_pol2->GetBinError(i)/v2Pi_pol2->GetBinError(i)
+ +(v2Pi_mix->GetBinContent(i)-mean)*(v2Pi_mix->GetBinContent(i)-mean)/v2Pi_mix->GetBinError(i)/v2Pi_mix->GetBinError(i) ;
+
+ Double_t weight=
+ 1./v2Pi_pol1->GetBinError(i)/v2Pi_pol1->GetBinError(i)
+ +1./v2Pi_pol2->GetBinError(i)/v2Pi_pol2->GetBinError(i)
+ +1./v2Pi_mix->GetBinError(i)/v2Pi_mix->GetBinError(i) ;
+
+
+ rms/=weight ;
+
+ v2Astat->SetBinContent(i,mean) ;
+ v2Astat->SetBinError(i,v2Pi_mix->GetBinError(i)) ;
+ v2Asys->SetBinContent(i,mean) ;
+ v2Asys->SetBinError(i,TMath::Sqrt(rms)) ;
+ }
+
+ v2Asys->SetFillStyle(1001) ;
+ v2Asys->SetFillColor(kYellow) ;
+
+ v2Astat->SetMarkerColor(kOrange+7) ;
+ v2Astat->SetMarkerStyle(20) ;
+ v2Astat->SetLineColor(kOrange+7) ;
+
+ switch(cen){
+ case 0:
+ sprintf(key,"Centrality 0-5%%") ; break ;
+ case 1:
+ sprintf(key,"Centrality 5-10%%") ; break ;
+ case 2:
+ sprintf(key,"Centrality 10-20%%") ; break ;
+ case 3:
+ sprintf(key,"Centrality 20-30%%") ; break ;
+ case 4:
+ sprintf(key,"Centrality 30-40%%") ; break ;
+ case 5:
+ sprintf(key,"Centrality 40-50%%") ; break ;
+ case 10:
+ sprintf(key,"Centrality 0-10%%") ; break ;
+ case 11:
+ sprintf(key,"Centrality 20-40%%") ; break ;
+ }
+
+ v2Asys->SetTitle(key) ;
+ v2Asys->SetXTitle("p_{t} (GeV/c)") ;
+ v2Asys->SetYTitle("v_{2}") ;
+ v2Asys->SetMinimum(-0.05) ;
+ v2Asys->SetMaximum(0.6) ;
+
+ TH1D *effcorrect = v2Asys->Clone("effcorrect");
+ TH1D *effcorrect2 = v2Asys->Clone("effcorrect2");
+
+ Double_t eff=0, err=0;
+ if(strcmp(PID,"Both2core")==0){
+ if(cen==0) {eff=.03; err=.04;}
+ if(cen==1) {eff=.08; err=.04;}
+ if(cen==2) {eff=.03; err=.03;}
+ if(cen==3) {eff=.02; err=.02;}
+ if(cen==4) {eff=.02; err=.02;}
+ if(cen==5) {eff=.01; err=.02;}
+ if(cen==10) {eff=.05; err=.02;}
+ if(cen==11) {eff=.02; err=.02;}
+ if(cen==20) {eff=.02; err=.02;}
+ if(cen==21) {eff=.05; err=.02;}
+
+ eff=eff*2.*TMath::Pi()/5./sin(2.*TMath::Pi()/5.)/4.;
+ err=err*2.*TMath::Pi()/5./sin(2.*TMath::Pi()/5.)/4.;
+
+ eff=eff*res/resT;
+ err=err*res/resT;
+ cout<<"Pi0 efficiency correction: "<<eff<<"+-"<<err<<endl;
+ }
+
+ Double_t x[100],y[100],ex[100],ey[100] ;
+
+ for(Int_t i=0;i<effcorrect->GetNbinsX();i++){
+ effcorrect->SetBinContent(i,eff);
+ effcorrect->SetBinError(i,err);
+ effcorrect2->SetBinContent(i,eff);
+ effcorrect2->SetBinError(i,0);
+ }
+
+ if(effcor){
+ v2Astat->Add(effcorrect2);
+ v2Asys->Add(effcorrect);
+ }
+
+ v2Asys->Scale(1/res) ;
+ v2Astat->Scale(1/res) ;
+ //Error due to reaction plane into sys
+
+
+ v2Asys->Draw("E2") ;
+ v2Astat->Draw("same") ;
+
+
+
+//=================================================== save to file
+ TFile fout("v2_method2_QA.root","update") ;
+ v2Asys->Write(0,TObject::kOverwrite) ;
+ v2Astat->Write(0,TObject::kOverwrite) ;
+
+
+}
--- /dev/null
+char inname[256];
+
+// const Int_t nbin=11 ;
+// Double_t xa[14]={1.,1.5,2.,2.5,3.,4.,5.,6.,8.,10.,14.,20.} ;
+ const Int_t nbin=12 ;
+ Double_t xa[13]={0.6,1.,1.5,2.,3.,4.,5.,7.,9.,11.,13.,16.,20.} ;
+// const Int_t nbin=11 ;
+// Double_t xa[12]={0.6,1.,1.5,2.,2.5,3.,4.,5.,7.,10.,15.,20.} ;
+
+
+Double_t Ollitrault(Double_t chi){
+ Double_t x = 0.25*chi*chi;
+ Double_t resk1 = 0.626657 * chi * exp(-x) * (TMath::BesselI0((float)x) + TMath::BesselI1((float)x));
+ Double_t resk2 = 0.626657 * chi * exp(-x) * (TMath::Sqrt(2./TMath::Pi()/x)*TMath::SinH(x) + TMath::Sqrt(2./TMath::Pi()/x)*(TMath::CosH(x) - TMath::SinH(x)/x));
+
+ return resk1;
+}
+
+Double_t GetCos(TH2F* hcos2AC, Int_t cen){
+ TH1D *hres = 0 ;
+ TH2F * hPHOS = (TH2F*)gROOT->FindObjectAny("hCenPHOS");
+ Double_t resMean = 0, weight=0. ;
+
+ if(cen==21){
+ TFile * f3 = new TFile("../flow11h_Apr14.root") ;
+ hPHOS = (TH2F*)f3->Get("hCenPHOS");
+ }
+
+Int_t bin0, bin1;
+
+if(cen==10){ bin0=1; bin1=3;}
+if(cen==11){ bin0=5; bin1=9;}
+if(cen==0){ bin0=1; bin1=2;}
+if(cen==1){ bin0=2; bin1=3;}
+if(cen==2){ bin0=3; bin1=5;}
+if(cen==3){ bin0=5; bin1=7;}
+if(cen==4){ bin0=7; bin1=9;}
+if(cen==5){ bin0=9; bin1=11;}
+if(cen==20){ bin0=3; bin1=11;} //10-50%
+if(cen==21){ bin0=1; bin1=5;} //0-20%
+
+ for(Int_t i=bin0; i<bin1; i++){
+ TH1D * hwi = hPHOS->ProjectionX("wi",5*i-4,5*i) ;
+ Double_t wi = hwi->GetMean() ;
+ hres = hcos2AC->ProjectionX("res",i,i) ;
+ resMean += wi*hres->GetMean() ;
+ weight += wi ;
+ delete hwi ;
+ delete hres ;
+ }
+ if(weight>0.){
+ resMean/=weight ;
+ return resMean ;
+ }
+ else{
+ return 0. ;
+ }
+}
+Double_t GetRes(TH2F* hcos2AC, Int_t cen){
+
+ TH1D *hres = 0 ;
+ Double_t resMean = 0, weight=0. ;
+
+Int_t bin0, bin1;
+
+if(cen==10){ bin0=1; bin1=3;} //0-10 (Central)
+if(cen==11){ bin0=5; bin1=9;} //20-40 (SemiCentral)
+if(cen==0){ bin0=1; bin1=2;}
+if(cen==1){ bin0=2; bin1=3;}
+if(cen==2){ bin0=3; bin1=5;}
+if(cen==3){ bin0=5; bin1=7;}
+if(cen==4){ bin0=7; bin1=9;}
+if(cen==5){ bin0=9; bin1=11;}
+if(cen==20){ bin0=3; bin1=11;} //10-50%
+if(cen==21){ bin0=1; bin1=5;} //0-20%
+
+ TH1D *hres = 0 ;
+ TH2F * hPHOS = (TH2F*)gROOT->FindObjectAny("hCenPHOS");
+ Double_t resMean = 0, weight=0. ;
+ if(cen==21){
+ TFile * f3 = new TFile("../flow11h_Apr14.root") ;
+ hPHOS = (TH2F*)f3->Get("hCenPHOS");
+ }
+
+ for(Int_t i=bin0; i<bin1; i++){
+ TH1D * hwi = hPHOS->ProjectionX("wi",5*i-4,5*i) ;
+ Double_t wi = hwi->GetMean() ;
+ hres = hcos2AC->ProjectionX("res",i,i) ;
+ resMean += wi*hres->GetMean() ;
+ weight += wi ;
+ delete hwi ;
+ delete hres ;
+ }
+ if(weight>0.){
+ resMean/=weight ;
+ }
+ else{
+ resMean = 0. ;
+ }
+
+
+ double chi = 2;
+ double resSub = TMath::Sqrt(resMean);
+ for(int j=0; j<15; j++){
+ double resEve = Ollitrault(chi);
+ chi= (resEve < resSub) ? chi+1.0*pow(0.5, j) : chi-1.0*pow(0.5, j);
+ }
+ return Ollitrault(TMath::Sqrt(2.)*chi);
+}
+
+TH3F* GetRealMixed(Int_t cen, char w[255], char d[255], char kind[255], char kind2[255], char PID[255], Int_t Real=1){
+ if(cen==10||cen==0||cen==1||cen==21) sprintf(inname,"../flow11hCentral_Apr14.root");
+ else sprintf(inname,"../flow11hSemiCentral_Apr14.root");
+ char inname2[255];
+ if(cen==21) sprintf(inname2,"../flow11hSemiCentral_Apr14.root");
+
+ TFile * f = new TFile(inname) ;
+ if(cen==21) TFile * f2 = new TFile(inname2) ;
+
+ char key[125] ;
+ TH3F * h3DR =0 ;TH3F * h3DM=0;
+
+ if(cen==10){//centrality 0-10
+ sprintf(key,"h%sMassPt%s%s%s_cen0",w,d,kind,PID) ;
+ h3DR = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen0",d,kind2,PID) ;
+ h3DM= (TH3F*)f->Get(key) ;
+
+ sprintf(key,"h%sMassPt%s%s%s_cen1",w,d,kind,PID) ;
+ TH3F *h3DRa = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen1",d,kind2,PID) ;
+ TH3F *h3DMa= (TH3F*)f->Get(key) ;
+
+ sprintf(key,"h%sMassPt%s%s%s_cen2",w,d,kind,PID) ;
+ h3DRb = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen2",d,kind2,PID) ;
+ h3DMb= (TH3F*)f->Get(key) ;
+ sprintf(key,"h%sMassPt%s%s%s_cen3",w,d,kind,PID) ;
+ h3DRc = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen3",d,kind2,PID) ;
+ h3DMc= (TH3F*)f->Get(key) ;
+
+ TH1D* hCen = ((TH2F*)f->Get("hCentrality"))->ProjectionX();
+ Double_t e1 = hCen->Integral(6,8)/3.;
+ Double_t e2 = hCen->Integral(9,9);
+ Double_t e3 = hCen->Integral(10,10);
+
+cout<<"w2="<<e1/e2<<", w3="<<e1/e3<<endl;
+
+ h3DR->Add(h3DRa); delete h3DRa;
+ h3DM->Add(h3DMa); delete h3DMa;
+ h3DR->Add(h3DRb,e1/e2); delete h3DRb;
+ h3DM->Add(h3DMb,e1/e2); delete h3DMb;
+ h3DR->Add(h3DRc,e1/e3); delete h3DRc;
+ h3DM->Add(h3DMc,e1/e3); delete h3DMc;
+ }
+ if(cen==21){//centrality 0-20
+ sprintf(key,"h%sMassPt%s%s%s_cen0",w,d,kind,PID) ;
+ h3DR = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen0",d,kind2,PID) ;
+ h3DM= (TH3F*)f->Get(key) ;
+
+ sprintf(key,"h%sMassPt%s%s%s_cen1",w,d,kind,PID) ;
+ TH3F *h3DRa = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen1",d,kind2,PID) ;
+ TH3F *h3DMa= (TH3F*)f->Get(key) ;
+
+ sprintf(key,"h%sMassPt%s%s%s_cen2",w,d,kind,PID) ;
+ h3DRb = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen2",d,kind2,PID) ;
+ h3DMb= (TH3F*)f->Get(key) ;
+ sprintf(key,"h%sMassPt%s%s%s_cen3",w,d,kind,PID) ;
+ h3DRc = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen3",d,kind2,PID) ;
+ h3DMc= (TH3F*)f->Get(key) ;
+
+ TH1D* hCen = ((TH2F*)f->Get("hCentrality"))->ProjectionX();
+ Double_t e1 = hCen->Integral(6,8)/3.;
+ Double_t e2 = hCen->Integral(9,9);
+ Double_t e3 = hCen->Integral(10,10);
+
+cout<<"w2="<<e1/e2<<", w3="<<e1/e3<<endl;
+
+ h3DR->Add(h3DRa); delete h3DRa;
+ h3DM->Add(h3DMa); delete h3DMa;
+ h3DR->Add(h3DRb,e1/e2); delete h3DRb;
+ h3DM->Add(h3DMb,e1/e2); delete h3DMb;
+ h3DR->Add(h3DRc,e1/e3); delete h3DRc;
+ h3DM->Add(h3DMc,e1/e3); delete h3DMc;
+
+//now 10-20
+ sprintf(key,"h%sMassPt%s%s%s_cen4",w,d,kind,PID) ;
+ TH3F* h3DR1 = (TH3F*)f2->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen4",d,kind2,PID) ;
+ TH3F* h3DM1= (TH3F*)f2->Get(key) ;
+
+ sprintf(key,"h%sMassPt%s%s%s_cen0",w,d,kind,PID) ;
+ TH3F* h3DRa = (TH3F*)f2->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen0",d,kind2,PID) ;
+ TH3F* h3DMa= (TH3F*)f2->Get(key) ;
+ sprintf(key,"h%sMassPt%s%s%s_cen1",w,d,kind,PID) ;
+ TH3F* h3DRb = (TH3F*)f2->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen1",d,kind2,PID) ;
+ TH3F* h3DMb= (TH3F*)f2->Get(key) ;
+ sprintf(key,"h%sMassPt%s%s%s_cen2",w,d,kind,PID) ;
+ TH3F* h3DRc = (TH3F*)f2->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen2",d,kind2,PID) ;
+ TH3F* h3DMc= (TH3F*)f2->Get(key) ;
+ sprintf(key,"h%sMassPt%s%s%s_cen3",w,d,kind,PID) ;
+ TH3F* h3DRd = (TH3F*)f2->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen3",d,kind2,PID) ;
+ TH3F* h3DMd= (TH3F*)f2->Get(key) ;
+
+ TH1D* hCen2 = ((TH2F*)f2->Get("hCentrality"))->ProjectionX();
+ Double_t e1 = hCen2->Integral(11,11);
+ Double_t e2 = hCen2->Integral(12,12);
+ Double_t e3 = hCen2->Integral(13,13);
+ Double_t e4 = hCen2->Integral(14,15)/2.;
+ Double_t e5 = hCen2->Integral(16,20)/5.;
+
+cout<<"w_11="<<e5/e1<<", w_12="<<e5/e2<<", w_13="<<e5/e3<<", w_14-15="<<e5/e4<<endl;
+
+ h3DR->Add(h3DR1,e5/e1); delete h3DR1;
+ h3DM->Add(h3DM1,e5/e1); delete h3DM1;
+ h3DR->Add(h3DRa,e5/e1); delete h3DRa;
+ h3DM->Add(h3DMa,e5/e1); delete h3DMa;
+ h3DR->Add(h3DRb,e5/e2); delete h3DRb;
+ h3DM->Add(h3DMb,e5/e2); delete h3DMb;
+ h3DR->Add(h3DRc,e5/e3); delete h3DRc;
+ h3DM->Add(h3DMc,e5/e3); delete h3DMc;
+ h3DR->Add(h3DRd,e5/e4); delete h3DRd;
+ }
+ if(cen==11){//centrality 20-40
+ sprintf(key,"h%sMassPt%s%s%s_cen5",w,d,kind,PID) ;
+ h3DR = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen5",d,kind2,PID) ;
+ h3DM= (TH3F*)f->Get(key) ;
+
+ sprintf(key,"h%sMassPt%s%s%s_cen6",w,d,kind,PID) ;
+ TH3F *h3DRa = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen6",d,kind2,PID) ;
+ TH3F *h3DMa= (TH3F*)f->Get(key) ;
+
+ h3DR->Add(h3DRa); delete h3DRa;
+ h3DM->Add(h3DMa); delete h3DMa;
+ }
+ if(cen==20){//centrality 10-50
+ sprintf(key,"h%sMassPt%s%s%s_cen4",w,d,kind,PID) ;
+ h3DR = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen4",d,kind2,PID) ;
+ h3DM= (TH3F*)f->Get(key) ;
+
+ sprintf(key,"h%sMassPt%s%s%s_cen5",w,d,kind,PID) ;
+ TH3F *h3DRa = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen5",d,kind2,PID) ;
+ TH3F *h3DMa= (TH3F*)f->Get(key) ;
+
+ sprintf(key,"h%sMassPt%s%s%s_cen6",w,d,kind,PID) ;
+ TH3F *h3DRb = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen6",d,kind2,PID) ;
+ TH3F *h3DMb= (TH3F*)f->Get(key) ;
+
+ sprintf(key,"h%sMassPt%s%s%s_cen7",w,d,kind,PID) ;
+ TH3F *h3DRc = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen7",d,kind2,PID) ;
+ TH3F *h3DMc= (TH3F*)f->Get(key) ;
+
+ h3DR->Add(h3DRa); delete h3DRa;
+ h3DM->Add(h3DMa); delete h3DMa;
+ h3DR->Add(h3DRb); delete h3DRb;
+ h3DM->Add(h3DMb); delete h3DMb;
+ h3DR->Add(h3DRc); delete h3DRc;
+ h3DM->Add(h3DMc); delete h3DMc;
+ }
+//small bins
+ if(cen==0){//centrality 0-5
+ sprintf(key,"h%sMassPt%s%s%s_cen0",w,d,kind,PID) ;
+ h3DR = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen0",d,kind2,PID) ;
+ h3DM= (TH3F*)f->Get(key) ;
+ }
+ if(cen==1){//centrality 5-10
+ sprintf(key,"h%sMassPt%s%s%s_cen1",w,d,kind,PID) ;
+ h3DR = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen1",d,kind2,PID) ;
+ h3DM= (TH3F*)f->Get(key) ;
+ sprintf(key,"h%sMassPt%s%s%s_cen2",w,d,kind,PID) ;
+ h3DRa = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen2",d,kind2,PID) ;
+ h3DMa= (TH3F*)f->Get(key) ;
+ sprintf(key,"h%sMassPt%s%s%s_cen3",w,d,kind,PID) ;
+ h3DRb = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen3",d,kind2,PID) ;
+ h3DMb= (TH3F*)f->Get(key) ;
+
+ TH1D* hCen = ((TH2F*)f->Get("hCentrality"))->ProjectionX();
+ Double_t e1 = hCen->Integral(6,8)/3.;
+ Double_t e2 = hCen->Integral(9,9);
+ Double_t e3 = hCen->Integral(10,10);
+
+cout<<"w2="<<e1/e2<<", w3="<<e1/e3<<endl;
+
+ h3DR->Add(h3DRa,e1/e2); delete h3DRa;
+ h3DM->Add(h3DMa,e1/e2); delete h3DMa;
+ h3DR->Add(h3DRb,e1/e3); delete h3DRb;
+ h3DM->Add(h3DMb,e1/e3); delete h3DMb;
+
+/*
+ h3DR->Add(h3DRa); delete h3DRa;
+ h3DM->Add(h3DMa); delete h3DMa;
+ h3DR->Add(h3DRb); delete h3DRb;
+ h3DM->Add(h3DMb); delete h3DMb;
+*/
+ }
+ if(cen==2){//centrality 10-20
+ sprintf(key,"h%sMassPt%s%s%s_cen4",w,d,kind,PID) ;
+ h3DR = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen4",d,kind2,PID) ;
+ h3DM= (TH3F*)f->Get(key) ;
+
+ sprintf(key,"h%sMassPt%s%s%s_cen0",w,d,kind,PID) ;
+ TH3F* h3DRa = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen0",d,kind2,PID) ;
+ TH3F* h3DMa= (TH3F*)f->Get(key) ;
+ sprintf(key,"h%sMassPt%s%s%s_cen1",w,d,kind,PID) ;
+ TH3F* h3DRb = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen1",d,kind2,PID) ;
+ TH3F* h3DMb= (TH3F*)f->Get(key) ;
+ sprintf(key,"h%sMassPt%s%s%s_cen2",w,d,kind,PID) ;
+ TH3F* h3DRc = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen2",d,kind2,PID) ;
+ TH3F* h3DMc= (TH3F*)f->Get(key) ;
+ sprintf(key,"h%sMassPt%s%s%s_cen3",w,d,kind,PID) ;
+ TH3F* h3DRd = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen3",d,kind2,PID) ;
+ TH3F* h3DMd= (TH3F*)f->Get(key) ;
+
+ TH1D* hCen = ((TH2F*)f->Get("hCentrality"))->ProjectionX();
+ Double_t e1 = hCen->Integral(11,11);
+ Double_t e2 = hCen->Integral(12,12);
+ Double_t e3 = hCen->Integral(13,13);
+ Double_t e4 = hCen->Integral(14,15)/2.;
+ Double_t e5 = hCen->Integral(16,20)/5.;
+
+cout<<"w_11="<<e5/e1<<", w_12="<<e5/e2<<", w_13="<<e5/e3<<", w_14-15="<<e5/e4<<endl;
+
+ h3DR->Add(h3DRa,e5/e1); delete h3DRa;
+ h3DM->Add(h3DMa,e5/e1); delete h3DMa;
+ h3DR->Add(h3DRb,e5/e2); delete h3DRb;
+ h3DM->Add(h3DMb,e5/e2); delete h3DMb;
+ h3DR->Add(h3DRc,e5/e3); delete h3DRc;
+ h3DM->Add(h3DMc,e5/e3); delete h3DMc;
+ h3DR->Add(h3DRd,e5/e4); delete h3DRd;
+ h3DM->Add(h3DMd,e5/e4); delete h3DMd;
+ }
+ if(cen==3){//centrality 20-30
+ sprintf(key,"h%sMassPt%s%s%s_cen5",w,d,kind,PID) ;
+ h3DR = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen5",d,kind2,PID) ;
+ h3DM= (TH3F*)f->Get(key) ;
+ }
+ if(cen==4){//centrality 30-40
+ sprintf(key,"h%sMassPt%s%s%s_cen6",w,d,kind,PID) ;
+ h3DR = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen6",d,kind2,PID) ;
+ h3DM= (TH3F*)f->Get(key) ;
+ }
+ if(cen==5){//centrality 40-50
+ sprintf(key,"h%sMassPt%s%s%s_cen7",w,d,kind,PID) ;
+ h3DR = (TH3F*)f->Get(key) ;
+ sprintf(key,"hMiMassPt%s%s%s_cen7",d,kind2,PID) ;
+ h3DM= (TH3F*)f->Get(key) ;
+ }
+
+
+ if(Real)return h3DR;
+ else return h3DM;
+}
+
+TH1F * GetCen(){
+cout<<inname<<endl;
+ TFile * f = new TFile(inname) ;
+ return (TH1F*)f->Get("hCentrality") ;
+}
+
+TH2F * GetCenPHOS(){
+ TFile * f = new TFile(inname) ;
+ return (TH2F*)f->Get("hCenPHOS") ;
+}
+
+
--- /dev/null
+char inname[256];
+
+// const Int_t nbin=11 ;
+// Double_t xa[14]={1.,1.5,2.,2.5,3.,4.,5.,6.,8.,10.,14.,20.} ;
+// const Int_t nbin=12 ;
+// Double_t xa[13]={1.,1.5,2.,2.5,3.,4.,5.,7.,9.,11.,13.,16.,20.} ;
+
+//const Int_t nbin=16 ;
+//Double_t xa[17]={0.6,1,1.5,2,2.5,3,3.5,4,5,6,7,8,10,12,14,16,20};
+
+//from PCM
+const Int_t nbin=29 ;
+Double_t xa[30]={0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.2,1.4,1.6,1.8,2.0,2.2,2.4,2.6,3.0,3.5,4.0,5,6,7,8,10,12,14,16,20};
+
+// const Int_t nbin=12 ;
+// Double_t xa[13]={0.6,1.,1.5,2.,2.5,3.,4.,5.,7.,10.,15.,20.} ;
+
+
+Double_t Ollitrault(Double_t chi){
+ Double_t x = 0.25*chi*chi;
+ Double_t resk1 = 0.626657 * chi * exp(-x) * (TMath::BesselI0((float)x) + TMath::BesselI1((float)x));
+ Double_t resk2 = 0.626657 * chi * exp(-x) * (TMath::Sqrt(2./TMath::Pi()/x)*TMath::SinH(x) + TMath::Sqrt(2./TMath::Pi()/x)*(TMath::CosH(x) - TMath::SinH(x)/x));
+
+ return resk1;
+}
+
+Double_t GetCos(TH2F* hcos2AC, Int_t cen){
+ TH1D *hres = 0 ;
+ TH2F * hPHOS = (TH2F*)gROOT->FindObjectAny("hCenPHOS");
+ Double_t resMean = 0, weight=0. ;
+
+Int_t bin0, bin1;
+
+if(cen==10){ bin0=1; bin1=3;}
+if(cen==11){ bin0=5; bin1=9;}
+if(cen==0){ bin0=1; bin1=2;}
+if(cen==1){ bin0=2; bin1=3;}
+if(cen==2){ bin0=3; bin1=5;}
+if(cen==3){ bin0=5; bin1=7;}
+if(cen==4){ bin0=7; bin1=9;}
+if(cen==5){ bin0=9; bin1=11;}
+
+ for(Int_t i=bin0; i<bin1; i++){
+ TH1D * hwi = hPHOS->ProjectionX("wi",5*i-4,5*i) ;
+ Double_t wi = hwi->GetMean() ;
+ hres = hcos2AC->ProjectionX("res",i,i) ;
+ resMean += wi*hres->GetMean() ;
+ weight += wi ;
+ delete hwi ;
+ delete hres ;
+ }
+ if(weight>0.){
+ resMean/=weight ;
+ return resMean ;
+ }
+ else{
+ return 0. ;
+ }
+}
+Double_t GetRes(TH2F* hcos2AC, Int_t cen){
+
+ TH1D *hres = 0 ;
+ Double_t resMean = 0, weight=0. ;
+
+Int_t bin0, bin1;
+
+if(cen==10){ bin0=1; bin1=3;} //0-10 (Central)
+if(cen==11){ bin0=5; bin1=9;} //20-40 (SemiCentral)
+if(cen==0){ bin0=1; bin1=2;}
+if(cen==1){ bin0=2; bin1=3;}
+if(cen==2){ bin0=3; bin1=5;}
+if(cen==3){ bin0=5; bin1=7;}
+if(cen==4){ bin0=7; bin1=9;}
+if(cen==5){ bin0=9; bin1=11;}
+
+ TH1D *hres = 0 ;
+ TH2F * hPHOS = (TH2F*)gROOT->FindObjectAny("hCenPHOS");
+ Double_t resMean = 0, weight=0. ;
+
+ for(Int_t i=bin0; i<bin1; i++){
+ TH1D * hwi = hPHOS->ProjectionX("wi",5*i-4,5*i) ;
+ Double_t wi = hwi->GetMean() ;
+ hres = hcos2AC->ProjectionX("res",i,i) ;
+ resMean += wi*hres->GetMean() ;
+ weight += wi ;
+ delete hwi ;
+ delete hres ;
+ }
+ if(weight>0.){
+ resMean/=weight ;
+ }
+ else{
+ resMean = 0. ;
+ }
+
+
+ double chi = 2;
+ double resSub = TMath::Sqrt(resMean);
+ for(int j=0; j<15; j++){
+ double resEve = Ollitrault(chi);
+ chi= (resEve < resSub) ? chi+1.0*pow(0.5, j) : chi-1.0*pow(0.5, j);
+ }
+ return Ollitrault(TMath::Sqrt(2.)*chi);
+}
+
+TH2F* GetRealMixed(Int_t cen, char w[255], char d[255], char kind[255], char kind2[255], char PID[255], Int_t Real=1){
+ if(cen==10||cen==0||cen==1) sprintf(inname,"../flow11hCentral_Apr14.root");
+ else sprintf(inname,"../flow11hSemiCentral_Apr14.root");
+ TFile * f = new TFile(inname) ;
+ char key[125] ;
+ TH2F * h2DR =0 ;TH2F * h2DM=0;
+
+ if(cen==10){//centrality 0-10
+ sprintf(key,"h%sPhotPhi%s%s%s_cen0",w,d,kind,PID) ;
+//cout<<key<<endl;
+ h2DR = (TH2F*)f->Get(key) ;
+
+ sprintf(key,"h%sPhotPhi%s%s%s_cen1",w,d,kind,PID) ;
+ TH2F *h2DRa = (TH2F*)f->Get(key) ;
+
+ sprintf(key,"h%sPhotPhi%s%s%s_cen2",w,d,kind,PID) ;
+ h2DRb = (TH2F*)f->Get(key) ;
+ sprintf(key,"h%sPhotPhi%s%s%s_cen3",w,d,kind,PID) ;
+ h2DRc = (TH2F*)f->Get(key) ;
+
+ TH1D* hCen = ((TH2F*)f->Get("hCentrality"))->ProjectionX();
+ Double_t e1 = hCen->Integral(6,8)/3.;
+ Double_t e2 = hCen->Integral(9,9);
+ Double_t e3 = hCen->Integral(10,10);
+
+cout<<"w2="<<e1/e2<<", w3="<<e1/e3<<endl;
+
+// h2DR->Add(h2DRa); delete h2DRa;
+ h2DRa->Add(h2DRb,e1/e2); delete h2DRb;
+ h2DRa->Add(h2DRc,e1/e3); delete h2DRc;
+ h2DR->Add(h2DRa); delete h2DRa;
+
+
+// h2DR->Add(h2DRa); delete h2DRa;
+// h2DR->Add(h2DRb); delete h2DRb;
+// h2DR->Add(h2DRc); delete h2DRc;
+
+ }
+ if(cen==11){//centrality 20-40
+ sprintf(key,"h%sPhotPhi%s%s%s_cen5",w,d,kind,PID) ;
+ h2DR = (TH2F*)f->Get(key) ;
+
+ sprintf(key,"h%sPhotPhi%s%s%s_cen6",w,d,kind,PID) ;
+ TH2F *h2DRa = (TH2F*)f->Get(key) ;
+
+ h2DR->Add(h2DRa); delete h2DRa;
+ }
+ if(cen==0){//centrality 0-5
+ sprintf(key,"h%sPhotPhi%s%s%s_cen0",w,d,kind,PID) ;
+ h2DR = (TH2F*)f->Get(key) ;
+ }
+ if(cen==1){//centrality 5-10
+ sprintf(key,"h%sPhotPhi%s%s%s_cen1",w,d,kind,PID) ;
+ h2DR = (TH2F*)f->Get(key) ;
+ sprintf(key,"h%sPhotPhi%s%s%s_cen2",w,d,kind,PID) ;
+ TH2F* h2DRa = (TH2F*)f->Get(key) ;
+ sprintf(key,"h%sPhotPhi%s%s%s_cen3",w,d,kind,PID) ;
+ TH2F* h2DRb = (TH2F*)f->Get(key) ;
+
+ TH1D* hCen = ((TH2F*)f->Get("hCentrality"))->ProjectionX();
+ Double_t e1 = hCen->Integral(6,8)/3.;
+ Double_t e2 = hCen->Integral(9,9);
+ Double_t e3 = hCen->Integral(10,10);
+
+cout<<"w2="<<e1/e2<<", w3="<<e1/e3<<endl;
+
+ h2DR->Add(h2DRa,e1/e2); delete h2DRa;
+ h2DR->Add(h2DRb,e1/e3); delete h2DRb;
+
+// h2DR->Add(h2DRa); delete h2DRa;
+// h2DR->Add(h2DRb); delete h2DRb;
+ }
+ if(cen==2){//centrality 10-20
+ sprintf(key,"h%sPhotPhi%s%s%s_cen4",w,d,kind,PID) ;
+ h2DR = (TH2F*)f->Get(key) ;
+
+ sprintf(key,"h%sPhotPhi%s%s%s_cen0",w,d,kind,PID) ;
+ TH2F* h2DRa = (TH2F*)f->Get(key) ;
+ sprintf(key,"h%sPhotPhi%s%s%s_cen1",w,d,kind,PID) ;
+ TH2F* h2DRb = (TH2F*)f->Get(key) ;
+ sprintf(key,"h%sPhotPhi%s%s%s_cen2",w,d,kind,PID) ;
+ TH2F* h2DRc = (TH2F*)f->Get(key) ;
+ sprintf(key,"h%sPhotPhi%s%s%s_cen3",w,d,kind,PID) ;
+ TH2F* h2DRd = (TH2F*)f->Get(key) ;
+
+
+ TH1D* hCen = ((TH2F*)f->Get("hCentrality"))->ProjectionX();
+ Double_t e1 = hCen->Integral(11,11);
+ Double_t e2 = hCen->Integral(12,12);
+ Double_t e3 = hCen->Integral(13,13);
+ Double_t e4 = hCen->Integral(14,15)/2.;
+ Double_t e5 = hCen->Integral(16,20)/5.;
+
+cout<<"w_11="<<e5/e1<<", w_12="<<e5/e2<<", w_13="<<e5/e3<<", w_14-15="<<e5/e4<<endl;
+
+ h2DR->Add(h2DRa,e5/e1); delete h2DRa;
+ h2DR->Add(h2DRb,e5/e2); delete h2DRb;
+ h2DR->Add(h2DRc,e5/e3); delete h2DRc;
+ h2DR->Add(h2DRd,e5/e4); delete h2DRd;
+
+ }
+ if(cen==3){//centrality 20-30
+ sprintf(key,"h%sPhotPhi%s%s%s_cen5",w,d,kind,PID) ;
+ h2DR = (TH2F*)f->Get(key) ;
+ }
+ if(cen==4){//centrality 30-40
+ sprintf(key,"h%sPhotPhi%s%s%s_cen6",w,d,kind,PID) ;
+ h2DR = (TH2F*)f->Get(key) ;
+ }
+ if(cen==5){//centrality 40-50
+ sprintf(key,"h%sPhotPhi%s%s%s_cen7",w,d,kind,PID) ;
+ h2DR = (TH2F*)f->Get(key) ;
+ }
+
+ if(Real)return h2DR;
+ else return h2DM;
+}
+
+TH1F * GetCen(){
+cout<<inname<<endl;
+ TFile * f = new TFile(inname) ;
+ return (TH1F*)f->Get("hCentrality") ;
+}
+
+TH2F * GetCenPHOS(){
+ TFile * f = new TFile(inname) ;
+ return (TH2F*)f->Get("hCenPHOS") ;
+}
+
+
--- /dev/null
+#include "MethodsP.h"
+
+const Double_t kMean=0.135 ; //Approximate peak position to facilitate error estimate
+Int_t effcor=0; //correct on efficiency
+
+Double_t PeakPosition(Double_t pt){
+ //Fit to the measured peak position
+ return 4.99292e-003*exp(-pt*9.32300e-001)+1.34944e-001 ;
+}
+Double_t PeakWidth(Double_t pt){
+ //fit to the measured peak width
+ Double_t a=0.0068 ;
+ Double_t b=0.0025 ;
+ Double_t c=0.000319 ;
+ return TMath::Sqrt(a*a+b*b/pt/pt+c*c*pt*pt) ;
+}
+
+Double_t CB(Double_t * x, Double_t * par){
+ //Parameterization of Real/Mixed ratio
+ Double_t m=par[1] ;
+ Double_t s=par[2] ;
+ Double_t dx=(x[0]-m)/s ;
+ return par[0]*exp(-dx*dx/2.)+par[3] + par[4]*(x[0]-kMean) ;
+}
+Double_t CB2(Double_t * x, Double_t * par){
+ //Another parameterization of Real/Mixed ratio
+ Double_t m=par[1] ;
+ Double_t s=par[2] ;
+ Double_t dx=(x[0]-m)/s ;
+ return par[0]*exp(-dx*dx/2.)+par[3]+par[4]*(x[0]-kMean) + par[5]*(x[0]-kMean)*(x[0]-kMean);
+}
+Double_t CBs(Double_t * x, Double_t * par){
+ //Parameterizatin of signal
+ Double_t m=par[1] ;
+ Double_t s=par[2] ;
+ Double_t dx=(x[0]-m)/s ;
+ return par[0]*exp(-dx*dx/2.) ;
+}
+Double_t BG1(Double_t * x, Double_t * par){
+ //Normalizatino of Mixed
+ return par[0] ;
+}
+Double_t BG2(Double_t * x, Double_t * par){
+ //Another normalization of Mixed
+ return par[0]+par[1]*(x[0]-kMean) ;
+}
+
+void Photon(Int_t cen=0,Int_t side=0){
+//side = 1 - VOC, side = 0 - V0A
+//side = 2 - TPC 3 sub method, 3 - TPC 2 sub method
+
+ gStyle->SetOptFit(1);
+
+ char kind[15], w[25];
+ sprintf(w,""); //Weight: no weight - "NW", with weight - ""
+
+ char PID[25] ;
+ sprintf(PID,"Both2core") ;
+
+ char key[55];
+ char kind[15],kind2[15] ; //Reaction plane
+ char d[15]; //detector
+ sprintf(kind,"") ; //"" for real
+ sprintf(kind2,"") ; //"" for mixed
+
+ if(side==1)sprintf(d,"V0C");
+ else if(side==0)sprintf(d,"V0A");
+ else sprintf(d,"TPC");
+
+ TH2F *h2DR, *h2DM;
+ h2DR = GetRealMixed(cen,w,d,kind,kind2,PID,1);
+ h2DM = GetRealMixed(cen,w,d,kind,kind2,PID,0);
+
+ TH1F * hCen = GetCen() ;
+ TH2F * hCenPHOS = GetCenPHOS() ;
+
+ // sprintf(kind,"") ; //"" for all
+ const Int_t nphi=5;
+ Double_t xphi[6];
+ for(Int_t i=0;i<=nphi;i++)xphi[i]=TMath::PiOver2()*i/nphi ;
+
+ //Read resolution
+ TFile * f = new TFile(inname) ;
+
+ TH2F * hcos2AC = (TH2F*)f->Get("cos2V0AC");
+ TH2F * hcos2FAC= (TH2F*)f->Get("cos2FAC");
+ Double_t resAC = GetCos(hcos2AC,cen);
+ resAC=resAC ;
+
+ hcos2AC = (TH2F*)f->Get("cos2V0ATPC");
+ Double_t resAT = GetCos(hcos2AC,cen);
+ resAT=resAT ;
+
+ hcos2AC = (TH2F*)f->Get("cos2V0CTPC");
+ Double_t resCT = GetCos(hcos2AC,cen);
+ resCT=resCT ;
+
+ hcos2AC = (TH2F*)f->Get("cos2AC");
+ Double_t resT = GetRes(hcos2AC,cen);
+
+ //side = 1 - VOC, side = 0 - V0A
+ //side = 2 - TPC 3 sub method, 3 - TPC 2 sub method
+
+ Double_t res=1;
+ if(side==1) res = TMath::Sqrt(resAC*resCT/resAT);
+ else if(side==0)res = TMath::Sqrt(resAC*resAT/resCT);
+ else if(side==2)res = TMath::Sqrt(resAT*resCT/resAC);
+ else res = resT;
+
+// res=1./res ;
+
+ cout<<"res = "<< res <<endl;
+
+//now to the v2 calculation
+
+ TH1D * v2A1s= new TH1D("v2 with 2nd harmonic fit","v_{2} 1",nbin,xa) ;
+ TH1D * v2A2s= new TH1D("v2 with 4rd harmonic fit","v_{2} 2",nbin,xa) ;
+ TH1D * v2Asys= new TH1D("v2 sys","v_{2} sys",nbin,xa) ;
+ TH1D * v2Astat= new TH1D("v2 stat","v_{2} stat",nbin,xa) ;
+
+ char key2[155];
+
+ Int_t col[4]={kRed,kBlue,kGreen+3,kMagenta} ;
+ Int_t sym[4]={20,21,24,25} ;
+
+ // TF1 * fit = new TF1("fit","[0]*(1+2.*[1]*cos(2*(x-[2])))",0.,5.) ;
+ TF1 * v2fit4 = new TF1("v2fit","[0]*(1+2.*[1]*cos(2.*x)+2.*[2]*cos(4.*x) )",0.,5.) ;
+ v2fit->SetLineColor(2) ;
+ TF1 * v2fit2 = new TF1("v2fit","[0]*(1+2.*[1]*cos(2.*x) )",0.,5.) ;
+ TCanvas * c = new TCanvas("fit","fit") ;
+ c->Divide(4,3);
+
+
+ for(Int_t i=1;i<=nbin;i++){
+// h3DR->GetYaxis()->SetRangeUser(xa[i-1],xa[i]) ;
+// Double_t pt=(xa[i]+xa[i-1])/2. ;
+ sprintf(key2,"dNdPhi_%d",i);
+ Int_t iMin=h2DR->GetXaxis()->FindBin(xa[i-1]+0.0001) ;
+ Int_t iMax=h2DR->GetXaxis()->FindBin(xa[i]-0.0001) ;
+
+ TH1D * hdNdPhi = (TH1D*)h2DR->ProjectionY(key2,iMin,iMax);
+ hdNdPhi->Sumw2();
+ c->cd(i);
+
+ hdNdPhi->SetXTitle("#Delta#phi (rad)") ;
+ hdNdPhi->SetYTitle("dN/d#phi (a.u.)") ;
+ hdNdPhi->SetTitle(Form("pT: %f-%f",xa[i-1],xa[i]));
+ hdNdPhi->SetMarkerStyle(sym[0]) ;
+ hdNdPhi->SetMarkerColor(col[0]) ;
+
+ v2fit2->SetLineStyle(1) ;
+ v2fit2->SetLineColor(col[0]) ;
+ v2fit2->SetParameters(hdNdPhi->GetBinContent(5),0.1) ;
+ hdNdPhi->Fit(v2fit2,"Qi") ;
+
+ v2A1s->SetBinContent(i,v2fit2->GetParameter(1)) ;
+ v2A1s->SetBinError(i,v2fit2->GetParError(1)) ;
+
+ sprintf(key2,"dNdPhi2_%d",i);
+ TH1D * hdNdPhi2 = hdNdPhi->Clone(key2);
+
+ v2fit4->SetLineStyle(2) ;
+ v2fit4->SetLineColor(col[1]) ;
+ v2fit4->SetParameters(hdNdPhi2->GetBinContent(5),0.1) ;
+ hdNdPhi2->Fit(v2fit4,"Qi") ;
+
+ v2A2s->SetBinContent(i,v2fit4->GetParameter(1)) ;
+ v2A2s->SetBinError(i,v2fit4->GetParError(1)) ;
+
+
+ hdNdPhi->Draw() ;
+ hdNdPhi2->Draw("same") ;
+ }
+
+ TH1D *effcorrect = v2A1s->Clone("effcorrect");
+ TH1D *effcorrect2 = v2A1s->Clone("effcorrect2");
+
+ Double_t eff=0, err=0;
+ if(strcmp(PID,"Both2core")==0){
+ if(cen==0) {eff=.05; err=.04;}
+ if(cen==1) {eff=.02; err=.04;}
+ if(cen==2) {eff=.02; err=.03;}
+ if(cen==3) {eff=.01; err=.02;}
+ if(cen==4) {eff=.004; err=.02;}
+ if(cen==5) {eff=.004; err=.02;}
+ if(cen==10) {eff=.03; err=.02;}
+ if(cen==11) {eff=.01; err=.02;}
+ if(cen==20) {eff=.02; err=.02;}
+ if(cen==21) {eff=.03; err=.02;}
+
+ eff=eff*2.*TMath::Pi()/5./sin(2.*TMath::Pi()/5.)/4.;
+ err=err*2.*TMath::Pi()/5./sin(2.*TMath::Pi()/5.)/4.;
+
+cout<<"res: T="<<resT<<", resolution="<<res<<endl;
+
+ eff=eff*res/resT;
+ err=err*res/resT;
+ cout<<"Pi0 efficiency correction before resolution correction: "<<eff<<"+-"<<err<<endl;
+ }
+
+ Double_t x[100],y[100],ex[100],ey[100] ;
+
+ for(Int_t i=0;i<effcorrect->GetNbinsX();i++){
+ effcorrect->SetBinContent(i,eff);
+ effcorrect->SetBinError(i,err);
+ effcorrect2->SetBinContent(i,eff);
+ effcorrect2->SetBinError(i,0);
+ }
+
+// v2A1s->Scale(res) ;
+// v2A2s->Scale(res) ;
+
+ v2A1s->SetMarkerStyle(sym[0]) ;
+ v2A1s->SetMarkerColor(col[0]) ;
+ v2A2s->SetMarkerStyle(sym[1]) ;
+ v2A2s->SetMarkerColor(col[1]) ;
+
+ TCanvas * c2 = new TCanvas("v2","v2") ;
+
+ char bname[255];
+
+ char cname[255];
+ if(cen==0)sprintf(cname,"0-5%%");
+ if(cen==1)sprintf(cname,"5-10%%");
+ if(cen==2)sprintf(cname,"10-20%%");
+ if(cen==3)sprintf(cname,"20-30%%");
+ if(cen==4)sprintf(cname,"30-40%%");
+ if(cen==5)sprintf(cname,"40-50%%");
+ if(cen==10)sprintf(cname,"0-10%%");
+ if(cen==11)sprintf(cname,"20-40%%");
+
+ sprintf(bname,"v^{#gamma}_{2}{EP} for centrality %s, EP %s", cname, d);
+
+ TH1D * box = new TH1D("box",bname,100,0.,20.) ;
+ box->SetMinimum(-0.1) ;
+ box->SetMaximum(0.4) ;
+ box->SetXTitle("p_{t}^{#gamma} (GeV/c)") ;
+ box->SetYTitle("v_{2}") ;
+ box->Draw() ;
+ v2A1s->Draw("same") ;
+ v2A2s->Draw("same") ;
+
+ TLegend * l = new TLegend(0.6,0.7,0.9,0.9) ;
+ l->AddEntry(v2A1s,"Fit v2","p") ;
+ l->AddEntry(v2A2s,"Fit v2+v4","p") ;
+
+ l->Draw() ;
+
+ for(Int_t i=1; i<=v2A1s->GetNbinsX() ;i++){
+ Double_t mean=
+ v2A1s->GetBinContent(i)/v2A1s->GetBinError(i)/v2A1s->GetBinError(i)
+ +v2A2s->GetBinContent(i)/v2A2s->GetBinError(i)/v2A2s->GetBinError(i);
+ Double_t weight=
+ 1./v2A1s->GetBinError(i)/v2A1s->GetBinError(i)
+ +1./v2A2s->GetBinError(i)/v2A2s->GetBinError(i);
+
+ Double_t statErr = TMath::Min(v2A1s->GetBinError(i),v2A2s->GetBinError(i));
+
+ mean/=weight ;
+ Double_t rms = (v2A1s->GetBinContent(i)-mean)*(v2A1s->GetBinContent(i)-mean)
+/v2A1s->GetBinError(i)/v2A1s->GetBinError(i) + (v2A2s->GetBinContent(i)-mean)*(v2A2s->GetBinContent(i)-mean)/v2A2s->GetBinError(i)/v2A2s->GetBinError(i);
+ rms/=weight;
+
+ v2Astat->SetBinContent(i,mean) ;
+ v2Astat->SetBinError(i,statErr) ;
+ v2Asys->SetBinContent(i,mean) ;
+ v2Asys->SetBinError(i,TMath::Sqrt(rms)) ;
+
+ }
+
+ if(effcor){
+ v2Astat->Add(effcorrect2);
+ v2Asys->Add(effcorrect);
+ }
+
+ v2Asys->Scale(1/res) ;
+ v2Astat->Scale(1/res) ;
+
+ TCanvas * c5 = new TCanvas("v2_res","v2 res") ;
+
+ v2Asys->SetFillStyle(1001) ;
+ v2Asys->SetFillColor(kYellow) ;
+
+ v2Astat->SetMarkerColor(kOrange+7) ;
+ v2Astat->SetMarkerStyle(20) ;
+ v2Astat->SetLineColor(kOrange+7) ;
+
+ v2Asys->SetXTitle("p_{t} (GeV/c)") ;
+ v2Asys->SetYTitle("v_{2}") ;
+
+ box->Draw() ;
+ v2Asys->Draw("sameE1") ;
+ // v2Fsys->Draw("E2same") ;
+ v2Astat->Draw("same") ;
+ // v2Fstat->Draw("same") ;
+
+ TFile fout("v2_photons.root","update");
+ char nname[100];
+
+ sprintf(nname,"v2sys_m1_%s_%s_%d_%d",w,PID,cen,side) ;
+ v2Asys->SetName(nname) ;
+ sprintf(nname,"v2stat_m1_%s_%s_%d_%d",w,PID,cen,side) ;
+ v2Astat->SetName(nname) ;
+
+
+/* sprintf(nname,"v2sys_%s_%s_%d",kind,PID,cen) ;
+ v2Asys->SetName(nname) ;
+ sprintf(nname,"v2stat_%s_%s_%d",kind,PID,cen) ;
+ v2Astat->SetName(nname) ;
+*/
+
+ v2Asys->Write(0,TObject::kOverwrite) ;
+ v2Astat->Write(0,TObject::kOverwrite) ;
+ fout.Close() ;
+}
+
+
+//-----------------------------------------------------------------------------
+PPRstyle()
+{
+
+ //////////////////////////////////////////////////////////////////////
+ //
+ // ROOT style macro for the TRD TDR
+ //
+ //////////////////////////////////////////////////////////////////////
+
+ gStyle->SetPalette(1);
+ gStyle->SetCanvasBorderMode(-1);
+ gStyle->SetCanvasBorderSize(1);
+ gStyle->SetCanvasColor(10);
+
+ gStyle->SetFrameFillColor(10);
+ gStyle->SetFrameBorderSize(1);
+ gStyle->SetFrameBorderMode(-1);
+ gStyle->SetFrameLineWidth(1.2);
+ gStyle->SetFrameLineColor(1);
+
+ gStyle->SetHistFillColor(0);
+ gStyle->SetHistLineWidth(1);
+ gStyle->SetHistLineColor(1);
+
+ gStyle->SetPadColor(10);
+ gStyle->SetPadBorderSize(1);
+ gStyle->SetPadBorderMode(-1);
+
+ gStyle->SetStatColor(10);
+ gStyle->SetTitleColor(kBlack,"X");
+ gStyle->SetTitleColor(kBlack,"Y");
+
+ gStyle->SetLabelSize(0.04,"X");
+ gStyle->SetLabelSize(0.04,"Y");
+ gStyle->SetLabelSize(0.04,"Z");
+ gStyle->SetTitleSize(0.04,"X");
+ gStyle->SetTitleSize(0.04,"Y");
+ gStyle->SetTitleSize(0.04,"Z");
+ gStyle->SetTitleFont(42,"X");
+ gStyle->SetTitleFont(42,"Y");
+ gStyle->SetTitleFont(42,"X");
+ gStyle->SetLabelFont(42,"X");
+ gStyle->SetLabelFont(42,"Y");
+ gStyle->SetLabelFont(42,"Z");
+ gStyle->SetStatFont(42);
+
+ gStyle->SetTitleOffset(1.0,"X");
+ gStyle->SetTitleOffset(1.4,"Y");
+
+ gStyle->SetFillColor(kWhite);
+ gStyle->SetTitleFillColor(kWhite);
+
+ gStyle->SetOptDate(0);
+ gStyle->SetOptTitle(1);
+ gStyle->SetOptStat(0);
+ gStyle->SetOptFit(0);
+
+}
+
--- /dev/null
+GetNU.C - plot event plane angle non-uniformness: <cos2Psi> <sin2Psi> and <cos2Psi><sin2psi>-<sin2Psi><cos2Phi>.
+
+Method1.C - macros to calculate pi0 v2 with dNdPhi method. Photon PID - change variable PID inside. Also there is possibility to swich on/off considiration of pi0 efficiency difference between in plane and out of plane (Note: included only for Both2core PID!).
+
+Method2.C - macros to calculate pi0 v2 with inv. mass method. Otherwise the same as Method1.C (options etc).
+
+Methods.h - common procedures for both methods (calculation of inv mass historgams and resolutions per centrality classes)
+
+Photon.C - macros to calculate inclusive photon v2.
+
+MethodsP.h - Methods.h corresponding to Photon.C
+
+RP.C - plot reaction plane resolution
+
+plotV2_comV0.C - macros to plot figures for pi0 v2. Need first data from execution of Method1 or Method2. Also check options available and PID.
+
+PCMPi0v2_new.root - pi0 v2 from PCM.
+
+v2ALl.C - official charged particles flow
+
+v2CMS.C - pi0 v2 from CMS
+
+v2PHENIX.C - pi0 v2 from PHENIX
+
+WHDGlhcPi0v2 - pi0 v2 model predictions from WHDG model at LHC energy
--- /dev/null
+void RP(){
+
+ gStyle->SetOptFit(0);
+ gStyle->SetOptStat(0);
+
+ TFile *f = new TFile("../flow11h.root");
+
+ if(!f->IsOpen()){
+ printf("No such file\n");
+ return 1;
+ }
+
+ char key[55] ;
+//Get histograms
+
+ //Read resolution
+ TH2F * hcos2AC = (TH2F*)f->Get("cos2AC");
+ TH2F * hcos2V0AC = (TH2F*)f->Get("cos2V0AC");
+ TH2F * hcos2V0ATPC = (TH2F*)f->Get("cos2V0ATPC");
+ TH2F * hcos2V0CTPC = (TH2F*)f->Get("cos2V0CTPC");
+
+// TH1F * hresCh = (TH1F*)f2->Get("hEvPlResEta4");
+
+ TH1D * hres = 0 ;
+ TH1D * hresF = 0 ;
+
+ TH1D* rpT2 = new TH1D("rpTPC", "rpTPC 2 sub", hcos2AC->GetNbinsY(),0,100.);
+ TH1D* rpT3 = new TH1D("rpTPC2", "rpTPC 3 sub", hcos2AC->GetNbinsY(),0,100.);
+ TH1D* rpA = new TH1D("rpV0A", "rpV0A", hcos2AC->GetNbinsY(),0,100.);
+ TH1D* rpC = new TH1D("rpV0C", "rpV0C", hcos2AC->GetNbinsY(),0,100.);
+
+ Double_t resT2, resTA, resTC, resAC;
+
+ for(int i=0;i<hcos2AC->GetNbinsY();i++){
+ hres = hcos2AC->ProjectionX("res",i,i) ;
+ resT2 = GetRes(hres);
+ if(resT2>0)rpT2->SetBinContent(i, resT2);
+
+ hresF = hcos2V0AC->ProjectionX("res2",i,i) ;
+ resAC = GetCos(hresF);
+ hres = hcos2V0ATPC->ProjectionX("res3",i,i) ;
+ resTA = GetCos(hres);
+ hres = hcos2V0CTPC->ProjectionX("res4",i,i) ;
+ resTC = GetCos(hres);
+
+ if(resAC>0)rpT3->SetBinContent(i, TMath::Sqrt(resTA*resTC/resAC));
+ if(resTC>0)rpA->SetBinContent(i, TMath::Sqrt(resTA*resAC/resTC));
+ if(resTA>0)rpC->SetBinContent(i, TMath::Sqrt(resTC*resAC/resTA));
+
+//cout<<"i="<<i<<", rpA="<<TMath::Sqrt(resTA*resAC/resTC)<< endl;
+ }
+
+ rpT2->SetTitle("Reaction plane resolution with different ALICE detectors");
+ rpT2->GetXaxis()->SetTitle("centrality percentage");
+ rpT2->GetYaxis()->SetTitle("resolution");
+
+ rpT2->SetMarkerStyle(20);
+ rpT2->SetMarkerColor(2);
+ rpT2->SetLineColor(2);
+ rpT2->Draw("p");
+
+ rpT3->SetMarkerStyle(21);
+ rpT3->SetMarkerColor(2);
+ rpT3->SetLineColor(2);
+ rpT3->Draw("psame");
+
+ rpA->SetMarkerStyle(22);
+ rpA->SetMarkerColor(kMagenta);
+ rpA->SetLineColor(kMagenta);
+ rpA->Draw("psame");
+
+ rpC->SetMarkerStyle(22);
+ rpC->SetMarkerColor(kGreen);
+ rpC->SetLineColor(kGreen);
+ rpC->Draw("psame");
+
+/*
+ hresCh->SetMarkerStyle(21);
+ hresCh->SetMarkerColor(kBlue);
+ hresCh->SetLineColor(kBlue);
+ hresCh->Draw("same");
+*/
+
+ TLegend * l = new TLegend(0.12,0.15,0.6,0.35) ;
+ l->SetFillColor(0) ;
+ l->SetTextSize(0.03) ;
+ l->AddEntry(rpT2,"RPRes with TPC 2 subs","p") ;
+ l->AddEntry(rpT3,"RPRes with TPC 3 subs","p") ;
+ l->AddEntry(rpA,"RPRes with V0A","p") ;
+ l->AddEntry(rpC,"RPRes with V0C","p") ;
+// l->AddEntry(hresCh,"RPRes TPC (Alex Dobrin)","p") ;
+ l->Draw() ;
+
+}
+
+Double_t Ollitrault(Double_t chi){
+ Double_t x = 0.25*chi*chi;
+ Double_t resk1 = 0.626657 * chi * exp(-x) * (TMath::BesselI0((float)x) + TMath::BesselI1((float)x));
+ Double_t resk2 = 0.626657 * chi * exp(-x) * (TMath::Sqrt(2./TMath::Pi()/x)*TMath::SinH(x) + TMath::Sqrt(2./TMath::Pi()/x)*(TMath::CosH(x) - TMath::SinH(x)/x));
+
+ return resk1;
+}
+
+Double_t GetCos(TH1D* hres){
+ Double_t resMean = hres->GetMean() ;
+ cout<<resMean<<endl;
+ if(resMean>0)return resMean ;
+ else return 0. ;
+}
+
+Double_t GetRes(TH1D* hres){
+ Double_t resMean = hres->GetMean() ;
+ Double_t resOld=0 ;
+ if(resMean>0)resOld=1./TMath::Sqrt(resMean) ;
+
+ float rxn2=resMean;
+
+ double chi = 2;
+ for(int j=0; j<15; j++){
+ double resSub = sqrt(rxn2);
+ Double_t resEve = Ollitrault(chi);
+ chi= (resEve < resSub) ? chi+1.0*pow(0.5, j) : chi-1.0*pow(0.5, j);
+ }
+ return Ollitrault(TMath::Sqrt(2)*chi);
+}
+
--- /dev/null
+//#include "pointsForPionGroup.C"
+#include "v2All.C"
+#include "v2CMS.C"
+#include "v2PHENIX.C"
+
+Int_t drawch = 0;
+Int_t drawall = 0; //V0A and V0C separate
+Int_t drawsum = 1; //PHOS V0A+V0C
+Int_t drawphenix = 0;
+Int_t drawcms = 0;
+Int_t drawpcm = 1;
+Int_t drawwhdg = 0;
+Int_t drawmerge = 1; //PHOS+PCM
+Int_t merge = 1;
+Int_t fit = 0;
+Int_t diff = 2; //1 - PHOS+PCM - charged (fit), 2 - PHOS - PHOS+PCM, 3 - PCM - PHOS+PCM, 4 - PHOS - charged (fit), 5 - PCM - charged (fit)
+
+//Compare pi0 v2 with V0 detector (method 1 or 2) with other measurements - charged pion v2, CMS pi0 v2, PHENIX pi0 v2
+//Merge results from PHOS and PCM
+
+void plotV2_comV0(Int_t cen=1, Int_t method=1){
+ char key[255];
+ gStyle->SetErrorX(0.2);
+
+if(diff==1||diff==4||diff==5){
+drawch=1;
+fit=1;
+}
+
+ TGraphAsymmErrors * v2ch; // = (TGraphErrors*)f3->Get(cen3.Data()) ;
+
+ if(cen==10) v2ch=v2Pion(0,10);
+ if(cen==11) v2ch=v2Pion(20,40);
+ if(cen==0) v2ch=v2Pion(0,5);
+ if(cen==1) v2ch=v2Pion(5,10);
+ if(cen==2) v2ch=v2Pion(10,20);
+ if(cen==3) v2ch=v2Pion(20,30);
+ if(cen==4) v2ch=v2Pion(30,40);
+ if(cen==5) v2ch=v2Pion(40,50);
+ if(cen==20) v2ch=v2Pion(10,50);
+ if(cen==21) v2ch=v2Pion(0,20);
+
+ v2ch->SetMarkerStyle(7) ;
+ v2ch->SetMarkerColor(kOrange-2) ;
+ v2ch->SetLineColor(kOrange-2) ;
+ v2ch->SetFillColor(kOrange-2) ;
+ v2ch->SetLineWidth(1) ;
+
+ TGraphAsymmErrors * v2chAlex; // = (TGraphErrors*)f3->Get(cen3.Data()) ;
+
+ if(cen==10) v2chAlex=v2PionAlex(0,10);
+ if(cen==11) v2chAlex=v2PionAlex(20,40);
+ if(cen==0) v2chAlex=v2PionAlex(0,5);
+ if(cen==1) v2chAlex=v2PionAlex(5,10);
+ if(cen==2) v2chAlex=v2PionAlex(10,20);
+ if(cen==3) v2chAlex=v2PionAlex(20,30);
+ if(cen==4) v2chAlex=v2PionAlex(30,40);
+ if(cen==5) v2chAlex=v2PionAlex(40,50);
+ if(cen==20) v2chAlex=v2PionAlex(10,50);
+ if(cen==21) v2chAlex=v2PionAlex(0,20);
+
+ v2chAlex->SetMarkerStyle(22) ;
+ v2chAlex->SetMarkerColor(kYellow) ;
+ v2chAlex->SetLineColor(kYellow) ;
+ v2chAlex->SetFillColor(kYellow) ;
+ v2chAlex->SetLineWidth(1) ;
+
+ TList *coll = new TList();
+ coll->Add(v2chAlex);
+
+ TGraphAsymmErrors *v2chAll = v2ch->Clone("v2chAll");
+ v2chAll->Merge(coll);
+
+ TGraphErrors *v2CMS; // = (TGraphErrors*)f3->Get(cen3.Data()) ;
+
+ TFile *fPCM = new TFile("PCMPi0v2_new.root") ;
+
+ TGraphErrors *v2PCM, *v2PCMsys;
+
+ if(cen==11){
+ v2PCM = (TGraphErrors*)fPCM->Get("Pi0IMv2_V0_20-40");
+ v2PCMsys = (TGraphErrors*)fPCM->Get("Pi0IMv2sys_V0_20-40");
+ }
+ if(cen==21){
+ v2PCM = (TGraphErrors*)fPCM->Get("Pi0IMv2_V0_0-20");
+ v2PCMsys = (TGraphErrors*)fPCM->Get("Pi0IMv2sys_V0_0-20");
+ }
+
+ if(cen==11||cen==21){
+ v2PCM->SetMarkerStyle(29) ;
+ v2PCM->SetMarkerColor(kBlue) ;
+ v2PCM->SetMarkerSize(1.6) ;
+ v2PCM->SetLineColor(kBlue) ;
+ v2PCM->SetLineWidth(1) ;
+ v2PCMsys->SetMarkerStyle(24) ;
+ v2PCMsys->SetMarkerColor(kBlue) ;
+ v2PCMsys->SetLineColor(kBlue) ;
+ v2PCMsys->SetLineWidth(1) ;
+ v2PCMsys->SetFillStyle(0);
+ v2PCMsys->SetLineColor(kBlue) ;
+ }
+ else if(merge){ cout<<"Wrong centrality for merging PCM and PHOS (valid 11 and 21 only!)"<<endl; return;}
+
+// if(cen==10) v2CMS=v2CMS2030();
+// if(cen==11) v2CMS=
+// if(cen==0) v2CMS=v2PionAlex(0,5);
+// if(cen==1) v2CMS=v2PionAlex(5,10);
+// if(cen==2) v2CMS=v2PionAlex(10,20);
+ if(cen==3) v2CMS=v2CMS2030();
+ if(cen==4) v2CMS=v2CMS3040();
+ if(cen==5) v2CMS=v2CMS4050();
+
+ TGraphErrors * v2PHENIX; //
+
+ if(cen==2) v2PHENIX=v2PHENIX1020();
+ if(cen==3) v2PHENIX=v2PHENIX2030();
+ if(cen==4) v2PHENIX=v2PHENIX3040();
+ if(cen==5) v2PHENIX=v2PHENIX4050();
+ if(cen==10) v2PHENIX=v2PHENIX010();
+
+if(cen==3||cen==4||cen==5){
+ v2CMS->SetMarkerStyle(23) ;
+ v2CMS->SetMarkerColor(kViolet) ;
+ v2CMS->SetLineColor(kViolet) ;
+ v2CMS->SetLineWidth(1) ;
+}
+if(cen==2||cen==3||cen==4||cen==5||cen==10){
+ v2PHENIX->SetMarkerStyle(23) ;
+ v2PHENIX->SetMarkerColor(kBlue) ;
+ v2PHENIX->SetLineColor(kBlue) ;
+ v2PHENIX->SetLineWidth(1) ;
+}
+
+fstream fWHDG;
+char wname[255];
+if(cen==2) sprintf(wname,"WHDGlhcPi0v21020b.dat");
+if(cen==3) sprintf(wname,"WHDGlhcPi0v22030b.dat");
+if(cen==4) sprintf(wname,"WHDGlhcPi0v23040b.dat");
+if(cen==5) sprintf(wname,"WHDGlhcPi0v24050b.dat");
+
+if(cen>=2&&cen<=5){
+fWHDG.open(wname,ios::in);
+
+const int N=4;
+Double_t xW[N],yW[N],exW[N],eyW[N];
+
+int i=0;
+while(!fWHDG.eof()){
+ fWHDG>>xW[i]>>yW[i];
+ exW[i]=0;
+ eyW[i]=0;
+ i++;
+ if(i>=N) break;
+}
+fWHDG.close();
+
+TGraphErrors * gWHDG = new TGraphErrors(N,xW,yW,exW,eyW);
+gWHDG->SetLineColor(kGreen-5);
+gWHDG->SetLineWidth(3);
+gWHDG->SetMarkerStyle(20);
+gWHDG->SetMarkerColor(kGreen-5);
+}
+
+ char name[255];
+ sprintf(name,"v2_method%d_QA.root",method);
+ TFile *f = new TFile(name) ;
+
+ char key[255] ;
+ char kind[15];
+ sprintf(kind,"Both2core"); //PID
+ char w[25];
+ sprintf(w,""); //weight - "" or "NW"
+
+ sprintf(key,"v2stat_m%d_%s_%s_%d_%d",method,w,kind,cen,0) ;
+ cout<<key<<endl;
+ TH1D * v2stat0 = (TH1D*)f->Get(key) ;
+ sprintf(key,"v2sys_m%d_%s_%s_%d_%d",method,w,kind,cen,0) ;
+ TH1D * v2sys0 = (TH1D*)f->Get(key) ;
+
+ sprintf(key,"v2stat_m%d_%s_%s_%d_%d",method,w,kind,cen,1) ;
+ TH1D * v2stat1 = (TH1D*)f->Get(key) ;
+ sprintf(key,"v2sys_m%d_%s_%s_%d_%d",method,w,kind,cen,1) ;
+ TH1D * v2sys1 = (TH1D*)f->Get(key) ;
+
+ v2sys0->SetFillStyle(0);
+ v2sys0->SetLineColor(kBlue-9) ;
+
+ v2sys1->SetFillStyle(0) ;
+ v2sys1->SetLineColor(kGreen) ;
+
+ TH1D * box = new TH1D("box","",100,0.,16.) ;
+ if(cen==0||cen==1||cen==10) box->SetMinimum(-0.20001) ;
+ else box->SetMinimum(-0.10001) ;
+ box->SetMaximum(0.5) ;
+
+/* if(diff){
+ box->SetMinimum(-0.10001) ;
+ box->SetMaximum(0.1) ;
+ }
+*/
+
+ box->SetLabelOffset(0.01,"Y");
+ box->SetLabelOffset(0.01,"X");
+ box->SetTitleOffset(0.5,"Y");
+ box->SetTitleSize(0.05,"X");
+ box->SetTitleSize(0.05,"Y");
+ box->SetLabelSize(0.04,"X");
+ box->SetLabelSize(0.04,"Y");
+ box->SetNdivisions(505,"Y");
+ box->GetXaxis()->SetTitleOffset(0.9) ;
+ box->GetYaxis()->SetTitleOffset(0.9) ;
+
+ box->SetXTitle("p_{T} (GeV/c)") ;
+ box->SetYTitle("v_{2}{EP}") ;
+
+ TCanvas * c= new TCanvas("a","v2") ;
+ c->SetFillColor(0) ;
+ c->SetFillStyle(0) ;
+ c->SetFrameBorderMode(0);
+ gStyle->SetOptTitle(0);
+ gStyle->SetOptStat(0);
+ gStyle->SetTitleFillColor(kWhite);
+ gStyle->SetPalette(1);
+ gStyle->SetCanvasBorderMode(-1);
+ gStyle->SetCanvasBorderSize(1);
+ gStyle->SetFrameFillColor(0);
+ gStyle->SetFrameFillStyle(0);
+ gStyle->SetFrameBorderSize(1);
+
+ Double_t x[100],y[100],ex[100],ey[100] ;
+
+ for(Int_t i=0;i<v2stat0->GetNbinsX();i++){
+ x[i]=v2stat0->GetXaxis()->GetBinCenter(i+1) ;
+ y[i]=v2stat0->GetBinContent(i+1) ;
+ ey[i]=v2stat0->GetBinError(i+1) ;
+ ex[i]=0. ;
+ }
+
+ TGraphErrors * g = new TGraphErrors(v2stat0->GetNbinsX(),x,y,ex,ey) ;
+ g->SetMarkerStyle(20) ;
+ g->SetMarkerColor(4) ;
+ g->SetLineColor(4) ;
+ g->SetLineWidth(1) ;
+
+
+ for(Int_t i=0;i<v2stat1->GetNbinsX();i++){
+ x[i]=v2stat1->GetXaxis()->GetBinCenter(i+1) ;
+ y[i]=v2stat1->GetBinContent(i+1) ;
+ ey[i]=v2stat1->GetBinError(i+1) ;
+ ex[i]=0. ;
+ }
+
+ TGraphErrors * g2 = new TGraphErrors(v2stat1->GetNbinsX(),x,y,ex,ey) ;
+ g2->SetMarkerStyle(20) ;
+ g2->SetMarkerColor(kBlack) ;
+ g2->SetLineColor(kBlack) ;
+ g2->SetLineWidth(1) ;
+
+//merge V0A V0C
+ TH1D *v2sumstat = v2stat0->Clone("v2sumstat");
+ TH1D *v2sumsys = v2sys0->Clone("v2sumsys");
+cout<<"merge v0a and v0c"<<endl;
+ for(Int_t i=0;i<v2sumstat->GetNbinsX();i++){
+ Double_t bin1 = v2stat1->GetBinContent(i+1) ;
+ Double_t bin2 = v2stat0->GetBinContent(i+1) ;
+ Double_t stat1 = v2stat1->GetBinError(i+1) ;
+ Double_t stat2 = v2stat0->GetBinError(i+1) ;
+ Double_t sys1 = v2sys1->GetBinError(i+1) ;
+ Double_t sys2 = v2sys0->GetBinError(i+1) ;
+
+ Double_t stat=0;
+ if(stat1!=0&&stat2!=0)stat = 1./TMath::Sqrt(1./stat1/stat1 + 1./stat2/stat2);
+ Double_t sys=0;
+ if(sys1!=0&&sys2!=0) sys = 1./TMath::Sqrt(1./sys1/sys1 + 1./sys2/sys2);
+ Double_t weight = 1, mean = bin1;
+ if(sys1+stat1!=0 && sys2+stat2!=0){
+ weight=(1./(sys1*sys1+stat1*stat1) + 1./(sys2*sys2+stat2*stat2));
+ mean = bin1/(sys1*sys1+stat1*stat1) + bin2/(sys2*sys2+stat2*stat2);
+ }
+ mean /= weight;
+
+//if(cen==0 && i==0){mean=-100.; stat=0; sys=0;}
+
+ cout<<"bin1 = "<<bin1<<" bin2 = "<<bin2<<" mean = "<<mean<<" sys1 = "<<sys1<<" sys2 = "<<sys2<<" sys = "<<sys<<endl;
+
+ v2sumstat->SetBinContent(i+1,mean);
+ v2sumsys->SetBinContent(i+1,mean);
+ v2sumstat->SetBinError(i+1,stat);
+ v2sumsys->SetBinError(i+1,sys);
+ }
+
+ v2sumsys->SetFillStyle(0) ;
+ v2sumsys->SetLineColor(kRed) ;
+
+//merge PHOS and PCM
+ if(cen==21 || cen==11){
+cout<<"merge PHOS and PCM"<<endl;
+ TH1D *v2mstat = v2stat0->Clone("v2mstat");
+ TH1D *v2msys = v2sys0->Clone("v2msys");
+
+ for(Int_t i=0;i<v2mstat->GetNbinsX();i++){
+ Double_t bin1 = v2sumstat->GetBinContent(i+1) ;
+ Double_t bin2,tmp;
+
+ v2PCM->GetPoint(i,tmp,bin2);//GetBinContent(i+1) ;
+ Double_t stat1 = v2sumstat->GetBinError(i+1) ;
+ Double_t stat2 = v2PCM->GetErrorY(i);//->GetBinError(i+1) ;
+ Double_t sys1 = v2sumsys->GetBinError(i+1) ;
+ Double_t sys2 = v2PCMsys->GetErrorY(i);//GetBinError(i+1) ;
+
+ Double_t stat=0;
+ if(stat1!=0&&stat2!=0)stat = 1./TMath::Sqrt(1./stat1/stat1 + 1./stat2/stat2);
+ Double_t sys=0;
+ if(sys1!=0&&sys2!=0) sys = 1./TMath::Sqrt(1./sys1/sys1 + 1./sys2/sys2);
+ Double_t weight = 1, mean = bin1;
+ if(sys1+stat1!=0 && sys2+stat2!=0){
+ weight=(1./(sys1*sys1+stat1*stat1) + 1./(sys2*sys2+stat2*stat2));
+ mean = bin1/(sys1*sys1+stat1*stat1) + bin2/(sys2*sys2+stat2*stat2);
+ }
+ mean /= weight;
+
+ if(i>7){ //no PCM
+ mean=bin1;
+ stat=stat1;
+ sys=sys1;
+ }
+//if(cen==0 && i==0){mean=-100.; stat=0; sys=0;}
+
+ cout<<"i = "<<i<<", bin1 = "<<bin1<<" bin2 = "<<bin2<<" mean = "<<mean<<endl;
+ cout<<"sys1 = "<<sys1<<" sys2 = "<<sys2<<" sys = "<<sys<<" stat1 = "<<stat1<<" stat2 = "<<stat2<<" stat = "<<stat<<endl;
+
+/*if(cen==21&&i==0){
+ v2mstat->SetBinContent(i+1,0);
+ v2msys->SetBinContent(i+1,0);
+ v2mstat->SetBinError(i+1,0);
+ v2msys->SetBinError(i+1,0);
+ v2sumstat->SetBinContent(i+1,0);
+ v2sumsys->SetBinContent(i+1,0);
+ v2sumstat->SetBinError(i+1,0);
+ v2sumsys->SetBinError(i+1,0);
+}
+else{
+*/
+ v2mstat->SetBinContent(i+1,mean);
+ v2msys->SetBinContent(i+1,mean);
+ v2mstat->SetBinError(i+1,stat);
+ v2msys->SetBinError(i+1,sys);
+//}
+ }
+
+ v2msys->SetFillStyle(0) ;
+ v2msys->SetLineColor(kBlack) ;
+ v2msys->SetLineWidth(1) ;
+
+ for(Int_t i=0;i<v2mstat->GetNbinsX();i++){
+ x[i]=v2mstat->GetXaxis()->GetBinCenter(i+1) ;
+ y[i]=v2mstat->GetBinContent(i+1) ;
+ ey[i]=v2mstat->GetBinError(i+1) ;
+ ex[i]=0. ;
+ }
+
+ TGraphErrors * gm = new TGraphErrors(v2mstat->GetNbinsX(),x,y,ex,ey) ;
+ gm->SetMarkerStyle(24) ;
+ gm->SetMarkerColor(kBlack);
+ gm->SetLineColor(kBlack) ;
+ gm->SetLineWidth(1) ;
+ gm->SetMarkerSize(1);
+ }
+
+ for(Int_t i=0;i<v2sumstat->GetNbinsX();i++){
+ x[i]=v2sumstat->GetXaxis()->GetBinCenter(i+1) ;
+ y[i]=v2sumstat->GetBinContent(i+1) ;
+ ey[i]=v2sumstat->GetBinError(i+1) ;
+ ex[i]=0. ;
+ }
+
+ TGraphErrors * gsum = new TGraphErrors(v2sumstat->GetNbinsX(),x,y,ex,ey) ;
+ gsum->SetMarkerStyle(21) ;
+ gsum->SetMarkerColor(kRed);
+ gsum->SetLineColor(kRed) ;
+ gsum->SetLineWidth(1) ;
+ gsum->SetMarkerSize(1.5);
+
+//DRAW ALL!!!
+ box->Draw() ;
+
+ if(drawch){
+ v2ch->Draw("3");
+ v2chAlex->Draw("3 same");
+ }
+//if(cen==3||cen==4||cen==5) v2CMS->Draw("p same");
+
+ if(drawall){
+ v2sys0->Draw("E2same");
+ v2sys1->Draw("E2same");
+ g->Draw("p") ;
+ g2->Draw("p");
+ }
+
+ if(drawwhdg&&cen>=2&&cen<=5){
+ gWHDG->Draw("pl");
+ }
+
+ if(fit){
+// TF1* ff=new TF1("ff","[0]*(1-exp(-[1]*x))/([2]+exp([3]+[4]*x+[5]*x*x))");
+ TF1* ff=new TF1("ff","([0]+exp([1]+[2]*x+[3]*x*x))/([4]+exp([5]+[6]*x+[7]*x*x))",0,20);
+
+ ff->SetParameters(0,0.05);
+ ff->SetParameters(1,0.05);
+
+ v2chAll->Fit(ff,"m");
+ ff->Draw("same");
+
+ Double_t *p = ff->GetParameters();
+ cout<<p[0]<<"*(1-exp(-1*("<<p[1]<<")*x))/("<<p[2]<<"+exp("<<p[3]<<"+("<<p[4]<<")*x+("<<p[5]<<")*x*x))"<<endl;
+
+ TGraphAsymmErrors* v2ch_cpy = v2ch->Clone("v2ch_cpy");
+ TGraphAsymmErrors* v2ch_diff = v2ch->Clone("v2ch_diff");
+
+ v2ch_cpy->Apply(ff);
+ }
+
+//PHOS sum V0A and V0C
+ if(drawsum){
+ gsum->Draw("p");
+ v2sumsys->Draw("E2same");
+
+ TFile fout("v2PHOS.root","update");
+ char nname[100];
+ char cname[100]="";
+ if(cen==10) sprintf(cname,"cen010");
+ if(cen==11) sprintf(cname,"cen2040");
+ if(cen==20) sprintf(cname,"cen1050");
+
+ if(cen==0) sprintf(cname,"cen05");
+ if(cen==1) sprintf(cname,"cen510");
+ if(cen==2) sprintf(cname,"cen1020");
+ if(cen==3) sprintf(cname,"cen2030");
+ if(cen==4) sprintf(cname,"cen3040");
+ if(cen==5) sprintf(cname,"cen4050");
+
+ sprintf(nname,"v2statV0_%s_11h",cname) ;
+ gsum->SetName(nname) ;
+ sprintf(nname,"v2sysV0_%s_11h",cname) ;
+ v2sumsys->SetName(nname) ;
+
+ gsum->Write(0,TObject::kOverwrite) ;
+ v2sumsys->Write(0,TObject::kOverwrite) ;
+ fout.Close() ;
+
+ }
+
+ if(fit){
+ for(int i=0;i<v2ch_cpy->GetN();i++){
+ Double_t px1,px2,py1,py2,pyPHOS,pyPCM,py,px;
+ v2ch_cpy->GetPoint(i,px1,py1); //PHOS+PCM
+ v2ch->GetPoint(i,px2,py2); //PHOS+PCM
+
+ v2ch_diff->SetPoint(i,px1,py1-py2);
+ }
+ v2ch_diff->SetLineColor(kGray+1);
+ v2ch_diff->SetMarkerColor(kGray+1);
+
+ v2ch_diff->Draw("3");
+ }
+
+ if(drawpcm){
+ if(cen==11||cen==21){
+ v2PCMsys->Draw("E2same");
+ v2PCM->Draw("p");
+ }
+ }
+
+// if(merge){
+ if(diff){
+ TGraphErrors *gtmp = gsum->Clone("gtmp");
+
+//if(merge)gtmp=gm->Clone("gtmp");
+//else gtmp=gsum->Clone("gtmp");
+
+ TGraphErrors *gmnew;
+ TH1D *v2msysnew;
+ TGraphErrors *gmsysnew;
+
+if(diff==1){
+ gmnew=(TGraphErrors*)gm->Clone("gmnew");
+ v2msysnew=(TH1D*)v2msys->Clone("v2msysnew");
+}
+else if(diff==2||diff==4){
+ gmnew=(TGraphErrors*)gsum->Clone("gmnew");
+ v2msysnew=(TH1D*)v2sumsys->Clone("v2msysnew");
+}
+else if(diff==3||diff==5){
+ gmnew=(TGraphErrors*)v2PCM->Clone("gmnew");
+ gmsysnew=(TGraphErrors*)v2PCMsys->Clone("v2msysnew");
+}
+
+// TH1D *v2msysnew = v2msys->Clone("v2msysnew");
+
+ if(fit)gtmp->Apply(ff);
+ for(int i=0;i<gmnew->GetN();i++){
+ Double_t px1=0,px2=0,py1=0,py2=0,pyPHOS=0,pyPCM=0,py=0,px=0;
+ if(diff==1||diff==2||diff==3)gm->GetPoint(i,px1,py1); //PHOS+PCM
+ if(fit)gtmp->GetPoint(i,px2,py2); //ch fit
+
+ if(px1!=px2) cout<<"ERROR!"<<endl;
+cout<<"points: "<<py1<<" "<<py2<<endl;
+
+ py=py1-py2;
+ gsum->GetPoint(i,px,pyPHOS);
+ if(merge)v2PCM->GetPoint(i,px,pyPCM);
+ if(i>7) pyPCM=0;
+ if(diff==2){ //PHOS - PHOS+PCM
+ py=pyPHOS-py1;
+ }
+ if(diff==3){ //PCM - PHOS+PCM
+ py=pyPCM-py1;
+ }
+ if(diff==4){ //PHOS - ch
+ py=pyPHOS-py2;
+ }
+ if(diff==5){ //PCM - ch
+ py=pyPCM-py2;
+ }
+
+ gmnew->SetPoint(i,px,py);
+ if(diff==1||diff==2||diff==4)v2msysnew->SetBinContent(i+1,py);
+ if(diff==3||diff==5)gmsysnew->SetPoint(i,px,py);
+
+ }
+ gmnew->SetLineColor(kGreen);
+ gmnew->SetMarkerColor(kGreen);
+
+ gmnew->Draw("p");
+ if(diff==1||diff==2||diff==4){
+ v2msysnew->SetLineColor(kGreen);
+ v2msysnew->SetMarkerColor(kGreen);
+ v2msysnew->Draw("E2same");
+ }
+ if(diff==3||diff==5){
+ gmsysnew->SetLineColor(kGreen);
+ gmsysnew->SetMarkerColor(kGreen);
+ gmsysnew->Draw("E2same");
+ }
+// }
+
+ if(drawmerge){
+ gm->Draw("p");
+ v2msys->Draw("E2same");
+ }
+
+ if(diff!=0){
+ TF1* ffuu=new TF1("ffuu","[0]");
+ gmnew->Fit(ffuu,"m");
+
+ TPaveText* t3=new TPaveText(0.12,0.08,0.57,0.18,"NDC"); //0.63,0.5,0.8,0.70,"NDC");
+ t3->SetFillStyle(0);
+ t3->SetBorderSize(0);
+ t3->SetTextSize(0.04) ;
+
+ char ffuuname[255];
+
+ sprintf(ffuuname,"fit diff: %f #pm %f",ffuu->GetParameter(0),ffuu->GetParError(0));
+ t3->AddText(0.,0.,ffuuname);
+ t3->Draw();
+ }
+ }
+
+ if(drawcms)
+ if(cen==3||cen==4||cen==5) v2CMS->Draw("p same");
+ if(drawphenix)
+ if(cen==2||cen==3||cen==4||cen==5||cen==10) v2PHENIX->Draw("p same");
+
+//TITLE
+
+ TPaveText* t2=new TPaveText(0.12,0.88,0.57,0.98,"NDC"); //0.63,0.5,0.8,0.70,"NDC");
+ t2->SetFillStyle(0);
+ t2->SetBorderSize(0);
+ t2->SetTextSize(0.04) ;
+
+ char tname[255];
+
+ sprintf(tname,"#pi^{0} v_{2}^{EP} centrality 0-10%%");
+ if(cen==10) t2->AddText(0.,0.,tname);
+ sprintf(tname,"#pi^{0} v_{2}^{EP} centrality 20-40%%");
+ if(cen==11) t2->AddText(0.,0.,tname);
+ sprintf(tname,"#pi^{0} v_{2}^{EP} centrality 0-5%%");
+ if(cen==0) t2->AddText(0.,0.,tname);
+ sprintf(tname,"#pi^{0} v_{2}^{EP} centrality 5-10%%");
+ if(cen==1) t2->AddText(0.,0.,tname);
+ sprintf(tname,"#pi^{0} v_{2}^{EP} centrality 10-20%%");
+ if(cen==2) t2->AddText(0.,0.,tname);
+ sprintf(tname,"#pi^{0} v_{2}^{EP} centrality 20-30%%");
+ if(cen==3) t2->AddText(0.,0.,tname);
+ sprintf(tname,"#pi^{0} v_{2}^{EP} centrality 30-40%%");
+ if(cen==4) t2->AddText(0.,0.,tname);
+ sprintf(tname,"#pi^{0} v_{2}^{EP} centrality 40-50%%");
+ if(cen==5) t2->AddText(0.,0.,tname);
+ sprintf(tname,"#pi^{0} v_{2}^{EP} centrality 10-50%%");
+ if(cen==20) t2->AddText(0.,0.,tname);
+ sprintf(tname,"#pi^{0} v_{2}^{EP} centrality 0-20%%");
+ if(cen==21) t2->AddText(0.,0.,tname);
+
+ t2->Draw();
+
+ TLegend * l = new TLegend(0.15,0.68,0.95,0.88) ;
+// TLegend * l = new TLegend(0.22,0.08,0.75,0.28) ;
+
+ l->SetFillColor(0) ;
+ l->SetTextSize(0.04) ;
+
+
+ if(drawsum)
+ if(method==1) l->AddEntry(gsum,"PHOS #pi^{0} dNdPhi method, VZERO EP 3 subs","p") ;
+ else if(method==2) l->AddEntry(gsum,"PHOS #pi^{0} inv mass method, VZERO EP 3 subs","p") ;
+
+ if(drawpcm)
+ if(cen==11||cen==21)l->AddEntry(v2PCM,"PCM #pi^{0}, VZERO EP 3 subs","p") ;
+
+ if(drawall){
+ l->AddEntry(g,"PHOS #pi^{0}, V0A EP 3 subs","p") ;
+ l->AddEntry(g2,"PHOS #pi^{0}, V0C EP 3 subs","p") ;
+ }
+
+ if(merge){
+ l->AddEntry(gm,"PHOS+PCM #pi^{0}, V0 EP 3 subs","p") ;
+ if(diff==1)l->AddEntry(gmnew,"PHOS+PCM #pi^{0} - #pi^{#pm}, V0 EP","p") ;
+ if(diff==2)l->AddEntry(gmnew,"PHOS - PHOS+PCM #pi^{0}, V0 EP 3 subs","p") ;
+ if(diff==3)l->AddEntry(gmnew,"PCM - PHOS+PCM #pi^{0}, V0 EP 3 subs","p") ;
+ if(diff==4)l->AddEntry(gmnew,"PHOS #pi^{0} - #pi^{#pm}, V0 EP","p") ;
+ if(diff==5)l->AddEntry(gmnew,"PCM #pi^{0} - #pi^{#pm}, V0 EP","p") ;
+ }
+ if(drawch){
+ l->AddEntry(v2ch,"TOF #pi^{#pm}, V0 EP 3 subs","f") ;
+ l->AddEntry(v2chAlex,"TPC #pi^{#pm} (v2Alex)","f") ;
+ }
+if(drawcms)
+if(cen==3||cen==4||cen==5)l->AddEntry(v2CMS,"CMS #pi^{0}","p");
+if(drawphenix)
+if(cen==2||cen==3||cen==4||cen==5||cen==10) l->AddEntry(v2PHENIX,"PHENIX #pi^{0}, MPC+RXNin","p");
+if(drawwhdg)
+if(cen>=2&&cen<=5)l->AddEntry(gWHDG,"WHDG predictions for #pi^{0} v_{2} at LHC energies","p");
+
+ l->Draw() ;
+
+//if(cen==4) ALICEPreliminary2(c);
+// else ALICEPreliminary(c);
+
+// if(cen==6)TGraphErrors * gph = new TGraphErrors(17,pT2,v22,xbins,v2e2);
+// if(cen==3)TGraphErrors * gph = new TGraphErrors(17,pT4,v24,xbins,v2e4);
+// if(cen==4)TGraphErrors * gph = new TGraphErrors(17,pT6,v26,xbins,v2e6);
+
+ if(diff==0){
+ if(drawall)
+ sprintf(name,"combined_%s_%s_%d_%d_V0EPall.gif",w,kind,cen,method) ;
+ else
+ sprintf(name,"combined_%s_%s_%d_%d_V0EP.gif",w,kind,cen,method) ;
+ }
+ else{
+ if(drawall)
+ sprintf(name,"combined_%s_%s_%d_%d_V0EPall_diff%d.gif",w,kind,cen,method,diff) ;
+ else
+ sprintf(name,"combined_%s_%s_%d_%d_V0EP_diff%d.gif",w,kind,cen,method,diff) ;
+}
+ c->SaveAs(name) ;
+
+ if(diff==0){
+ if(drawall)
+ sprintf(name,"combined_%s_%s_%d_%d_V0EPall.eps",w,kind,cen,method) ;
+ else
+ sprintf(name,"combined_%s_%s_%d_%d_V0EP.eps",w,kind,cen,method) ;
+ }
+ else{
+ if(drawall)
+ sprintf(name,"combined_%s_%s_%d_%d_V0EPall_diff%d.eps",w,kind,cen,method,diff) ;
+ else
+ sprintf(name,"combined_%s_%s_%d_%d_V0EP_diff%d.eps",w,kind,cen,method,diff) ;
+}
+
+ c->SaveAs(name) ;
+
+
+}
+//-----------------------------------------------------------------------------
+void ALICEPreliminary(TPad *c){
+
+ TPad *myPadLogo = new TPad("myPadLogo", "Pad for ALICE Logo",0.69,0.70,0.84,0.89);//0.65,0.70,0.8,0.89);
+ myPadLogo->SetFillColor(0);
+ myPadLogo->SetBorderMode(0);
+ myPadLogo->SetBorderSize(2);
+ myPadLogo->SetFrameBorderMode(0);
+ myPadLogo->SetLeftMargin(0.0);
+ myPadLogo->SetTopMargin(0.0);
+ myPadLogo->SetBottomMargin(0.0);
+ myPadLogo->SetRightMargin(0.0);
+ myPadLogo->SetFillStyle(0);
+ myPadLogo->Draw();
+ myPadLogo->cd();
+
+ TASImage *myAliceLogo = new TASImage("./alice_logo.png");
+ myAliceLogo->Draw();
+
+ c->cd() ;
+ TPaveText* t1=new TPaveText(0.67,0.6,0.84,0.70,"NDC"); //0.63,0.5,0.8,0.70,"NDC");
+ t1->SetFillStyle(0);
+ t1->SetBorderSize(0);
+ t1->SetTextSize(0.03) ;
+ t1->AddText(0.,0.,"ALICE performance");
+ t1->AddText(0.,0.,"#color[1]{18/05/2011}");
+ t1->AddText(0.,0.,"Pb-Pb->#pi^{0}+X @ #sqrt{s_{NN}}=2.76 TeV");
+
+// t1->AddText(0.,0.,"9.8#times 10^{6} events");
+// t1->AddText(0.,0.,"PHOS");
+ t1->SetTextColor(kRed);
+ t1->SetTextFont(42);
+ t1->Draw();
+}
+
+//-----------------------------------------------------------------------------
+void ALICEPreliminary2(TPad *c){
+
+ TPad *myPadLogo = new TPad("myPadLogo", "Pad for ALICE Logo",0.19,0.70,0.34,0.89);//0.65,0.70,0.8,0.89);
+
+ myPadLogo->SetFillColor(0);
+ myPadLogo->SetBorderMode(0);
+ myPadLogo->SetBorderSize(2);
+ myPadLogo->SetFrameBorderMode(0);
+ myPadLogo->SetLeftMargin(0.0);
+ myPadLogo->SetTopMargin(0.0);
+ myPadLogo->SetBottomMargin(0.0);
+ myPadLogo->SetRightMargin(0.0);
+ myPadLogo->SetFillStyle(0);
+ myPadLogo->Draw();
+ myPadLogo->cd();
+
+ TASImage *myAliceLogo = new TASImage("./alice_logo.png");
+ myAliceLogo->Draw();
+
+ c->cd() ;
+ TPaveText* t1=new TPaveText(0.17,0.6,0.34,0.70,"NDC");
+ t1->SetFillStyle(0);
+ t1->SetBorderSize(0);
+ t1->SetTextSize(0.03) ;
+ t1->AddText(0.,0.,"ALICE performance");
+ t1->AddText(0.,0.,"#color[1]{18/05/2011}");
+ t1->AddText(0.,0.,"PbPb->#pi^{0}+X @ #sqrt{s_{NN}}=2.76 TeV");
+
+// t1->AddText(0.,0.,"9.8#times 10^{6} events");
+// t1->AddText(0.,0.,"PHOS");
+ t1->SetTextColor(kRed);
+ t1->SetTextFont(42);
+ t1->Draw();
+}
+
+
--- /dev/null
+Bool_t kSyst = kTRUE;
+Bool_t kStat = kTRUE;
+
+Double_t v0Cres[] = {0.448977,0.615462,0.712913,0.735905,0.697669,0.610942,0.480438,0.326472,0.185398};
+Double_t v0Cres3[] = {0.296482,0.303404,0.294064,0.261364,0.220765,0.176069,0.112545,0.056252,0.009874};
+
+
+void PrintPoints(TGraphErrors *g1,TGraphErrors *g2,const char *title="QM11 preliminary plots 10-20"){
+
+ Int_t n1 = g1->GetN();
+ Int_t n2 = g2->GetN();
+
+
+ printf("\n%s\n",title);
+
+ if(n1==n2){
+ for(Int_t i=0;i<n1;i++){
+ Float_t x1=g1->GetX()[i];
+ Float_t x2=g2->GetX()[i];
+
+ if(x1==x2){
+ printf("%5.2f %e %e %e\n",x1,g1->GetY()[i],g1->GetEY()[i],g2->GetEY()[i]);
+ }
+ }
+ }
+ else{
+ printf("The TGraphErrors have different number of points\nNothing done\n");
+ }
+}
+
+void PrintPoints(TGraphAsymmErrors *g1,TGraphAsymmErrors *g2,const char *title="high pt flow paper 10-20"){
+
+ Int_t n1 = g1->GetN();
+ Int_t n2 = g2->GetN();
+
+
+ printf("\n%s\n",title);
+
+ if(n1==n2){
+ for(Int_t i=0;i<n1;i++){
+ Float_t x1=g1->GetX()[i];
+ Float_t x2=g2->GetX()[i];
+
+ if(x1==x2){
+ printf("%5.2f %e %e %e %e\n",x1,g1->GetY()[i],g1->GetEYlow()[i],g2->GetEYlow()[i],g2->GetEYhigh()[i]);
+ }
+ }
+ }
+ else{
+ printf("The TGraphErrors have different number of points\nNothing done\n");
+ }
+}
+
+
+
+Double_t Eval(TGraphErrors *g,Double_t x){
+ Int_t n = g->GetN();
+ Int_t i = 0;
+ while(x > g->GetX()[i]){
+ i++;
+ }
+ if(i == 0) i = 1;
+
+ Float_t distAll = g->GetX()[i] - g->GetX()[i-1];
+ Float_t dist = x - g->GetX()[i-1];
+
+ printf("%i\n",i);
+
+ return g->GetY()[i-1] + (g->GetY()[i] - g->GetY()[i-1])/distAll*dist;
+}
+
+Double_t Eval(TGraphAsymmErrors *g,Double_t x){
+ Int_t n = g->GetN();
+ Int_t i = 0;
+ while(x > g->GetX()[i]){
+ i++;
+ }
+ if(i == 0) i = 1;
+
+ Float_t distAll = g->GetX()[i] - g->GetX()[i-1];
+ Float_t dist = x - g->GetX()[i-1];
+
+ printf("%i\n",i);
+
+ return g->GetY()[i-1] + (g->GetY()[i] - g->GetY()[i-1])/distAll*dist;
+}
+
+Double_t EvalError(TGraphErrors *g,Float_t x){
+ Int_t n = g->GetN();
+ Int_t i = 0;
+ while(x < g->GetX()[i]){
+ i++;
+ }
+ if(i == 0) i = 1;
+
+ Float_t distAll = g->GetX()[i] - g->GetX()[i-1];
+ Float_t dist = x - g->GetX()[i-1];
+
+ return g->GetEY()[i-1] + (g->GetEY()[i] - g->GetEY()[i-1])/distAll*dist;
+}
+
+Double_t EvalError(TGraphAsymmErrors *g,Float_t x){
+ Int_t n = g->GetN();
+ Int_t i = 0;
+ while(x < g->GetX()[i]){
+ i++;
+ }
+ if(i == 0) i = 1;
+
+ Float_t distAll = g->GetX()[i] - g->GetX()[i-1];
+ Float_t dist = x - g->GetX()[i-1];
+
+ return g->GetEY()[i-1] + (g->GetEYhigh()[i] - g->GetEYhigh()[i-1])/distAll*dist;
+}
+
+TGraph *GetV2(Int_t isp=0,Int_t cmin,Int_t cmax){
+ // isp = 0(pi) 1(K) 2(pbar) 3(k0s) 4(lambda) 5(phi) 6(Xi) 7 (omega)
+ if(cmin==0 && cmax==5){
+ switch(isp){
+ case 0:
+ return v2Pion0005(1,20,4,36);
+ break;
+ case 1:
+ return v2Kaon0005(1,20,5,36);
+ break;
+ case 2:
+ return v2Antiproton0005(1,20,6,36);
+ break;
+ case 3:
+ return Kv2_05_SPVZE();
+ break;
+ case 4:
+ return Lv2_05_SPVZE();
+ break;
+ case 5:
+ break;
+ case 6:
+ break;
+ case 7:
+ break;
+ }
+ }
+ else if(cmin==5 && cmax==10){
+ switch(isp){
+ case 0:
+ return v2Pion0510(1,20,4,36);
+ break;
+ case 1:
+ return v2Kaon0510(1,20,5,36);
+ break;
+ case 2:
+ return v2Antiproton0510(1,20,6,36);
+ break;
+ case 3:
+ return Kv2_510_SPVZE();
+ break;
+ case 4:
+ return Lv2_510_SPVZE();
+ break;
+ case 5:
+ break;
+ case 6:
+ return v2Xi0510();
+ break;
+ case 7:
+ return v2Omega0510();
+ break;
+ }
+ }
+ else if(cmin==10 && cmax==20){
+ switch(isp){
+ case 0:
+ return v2Pion1020(1,20,4,36);
+ break;
+ case 1:
+ return v2Kaon1020(1,20,5,36);
+ break;
+ case 2:
+ return v2Antiproton1020(1,20,6,36);
+ break;
+ case 3:
+ return Kv2_1020_SPVZE();
+ break;
+ case 4:
+ return Lv2_1020_SPVZE();
+ break;
+ case 5:
+ return v2EPPhi1020();
+ break;
+ case 6:
+ return v2Xi1020();
+ break;
+ case 7:
+ return v2Omega1020();
+ break;
+ }
+ }
+ else if(cmin==20 && cmax==30){
+ switch(isp){
+ case 0:
+ return v2Pion2030(1,20,4,36);
+ break;
+ case 1:
+ return v2Kaon2030(1,20,5,36);
+ break;
+ case 2:
+ return v2Antiproton2030(1,20,6,36);
+ break;
+ case 3:
+ return Kv2_2030_SPVZE();
+ break;
+ case 4:
+ return Lv2_2030_SPVZE();
+ break;
+ case 5:
+ return v2EPPhi2030();
+ break;
+ case 6:
+ return v2Xi2030();
+ break;
+ case 7:
+ return v2Omega2030();
+ break;
+ }
+ }
+ else if(cmin==30 && cmax==40){
+ switch(isp){
+ case 0:
+ return v2Pion3040(1,20,4,36);
+ break;
+ case 1:
+ return v2Kaon3040(1,20,5,36);
+ break;
+ case 2:
+ return v2Antiproton3040(1,20,6,36);
+ break;
+ case 3:
+ return Kv2_3040_SPVZE();
+ break;
+ case 4:
+ return Lv2_3040_SPVZE();
+ break;
+ case 5:
+ return v2EPPhi3040();
+ break;
+ case 6:
+ return v2Xi3040();
+ break;
+ case 7:
+ return v2Omega3040();
+ break;
+ }
+ }
+ else if(cmin==40 && cmax==50){
+ switch(isp){
+ case 0:
+ return v2Pion4050(1,20,4,36);
+ break;
+ case 1:
+ return v2Kaon4050(1,20,5,36);
+ break;
+ case 2:
+ return v2Antiproton4050(1,20,6,36);
+ break;
+ case 3:
+ break;
+ case 4:
+ break;
+ case 5:
+ break;
+ case 6:
+ return v2Xi4050();
+ break;
+ case 7:
+ return v2Omega4050();
+ break;
+ }
+ }
+ else if(cmin==50 && cmax==60){
+ switch(isp){
+ case 0:
+ return v2Pion5060(1,20,4,36);
+ break;
+ case 1:
+ return v2Kaon5060(1,20,5,36);
+ break;
+ case 2:
+ return v2Antiproton5060(1,20,6,36);
+ break;
+ case 3:
+ break;
+ case 4:
+ break;
+ case 5:
+ break;
+ case 6:
+ return v2Xi5060();
+ break;
+ case 7:
+ return v2Omega5060();
+ break;
+ }
+ }
+ else if(cmin==60 && cmax==70){
+ switch(isp){
+ case 0:
+ return v2Pion6070(1,20,4,36);
+ break;
+ case 1:
+ return v2Kaon6070(1,20,5,36);
+ break;
+ case 2:
+ return v2Antiproton6070(1,20,6,36);
+ break;
+ case 3:
+ break;
+ case 4:
+ break;
+ case 5:
+ break;
+ case 6:
+ break;
+ case 7:
+ break;
+ }
+ }
+ else if(cmin==70 && cmax==80){
+ switch(isp){
+ case 0:
+ return v2Pion7080(1,20,4,36);
+ break;
+ case 1:
+ return v2Kaon7080(1,20,5,36);
+ break;
+ case 2:
+ return v2Antiproton7080(1,20,6,36);
+ break;
+ case 3:
+ break;
+ case 4:
+ break;
+ case 5:
+ break;
+ case 6:
+ break;
+ case 7:
+ break;
+ }
+ }
+
+ return NULL;
+}
+
+// pion merged bins
+TGraphAsymmErrors *v2Pion(Int_t cmin,Int_t cmax){
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphAsymmErrors *gStat[10];
+ TGraphAsymmErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gStat[ngr] = v2Pion0005(1,20,4,36);
+ break;
+ case 1:
+ gStat[ngr] = v2Pion0510(1,20,4,36);
+ break;
+ case 2:
+ gStat[ngr] = v2Pion1020(1,20,4,36);
+ break;
+ case 3:
+ gStat[ngr] = v2Pion2030(1,20,4,36);
+ break;
+ case 4:
+ gStat[ngr] = v2Pion3040(1,20,4,36);
+ break;
+ case 5:
+ gStat[ngr] = v2Pion4050(1,20,4,36);
+ break;
+ case 6:
+ gStat[ngr] = v2Pion5060(1,20,4,36);
+ break;
+ case 7:
+ gStat[ngr] = v2Pion6070(1,20,4,36);
+ break;
+ case 8:
+ gStat[ngr] = v2Pion7080(1,20,4,36);
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gSyst[ngr] = v2Pion0005(1,20,4,36);
+ break;
+ case 1:
+ gSyst[ngr] = v2Pion0510(1,20,4,36);
+ break;
+ case 2:
+ gSyst[ngr] = v2Pion1020(1,20,4,36);
+ break;
+ case 3:
+ gSyst[ngr] = v2Pion2030(1,20,4,36);
+ break;
+ case 4:
+ gSyst[ngr] = v2Pion3040(1,20,4,36);
+ break;
+ case 5:
+ gSyst[ngr] = v2Pion4050(1,20,4,36);
+ break;
+ case 6:
+ gSyst[ngr] = v2Pion5060(1,20,4,36);
+ break;
+ case 7:
+ gSyst[ngr] = v2Pion6070(1,20,4,36);
+ break;
+ case 8:
+ gSyst[ngr] = v2Pion7080(1,20,4,36);
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t eval2 = 0;
+ Double_t eval3 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEYlow()[j] * gStat[i]->GetEYlow()[j] * v0Cres[imin+i]*v0Cres[imin+i];
+ if(weight > 0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEYlow()[j]*gStat[i]->GetEYlow()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEYlow()[j] * weight;
+ eval3 += gSyst[i]->GetEYhigh()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval3 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ ey2[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ ey2[j] += eval3*eval3;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ ey2[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+ ey2[j] = TMath::Sqrt(ey2[j]);
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphAsymmErrors *gRes = new TGraphAsymmErrors(np,x,y,ex,ex,ey,ey2);
+ gRes->SetMarkerStyle(20);
+ gRes->SetMarkerColor(4);
+ gRes->SetLineColor(4);
+
+ return gRes;
+}
+
+// pion merged bins
+TGraphAsymmErrors *v2PionAlex(Int_t cmin,Int_t cmax){
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphAsymmErrors *gStat[10];
+ TGraphAsymmErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gStat[ngr] = v2PionAlex0005(1,20);
+ break;
+ case 1:
+ gStat[ngr] = v2PionAlex0510(1,20);
+ break;
+ case 2:
+ gStat[ngr] = v2PionAlex1020(1,20);
+ break;
+ case 3:
+ gStat[ngr] = v2PionAlex2030(1,20);
+ break;
+ case 4:
+ gStat[ngr] = v2PionAlex3040(1,20);
+ break;
+ case 5:
+ gStat[ngr] = v2PionAlex4050(1,20);
+ break;
+ case 6:
+ gStat[ngr] = v2PionAlex5060(1,20);
+ break;
+ case 7:
+ gStat[ngr] = v2PionAlex6070(1,20);
+ break;
+ case 8:
+ gStat[ngr] = v2PionAlex7080(1,20);
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gSyst[ngr] = v2PionAlex0005(1,20);
+ break;
+ case 1:
+ gSyst[ngr] = v2PionAlex0510(1,20);
+ break;
+ case 2:
+ gSyst[ngr] = v2PionAlex1020(1,20);
+ break;
+ case 3:
+ gSyst[ngr] = v2PionAlex2030(1,20);
+ break;
+ case 4:
+ gSyst[ngr] = v2PionAlex3040(1,20);
+ break;
+ case 5:
+ gSyst[ngr] = v2PionAlex4050(1,20);
+ break;
+ case 6:
+ gSyst[ngr] = v2PionAlex5060(1,20);
+ break;
+ case 7:
+ gSyst[ngr] = v2PionAlex6070(1,20);
+ break;
+ case 8:
+ gSyst[ngr] = v2PionAlex7080(1,20);
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t eval2 = 0;
+ Double_t eval3 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEYlow()[j] * gStat[i]->GetEYlow()[j] * v0Cres[imin+i]*v0Cres[imin+i];
+ if(weight > 0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEYlow()[j]*gStat[i]->GetEYlow()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEYlow()[j] * weight;
+ eval3 += gSyst[i]->GetEYhigh()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval3 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ ey2[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ ey2[j] += eval3*eval3;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ ey2[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+ ey2[j] = TMath::Sqrt(ey2[j]);
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphAsymmErrors *gRes = new TGraphAsymmErrors(np,x,y,ex,ex,ey,ey2);
+ gRes->SetMarkerStyle(20);
+ gRes->SetMarkerColor(4);
+ gRes->SetLineColor(4);
+
+ return gRes;
+}
+
+TGraphErrors *v2PionQM11(Int_t cmin,Int_t cmax){
+ if(cmin < 10) cmin = 10;
+ if(cmax >60) cmax = 60;
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphErrors *gStat[10];
+ TGraphErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ break;
+ case 1:
+ break;
+ case 2:
+ gStat[ngr] = v22_etagap10_1020_pion(1,20,3,31);
+ break;
+ case 3:
+ gStat[ngr] = v22_etagap10_2030_pion(1,20,3,31);
+ break;
+ case 4:
+ gStat[ngr] = v22_etagap10_3040_pion(1,20,3,31);
+ break;
+ case 5:
+ gStat[ngr] = v22_etagap10_4050_pion(1,20,3,31);
+ break;
+ case 6:
+ gStat[ngr] = v22_etagap10_5060_pion(1,20,3,31);
+ break;
+ case 7:
+ break;
+ case 8:
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ break;
+ case 1:
+ break;
+ case 2:
+ gSyst[ngr] = v22_etagap10_1020_pion(1,20,3,31);
+ break;
+ case 3:
+ gSyst[ngr] = v22_etagap10_2030_pion(1,20,3,31);
+ break;
+ case 4:
+ gSyst[ngr] = v22_etagap10_3040_pion(1,20,3,31);
+ break;
+ case 5:
+ gSyst[ngr] = v22_etagap10_4050_pion(1,20,3,31);
+ break;
+ case 6:
+ gSyst[ngr] = v22_etagap10_5060_pion(1,20,3,31);
+ break;
+ case 7:
+ break;
+ case 8:
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t eval2 = 0;
+ Double_t eval3 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEY()[j] * gStat[i]->GetEY()[j];
+ if(weight > 0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEY()[j]*gStat[i]->GetEY()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEY()[j] * weight;
+ eval3 += gSyst[i]->GetEY()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval3 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ ey2[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ ey2[j] += eval3*eval3;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ ey2[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+ ey2[j] = TMath::Sqrt(ey2[j]);
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphErrors *gRes = new TGraphErrors(np,x,y,ex,ey);
+ gRes->SetMarkerStyle(20);
+ gRes->SetMarkerColor(4);
+ gRes->SetLineColor(4);
+
+ return gRes;
+}
+
+TGraphErrors *v3Pion(Int_t cmin,Int_t cmax,Int_t rebin=1){
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphErrors *gStat[10];
+ TGraphErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gStat[ngr] = v3Pion0005(1,20,4,36,rebin);
+ break;
+ case 1:
+ gStat[ngr] = v3Pion0510(1,20,4,36,rebin);
+ break;
+ case 2:
+ gStat[ngr] = v3Pion1020(1,20,4,36,rebin);
+ break;
+ case 3:
+ gStat[ngr] = v3Pion2030(1,20,4,36,rebin);
+ break;
+ case 4:
+ gStat[ngr] = v3Pion3040(1,20,4,36,rebin);
+ break;
+ case 5:
+ gStat[ngr] = v3Pion4050(1,20,4,36,rebin);
+ break;
+ case 6:
+ gStat[ngr] = v3Pion5060(1,20,4,36,rebin);
+ break;
+ case 7:
+ gStat[ngr] = v3Pion6070(1,20,4,36,rebin);
+ break;
+ case 8:
+ gStat[ngr] = v3Pion7080(1,20,4,36,rebin);
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gSyst[ngr] = v3Pion0005(1,20,4,36,rebin);
+ break;
+ case 1:
+ gSyst[ngr] = v3Pion0510(1,20,4,36,rebin);
+ break;
+ case 2:
+ gSyst[ngr] = v3Pion1020(1,20,4,36,rebin);
+ break;
+ case 3:
+ gSyst[ngr] = v3Pion2030(1,20,4,36,rebin);
+ break;
+ case 4:
+ gSyst[ngr] = v3Pion3040(1,20,4,36,rebin);
+ break;
+ case 5:
+ gSyst[ngr] = v3Pion4050(1,20,4,36,rebin);
+ break;
+ case 6:
+ gSyst[ngr] = v3Pion5060(1,20,4,36,rebin);
+ break;
+ case 7:
+ gSyst[ngr] = v3Pion6070(1,20,4,36,rebin);
+ break;
+ case 8:
+ gSyst[ngr] = v3Pion7080(1,20,4,36,rebin);
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t evalNR = 0;
+ Double_t eval2 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEY()[j] * gStat[i]->GetEY()[j] * v0Cres3[imin+i]*v0Cres3[imin+i];
+ if(weight > 0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEY()[j]*gStat[i]->GetEY()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEY()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphErrors *gRes = new TGraphErrors(np,x,y,ex,ey);
+ gRes->SetMarkerStyle(20);
+ gRes->SetMarkerColor(4);
+ gRes->SetLineColor(4);
+
+ return gRes;
+}
+
+// antiproton merged bins
+TGraphAsymmErrors *v2Antiproton(Int_t cmin,Int_t cmax){
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphAsymmErrors *gStat[10];
+ TGraphAsymmErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gStat[ngr] = v2Antiproton0005(1,20,6,40);
+ break;
+ case 1:
+ gStat[ngr] = v2Antiproton0510(1,20,6,40);
+ break;
+ case 2:
+ gStat[ngr] = v2Antiproton1020(1,20,6,40);
+ break;
+ case 3:
+ gStat[ngr] = v2Antiproton2030(1,20,6,40);
+ break;
+ case 4:
+ gStat[ngr] = v2Antiproton3040(1,20,6,40);
+ break;
+ case 5:
+ gStat[ngr] = v2Antiproton4050(1,20,6,40);
+ break;
+ case 6:
+ gStat[ngr] = v2Antiproton5060(1,20,6,40);
+ break;
+ case 7:
+ gStat[ngr] = v2Antiproton6070(1,20,6,40);
+ break;
+ case 8:
+ gStat[ngr] = v2Antiproton7080(1,20,6,40);
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gSyst[ngr] = v2Antiproton0005(1,20,6,40);
+ break;
+ case 1:
+ gSyst[ngr] = v2Antiproton0510(1,20,6,40);
+ break;
+ case 2:
+ gSyst[ngr] = v2Antiproton1020(1,20,6,40);
+ break;
+ case 3:
+ gSyst[ngr] = v2Antiproton2030(1,20,6,40);
+ break;
+ case 4:
+ gSyst[ngr] = v2Antiproton3040(1,20,6,40);
+ break;
+ case 5:
+ gSyst[ngr] = v2Antiproton4050(1,20,6,40);
+ break;
+ case 6:
+ gSyst[ngr] = v2Antiproton5060(1,20,6,40);
+ break;
+ case 7:
+ gSyst[ngr] = v2Antiproton6070(1,20,6,40);
+ break;
+ case 8:
+ gSyst[ngr] = v2Antiproton7080(1,20,6,40);
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t eval2 = 0;
+ Double_t eval3 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEYlow()[j] * gStat[i]->GetEYlow()[j] * v0Cres[imin+i]*v0Cres[imin+i];
+ if(weight > 0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEYlow()[j]*gStat[i]->GetEYlow()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEYlow()[j] * weight;
+ eval3 += gSyst[i]->GetEYhigh()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval3 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ ey2[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ ey2[j] += eval3*eval3;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ ey2[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+ ey2[j] = TMath::Sqrt(ey2[j]);
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphAsymmErrors *gRes = new TGraphAsymmErrors(np,x,y,ex,ex,ey,ey2);
+ gRes->SetMarkerStyle(22);
+ gRes->SetMarkerColor(2);
+ gRes->SetLineColor(2);
+
+ return gRes;
+}
+
+TGraphAsymmErrors *v2AntiprotonAlex(Int_t cmin,Int_t cmax){
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphAsymmErrors *gStat[10];
+ TGraphAsymmErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gStat[ngr] = v2AntiprotonAlex0005(1,20);
+ break;
+ case 1:
+ gStat[ngr] = v2AntiprotonAlex0510(1,20);
+ break;
+ case 2:
+ gStat[ngr] = v2AntiprotonAlex1020(1,20);
+ break;
+ case 3:
+ gStat[ngr] = v2AntiprotonAlex2030(1,20);
+ break;
+ case 4:
+ gStat[ngr] = v2AntiprotonAlex3040(1,20);
+ break;
+ case 5:
+ gStat[ngr] = v2AntiprotonAlex4050(1,20);
+ break;
+ case 6:
+ gStat[ngr] = v2AntiprotonAlex5060(1,20);
+ break;
+ case 7:
+ gStat[ngr] = v2AntiprotonAlex6070(1,20);
+ break;
+ case 8:
+ gStat[ngr] = v2AntiprotonAlex7080(1,20);
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gSyst[ngr] = v2AntiprotonAlex0005(1,20);
+ break;
+ case 1:
+ gSyst[ngr] = v2AntiprotonAlex0510(1,20);
+ break;
+ case 2:
+ gSyst[ngr] = v2AntiprotonAlex1020(1,20);
+ break;
+ case 3:
+ gSyst[ngr] = v2AntiprotonAlex2030(1,20);
+ break;
+ case 4:
+ gSyst[ngr] = v2AntiprotonAlex3040(1,20);
+ break;
+ case 5:
+ gSyst[ngr] = v2AntiprotonAlex4050(1,20);
+ break;
+ case 6:
+ gSyst[ngr] = v2AntiprotonAlex5060(1,20);
+ break;
+ case 7:
+ gSyst[ngr] = v2AntiprotonAlex6070(1,20);
+ break;
+ case 8:
+ gSyst[ngr] = v2AntiprotonAlex7080(1,20);
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t eval2 = 0;
+ Double_t eval3 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEYlow()[j] * gStat[i]->GetEYlow()[j] * v0Cres[imin+i]*v0Cres[imin+i];
+ if(weight > 0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEYlow()[j]*gStat[i]->GetEYlow()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEYlow()[j] * weight;
+ eval3 += gSyst[i]->GetEYhigh()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval3 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ ey2[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ ey2[j] += eval3*eval3;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ ey2[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+ ey2[j] = TMath::Sqrt(ey2[j]);
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphAsymmErrors *gRes = new TGraphAsymmErrors(np,x,y,ex,ex,ey,ey2);
+ gRes->SetMarkerStyle(22);
+ gRes->SetMarkerColor(2);
+ gRes->SetLineColor(2);
+
+ return gRes;
+}
+
+TGraphErrors *v2AntiprotonQM11(Int_t cmin,Int_t cmax){
+ if(cmin < 10) cmin = 10;
+ if(cmax >60) cmax = 60;
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphErrors *gStat[10];
+ TGraphErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ break;
+ case 1:
+ break;
+ case 2:
+ gStat[ngr] = v22_etagap10_1020_antiproton(1,20,5,35);
+ break;
+ case 3:
+ gStat[ngr] = v22_etagap10_2030_antiproton(1,20,5,35);
+ break;
+ case 4:
+ gStat[ngr] = v22_etagap10_3040_antiproton(1,20,5,35);
+ break;
+ case 5:
+ gStat[ngr] = v22_etagap10_4050_antiproton(1,20,5,35);
+ break;
+ case 6:
+ gStat[ngr] = v22_etagap10_5060_antiproton(1,20,5,35);
+ break;
+ case 7:
+ break;
+ case 8:
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ break;
+ case 1:
+ break;
+ case 2:
+ gSyst[ngr] = v22_etagap10_1020_antiproton(1,20,5,35);
+ break;
+ case 3:
+ gSyst[ngr] = v22_etagap10_2030_antiproton(1,20,5,35);
+ break;
+ case 4:
+ gSyst[ngr] = v22_etagap10_3040_antiproton(1,20,5,35);
+ break;
+ case 5:
+ gSyst[ngr] = v22_etagap10_4050_antiproton(1,20,5,35);
+ break;
+ case 6:
+ gSyst[ngr] = v22_etagap10_5060_antiproton(1,20,5,35);
+ break;
+ case 7:
+ break;
+ case 8:
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t eval2 = 0;
+ Double_t eval3 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEY()[j] * gStat[i]->GetEY()[j];
+ if(weight > 0.0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEY()[j]*gStat[i]->GetEY()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEY()[j] * weight;
+ eval3 += gSyst[i]->GetEY()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval3 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ ey2[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ ey2[j] += eval3*eval3;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ ey2[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+ ey2[j] = TMath::Sqrt(ey2[j]);
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphErrors *gRes = new TGraphErrors(np,x,y,ex,ey);
+ gRes->SetMarkerStyle(20);
+ gRes->SetMarkerColor(4);
+ gRes->SetLineColor(4);
+
+ return gRes;
+}
+
+TGraphErrors *v3Antiproton(Int_t cmin,Int_t cmax,Int_t rebin=1){
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphErrors *gStat[10];
+ TGraphErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gStat[ngr] = v3Antiproton0005(2,22,6,36,rebin);
+ break;
+ case 1:
+ gStat[ngr] = v3Antiproton0510(2,22,6,36,rebin);
+ break;
+ case 2:
+ gStat[ngr] = v3Antiproton1020(2,22,6,36,rebin);
+ break;
+ case 3:
+ gStat[ngr] = v3Antiproton2030(2,22,6,36,rebin);
+ break;
+ case 4:
+ gStat[ngr] = v3Antiproton3040(2,22,6,36,rebin);
+ break;
+ case 5:
+ gStat[ngr] = v3Antiproton4050(2,22,6,36,rebin);
+ break;
+ case 6:
+ gStat[ngr] = v3Antiproton5060(2,22,6,36,rebin);
+ break;
+ case 7:
+ gStat[ngr] = v3Antiproton6070(2,22,6,36,rebin);
+ break;
+ case 8:
+ gStat[ngr] = v3Antiproton7080(2,22,6,36,rebin);
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gSyst[ngr] = v3Antiproton0005(1,20,6,36,rebin);
+ break;
+ case 1:
+ gSyst[ngr] = v3Antiproton0510(1,20,6,36,rebin);
+ break;
+ case 2:
+ gSyst[ngr] = v3Antiproton1020(1,20,6,36,rebin);
+ break;
+ case 3:
+ gSyst[ngr] = v3Antiproton2030(1,20,6,36,rebin);
+ break;
+ case 4:
+ gSyst[ngr] = v3Antiproton3040(1,20,6,36,rebin);
+ break;
+ case 5:
+ gSyst[ngr] = v3Antiproton4050(1,20,6,36,rebin);
+ break;
+ case 6:
+ gSyst[ngr] = v3Antiproton5060(1,20,6,36,rebin);
+ break;
+ case 7:
+ gSyst[ngr] = v3Antiproton6070(1,20,6,36,rebin);
+ break;
+ case 8:
+ gSyst[ngr] = v3Antiproton7080(1,20,6,36,rebin);
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t eval2 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEY()[j] * gStat[i]->GetEY()[j] * v0Cres3[imin+i]*v0Cres3[imin+i];
+ if(weight > 0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEY()[j]*gStat[i]->GetEY()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEY()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphErrors *gRes = new TGraphErrors(np,x,y,ex,ey);
+ gRes->SetMarkerStyle(22);
+ gRes->SetMarkerColor(2);
+ gRes->SetLineColor(2);
+
+ return gRes;
+}
+
+// kaon merged bins
+TGraphAsymmErrors *v2Kaon(Int_t cmin,Int_t cmax){
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphAsymmErrors *gStat[10];
+ TGraphAsymmErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gStat[ngr] = v2Kaon0005(1,20,5,36);
+ break;
+ case 1:
+ gStat[ngr] = v2Kaon0510(1,20,5,36);
+ break;
+ case 2:
+ gStat[ngr] = v2Kaon1020(1,20,5,36);
+ break;
+ case 3:
+ gStat[ngr] = v2Kaon2030(1,20,5,36);
+ break;
+ case 4:
+ gStat[ngr] = v2Kaon3040(1,20,5,36);
+ break;
+ case 5:
+ gStat[ngr] = v2Kaon4050(1,20,5,36);
+ break;
+ case 6:
+ gStat[ngr] = v2Kaon5060(1,20,5,36);
+ break;
+ case 7:
+ gStat[ngr] = v2Kaon6070(1,20,5,36);
+ break;
+ case 8:
+ gStat[ngr] = v2Kaon7080(1,20,5,36);
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gSyst[ngr] = v2Kaon0005(1,20,5,36);
+ break;
+ case 1:
+ gSyst[ngr] = v2Kaon0510(1,20,5,36);
+ break;
+ case 2:
+ gSyst[ngr] = v2Kaon1020(1,20,5,36);
+ break;
+ case 3:
+ gSyst[ngr] = v2Kaon2030(1,20,5,36);
+ break;
+ case 4:
+ gSyst[ngr] = v2Kaon3040(1,20,5,36);
+ break;
+ case 5:
+ gSyst[ngr] = v2Kaon4050(1,20,5,36);
+ break;
+ case 6:
+ gSyst[ngr] = v2Kaon5060(1,20,5,36);
+ break;
+ case 7:
+ gSyst[ngr] = v2Kaon6070(1,20,5,36);
+ break;
+ case 8:
+ gSyst[ngr] = v2Kaon7080(1,20,5,36);
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t eval2 = 0;
+ Double_t eval3 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEYlow()[j] * gStat[i]->GetEYlow()[j] * v0Cres[imin+i]*v0Cres[imin+i];
+ if(weight > 0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEYlow()[j]*gStat[i]->GetEYlow()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEYlow()[j] * weight;
+ eval3 += gSyst[i]->GetEYhigh()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval3 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ ey2[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ ey2[j] += eval3*eval3;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ ey2[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+ ey2[j] = TMath::Sqrt(ey2[j]);
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphAsymmErrors *gRes = new TGraphAsymmErrors(np,x,y,ex,ex,ey,ey2);
+ gRes->SetMarkerStyle(21);
+ gRes->SetMarkerColor(1);
+ gRes->SetLineColor(1);
+
+ return gRes;
+}
+
+TGraphErrors *v2KaonQM11(Int_t cmin,Int_t cmax){
+ if(cmin < 10) cmin = 10;
+ if(cmax >60) cmax = 60;
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphErrors *gStat[10];
+ TGraphErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ break;
+ case 1:
+ break;
+ case 2:
+ gStat[ngr] = v22_etagap10_1020_kaon(1,20,4,23);
+ break;
+ case 3:
+ gStat[ngr] = v22_etagap10_2030_kaon(1,20,4,23);
+ break;
+ case 4:
+ gStat[ngr] = v22_etagap10_3040_kaon(1,20,4,23);
+ break;
+ case 5:
+ gStat[ngr] = v22_etagap10_4050_kaon(1,20,4,23);
+ break;
+ case 6:
+ gStat[ngr] = v22_etagap10_5060_kaon(1,20,4,23);
+ break;
+ case 7:
+ break;
+ case 8:
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ break;
+ case 1:
+ break;
+ case 2:
+ gSyst[ngr] = v22_etagap10_1020_kaon(1,20,4,23);
+ break;
+ case 3:
+ gSyst[ngr] = v22_etagap10_2030_kaon(1,20,4,23);
+ break;
+ case 4:
+ gSyst[ngr] = v22_etagap10_3040_kaon(1,20,4,23);
+ break;
+ case 5:
+ gSyst[ngr] = v22_etagap10_4050_kaon(1,20,4,23);
+ break;
+ case 6:
+ gSyst[ngr] = v22_etagap10_5060_kaon(1,20,4,23);
+ break;
+ case 7:
+ break;
+ case 8:
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t eval2 = 0;
+ Double_t eval3 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEY()[j] * gStat[i]->GetEY()[j];
+ if(weight > 0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEY()[j]*gStat[i]->GetEY()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEY()[j] * weight;
+ eval3 += gSyst[i]->GetEY()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval3 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ ey2[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ ey2[j] += eval3*eval3;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ ey2[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+ ey2[j] = TMath::Sqrt(ey2[j]);
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphErrors *gRes = new TGraphErrors(np,x,y,ex,ey);
+ gRes->SetMarkerStyle(20);
+ gRes->SetMarkerColor(4);
+ gRes->SetLineColor(4);
+
+ return gRes;
+}
+
+TGraphErrors *v3Kaon(Int_t cmin,Int_t cmax,Int_t rebin=1){
+ Int_t icentr[] = {0,5,10,20,30,40,50,60,70,80};
+ Int_t imin=100;
+ Int_t imax = -1;
+ for(Int_t j=8;j>=0;j--)
+ if(cmin < icentr[j+1]) imin = j;
+ for(Int_t j=0;j<8;j++)
+ if(cmax > icentr[j]) imax = j;
+
+ Bool_t oldflag1 = kSyst;
+ Bool_t oldflag2 = kStat;
+
+ Int_t ngr = 0;
+ TGraphErrors *gStat[10];
+ TGraphErrors *gSyst[10];
+
+ kSyst=0;
+ kStat=1;
+
+ char name[100];
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gStat[ngr] = v3Kaon0005(1,20,5,36,rebin);
+ break;
+ case 1:
+ gStat[ngr] = v3Kaon0510(1,20,5,36,rebin);
+ break;
+ case 2:
+ gStat[ngr] = v3Kaon1020(1,20,5,36,rebin);
+ break;
+ case 3:
+ gStat[ngr] = v3Kaon2030(1,20,5,36,rebin);
+ break;
+ case 4:
+ gStat[ngr] = v3Kaon3040(1,20,5,36,rebin);
+ break;
+ case 5:
+ gStat[ngr] = v3Kaon4050(1,20,5,36,rebin);
+ break;
+ case 6:
+ gStat[ngr] = v3Kaon5060(1,20,5,36,rebin);
+ break;
+ case 7:
+ gStat[ngr] = v3Kaon6070(1,20,5,36,rebin);
+ break;
+ case 8:
+ gStat[ngr] = v3Kaon7080(1,20,5,36,rebin);
+ break;
+ }
+ sprintf(name,"Stat%i",ngr);
+ gStat[ngr]->SetName(name);
+ ngr++;
+ }
+
+ kSyst=1;
+ kStat=0;
+ ngr = 0;
+
+ for(Int_t i=imin;i <= imax;i++){
+ switch(i){
+ case 0:
+ gSyst[ngr] = v3Kaon0005(1,20,5,36,rebin);
+ break;
+ case 1:
+ gSyst[ngr] = v3Kaon0510(1,20,5,36,rebin);
+ break;
+ case 2:
+ gSyst[ngr] = v3Kaon1020(1,20,5,36,rebin);
+ break;
+ case 3:
+ gSyst[ngr] = v3Kaon2030(1,20,5,36,rebin);
+ break;
+ case 4:
+ gSyst[ngr] = v3Kaon3040(1,20,5,36,rebin);
+ break;
+ case 5:
+ gSyst[ngr] = v3Kaon4050(1,20,5,36,rebin);
+ break;
+ case 6:
+ gSyst[ngr] = v3Kaon5060(1,20,5,36,rebin);
+ break;
+ case 7:
+ gSyst[ngr] = v3Kaon6070(1,20,5,36,rebin);
+ break;
+ case 8:
+ gSyst[ngr] = v3Kaon7080(1,20,5,36,rebin);
+ break;
+ }
+ sprintf(name,"Syst%i",ngr);
+ gSyst[ngr]->SetName(name);
+ ngr++;
+ }
+
+ Double_t x[100],ex[100],y[100],ey[100],ey2[100];
+
+ Int_t np = gSyst[0]->GetN();
+ for(Int_t j=0;j<np;j++){
+ Double_t val = 0;
+ Double_t eval = 0;
+ Double_t eval2 = 0;
+ Double_t sumw = 0;
+ for(Int_t i=0;i < ngr;i++){
+ Double_t weight = gStat[i]->GetEY()[j] * gStat[i]->GetEY()[j] * v0Cres3[imin+i]*v0Cres3[imin+i];
+ if(weight > 0){
+ weight = 1./weight;
+ val += gStat[i]->GetY()[j] * weight;
+ sumw += weight;
+ eval += gStat[i]->GetEY()[j]*gStat[i]->GetEY()[j] * weight * weight;
+ eval2 += gSyst[i]->GetEY()[j] * weight;
+ }
+ }
+ val /= sumw;
+ eval2 /= sumw;
+ eval = TMath::Sqrt(eval)/sumw;
+
+ x[j] = gStat[0]->GetX()[j];
+ ex[j] = 0;
+ y[j] = val;
+ ey[j] = 0;
+ if(oldflag1){
+ ey[j] += eval2*eval2;
+ }
+ if(oldflag2){
+ ey[j] += eval*eval;
+ }
+ else{
+ ex[j] = 0.05;
+ }
+ ey[j] = TMath::Sqrt(ey[j]);
+ }
+
+ kSyst = oldflag1;
+ kStat = oldflag2;
+
+ TGraphErrors *gRes = new TGraphErrors(np,x,y,ex,ey);
+ gRes->SetMarkerStyle(21);
+ gRes->SetMarkerColor(1);
+ gRes->SetLineColor(1);
+
+ return gRes;
+}
+
+
+// *********************** K0 and Lambda flow ************************************************************************
+
+void k0lambda() {
+ Kv2_3040_QC2()->Draw("APS");
+ K2030_QC2()->Draw("PSAME");
+ K1020_QC2()->Draw("PSAME");
+ Kv2_510_QC2()->Draw("PSAME");
+ Kv2_05_QC2()->Draw("PSAME");
+
+ new TCanvas;
+ Lv2_3040_QC2()->Draw("APS");
+ L2030_QC2()->Draw("PSAME");
+ L1020_QC2()->Draw("PSAME");
+ Lv2_510_QC2()->Draw("PSAME");
+ Lv2_05_QC2()->Draw("PSAME");
+}
+
+TGraphErrors* Kv2_05_SPVZE(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.004252, 0.005188, 0.008694, 0.021937, 0.027455, 0.034104, 0.039625, 0.044746, 0.048867, 0.050852, 0.056576, 0.057511, 0.061194, 0.064164, 0.043417, 0.034294, 0.045038, 0.055057, 0.054040};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.007064, 0.002132, 0.001111, 0.000885, 0.000831, 0.000879, 0.001009, 0.001196, 0.001423, 0.001768, 0.002138, 0.002071, 0.003061, 0.004600, 0.006617, 0.007092, 0.013762, 0.017200, 0.034379};
+ Double_t _ysys[] = {0.000407, 0.000469, 0.000679, 0.001100, 0.001374, 0.001748, 0.001981, 0.002328, 0.002508, 0.002882, 0.002882, 0.003027, 0.003337, 0.003455, 0.003552, 0.002006, 0.002474, 0.009195, 0.010798};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_510_SPVZE(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.007000, 0.011162, 0.021922, 0.035766, 0.049923, 0.061198, 0.072225, 0.079441, 0.087496, 0.091636, 0.097925, 0.103443, 0.098518, 0.112176, 0.095534, 0.085755, 0.081923, 0.056758, 0.037123};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004525, 0.001531, 0.000857, 0.000685, 0.000641, 0.000694, 0.000797, 0.000935, 0.001034, 0.001370, 0.001699, 0.001582, 0.002280, 0.003377, 0.004748, 0.004655, 0.009180, 0.012872, 0.023541};
+ Double_t _ysys[] = {0.001626, 0.000605, 0.000954, 0.001506, 0.002063, 0.002470, 0.002897, 0.003226, 0.003512, 0.003752, 0.004013, 0.004140, 0.004256, 0.004645, 0.004638, 0.003733, 0.008835, 0.005530, 0.006966};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_1020_SPVZE(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.006448, 0.017702, 0.036487, 0.056327, 0.073865, 0.093749, 0.106839, 0.118791, 0.128331, 0.138452, 0.143128, 0.150689, 0.152251, 0.144184, 0.136654, 0.134234, 0.122976, 0.090678, 0.062086};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004170, 0.001288, 0.000779, 0.000640, 0.000620, 0.000674, 0.000751, 0.000886, 0.001046, 0.001270, 0.001556, 0.001467, 0.002149, 0.003077, 0.004349, 0.004403, 0.007759, 0.011108, 0.026570};
+ Double_t _ysys[] = {0.000588, 0.000584, 0.001122, 0.001690, 0.002222, 0.002921, 0.003219, 0.003614, 0.003882, 0.004232, 0.004320, 0.004618, 0.004829, 0.004410, 0.004243, 0.004993, 0.003940, 0.004961, 0.019516};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_2030_SPVZE(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.010006, 0.024794, 0.052177, 0.078209, 0.102262, 0.123894, 0.140711, 0.156015, 0.169287, 0.179601, 0.183815, 0.192834, 0.198249, 0.191741, 0.176891, 0.166178, 0.138895, 0.110028, 0.153199};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004230, 0.001405, 0.000881, 0.000736, 0.000726, 0.000765, 0.000863, 0.000990, 0.001184, 0.001466, 0.001765, 0.001639, 0.002407, 0.003441, 0.004740, 0.004662, 0.008490, 0.011135, 0.021290};
+ Double_t _ysys[] = {0.000948, 0.001279, 0.001622, 0.002386, 0.003122, 0.003718, 0.004253, 0.004744, 0.005222, 0.005395, 0.005579, 0.005818, 0.006045, 0.005821, 0.005667, 0.005197, 0.005507, 0.010924, 0.021326};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_3040_SPVZE(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.016004, 0.032272, 0.063662, 0.094458, 0.122230, 0.147693, 0.165353, 0.182370, 0.192551, 0.203017, 0.209774, 0.215077, 0.205180, 0.207687, 0.193207, 0.177072, 0.138215, 0.095648, 0.094620};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.003860, 0.001294, 0.000829, 0.000700, 0.000694, 0.000746, 0.000854, 0.000996, 0.001182, 0.001428, 0.001702, 0.001573, 0.002237, 0.003101, 0.004298, 0.004143, 0.007344, 0.010269, 0.019498};
+ Double_t _ysys[] = {0.001196, 0.001172, 0.001913, 0.002838, 0.003787, 0.004457, 0.004986, 0.005593, 0.005961, 0.006311, 0.006323, 0.006607, 0.006218, 0.006364, 0.005809, 0.005347, 0.004869, 0.006404, 0.011155};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_05_SPVZE(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.007244, 0.000766, 0.002918, 0.010512, 0.020161, 0.028609, 0.035194, 0.042263, 0.048493, 0.054680, 0.063401, 0.062718, 0.074361, 0.069395, 0.054816, 0.035160, 0.065080};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.007859, 0.003415, 0.001886, 0.001502, 0.001318, 0.001249, 0.001266, 0.001380, 0.001507, 0.001271, 0.001736, 0.002462, 0.003518, 0.004229, 0.011940, 0.025584, 0.064570};
+ Double_t _ysys[] = {0.010257, 0.003898, 0.000858, 0.000705, 0.001076, 0.001437, 0.001761, 0.002292, 0.002449, 0.002735, 0.003459, 0.003155, 0.003993, 0.003532, 0.004840, 0.013337, 0.037902};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_510_SPVZE(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.000448, -0.002030, 0.007388, 0.022971, 0.036594, 0.048758, 0.064942, 0.076033, 0.084732, 0.100738, 0.118755, 0.127093, 0.137373, 0.131762, 0.119606, 0.081458, 0.061535};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.005760, 0.002502, 0.001393, 0.001129, 0.001021, 0.000977, 0.000998, 0.001047, 0.001164, 0.000988, 0.001377, 0.001973, 0.002857, 0.003306, 0.008045, 0.016394, 0.044974};
+ Double_t _ysys[] = {0.001294, 0.002166, 0.001195, 0.001337, 0.001570, 0.001979, 0.002601, 0.003128, 0.003399, 0.004032, 0.004824, 0.005133, 0.005533, 0.005522, 0.004800, 0.016161, 0.022762};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_1020_SPVZE(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.003309, 0.008249, 0.024390, 0.038326, 0.057884, 0.077701, 0.098417, 0.115582, 0.130611, 0.152156, 0.176539, 0.188140, 0.202555, 0.200892, 0.178190, 0.158896, 0.154960};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.005072, 0.001860, 0.001218, 0.000996, 0.000922, 0.000912, 0.000944, 0.001027, 0.001121, 0.000962, 0.001303, 0.001840, 0.002665, 0.002998, 0.007228, 0.013583, 0.037967};
+ Double_t _ysys[] = {0.000509, 0.000711, 0.001270, 0.001621, 0.001764, 0.002576, 0.002954, 0.003583, 0.003920, 0.004565, 0.005324, 0.005754, 0.006182, 0.006043, 0.006355, 0.006942, 0.025241};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_2030_SPVZE(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.005534, 0.016922, 0.040005, 0.063529, 0.089775, 0.113536, 0.140542, 0.157994, 0.179955, 0.205746, 0.228441, 0.245757, 0.250396, 0.253334, 0.212181, 0.144409, 0.127257};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004080, 0.001874, 0.001310, 0.001097, 0.001033, 0.001037, 0.001084, 0.001178, 0.001300, 0.001124, 0.001515, 0.002140, 0.003040, 0.003451, 0.007882, 0.014386, 0.040230};
+ Double_t _ysys[] = {0.002796, 0.002731, 0.002055, 0.002177, 0.002961, 0.003688, 0.004239, 0.004790, 0.005451, 0.006265, 0.006935, 0.007398, 0.007591, 0.007668, 0.007851, 0.004401, 0.035996};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_3040_SPVZE(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.008101, 0.028716, 0.056285, 0.085861, 0.113487, 0.142217, 0.168666, 0.190902, 0.214881, 0.236344, 0.259644, 0.277207, 0.284432, 0.269306, 0.230249, 0.170618, 0.111317};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.003465, 0.001650, 0.001186, 0.001001, 0.001016, 0.000989, 0.001040, 0.001151, 0.001294, 0.001105, 0.001520, 0.002137, 0.002988, 0.003283, 0.007364, 0.013282, 0.033430};
+ Double_t _ysys[] = {0.002027, 0.000896, 0.001954, 0.002742, 0.003461, 0.004299, 0.005087, 0.005752, 0.006511, 0.007091, 0.007937, 0.008339, 0.008937, 0.008115, 0.007644, 0.007032, 0.022812};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* Kv2_05_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.001041, 0.001124, 0.008947, 0.020038, 0.029261, 0.038507, 0.045613, 0.052333, 0.056686, 0.062340, 0.065821, 0.065011, 0.070707, 0.072572, 0.063348, 0.069030, 0.051120, 0.056467, 0.023178};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004180, 0.001479, 0.000893, 0.000735, 0.000683, 0.000732, 0.000832, 0.000975, 0.001149, 0.001386, 0.001683, 0.001578, 0.002352, 0.003466, 0.004909, 0.004808, 0.008910, 0.011868, 0.022452};
+ Double_t _ysys[] = {0.000454, 0.000997, 0.000792, 0.001007, 0.001464, 0.001947, 0.002286, 0.002674, 0.002867, 0.003308, 0.003299, 0.003312, 0.003542, 0.003664, 0.003686, 0.003527, 0.003099, 0.003576, 0.009997};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_510_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.003497, 0.010205, 0.020795, 0.036825, 0.051873, 0.063821, 0.075186, 0.085009, 0.093230, 0.099266, 0.106385, 0.110677, 0.107768, 0.111739, 0.108875, 0.099813, 0.097247, 0.090101, 0.047768};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.003794, 0.001375, 0.000857, 0.000698, 0.000671, 0.000712, 0.000790, 0.000930, 0.001042, 0.001321, 0.001621, 0.001466, 0.002187, 0.003218, 0.004481, 0.004463, 0.008598, 0.010870, 0.018896};
+ Double_t _ysys[] = {0.001352, 0.000521, 0.000942, 0.001586, 0.002090, 0.002557, 0.003016, 0.003424, 0.003743, 0.003981, 0.004308, 0.004506, 0.004379, 0.004541, 0.004788, 0.004033, 0.005403, 0.003820, 0.003682};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_1020_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.007051, 0.016100, 0.037009, 0.057360, 0.076636, 0.096443, 0.110868, 0.124309, 0.134059, 0.143032, 0.148407, 0.156759, 0.161398, 0.156367, 0.148881, 0.142463, 0.135274, 0.108699, 0.109107};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.003485, 0.001355, 0.000849, 0.000704, 0.000690, 0.000741, 0.000824, 0.000949, 0.001078, 0.001346, 0.001635, 0.001515, 0.002217, 0.003181, 0.004494, 0.004505, 0.008140, 0.011124, 0.020627};
+ Double_t _ysys[] = {0.001480, 0.000588, 0.001159, 0.001734, 0.002305, 0.002927, 0.003347, 0.003831, 0.004036, 0.004330, 0.004453, 0.004743, 0.005010, 0.005319, 0.004618, 0.004824, 0.004091, 0.003268, 0.013869};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_2030_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.002309, 0.024107, 0.051778, 0.079557, 0.105023, 0.127597, 0.144243, 0.161524, 0.174976, 0.186361, 0.189533, 0.197314, 0.204868, 0.196847, 0.192251, 0.177620, 0.169643, 0.122656, 0.139651};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.003981, 0.001516, 0.000978, 0.000819, 0.000813, 0.000852, 0.000954, 0.001078, 0.001302, 0.001583, 0.001903, 0.001755, 0.002527, 0.003632, 0.005061, 0.004993, 0.008796, 0.013641, 0.022930};
+ Double_t _ysys[] = {0.000531, 0.000796, 0.001567, 0.002411, 0.003173, 0.003837, 0.004342, 0.004852, 0.005271, 0.005592, 0.005688, 0.005956, 0.006215, 0.006195, 0.005855, 0.005481, 0.005122, 0.005476, 0.011500};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_3040_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.014508, 0.034328, 0.065797, 0.096833, 0.125000, 0.150947, 0.169894, 0.186345, 0.199821, 0.210376, 0.220423, 0.222461, 0.217520, 0.221469, 0.207910, 0.196929, 0.152205, 0.135415, 0.145111};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.003475, 0.001344, 0.000838, 0.000757, 0.000755, 0.000803, 0.000902, 0.001042, 0.001223, 0.001458, 0.001762, 0.001633, 0.002270, 0.003212, 0.004436, 0.004225, 0.007481, 0.009788, 0.019137};
+ Double_t _ysys[] = {0.000908, 0.001215, 0.001981, 0.002925, 0.003915, 0.004574, 0.005100, 0.005639, 0.006018, 0.006414, 0.006650, 0.006688, 0.006582, 0.006824, 0.006319, 0.006235, 0.004788, 0.006151, 0.008116};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_05_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.012915, -0.017239, -0.004504, 0.006377, 0.016216, 0.027976, 0.037605, 0.043651, 0.052304, 0.061816, 0.072772, 0.080232, 0.087232, 0.090775, 0.075730, 0.093122, 0.142425};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.005322, 0.002200, 0.001487, 0.001218, 0.001104, 0.001044, 0.001061, 0.001133, 0.001215, 0.001046, 0.001348, 0.001905, 0.002767, 0.003223, 0.008212, 0.015866, 0.041348};
+ Double_t _ysys[] = {0.001355, 0.001125, 0.000820, 0.000597, 0.001260, 0.001425, 0.002446, 0.002519, 0.003251, 0.003270, 0.004089, 0.004892, 0.004666, 0.004660, 0.003883, 0.015552, 0.020457};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_510_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.014544, -0.007924, 0.004837, 0.018192, 0.033375, 0.049417, 0.065286, 0.076631, 0.089073, 0.104481, 0.125041, 0.133032, 0.146169, 0.147679, 0.136833, 0.119569, 0.125120};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004719, 0.001979, 0.001368, 0.001133, 0.001031, 0.000997, 0.001002, 0.001055, 0.001146, 0.000975, 0.001325, 0.001863, 0.002759, 0.003156, 0.007594, 0.013760, 0.037775};
+ Double_t _ysys[] = {0.002082, 0.002344, 0.000918, 0.000859, 0.001522, 0.002101, 0.002649, 0.003080, 0.003580, 0.004204, 0.005062, 0.005391, 0.005913, 0.005966, 0.007519, 0.005709, 0.009710};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_1020_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.010600, 0.001161, 0.020148, 0.037486, 0.055986, 0.077790, 0.099118, 0.117230, 0.133895, 0.156136, 0.181408, 0.195720, 0.205453, 0.207396, 0.189198, 0.182420, 0.141741};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004043, 0.001840, 0.001298, 0.001073, 0.000994, 0.000989, 0.001018, 0.001092, 0.001192, 0.001025, 0.001357, 0.001917, 0.002753, 0.003091, 0.007417, 0.014128, 0.036993};
+ Double_t _ysys[] = {0.003305, 0.000447, 0.000611, 0.001148, 0.001861, 0.002359, 0.003017, 0.003581, 0.004034, 0.004722, 0.005444, 0.005884, 0.006169, 0.006594, 0.005812, 0.005919, 0.007949};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_2030_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.001192, 0.013454, 0.038257, 0.061408, 0.088608, 0.115157, 0.141186, 0.160925, 0.184930, 0.211126, 0.234058, 0.251488, 0.259255, 0.264109, 0.231330, 0.190554, 0.203114};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004142, 0.001977, 0.001425, 0.001193, 0.001140, 0.001137, 0.001178, 0.001275, 0.001414, 0.001197, 0.001612, 0.002259, 0.003224, 0.003610, 0.008382, 0.014979, 0.039175};
+ Double_t _ysys[] = {0.003300, 0.000466, 0.001315, 0.001868, 0.002704, 0.003535, 0.004245, 0.004835, 0.005564, 0.006438, 0.007037, 0.007627, 0.007836, 0.007952, 0.007945, 0.006502, 0.021830};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_3040_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.001546, 0.027875, 0.057020, 0.084991, 0.114717, 0.144647, 0.171366, 0.195803, 0.217127, 0.242040, 0.268601, 0.285450, 0.292867, 0.283628, 0.252365, 0.208233, 0.184286};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.003424, 0.001730, 0.001253, 0.001064, 0.001076, 0.001074, 0.001095, 0.001202, 0.001344, 0.001144, 0.001557, 0.002167, 0.003051, 0.003422, 0.007545, 0.013201, 0.030984};
+ Double_t _ysys[] = {0.001534, 0.000858, 0.001718, 0.002558, 0.003445, 0.004341, 0.005153, 0.005881, 0.006542, 0.007262, 0.008076, 0.008579, 0.009650, 0.008542, 0.007900, 0.007809, 0.014849};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_510_QC4(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.024448, 0.006490, 0.015154, 0.028703, 0.041548, 0.051786, 0.059059, 0.063980, 0.069818, 0.079014, 0.072393, 0.081744, 0.072246, 0.083706, 0.064711, 0.086149, 0.101979, -0.020145, -0.030268};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.014226, 0.005388, 0.003665, 0.003072, 0.003015, 0.003076, 0.003523, 0.004001, 0.004486, 0.005411, 0.006457, 0.005767, 0.007998, 0.012337, 0.016395, 0.016698, 0.033892, 0.039218, 0.068058};
+ Double_t _ysys[] = {0.009051, 0.001662, 0.000632, 0.001870, 0.001916, 0.002614, 0.002448, 0.002588, 0.003495, 0.005612, 0.002927, 0.004893, 0.006262, 0.009444, 0.012260, 0.005168, 0.021448, 0.025203, 0.039657};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_1020_QC4(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.010304, 0.016204, 0.033282, 0.050568, 0.068130, 0.082275, 0.098983, 0.107410, 0.118314, 0.122915, 0.127885, 0.135673, 0.133027, 0.125030, 0.119996, 0.114883, 0.103795, 0.056606, 0.073532};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.008246, 0.003348, 0.002248, 0.001928, 0.001887, 0.001998, 0.002171, 0.002489, 0.002762, 0.003426, 0.004034, 0.003694, 0.005368, 0.007697, 0.010785, 0.010791, 0.019094, 0.026001, 0.046208};
+ Double_t _ysys[] = {0.003572, 0.000550, 0.001082, 0.001520, 0.002068, 0.003303, 0.003411, 0.003818, 0.003650, 0.003819, 0.003868, 0.004158, 0.005506, 0.003772, 0.003747, 0.003794, 0.003375, 0.008648, 0.025117};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_2030_QC4(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.004850, 0.027542, 0.046313, 0.075131, 0.094502, 0.115978, 0.130658, 0.141709, 0.153858, 0.163352, 0.166724, 0.172142, 0.171170, 0.154985, 0.148088, 0.141224, 0.112097, 0.083910, 0.066892};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.007987, 0.003216, 0.002194, 0.001899, 0.001856, 0.001936, 0.002187, 0.002423, 0.002887, 0.003383, 0.004106, 0.003696, 0.005245, 0.007658, 0.010429, 0.010345, 0.018054, 0.024491, 0.045947};
+ Double_t _ysys[] = {0.000285, 0.000849, 0.001456, 0.002505, 0.003076, 0.003492, 0.003941, 0.004288, 0.004863, 0.005408, 0.005098, 0.005306, 0.005200, 0.004955, 0.005220, 0.004885, 0.004737, 0.012374, 0.012547};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv2_3040_QC4(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.006512, 0.034943, 0.062114, 0.088630, 0.109348, 0.133985, 0.149426, 0.161983, 0.172958, 0.178089, 0.179392, 0.185962, 0.166788, 0.179056, 0.169265, 0.143349, 0.121933, 0.108497, 0.112296};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.007580, 0.003105, 0.002090, 0.001853, 0.001904, 0.001991, 0.002207, 0.002507, 0.002931, 0.003438, 0.004063, 0.003738, 0.005244, 0.007411, 0.009942, 0.009662, 0.016750, 0.021741, 0.039454};
+ Double_t _ysys[] = {0.002840, 0.001382, 0.001869, 0.002727, 0.003337, 0.004088, 0.004513, 0.004862, 0.005472, 0.005347, 0.005438, 0.005909, 0.005198, 0.006915, 0.008132, 0.004807, 0.003987, 0.010813, 0.004271};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_510_QC4(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.012776, -0.006532, 0.002407, 0.013908, 0.034298, 0.043741, 0.053164, 0.061653, 0.066822, 0.083646, 0.099757, 0.113607, 0.130599, 0.088641, 0.108932, 0.091642, 0.003873};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.018501, 0.008241, 0.005990, 0.004994, 0.004546, 0.004265, 0.004395, 0.004456, 0.004907, 0.003900, 0.005136, 0.007247, 0.010837, 0.011661, 0.029174, 0.053332, 0.123189};
+ Double_t _ysys[] = {0.002945, 0.007251, 0.002181, 0.001572, 0.001461, 0.001965, 0.002908, 0.002978, 0.004778, 0.004521, 0.004007, 0.007012, 0.006891, 0.013885, 0.014025, 0.004857, 0.022835};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_1020_QC4(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.018354, 0.002501, 0.019160, 0.035782, 0.053545, 0.072513, 0.088244, 0.107401, 0.116970, 0.139628, 0.158563, 0.168384, 0.175704, 0.168032, 0.176285, 0.129312, 0.232092};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.009524, 0.004461, 0.003259, 0.002770, 0.002591, 0.002571, 0.002613, 0.002780, 0.002965, 0.002566, 0.003380, 0.004681, 0.006765, 0.007527, 0.017929, 0.032354, 0.089079};
+ Double_t _ysys[] = {0.005604, 0.000546, 0.002036, 0.001541, 0.001710, 0.002222, 0.002798, 0.004193, 0.003757, 0.004209, 0.005259, 0.005308, 0.006049, 0.006522, 0.010668, 0.008480, 0.015839};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_2030_QC4(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.006141, 0.016013, 0.033080, 0.061927, 0.081133, 0.103266, 0.128730, 0.147669, 0.165525, 0.186983, 0.207332, 0.221861, 0.227361, 0.236137, 0.179255, 0.127896, 0.158990};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.008335, 0.004076, 0.003074, 0.002625, 0.002498, 0.002492, 0.002622, 0.002774, 0.003122, 0.002550, 0.003460, 0.004807, 0.006813, 0.007646, 0.017565, 0.032766, 0.074537};
+ Double_t _ysys[] = {0.001704, 0.000755, 0.001575, 0.002334, 0.002515, 0.003214, 0.004683, 0.004838, 0.005278, 0.005797, 0.006703, 0.008488, 0.008067, 0.009027, 0.005602, 0.011053, 0.009362};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv2_3040_QC4(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.012902, 0.025954, 0.049970, 0.076305, 0.105496, 0.130038, 0.153960, 0.176067, 0.194724, 0.213066, 0.226722, 0.241776, 0.237693, 0.227219, 0.182900, 0.143968, -0.042035};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.007691, 0.003874, 0.003023, 0.002608, 0.002564, 0.002662, 0.002693, 0.002911, 0.003235, 0.002711, 0.003660, 0.005053, 0.007198, 0.007945, 0.017207, 0.031596, 0.071902};
+ Double_t _ysys[] = {0.003312, 0.003793, 0.002313, 0.002394, 0.004059, 0.004057, 0.005027, 0.005388, 0.006191, 0.006417, 0.006924, 0.007293, 0.007340, 0.007175, 0.005544, 0.017290, 0.003166};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv3_05_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.003647, 0.000666, 0.002345, 0.010674, 0.020633, 0.029478, 0.037807, 0.044923, 0.052115, 0.059175, 0.065205, 0.074218, 0.077106, 0.082393, 0.089078, 0.081828, 0.073522, 0.075938, 0.067269};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004758, 0.001683, 0.001029, 0.000836, 0.000794, 0.000838, 0.000957, 0.001115, 0.001294, 0.001584, 0.001933, 0.001800, 0.002665, 0.003967, 0.005624, 0.005425, 0.010326, 0.013241, 0.023159};
+ Double_t _ysys[] = {0.001013, 0.000245, 0.000494, 0.000555, 0.001042, 0.001487, 0.001891, 0.002255, 0.002627, 0.003002, 0.003343, 0.003748, 0.003877, 0.004135, 0.004890, 0.004358, 0.003707, 0.004124, 0.004060};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv3_510_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.003787, -0.000149, 0.005713, 0.014075, 0.023652, 0.033837, 0.044640, 0.053538, 0.061587, 0.069731, 0.074860, 0.085709, 0.088923, 0.096413, 0.091740, 0.085116, 0.106610, 0.068623, 0.022712};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004620, 0.001699, 0.001043, 0.000858, 0.000833, 0.000879, 0.000972, 0.001140, 0.001362, 0.001633, 0.001969, 0.001819, 0.002577, 0.003814, 0.005396, 0.005238, 0.010101, 0.013129, 0.021670};
+ Double_t _ysys[] = {0.000336, 0.000398, 0.000445, 0.000581, 0.000977, 0.001378, 0.001838, 0.002218, 0.002526, 0.003519, 0.002998, 0.003431, 0.003621, 0.005050, 0.003793, 0.003749, 0.005098, 0.004616, 0.006951};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Kv3_3040_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 19;
+ Double_t _x[] = {0.300000, 0.500000, 0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {0.001683, 0.006079, 0.012886, 0.025565, 0.040869, 0.051072, 0.064341, 0.074004, 0.084896, 0.091381, 0.098828, 0.101845, 0.108973, 0.108196, 0.110746, 0.105394, 0.094440, 0.129151, 0.079003};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004967, 0.001948, 0.001272, 0.001085, 0.001066, 0.001154, 0.001290, 0.001509, 0.001743, 0.002074, 0.002519, 0.002180, 0.003337, 0.004463, 0.006051, 0.005854, 0.010565, 0.013474, 0.026326};
+ Double_t _ysys[] = {0.001352, 0.000662, 0.000479, 0.000802, 0.001418, 0.001544, 0.001965, 0.002444, 0.002565, 0.002998, 0.003136, 0.003062, 0.003630, 0.003348, 0.004205, 0.003653, 0.004495, 0.006762, 0.009228};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv3_05_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.027886, -0.017589, -0.008723, -0.003043, 0.005581, 0.015099, 0.027081, 0.040961, 0.049351, 0.063924, 0.081395, 0.097965, 0.108813, 0.114558, 0.103125, 0.093272, 0.087033};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.006162, 0.002556, 0.001698, 0.001399, 0.001249, 0.001188, 0.001214, 0.001288, 0.001370, 0.001168, 0.001509, 0.002123, 0.003149, 0.003627, 0.009132, 0.018091, 0.040165};
+ Double_t _ysys[] = {0.003723, 0.002771, 0.000452, 0.000446, 0.001228, 0.001403, 0.002048, 0.002379, 0.002743, 0.003654, 0.004349, 0.005028, 0.005496, 0.005970, 0.005193, 0.006945, 0.037907};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv3_510_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.026865, -0.015319, -0.006049, 0.000713, 0.012147, 0.022344, 0.034518, 0.048523, 0.061018, 0.076231, 0.096640, 0.114272, 0.127109, 0.134074, 0.122842, 0.092986, 0.076467};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.005845, 0.002422, 0.001705, 0.001400, 0.001268, 0.001206, 0.001249, 0.001277, 0.001410, 0.001197, 0.001530, 0.002242, 0.003363, 0.003781, 0.009326, 0.017323, 0.044707};
+ Double_t _ysys[] = {0.003573, 0.003004, 0.001444, 0.002206, 0.000804, 0.001032, 0.001700, 0.002355, 0.002558, 0.003161, 0.003905, 0.004778, 0.005111, 0.005989, 0.009185, 0.005342, 0.039017};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* Lv3_3040_QC2(Int_t color=1, Int_t marker=20) {
+ Int_t _nPoints = 17;
+ Double_t _x[] = {0.700000, 0.900000, 1.100000, 1.300000, 1.500000, 1.700000, 1.900000, 2.100000, 2.300000, 2.600000, 3.000000, 3.400000, 3.800000, 4.500000, 5.500000, 7.000000, 10.000000};
+ Double_t _y[] = {-0.007458, -0.002458, 0.007903, 0.022297, 0.035848, 0.047811, 0.065085, 0.079516, 0.091341, 0.107211, 0.128847, 0.139651, 0.152615, 0.162387, 0.162078, 0.146706, 0.152210};
+ Double_t _xerr[] = {0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000};
+ Double_t _yerr[] = {0.004968, 0.002495, 0.001817, 0.001582, 0.001429, 0.001516, 0.001591, 0.001717, 0.001936, 0.001642, 0.002285, 0.003113, 0.004521, 0.004913, 0.010693, 0.018956, 0.045095};
+ Double_t _ysys[] = {0.004997, 0.002936, 0.001453, 0.000976, 0.001325, 0.002050, 0.003174, 0.002808, 0.002827, 0.003269, 0.003971, 0.004223, 0.004751, 0.004884, 0.005438, 0.010324, 0.008929};
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = 0;
+ if(!kStat) for(Int_t i=0;i!=_nPoints;++i){ _yerr[i] = 0; _xerr[i] = 0.05;}
+ if(kSyst) for(Int_t i=0;i!=_nPoints;++i) _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _ysys[i]*_ysys[i]);
+ TGraphErrors* graph = new TGraphErrors(_nPoints, _x, _y, _xerr, _yerr);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// *********************** Xi flow ************************************************************************
+
+// v2 for Xi in 5-10%
+TGraphAsymmErrors* v2Xi0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 9;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.00478264,0.0415018,0.0640852,0.0894661,0.0863706,0.120973,0.110222,0.176181,0.172742};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.0083636,0.00470284,0.00441949,0.00540378,0.00771696,0.0112068,0.0160397,0.0262699,0.0328755};
+ Double_t _yerrL[] = {0.0083636,0.00470284,0.00441949,0.00540378,0.00771696, 0.0112068,0.0160397,0.0262699,0.0328755};
+ Double_t sysErrH[] = {0.00241906,0.00874917,0.00977195,0.0133772,0.0121558,0.0153083,0.0154306,0.0269707,0.0268289};
+ Double_t sysErrL[] = {0.00245092,0.00886439,0.00977195,0.0133772,0.0121558,0.0153083,0.0154306,0.0269707,0.0268289};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2 for Xi in 10-20%
+TGraphAsymmErrors* v2Xi1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 9;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.0298374,0.0681879,0.102952,0.134715,0.161414,0.178835,0.210738,0.177071,0.160964};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.00522021,0.00310098,0.00292487,0.00356788,0.00486366,0.00762432,0.0114765,0.0186645,0.0224286};
+ Double_t _yerrL[] = {0.00522021,0.00310098,0.00292487,0.00356788,0.00486366,0.00762432,0.0114765,0.0186645,0.0224286};
+ Double_t sysErrH[] = {0.00447339,0.00880626,0.00549531,0.00735239,0.0089939,0.00965687,0.0118862,0.00935573,0.00947006};
+ Double_t sysErrL[] = {0.00466358,0.00918066,0.00549531,0.00735239,0.0089939,0.00965687,0.0118862,0.00935573,0.00947006};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2 for Xi in 20-30%
+TGraphAsymmErrors* v2Xi2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 9;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.0459866,0.098373,0.144052,0.186874,0.215865,0.228814,0.235308,0.247873,0.204186};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.00544938,0.00285116,0.00328415,0.00396176,0.00555323,0.0084036,0.0125012,0.0192451,0.023887};
+ Double_t _yerrL[] = {0.00544938,0.00285116,0.00328415,0.00396176,0.00555323,0.0084036,0.0125012,0.0192451,0.023887};
+ Double_t sysErrH[] = {0.00377003,0.0082164,0.00604054,0.00768675,0.00902968,0.00927681,0.00914397,0.0102107,0.00819201};
+ Double_t sysErrL[] = {0.00415033,0.00904521,0.0075187,0.00956775,0.0112393,0.0115469,0.0113816,0.0127093,0.0101966};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2 for Xi in 30-40%
+TGraphAsymmErrors* v2Xi3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 9;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.0696847,0.127436,0.184481,0.224152,0.236251,0.256007,0.263712,0.262631,0.216026};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.00645888,0.00417658,0.00551857,0.00668778,0.00707181,0.0104058,0.0155499,0.0230136,0.0283509};
+ Double_t _yerrL[] = {0.00645888,0.00417658,0.00551857,0.00668778,0.00707181,0.0104058,0.0155499,0.0230136,0.0283509};
+ Double_t sysErrH[] = {0.00505421,0.00985009,0.00727407,0.0089936,0.00952512,0.0104066,0.00995713,0.00941505,0.00842769};
+ Double_t sysErrL[] = {0.00768463,0.0149765,0.017209,0.0212771,0.0225345,0.02462,0.0235566,0.0222741,0.0199382};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2 for Xi in 40-50%
+TGraphAsymmErrors* v2Xi4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 9;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.108667,0.143941,0.210207,0.246373,0.261297,0.28388,0.256455,0.233381,0.232871};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.00880908,0.00592602,0.00575493,0.00739944,0.0102572,0.0151811,0.0221249,0.0321652,0.0365146};
+ Double_t _yerrL[] = {0.00880908,0.00592602,0.00575493,0.00739944,0.0102572,0.0151811,0.0221249,0.0321652,0.0365146};
+ Double_t sysErrH[] = {0.00613324,0.0075205,0.00791397,0.00895048,0.00998192,0.0109442,0.00965148,0.00990504,0.00967035};
+ Double_t sysErrL[] = {0.0180145,0.0220892,0.0320963,0.0363,0.0404832,0.0443857,0.039143,0.0401713,0.0392195};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2 for Xi in 50-60%
+TGraphAsymmErrors* v2Xi5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 9;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.119091,0.164749,0.214061,0.24545,0.250945,0.212644,0.195534,0.218019,0.190839};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.0140518,0.00994419,0.0102977,0.0130384,0.0180408,0.0258517,0.037823,0.0520584,0.0613603};
+ Double_t _yerrL[] = {0.0140518,0.00994419,0.0102977,0.0130384,0.0180408,0.0258517,0.037823,0.0520584,0.0613603};
+ Double_t sysErrH[] = {0.00481909,0.0069128,0.00797333,0.00918592,0.00972359,0.00809423,0.00807699,0.00934366,0.0119026};
+ Double_t sysErrL[] = {0.0179392,0.025733,0.0332072,0.0382574,0.0404967,0.0337108,0.0336389,0.0389143,0.0495717};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2 for Omega in 5-10%
+TGraphAsymmErrors* v2Omega0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 8;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.0235771,0.0673959,0.0958733,0.111819,0.10579,0.0908653,0.159274,0.123938};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.0320571,0.0227004,0.0261064,0.0291098,0.0344799,0.049148,0.0704155,0.0831405};
+ Double_t _yerrL[] = {0.0320571,0.0227004,0.0261064,0.0291098,0.0344799,0.049148,0.0704155,0.0831405};
+ Double_t sysErrH[] = {0.00865259,0.0128786,0.01763,0.0160203,0.0201751,0.0203363,0.0355451,0.0353583};
+ Double_t sysErrL[] = {0.00876908,0.0128786,0.01763,0.0160203,0.0201751,0.0203363,0.0355451,0.0353583};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2 for Omega in 10-20%
+TGraphAsymmErrors* v2Omega1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 8;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.0100348,0.107418,0.121454,0.137174,0.171493,0.221296,0.179937,0.217591};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.0188218,0.0151658,0.014954,0.0180363,0.0217451,0.0300963,0.0446354,0.0511276};
+ Double_t _yerrL[] = {0.0188218,0.0151658,0.014954,0.0180363,0.0217451,0.0300963,0.0446354,0.0511276};
+ Double_t sysErrH[] = {0.010783,0.010599,0.0141808,0.0173468,0.0186255,0.0229252,0.0180447,0.0182652};
+ Double_t sysErrL[] = {0.0110909,0.0109134,0.0146015,0.0178614,0.0191781,0.0236054,0.01858,0.0188071};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2 for Omega in 20-30%
+TGraphAsymmErrors* v2Omega2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 8;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.0318731,0.124177,0.182995,0.199765,0.203559,0.257703,0.219963,0.300351};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.0196181,0.0147677,0.0153109,0.0191081,0.0234568,0.0314174,0.04477,0.0510465};
+ Double_t _yerrL[] = {0.0196181,0.0147677,0.0153109,0.0191081,0.0234568,0.0314174,0.04477,0.0510465};
+ Double_t sysErrH[] = {0.00994006,0.0116037,0.014766,0.0173458,0.0178205,0.0175653,0.0196145,0.0157366};
+ Double_t sysErrL[] = {0.0106354,0.012622,0.0160618,0.0188679,0.0193843,0.0191067,0.0213357,0.0171176};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+
+// v2 for Omega in 30-40%
+TGraphAsymmErrors* v2Omega3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 8;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.0711479,0.126749,0.223198,0.244707,0.21216,0.265079,0.25481,0.248865};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.0229248,0.0179945,0.018397,0.022049,0.0283539,0.0350356,0.0575597,0.0646626};
+ Double_t _yerrL[] = {0.0229248,0.0179945,0.018397,0.022049,0.0283539,0.0350356,0.0575597,0.0646626};
+ Double_t sysErrH[] = {0.0115736,0.0140511,0.0173726,0.0183994,0.0201022,0.0192339,0.0181868,0.0162795};
+ Double_t sysErrL[] = {0.0161623,0.0211234,0.0261168,0.0276603,0.0302202,0.0289149,0.0273407,0.0244735};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2 for Omega in 40-50%
+TGraphAsymmErrors* v2Omega4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 8;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.146527,0.199316,0.212732,0.337707,0.328127,0.238654,0.327706,0.173636};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.0305757,0.0249314,0.0278559,0.0320731,0.0397579,0.0543356,0.0688925,0.0809091};
+ Double_t _yerrL[] = {0.0305757,0.0249314,0.0278559,0.0320731,0.0397579,0.0543356,0.0688925,0.0809091};
+ Double_t sysErrH[] = {0.0115225,0.0162654,0.0183957,0.0205156,0.0224933,0.0198364,0.0203575,0.0198752};
+ Double_t sysErrL[] = {0.0237517,0.0351013,0.0396986,0.0442734,0.0485414,0.0428078,0.0439324,0.0428915};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2 for Omega in 50-60%
+TGraphAsymmErrors* v2Omega5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5};
+ Double_t _y[] = {0.0778981,0.236571,0.250775,0.240466,0.254392,0.262685,0.159428};
+ Double_t _xerr[] = {0,0,0,0,0,0,0,0,0,0,0,0};
+ Double_t _yerrH[] = {0.0489679,0.044233,0.0456819,0.0582985,0.0735127,0.0952028,0.134597};
+ Double_t _yerrL[] = {0.0489679,0.044233,0.0456819,0.0582985,0.0735127,0.0952028,0.134597};
+ Double_t sysErrH[] = {0.013064,0.016725,0.0192686,0.0203964,0.0169786,0.0169424,0.0195994};
+ Double_t sysErrL[] = {0.0280191,0.0363163,0.0418393,0.0442882,0.0368669,0.0367884,0.0425577};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = 0;
+ _yerrL[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + sysErrH[i]*sysErrH[i]);
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + sysErrL[i]*sysErrL[i]);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+
+// *********************** phi meson flow ************************************************************************
+
+TGraphErrors* v2QC2Phi1060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 6;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5};
+ Double_t _y[] = {0.0435127, 0.0967571, 0.153809, 0.185704, 0.195696, 0.154209 };
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00399773, 0.00367556, 0.00406245, 0.00486993, 0.00531555, 0.00979028, 0.0168998 };
+ Double_t systPhi[] = {0.0107045, 0.0111588, 0.0171032, 0.0182152, 0.0206451, 0.0265506};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2SPPhi1060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _y[] = {0.0497706,0.125828,0.191562,0.233368,0.248731,0.197478};
+ Double_t _yerr[] = {0.00325214,0.00300283,0.00355632,0.00429377,0.00470054,0.00866158};
+ Double_t _yerr1[] = {0.00325214,0.00300283,0.00355632,0.00429377,0.00470054,0.00866158};
+ Double_t systPhi[] = {0.0108287,0.0104627,0.0161681,0.0171251,0.0196162,0.0282542};
+ Double_t syst1Phi[] ={0.0114964,0.0114986,0.0195793,0.0275249,0.0329337,0.0465338};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+
+TGraphAsymmErrors* v2QC2Phi1040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _y[] = {0.0314334,0.0834544,0.136862,0.17338,0.192154,0.152361,0.146152};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00399773, 0.00367556, 0.00406245, 0.00486993, 0.00531555, 0.00979028, 0.0168998 };
+ Double_t _yerr1[] = {0.00399773, 0.00367556, 0.00406245, 0.00486993, 0.00531555, 0.00979028, 0.0168998 };
+ Double_t systPhi[] = {0.00779561, 0.00866222, 0.0160667, 0.0175538, 0.0183183, 0.0261145, 0.0520927 };
+ Double_t syst1Phi[] = {0.00841917,0.00946453, 0.0184, 0.0249112, 0.0286591, 0.0399144, 0.0649789 };
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+
+TGraphAsymmErrors* v2SPPhi1040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _y[] = {0.0269576,0.0794705,0.13547,0.173661,0.193061,0.15142,0.146814};
+ Double_t _yerr[] = {0.00386249,0.00363086,0.00413961,0.00500739,0.00549182,0.0101523,0.0175617};
+ Double_t _yerr1[] = {0.00386249,0.00363086,0.00413961,0.00500739,0.00549182,0.0101523,0.0175617};
+ Double_t systPhi[] = {0.00819262,0.00763137,0.015061,0.0161453,0.0166553,0.0276003,0.0579412};
+ Double_t syst1Phi[] ={0.00878341,0.00855589,0.0175993,0.0239641,0.0276759,0.040985,0.0697352};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+
+
+// v2{2} for phi meson in 10-20%
+TGraphAsymmErrors* v2QC2Phi1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _y[] = {0.0150641,0.0592553,0.103549,0.136659,0.164012,0.131764,0.0942402};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00660891,0.00627844,0.00642448,0.00797092,0.00880354,0.0164602,0.0284161};
+ Double_t _yerr1[] = {0.00660891,0.00627844,0.00642448,0.00797092,0.00880354,0.0164602,0.0284161};
+ Double_t systPhi[] = {0.00397099, 0.00621952, 0.0107314, 0.0137233, 0.0183169, 0.0198932, 0.0471365};
+ Double_t syst1Phi[] = {0.00468544, 0.00691432, 0.0128854, 0.0197752, 0.0253878, 0.0314116, 0.0562815};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+
+// v2{SP} for phi meson in 10-20%
+TGraphAsymmErrors* v2SPPhi1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _y[] = {0.0117566,0.0562341,0.102551,0.136863,0.165251,0.131885,0.0927932 };
+ Double_t _yerr[] = {0.00623673,0.00608246,0.00651475,0.00818594,0.00910491,0.0171075,0.0296194 };
+ Double_t _yerr1[] = {0.00623673,0.00608246,0.00651475,0.00818594,0.00910491,0.0171075,0.0296194 };
+ Double_t systPhi[] = {0.00420059, 0.00595573, 0.0106467, 0.013754, 0.0185174, 0.0204594, 0.0511227};
+ Double_t syst1Phi[] = {0.00488155, 0.00667803, 0.012815, 0.0197966, 0.0255328, 0.0317732, 0.0596598};
+
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+
+// v2{EP} for phi meson in 10-20%
+TGraphErrors* v2EPPhi1020(Int_t color=3, Int_t marker=22, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _y[] = {0.0150641,0.0592553,0.103549,0.136659,0.164012,0.131764,0.0942402};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00660891,0.00627844,0.00642448,0.00797092,0.00880354,0.0164602,0.0284161};
+ Double_t systPhi[] = {0.00495865, 0.00618128, 0.0109778, 0.012896, 0.0177644, 0.0173466, 0.0675537};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// v2{2} for phi meson in 20-30%
+TGraphAsymmErrors* v2QC2Phi2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _y[] = {0.0403995,0.0863463,0.15077,0.188012,0.199488,0.182664,0.154738 };
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0071221,0.0067618,0.00767483,0.00899532,0.00975384,0.0169804,0.0328156 };
+ Double_t _yerr1[] = {0.0071221,0.0067618,0.00767483,0.00899532,0.00975384,0.0169804,0.0328156 };
+ Double_t systPhi[] = {0.00829679, 0.00985329, 0.0224768, 0.0177579, 0.0135778, 0.0290853, 0.049472};
+ Double_t syst1Phi[] = {0.00883775, 0.0105244, 0.0241132, 0.0248834, 0.0254462, 0.0416129, 0.0621651 };
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+
+// v2{SP} for phi meson in 20-30%
+TGraphAsymmErrors* v2SPPhi2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _y[] = {0.0366716,0.0834632,0.149996,0.189005,0.200436,0.181567,0.157942 };
+ Double_t _yerr[] = {0.00689717,0.0066824,0.00780865,0.00922471,0.0100461,0.0175647,0.0337462 };
+ Double_t _yerr1[] = {0.00689717,0.0066824,0.00780865,0.00922471,0.0100461,0.0175647,0.0337462 };
+ Double_t systPhi[] = {0.00880338, 0.0103119, 0.0232535, 0.017869, 0.0137857, 0.0331623, 0.0568229};
+ Double_t syst1Phi[] = {0.00931496, 0.010955, 0.0248389, 0.0249628, 0.0255578, 0.044558, 0.0681606};
+
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+
+// v2{EP} for phi meson in 20-30%
+TGraphErrors* v2EPPhi2030(Int_t color=3, Int_t marker=22, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _y[] = {0.0355455,0.0788878,0.14843,0.18069,0.190489,0.164176,0.131192 };
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00772047,0.00747238,0.00858801,0.0102612,0.0110171,0.0189772,0.0373178 };
+ Double_t systPhi[] = {0.00795919, 0.0114993, 0.0211859, 0.0176374, 0.017292, 0.0191694, 0.0493063};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+
+// ====================================================
+// v2{2} for phi meson in 30-40%
+TGraphAsymmErrors* v2QC2Phi3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _y[] = {0.0413533,0.104016,0.166315,0.20161,0.216033,0.14348,0.188358 };
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00707788,0.00611069,0.00718185,0.00843123,0.0091371,0.0174769,0.0273762};
+ Double_t _yerr1[] = {0.00707788,0.00611069,0.00718185,0.00843123,0.0091371,0.0174769,0.0273762};
+ Double_t systPhi[] = {0.0116873, 0.0100034, 0.0171211, 0.0216601, 0.0224799, 0.029981, 0.0585166};
+ Double_t syst1Phi[] = {0.0122882, 0.0110147, 0.0202885, 0.0306819, 0.0350024, 0.0477006, 0.0750098};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+
+// v2{SP} for phi meson in 30-40%
+TGraphAsymmErrors* v2SPPhi3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _y[] = {0.0361503,0.0998508,0.164688,0.201586,0.21652,0.141248,0.189121 };
+ Double_t _yerr[] = {0.00701879,0.00615103,0.00737338,0.0087015,0.00945538,0.0181249,0.0285779 };
+ Double_t _yerr1[] = {0.00701879,0.00615103,0.00737338,0.0087015,0.00945538,0.0181249,0.0285779 };
+ Double_t systPhi[] = {0.0126161, 0.00707381, 0.013411, 0.0173136, 0.0171892, 0.0296933, 0.0650907};
+ Double_t syst1Phi[] ={0.0131747, 0.0084436, 0.0172727, 0.0277845, 0.0318636, 0.0475204, 0.0802438 };
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+
+// v2{EP} for phi meson in 30-40%
+TGraphErrors* v2EPPhi3040(Int_t color=3, Int_t marker=22, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 7;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5, 5.5};
+ Double_t _y[] = {0.0341134,0.0980865,0.156852,0.194519,0.20455,0.14186,0.166363};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00790964,0.00696526,0.00832211,0.00974027,0.0105543,0.0203945,0.0317642};
+ Double_t systPhi[] = {0.00629562, 0.00599028, 0.0120576, 0.0139109, 0.0142922, 0.0230755, 0.0427984};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+
+// v2{2} for phi meson in 40-50%
+TGraphAsymmErrors* v2QC2Phi4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 6;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5};
+ Double_t _y[] = {0.069958,0.119243,0.202656,0.212522,0.209619,0.163328 };
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00749632,0.006472,0.00826359,0.0098238,0.0104237,0.0197831};
+ Double_t _yerr1[] = {0.00749632,0.006472,0.00826359,0.0098238,0.0104237,0.0197831};
+ Double_t systPhi[] = {0.015809, 0.0146439, 0.0220097, 0.0231634, 0.0289709, 0.0232595};
+ Double_t syst1Phi[] = {0.0165427, 0.0157946, 0.0260705, 0.0362577, 0.0450041, 0.0530007};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+// v2{SP} for phi meson in 40-50%
+TGraphAsymmErrors* v2SPPhi4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 6;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _y[] = {0.0619342,0.113185,0.20116,0.211573,0.208769,0.160066};
+ Double_t _yerr[] ={0.00762882,0.00666748,0.00862832,0.0102957,0.0109352,0.020797};
+ Double_t _yerr1[] ={0.00762882,0.00666748,0.00862832,0.0102957,0.0109352,0.020797};
+ Double_t systPhi[] = {0.0161593, 0.0144677, 0.0219467, 0.0231281, 0.0294595, 0.0237431};
+ Double_t syst1Phi[] ={0.0168778, 0.0156313, 0.0260173, 0.0362352, 0.0453202, 0.0532147};
+
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+
+// v2{2} for phi meson in 50-60%
+TGraphAsymmErrors* v2QC2Phi5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 6;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5};
+ Double_t _y[] = {0.0681429,0.127928,0.190599,0.227551,0.195058,0.151621 };
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00929287,0.00834279,0.0108673,0.0131563,0.0150857,0.0253655};
+ Double_t _yerr1[] = {0.00929287,0.00834279,0.0108673,0.0131563,0.0150857,0.0253655};
+ Double_t systPhi[] = {0.018578, 0.0182298, 0.0160349, 0.0141674, 0.0219474, 0.0348885 };
+ Double_t syst1Phi[] = {0.0196864, 0.0198723, 0.0246167, 0.0398876, 0.0509999, 0.072594};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+// v2{SP} for phi meson in 50-60%
+TGraphAsymmErrors* v2SPPhi5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 6;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.9, 1.5, 2.1, 2.7, 3.5, 4.5};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _y[] = {0.0527229,0.117624,0.185003,0.225434,0.190129,0.142005};
+ Double_t _yerr[] = {0.00983516,0.00892543,0.0117201,0.0142501,0.016352,0.0275762};
+ Double_t _yerr1[] = {0.00983516,0.00892543,0.0117201,0.0142501,0.016352,0.0275762};
+ Double_t systPhi[] = {0.0190608, 0.020395, 0.0143803, 0.0135605, 0.0238556, 0.0410104};
+ Double_t syst1Phi[] ={0.0201427, 0.0218755, 0.0235725, 0.0396761, 0.0518497, 0.0757267};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr1[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = systPhi[i];
+ Float_t systerr1 = syst1Phi[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr1[i] = TMath::Sqrt(_yerr1[i]*_yerr1[i] + systerr1*systerr1);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+ TGraphAsymmErrors* graph1 = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr1[first],&_yerr[first]);
+ graph1->SetLineColor(color);
+ graph1->SetMarkerColor(color);
+ graph1->SetMarkerStyle(marker);
+ return graph1;
+}
+//************************ phi meson flow END *******************************************************************************************
+
+
+TGraphAsymmErrors* v2Pion0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.00824246, 0.0104024, 0.0129201, 0.0151121, 0.0175799, 0.0201892, 0.0226423, 0.0267943, 0.0305399, 0.0336959, 0.0375974, 0.0402311, 0.0433197, 0.0458848, 0.0478647, 0.0497621, 0.0523315, 0.0544167, 0.0563532, 0.0548481, 0.0567523, 0.0601806, 0.0608681, 0.0608455, 0.061474, 0.0584937, 0.0615577, 0.0570016, 0.057145, 0.0422802, 0.0320468, 0.035704, 0.0288706, 0.0226647, 0.0400384, 0.0106084, 0.0443823, 0.0543296, -0.0050952, 0.0338315, 0.028349};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000133001, 0.000130299, 0.000131827, 0.000135471, 0.000140745, 0.000147232, 0.000166315, 0.000177255, 0.000194932, 0.000216528, 0.000242008, 0.000271456, 0.000304427, 0.000342121, 0.00038542, 0.000435245, 0.000493359, 0.000558285, 0.000632774, 0.000717061, 0.00081164, 0.000633477, 0.000853291, 0.00113628, 0.001482, 0.00191709, 0.00243193, 0.00305123, 0.0037621, 0.00352847, 0.0049445, 0.00658436, 0.00840823, 0.010414, 0.012692, 0.0113534, 0.0153486, 0.0197452, 0.0192072, 0.0251356, 0.0357553};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0.000133001, 0.000130299, 0.000131827, 0.000135471, 0.000140745, 0.000147232, 0.000166315, 0.000177255, 0.000194932, 0.000216528, 0.000242008, 0.000271456, 0.000304427, 0.000342121, 0.00038542, 0.000435245, 0.000493359, 0.000558285, 0.000632774, 0.000717061, 0.00081164, 0.000633477, 0.000853291, 0.00113628, 0.001482, 0.00191709, 0.00243193, 0.00305123, 0.0037621, 0.00352847, 0.0049445, 0.00658436, 0.00840823, 0.010414, 0.012692, 0.0113534, 0.0153486, 0.0197452, 0.0192072, 0.0251356, 0.0357553};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.23867300000000003e-03;
+ Float_t pol1 = 6.71160999999999980e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(0, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphAsymmErrors* v2Kaon0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.00134701, 0.00317163, 0.0031598, 0.00390976, 0.00703514, 0.0114981, 0.013297, 0.0192762, 0.0226932, 0.0285625, 0.0326775, 0.0361104, 0.0381141, 0.0414397, 0.0461846, 0.0489079, 0.0510579, 0.053841, 0.0571077, 0.056352, 0.0609899, 0.0638829, 0.0650988, 0.0588761, 0.0665654, 0.0715115, 0.0578553, 0.0541069, 0.0748944, 0.0532155, 0.0590017, 0.0630081, 0.0316938, 0.0783863, 0.263692, 0.128943, 0.286008, 0.13549, -0.199536, 0.342328};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.000987431, 0.000805962, 0.000767625, 0.000932952, 0.00134873, 0.000760668, 0.00064691, 0.000599764, 0.00058296, 0.000590131, 0.000608036, 0.000638975, 0.000678305, 0.000727843, 0.000792013, 0.000861015, 0.000949487, 0.00105108, 0.00116845, 0.00130555, 0.00100112, 0.00134176, 0.00180046, 0.00244084, 0.00325403, 0.00431594, 0.00572013, 0.00755246, 0.00794723, 0.0139484, 0.0246449, 0.0407051, 0.0661392, 0.0996223, 0.128813, 0.245527, 0.355049, 0.312221, 0.442529, 0.973744};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0.000987431, 0.000805962, 0.000767625, 0.000932952, 0.00134873, 0.000760668, 0.00064691, 0.000599764, 0.00058296, 0.000590131, 0.000608036, 0.000638975, 0.000678305, 0.000727843, 0.000792013, 0.000861015, 0.000949487, 0.00105108, 0.00116845, 0.00130555, 0.00100112, 0.00134176, 0.00180046, 0.00244084, 0.00325403, 0.00431594, 0.00572013, 0.00755246, 0.00794723, 0.0139484, 0.0246449, 0.0407051, 0.0661392, 0.0996223, 0.128813, 0.245527, 0.355049, 0.312221, 0.442529, 0.973744};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.23867300000000003e-03;
+ Float_t pol1 = 6.71160999999999980e-04;
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(0, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Antiproton0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.00268584, 0.000878408, 0.00217129, 0.00143351, 0.00322161, 0.00453038, 0.00681432, 0.00762821, 0.0112393, 0.013895, 0.0172801, 0.021795, 0.026308, 0.0281495, 0.0325376, 0.0381697, 0.0407043, 0.0433402, 0.0510857, 0.052863, 0.0633415, 0.0675941, 0.0756583, 0.0766736, 0.0811324, 0.0861403, 0.0740058, 0.0820468, 0.0858504, 0.0493029, 0.0626479, 0.0850436, 0.138466, 0.0540207, -0.151327, 0.0230493, -0.0698608, -0.418291, -0.24384};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00320162, 0.00255264, 0.00209768, 0.00182089, 0.00111836, 0.000987526, 0.00135817, 0.00123459, 0.00116575, 0.0011279, 0.00110913, 0.00110802, 0.00112118, 0.00115314, 0.00119301, 0.00125462, 0.00133187, 0.00142342, 0.00153028, 0.00110658, 0.00137104, 0.00172252, 0.00218898, 0.00193816, 0.00251692, 0.00327637, 0.0042846, 0.00444436, 0.00754896, 0.0122858, 0.0193753, 0.0297557, 0.0469546, 0.0523895, 0.0995941, 0.179351, 0.229041, 0.222489, 0.288131};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0, 0.00320162, 0.00255264, 0.00209768, 0.00182089, 0.00111836, 0.000987526, 0.00135817, 0.00123459, 0.00116575, 0.0011279, 0.00110913, 0.00110802, 0.00112118, 0.00115314, 0.00119301, 0.00125462, 0.00133187, 0.00142342, 0.00153028, 0.00110658, 0.00137104, 0.00172252, 0.00218898, 0.00193816, 0.00251692, 0.00327637, 0.0042846, 0.00444436, 0.00754896, 0.0122858, 0.0193753, 0.0297557, 0.0469546, 0.0523895, 0.0995941, 0.179351, 0.229041, 0.222489, 0.288131};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.69829837126647719e-03;
+ Float_t pol1 = 1.21632530760273721e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(0, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Pion0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.0137263, 0.0172372, 0.0214492, 0.0254373, 0.029454, 0.0333164, 0.0379873, 0.0447695, 0.0512336, 0.0575635, 0.0629713, 0.0682518, 0.0737371, 0.0779552, 0.0820896, 0.0861183, 0.0897984, 0.0936959, 0.0968309, 0.0985123, 0.102473, 0.105277, 0.107769, 0.110146, 0.109389, 0.10991, 0.105635, 0.106773, 0.101545, 0.0922347, 0.0793453, 0.077956, 0.0672527, 0.0487211, 0.0664732, 0.0510957, 0.0581614, 0.0307352, 0.0329276, 0.0530418, 0.0541353};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000103947, 0.000102006, 0.000103226, 0.000106107, 0.000110274, 0.000115385, 0.000129675, 0.000138283, 0.000152102, 0.00016898, 0.000188771, 0.000211627, 0.000237187, 0.000266274, 0.000299556, 0.000337933, 0.0003821, 0.000431893, 0.000488473, 0.000552876, 0.000625098, 0.000486471, 0.000652335, 0.000863765, 0.00112109, 0.001441, 0.00182259, 0.00226753, 0.00279327, 0.0025993, 0.00362121, 0.00481019, 0.00607083, 0.00754175, 0.00920136, 0.00840368, 0.0113048, 0.0143551, 0.0142097, 0.0190686, 0.0262873};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0.000103947, 0.000102006, 0.000103226, 0.000106107, 0.000110274, 0.000115385, 0.000129675, 0.000138283, 0.000152102, 0.00016898, 0.000188771, 0.000211627, 0.000237187, 0.000266274, 0.000299556, 0.000337933, 0.0003821, 0.000431893, 0.000488473, 0.000552876, 0.000625098, 0.000486471, 0.000652335, 0.000863765, 0.00112109, 0.001441, 0.00182259, 0.00226753, 0.00279327, 0.0025993, 0.00362121, 0.00481019, 0.00607083, 0.00754175, 0.00920136, 0.00840368, 0.0113048, 0.0143551, 0.0142097, 0.0190686, 0.0262873};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.34651999999999992e-03;
+ Float_t pol1 = 7.29597999999999922e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(1, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Kaon0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.00444172, 0.00461262, 0.00605512, 0.00803394, 0.0115242, 0.0168087, 0.0236315, 0.0320238, 0.0387647, 0.0459735, 0.0531368, 0.0608119, 0.0661568, 0.0723506, 0.0772225, 0.0821846, 0.0838383, 0.0900321, 0.093199, 0.0960424, 0.103874, 0.11007, 0.116071, 0.12213, 0.117554, 0.119993, 0.105736, 0.113478, 0.0964476, 0.106342, 0.110875, 0.139353, 0.158666, 0.215898, 0.104821, 0.0470767, -0.170325, -0.442802, -0.282548, -1.62346};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.000768421, 0.000626958, 0.000596685, 0.000720582, 0.00104589, 0.000591218, 0.000503924, 0.000467582, 0.000455346, 0.000460641, 0.000474365, 0.000497623, 0.000527587, 0.000565326, 0.000614276, 0.000666982, 0.000734439, 0.000811081, 0.00089994, 0.00100514, 0.000767714, 0.00102462, 0.00136677, 0.00184566, 0.00244838, 0.00323692, 0.00423034, 0.0056044, 0.00581909, 0.0101702, 0.0175893, 0.029834, 0.0477719, 0.0717025, 0.0865885, 0.161362, 0.234659, 0.209886, 0.275306, 0.161189};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0.000768421, 0.000626958, 0.000596685, 0.000720582, 0.00104589, 0.000591218, 0.000503924, 0.000467582, 0.000455346, 0.000460641, 0.000474365, 0.000497623, 0.000527587, 0.000565326, 0.000614276, 0.000666982, 0.000734439, 0.000811081, 0.00089994, 0.00100514, 0.000767714, 0.00102462, 0.00136677, 0.00184566, 0.00244838, 0.00323692, 0.00423034, 0.0056044, 0.00581909, 0.0101702, 0.0175893, 0.029834, 0.0477719, 0.0717025, 0.0865885, 0.161362, 0.234659, 0.209886, 0.275306, 0.161189};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.34651999999999992e-03;
+ Float_t pol1 = 7.29597999999999922e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(1, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Antiproton0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, -0.00246409, 0.00296217, 0.00441478, 0.00368168, 0.00503813, 0.0066585, 0.0104877, 0.0131502, 0.0179621, 0.0259345, 0.0298481, 0.0373793, 0.0422295, 0.0498634, 0.0559304, 0.0645674, 0.0691012, 0.077218, 0.0842499, 0.0947646, 0.10716, 0.122472, 0.132405, 0.133811, 0.140163, 0.148689, 0.147146, 0.144192, 0.135299, 0.129794, 0.137321, 0.121362, 0.0528114, 0.0732102, 0.0807746, -0.00812459, -0.0918688, -0.121837, 0.123071};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00245065, 0.00195951, 0.00161286, 0.00140387, 0.000861586, 0.000761485, 0.00104237, 0.00095234, 0.000900714, 0.000872152, 0.000860265, 0.000859144, 0.000872256, 0.000897719, 0.00093013, 0.000978436, 0.00103962, 0.00111159, 0.00119467, 0.000863984, 0.00106895, 0.00134145, 0.00170067, 0.00149682, 0.00193438, 0.00250201, 0.0032605, 0.00335482, 0.00558796, 0.00920953, 0.0145869, 0.0223702, 0.0344418, 0.0392677, 0.0736332, 0.147416, 0.17009, 0.225622, 0.217007};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0, 0.00245065, 0.00195951, 0.00161286, 0.00140387, 0.000861586, 0.000761485, 0.00104237, 0.00095234, 0.000900714, 0.000872152, 0.000860265, 0.000859144, 0.000872256, 0.000897719, 0.00093013, 0.000978436, 0.00103962, 0.00111159, 0.00119467, 0.000863984, 0.00106895, 0.00134145, 0.00170067, 0.00149682, 0.00193438, 0.00250201, 0.0032605, 0.00335482, 0.00558796, 0.00920953, 0.0145869, 0.0223702, 0.0344418, 0.0392677, 0.0736332, 0.147416, 0.17009, 0.225622, 0.217007};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.84616637865581655e-03;
+ Float_t pol1 = 1.32222872399611561e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(1, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Pion1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.0201224, 0.0252062, 0.0311323, 0.0369631, 0.0428155, 0.0483589, 0.0550696, 0.0651319, 0.0746561, 0.0834061, 0.0919292, 0.0993882, 0.106362, 0.11341, 0.119441, 0.125327, 0.130489, 0.135768, 0.140111, 0.1436, 0.147624, 0.15197, 0.157217, 0.15934, 0.159981, 0.157703, 0.15448, 0.151198, 0.142915, 0.132599, 0.113408, 0.10271, 0.0943079, 0.0879974, 0.0790374, 0.0795734, 0.0614621, 0.067106, 0.0609654, 0.0515049, 0.0223675};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 7.16967e-05, 7.04768e-05, 7.14158e-05, 7.34838e-05, 7.64088e-05, 8.00149e-05, 8.9464e-05, 9.55187e-05, 0.000105152, 0.000116857, 0.000130562, 0.000146276, 0.000163809, 0.000183749, 0.00020652, 0.000232603, 0.000262503, 0.000296109, 0.000334244, 0.000377637, 0.00042637, 0.00033071, 0.000441212, 0.000580034, 0.000749139, 0.000958424, 0.00120529, 0.00149142, 0.00182397, 0.0016818, 0.00233162, 0.00308243, 0.00393626, 0.00487286, 0.0058437, 0.00539979, 0.00725315, 0.00952612, 0.0093786, 0.0123107, 0.0176851};
+ Double_t _yerr2[] = {0, 0, 0, 0, 7.16967e-05, 7.04768e-05, 7.14158e-05, 7.34838e-05, 7.64088e-05, 8.00149e-05, 8.9464e-05, 9.55187e-05, 0.000105152, 0.000116857, 0.000130562, 0.000146276, 0.000163809, 0.000183749, 0.00020652, 0.000232603, 0.000262503, 0.000296109, 0.000334244, 0.000377637, 0.00042637, 0.00033071, 0.000441212, 0.000580034, 0.000749139, 0.000958424, 0.00120529, 0.00149142, 0.00182397, 0.0016818, 0.00233162, 0.00308243, 0.00393626, 0.00487286, 0.0058437, 0.00539979, 0.00725315, 0.00952612, 0.0093786, 0.0123107, 0.0176851};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 7.36284000000000027e-04;
+ Float_t pol1 = 8.43209000000000037e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(2, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Kaon1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.00640075, 0.00890777, 0.0114231, 0.0121152, 0.0193763, 0.0262718, 0.0373136, 0.04773, 0.0585364, 0.0685442, 0.0781197, 0.0884599, 0.0959829, 0.104197, 0.110977, 0.118551, 0.124407, 0.130268, 0.137113, 0.141952, 0.149588, 0.158874, 0.165006, 0.168625, 0.168325, 0.16697, 0.173543, 0.161645, 0.15523, 0.14532, 0.128752, 0.142204, 0.0843617, 0.269387, 0.0231167, 0.431226, 0.0167267, 0.315711, 0.235569, -0.000340595};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.000525284, 0.000429881, 0.000408989, 0.000491132, 0.000713549, 0.000405664, 0.000346767, 0.000322585, 0.000314851, 0.000318631, 0.00032842, 0.000344056, 0.000364314, 0.00039006, 0.000423204, 0.000459161, 0.000504151, 0.000555309, 0.000614542, 0.000683822, 0.000519796, 0.000688975, 0.00091857, 0.00122243, 0.00160751, 0.00211499, 0.00275193, 0.0035775, 0.00370145, 0.00631253, 0.0106874, 0.0182738, 0.0313279, 0.0476483, 0.0611653, 0.106198, 0.207285, 0.182173, 0.191574, 0.224581};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0.000525284, 0.000429881, 0.000408989, 0.000491132, 0.000713549, 0.000405664, 0.000346767, 0.000322585, 0.000314851, 0.000318631, 0.00032842, 0.000344056, 0.000364314, 0.00039006, 0.000423204, 0.000459161, 0.000504151, 0.000555309, 0.000614542, 0.000683822, 0.000519796, 0.000688975, 0.00091857, 0.00122243, 0.00160751, 0.00211499, 0.00275193, 0.0035775, 0.00370145, 0.00631253, 0.0106874, 0.0182738, 0.0313279, 0.0476483, 0.0611653, 0.106198, 0.207285, 0.182173, 0.191574, 0.224581};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 7.36284000000000027e-04;
+ Float_t pol1 = 8.43209000000000037e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(2, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Antiproton1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.00514464, 0.00344225, 0.00468868, 0.00546, 0.0082079, 0.012222, 0.0165934, 0.0233094, 0.0288221, 0.0374016, 0.0454486, 0.0563712, 0.064759, 0.075207, 0.0867709, 0.0963642, 0.106439, 0.116716, 0.12656, 0.138558, 0.157754, 0.173931, 0.185026, 0.199048, 0.206145, 0.208087, 0.213577, 0.213699, 0.21574, 0.192142, 0.152677, 0.172787, 0.122158, 0.11594, 0.170479, 0.143031, 0.0113144, 0.188084, 0.909081};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00163153, 0.00131053, 0.00108878, 0.000950215, 0.000582294, 0.000516432, 0.000703097, 0.000643592, 0.000611608, 0.000594501, 0.000588832, 0.000590229, 0.000600458, 0.000619565, 0.00064412, 0.00067877, 0.000720346, 0.000770869, 0.000828332, 0.000600635, 0.000741676, 0.000928701, 0.00116982, 0.00102807, 0.00131593, 0.00169927, 0.00218807, 0.00222766, 0.00363962, 0.00585315, 0.00929629, 0.013941, 0.020436, 0.0231194, 0.046922, 0.0895645, 0.111115, 0.118019, 0.100696};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0, 0.00163153, 0.00131053, 0.00108878, 0.000950215, 0.000582294, 0.000516432, 0.000703097, 0.000643592, 0.000611608, 0.000594501, 0.000588832, 0.000590229, 0.000600458, 0.000619565, 0.00064412, 0.00067877, 0.000720346, 0.000770869, 0.000828332, 0.000600635, 0.000741676, 0.000928701, 0.00116982, 0.00102807, 0.00131593, 0.00169927, 0.00218807, 0.00222766, 0.00363962, 0.00585315, 0.00929629, 0.013941, 0.020436, 0.0231194, 0.046922, 0.0895645, 0.111115, 0.118019, 0.100696};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.13364693747489361e-03;
+ Float_t pol1 = 1.52812297971200361e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(2, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Pion2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.0264906, 0.0328913, 0.0406349, 0.0482191, 0.0559519, 0.063266, 0.072363, 0.0854648, 0.0978324, 0.109596, 0.120324, 0.130441, 0.139475, 0.147956, 0.1559, 0.163043, 0.169642, 0.176537, 0.180972, 0.185598, 0.189913, 0.1954, 0.201295, 0.202612, 0.200368, 0.197602, 0.193443, 0.185868, 0.174288, 0.163585, 0.148547, 0.135952, 0.126668, 0.106048, 0.112211, 0.0935685, 0.100671, 0.080048, 0.0687841, 0.0681896, 0.0283596};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 8.33757e-05, 8.2413e-05, 8.37108e-05, 8.6308e-05, 8.99009e-05, 9.42972e-05, 0.000104942, 0.000112303, 0.000123869, 0.000137888, 0.000154129, 0.000172772, 0.00019344, 0.000216903, 0.000243535, 0.000274009, 0.000308524, 0.000347492, 0.000391614, 0.000441228, 0.000496805, 0.000384006, 0.000509506, 0.000665912, 0.000855374, 0.00107254, 0.0013387, 0.00164823, 0.00200117, 0.00183046, 0.00250297, 0.00330227, 0.00420942, 0.00522087, 0.00628707, 0.00569617, 0.00777439, 0.0102038, 0.00997685, 0.013336, 0.0187935};
+ Double_t _yerr2[] = {0, 0, 0, 0, 8.33757e-05, 8.2413e-05, 8.37108e-05, 8.6308e-05, 8.99009e-05, 9.42972e-05, 0.000104942, 0.000112303, 0.000123869, 0.000137888, 0.000154129, 0.000172772, 0.00019344, 0.000216903, 0.000243535, 0.000274009, 0.000308524, 0.000347492, 0.000391614, 0.000441228, 0.000496805, 0.000384006, 0.000509506, 0.000665912, 0.000855374, 0.00107254, 0.0013387, 0.00164823, 0.00200117, 0.00183046, 0.00250297, 0.00330227, 0.00420942, 0.00522087, 0.00628707, 0.00569617, 0.00777439, 0.0102038, 0.00997685, 0.013336, 0.0187935};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.90101399999999992e-03;
+ Float_t pol1 = 1.03004500000000005e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(3, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Kaon2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.0100568, 0.0124986, 0.0168451, 0.0175805, 0.0283886, 0.0371263, 0.0509478, 0.0644455, 0.0780852, 0.0932833, 0.104516, 0.115791, 0.127519, 0.137186, 0.146611, 0.155235, 0.161983, 0.169526, 0.174815, 0.182918, 0.190393, 0.199666, 0.204089, 0.206915, 0.210964, 0.20384, 0.199675, 0.195183, 0.176372, 0.172127, 0.137577, 0.149046, 0.183246, 0.155882, 0.0653847, -0.00956166, 0.314558, 0.285004, -0.0182406, 0.30176};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00060424, 0.000495522, 0.000474726, 0.000575723, 0.000823512, 0.000470094, 0.000404114, 0.0003779, 0.000371012, 0.000376148, 0.000388761, 0.000407363, 0.000431318, 0.000462215, 0.000501103, 0.000543433, 0.00059585, 0.0006553, 0.000723921, 0.000804308, 0.000610234, 0.000801757, 0.00105659, 0.00139631, 0.00186122, 0.00243238, 0.00315255, 0.00411179, 0.00426523, 0.00727213, 0.0126056, 0.0218825, 0.03676, 0.0584615, 0.0738541, 0.148133, 0.190062, 0.255908, 0.221697, 0.310706};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0.00060424, 0.000495522, 0.000474726, 0.000575723, 0.000823512, 0.000470094, 0.000404114, 0.0003779, 0.000371012, 0.000376148, 0.000388761, 0.000407363, 0.000431318, 0.000462215, 0.000501103, 0.000543433, 0.00059585, 0.0006553, 0.000723921, 0.000804308, 0.000610234, 0.000801757, 0.00105659, 0.00139631, 0.00186122, 0.00243238, 0.00315255, 0.00411179, 0.00426523, 0.00727213, 0.0126056, 0.0218825, 0.03676, 0.0584615, 0.0738541, 0.148133, 0.190062, 0.255908, 0.221697, 0.310706};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.90101399999999992e-03;
+ Float_t pol1 = 1.03004500000000005e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(3, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Antiproton2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.0055522, 0.00689601, 0.00484755, 0.00818012, 0.0119217, 0.0176936, 0.0247658, 0.0330758, 0.0432781, 0.0555955, 0.0660769, 0.0792523, 0.0923913, 0.105875, 0.118953, 0.130771, 0.144687, 0.157169, 0.167856, 0.184878, 0.207554, 0.228001, 0.243, 0.25184, 0.262881, 0.265347, 0.264864, 0.266241, 0.261999, 0.254697, 0.223834, 0.22018, 0.135383, 0.162749, 0.148328, 0.165155, 0.256436, -0.0440721, 0.430871};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00181005, 0.0014695, 0.00122215, 0.00107081, 0.000656891, 0.000584984, 0.00079404, 0.000732572, 0.000699401, 0.000684536, 0.000681312, 0.00068764, 0.00070337, 0.000728803, 0.000762285, 0.000804511, 0.0008565, 0.000919188, 0.000989172, 0.000718546, 0.000889519, 0.00111315, 0.00139867, 0.00121871, 0.00155384, 0.0019896, 0.00255073, 0.00256814, 0.00413703, 0.00660142, 0.0100799, 0.0156344, 0.0222041, 0.0265145, 0.0477444, 0.102528, 0.104764, 0.134924, 0.17457};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0, 0.00181005, 0.0014695, 0.00122215, 0.00107081, 0.000656891, 0.000584984, 0.00079404, 0.000732572, 0.000699401, 0.000684536, 0.000681312, 0.00068764, 0.00070337, 0.000728803, 0.000762285, 0.000804511, 0.0008565, 0.000919188, 0.000989172, 0.000718546, 0.000889519, 0.00111315, 0.00139867, 0.00121871, 0.00155384, 0.0019896, 0.00255073, 0.00256814, 0.00413703, 0.00660142, 0.0100799, 0.0156344, 0.0222041, 0.0265145, 0.0477444, 0.102528, 0.104764, 0.134924, 0.17457};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.60641395006084133e-03;
+ Float_t pol1 = 1.86671983155921230e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(3, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Pion3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.0297602, 0.0376167, 0.0463315, 0.0556559, 0.0642205, 0.0730444, 0.0836154, 0.0989402, 0.113114, 0.126486, 0.139145, 0.150305, 0.16061, 0.170721, 0.178498, 0.186109, 0.194151, 0.198377, 0.205201, 0.208348, 0.213488, 0.218346, 0.22189, 0.223529, 0.221045, 0.21347, 0.209264, 0.200217, 0.187252, 0.17979, 0.166723, 0.151286, 0.135703, 0.131906, 0.124924, 0.120519, 0.098863, 0.109076, 0.0705744, 0.0527536, 0.0317052};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000109358, 0.000107746, 0.000109743, 0.000113428, 0.000118448, 0.000124546, 0.000138355, 0.000148586, 0.000164345, 0.000183373, 0.000205473, 0.000230642, 0.000258532, 0.000289823, 0.000325585, 0.000365999, 0.000411749, 0.000463224, 0.000521013, 0.000585997, 0.000658582, 0.000506735, 0.000667446, 0.000864468, 0.0011026, 0.00137946, 0.00170617, 0.00207612, 0.00250699, 0.00227451, 0.00308872, 0.00405663, 0.0051683, 0.00635124, 0.00778926, 0.00704853, 0.00964995, 0.0125646, 0.0127765, 0.0168288, 0.0240879};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0.000109358, 0.000107746, 0.000109743, 0.000113428, 0.000118448, 0.000124546, 0.000138355, 0.000148586, 0.000164345, 0.000183373, 0.000205473, 0.000230642, 0.000258532, 0.000289823, 0.000325585, 0.000365999, 0.000411749, 0.000463224, 0.000521013, 0.000585997, 0.000658582, 0.000506735, 0.000667446, 0.000864468, 0.0011026, 0.00137946, 0.00170617, 0.00207612, 0.00250699, 0.00227451, 0.00308872, 0.00405663, 0.0051683, 0.00635124, 0.00778926, 0.00704853, 0.00964995, 0.0125646, 0.0127765, 0.0168288, 0.0240879};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.36398699999999969e-03;
+ Float_t pol1 = 1.28090200000000000e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(4, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Kaon3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.0118116, 0.0163667, 0.0202925, 0.0260998, 0.0355875, 0.0478286, 0.0614344, 0.0776, 0.0945835, 0.110036, 0.123176, 0.137558, 0.147839, 0.158324, 0.168516, 0.177569, 0.186743, 0.193229, 0.197969, 0.205318, 0.211439, 0.22, 0.224539, 0.224465, 0.223164, 0.217814, 0.215515, 0.207766, 0.195001, 0.178179, 0.19419, 0.165809, 0.177231, 0.135574, 0.0795671, 0.0127847, 0.0560518, -0.21127, -0.236194, -0.389479};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.000774866, 0.000639173, 0.000617921, 0.000754178, 0.00106575, 0.00061229, 0.000529924, 0.000498954, 0.000492243, 0.000501011, 0.000520013, 0.000546239, 0.000579176, 0.000621522, 0.000674318, 0.00073272, 0.000802985, 0.000882957, 0.000973762, 0.00107984, 0.000815824, 0.00106284, 0.00138328, 0.00179768, 0.00234626, 0.00300534, 0.00382029, 0.00482682, 0.00474745, 0.00752479, 0.0117531, 0.0179539, 0.0272536, 0.0425466, 0.0499865, 0.0932052, 0.144085, 0.200123, 0.562735, 0.572957};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0.000774866, 0.000639173, 0.000617921, 0.000754178, 0.00106575, 0.00061229, 0.000529924, 0.000498954, 0.000492243, 0.000501011, 0.000520013, 0.000546239, 0.000579176, 0.000621522, 0.000674318, 0.00073272, 0.000802985, 0.000882957, 0.000973762, 0.00107984, 0.000815824, 0.00106284, 0.00138328, 0.00179768, 0.00234626, 0.00300534, 0.00382029, 0.00482682, 0.00474745, 0.00752479, 0.0117531, 0.0179539, 0.0272536, 0.0425466, 0.0499865, 0.0932052, 0.144085, 0.200123, 0.562735, 0.572957};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.36398699999999969e-03;
+ Float_t pol1 = 1.28090200000000000e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(4, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Antiproton3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.0134608, 0.00872409, 0.0100999, 0.0141023, 0.0197051, 0.0258617, 0.0336928, 0.0463434, 0.0576032, 0.0717588, 0.0843552, 0.100229, 0.116334, 0.129007, 0.147308, 0.163198, 0.172034, 0.189326, 0.202834, 0.216141, 0.244193, 0.259947, 0.279023, 0.284821, 0.291713, 0.296845, 0.287988, 0.283412, 0.260332, 0.250927, 0.227238, 0.208844, 0.19487, 0.168319, 0.125243, 0.249898, 0.220953, 0.359189, 0.46984};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00223486, 0.00181593, 0.00152581, 0.00133558, 0.000823213, 0.000739234, 0.00100455, 0.000930685, 0.000897515, 0.000884604, 0.000889995, 0.00090428, 0.00093094, 0.000969855, 0.00101916, 0.00108241, 0.00115601, 0.00124551, 0.0013468, 0.000981188, 0.00121854, 0.00152492, 0.00192614, 0.00166776, 0.00212082, 0.00269735, 0.00344015, 0.00344034, 0.00548854, 0.00841199, 0.0127197, 0.0186227, 0.0259636, 0.0277095, 0.0473207, 0.0821222, 0.104711, 0.170825, 0.259822};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0, 0.00223486, 0.00181593, 0.00152581, 0.00133558, 0.000823213, 0.000739234, 0.00100455, 0.000930685, 0.000897515, 0.000884604, 0.000889995, 0.00090428, 0.00093094, 0.000969855, 0.00101916, 0.00108241, 0.00115601, 0.00124551, 0.0013468, 0.000981188, 0.00121854, 0.00152492, 0.00192614, 0.00166776, 0.00212082, 0.00269735, 0.00344015, 0.00344034, 0.00548854, 0.00841199, 0.0127197, 0.0186227, 0.0259636, 0.0277095, 0.0473207, 0.0821222, 0.104711, 0.170825, 0.259822};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 3.24118098903184706e-03;
+ Float_t pol1 = 2.32134148520698243e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(4, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Pion4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.0312325, 0.0393881, 0.0492528, 0.0594062, 0.0688574, 0.0779215, 0.0897294, 0.105849, 0.121535, 0.13572, 0.148727, 0.160756, 0.17149, 0.180516, 0.189661, 0.196275, 0.203114, 0.209617, 0.21372, 0.217062, 0.222655, 0.223982, 0.227325, 0.224833, 0.220611, 0.215738, 0.206053, 0.199035, 0.194861, 0.178505, 0.15725, 0.147485, 0.131276, 0.140082, 0.129746, 0.119138, 0.0962541, 0.110656, 0.103842, 0.107556, 0.0562334};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000160203, 0.000158458, 0.000161984, 0.000167948, 0.000175992, 0.000185633, 0.000206362, 0.000222676, 0.000247387, 0.000276984, 0.000311291, 0.000350389, 0.000393386, 0.000441718, 0.000496267, 0.000558361, 0.000627807, 0.000705629, 0.00079231, 0.000890586, 0.000997622, 0.0007646, 0.000999208, 0.00128014, 0.00161834, 0.00199908, 0.00245428, 0.00297957, 0.00354308, 0.00320161, 0.00431837, 0.00563286, 0.0070497, 0.00882622, 0.010657, 0.00970365, 0.0132692, 0.0175344, 0.0174432, 0.0233582, 0.0345269};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0.000160203, 0.000158458, 0.000161984, 0.000167948, 0.000175992, 0.000185633, 0.000206362, 0.000222676, 0.000247387, 0.000276984, 0.000311291, 0.000350389, 0.000393386, 0.000441718, 0.000496267, 0.000558361, 0.000627807, 0.000705629, 0.00079231, 0.000890586, 0.000997622, 0.0007646, 0.000999208, 0.00128014, 0.00161834, 0.00199908, 0.00245428, 0.00297957, 0.00354308, 0.00320161, 0.00431837, 0.00563286, 0.0070497, 0.00882622, 0.010657, 0.00970365, 0.0132692, 0.0175344, 0.0174432, 0.0233582, 0.0345269};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 3.02312299999999996e-03;
+ Float_t pol1 = 1.63804399999999996e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(5, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Kaon4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.0164446, 0.0194303, 0.025841, 0.0330678, 0.0434366, 0.0534827, 0.0699271, 0.0880427, 0.105501, 0.120385, 0.132267, 0.146892, 0.157761, 0.169855, 0.180112, 0.188618, 0.197751, 0.199262, 0.20814, 0.212515, 0.220558, 0.221804, 0.22802, 0.229711, 0.218398, 0.217427, 0.212665, 0.192197, 0.187403, 0.150519, 0.199072, 0.150158, 0.0439847, 0.228831, 0.226831, 0.0184782, -0.116235, -0.368718, 0.9956, 0.0201774};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00111871, 0.000922607, 0.000885857, 0.00106002, 0.00155242, 0.000899587, 0.000786825, 0.000747841, 0.000742576, 0.000760796, 0.000793007, 0.000836375, 0.000888282, 0.000956738, 0.00104026, 0.00113218, 0.00124419, 0.00137324, 0.00151438, 0.0016807, 0.00126703, 0.00164921, 0.00215552, 0.00277288, 0.00361221, 0.00456292, 0.00576781, 0.00718472, 0.00701046, 0.0109007, 0.0168378, 0.0258657, 0.0386923, 0.0541827, 0.0655031, 0.145958, 0.230034, 0.441662, 0.564042, 0};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0.00111871, 0.000922607, 0.000885857, 0.00106002, 0.00155242, 0.000899587, 0.000786825, 0.000747841, 0.000742576, 0.000760796, 0.000793007, 0.000836375, 0.000888282, 0.000956738, 0.00104026, 0.00113218, 0.00124419, 0.00137324, 0.00151438, 0.0016807, 0.00126703, 0.00164921, 0.00215552, 0.00277288, 0.00361221, 0.00456292, 0.00576781, 0.00718472, 0.00701046, 0.0109007, 0.0168378, 0.0258657, 0.0386923, 0.0541827, 0.0655031, 0.145958, 0.230034, 0.441662, 0.564042, 0};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 3.02312299999999996e-03;
+ Float_t pol1 = 1.63804399999999996e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(5, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Antiproton4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.00886425, 0.0141768, 0.0101568, 0.0161863, 0.0219319, 0.0334622, 0.0443905, 0.0592395, 0.0751561, 0.0864854, 0.103567, 0.120373, 0.132621, 0.149678, 0.166081, 0.179562, 0.198764, 0.205123, 0.220172, 0.237277, 0.25903, 0.27644, 0.284633, 0.292908, 0.297426, 0.28959, 0.292919, 0.290167, 0.269848, 0.261622, 0.229602, 0.212424, 0.295423, 0.22624, 0.194105, 0.0526927, -0.076895, 0.217367, 0.983948};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00307721, 0.00251481, 0.00211521, 0.0018645, 0.00115595, 0.00104369, 0.00142809, 0.0013364, 0.00130398, 0.00129796, 0.00131775, 0.00135219, 0.00140202, 0.00147393, 0.00156009, 0.00166608, 0.00179217, 0.00193757, 0.00209925, 0.00153881, 0.00192408, 0.00241141, 0.00305588, 0.00264725, 0.0033566, 0.00426608, 0.00547565, 0.00538587, 0.00848915, 0.0131123, 0.0189988, 0.0279199, 0.0386729, 0.0415593, 0.0663031, 0.108596, 0.116259, 0.193609, 0.221554};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0, 0.00307721, 0.00251481, 0.00211521, 0.0018645, 0.00115595, 0.00104369, 0.00142809, 0.0013364, 0.00130398, 0.00129796, 0.00131775, 0.00135219, 0.00140202, 0.00147393, 0.00156009, 0.00166608, 0.00179217, 0.00193757, 0.00209925, 0.00153881, 0.00192408, 0.00241141, 0.00305588, 0.00264725, 0.0033566, 0.00426608, 0.00547565, 0.00538587, 0.00848915, 0.0131123, 0.0189988, 0.0279199, 0.0386729, 0.0415593, 0.0663031, 0.108596, 0.116259, 0.193609, 0.221554};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 4.14488622049151260e-03;
+ Float_t pol1 = 2.96857730797800597e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(5, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Pion5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.0303956, 0.0398194, 0.0497382, 0.0592532, 0.0692265, 0.0789018, 0.0906535, 0.107528, 0.122981, 0.137459, 0.150972, 0.16168, 0.170871, 0.180953, 0.186814, 0.195909, 0.200081, 0.203635, 0.209983, 0.21007, 0.213946, 0.213234, 0.216813, 0.215134, 0.2081, 0.207871, 0.185115, 0.194539, 0.179635, 0.169884, 0.165801, 0.145236, 0.12241, 0.119177, 0.123804, 0.111177, 0.101511, 0.139219, 0.0612838, 0.152114, 0.14425};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000275012, 0.000271644, 0.000278885, 0.000290482, 0.000305581, 0.000323479, 0.000360388, 0.000391261, 0.000437084, 0.000491624, 0.000554574, 0.000626577, 0.000704307, 0.000792713, 0.000891942, 0.00100363, 0.00113002, 0.00126999, 0.00142248, 0.00159975, 0.00178952, 0.00136889, 0.00177929, 0.00227244, 0.00284049, 0.00351991, 0.00429153, 0.0051599, 0.00614605, 0.0054959, 0.00736442, 0.00956336, 0.0120611, 0.0151024, 0.0177286, 0.0166113, 0.0232109, 0.0302416, 0.0304321, 0.0412011, 0.0613213};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0.000275012, 0.000271644, 0.000278885, 0.000290482, 0.000305581, 0.000323479, 0.000360388, 0.000391261, 0.000437084, 0.000491624, 0.000554574, 0.000626577, 0.000704307, 0.000792713, 0.000891942, 0.00100363, 0.00113002, 0.00126999, 0.00142248, 0.00159975, 0.00178952, 0.00136889, 0.00177929, 0.00227244, 0.00284049, 0.00351991, 0.00429153, 0.0051599, 0.00614605, 0.0054959, 0.00736442, 0.00956336, 0.0120611, 0.0151024, 0.0177286, 0.0166113, 0.0232109, 0.0302416, 0.0304321, 0.0412011, 0.0613213};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 4.01257199999999984e-03;
+ Float_t pol1 = 2.17416299999999979e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(6, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Kaon5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.0190181, 0.0200425, 0.0286688, 0.03481, 0.0451018, 0.0588837, 0.0782952, 0.0947995, 0.108637, 0.1221, 0.135844, 0.148488, 0.157787, 0.169447, 0.173264, 0.188723, 0.18833, 0.195569, 0.199314, 0.205223, 0.211733, 0.208414, 0.213651, 0.208302, 0.19844, 0.196712, 0.200806, 0.15693, 0.18652, 0.115381, 0.133751, 0.0982841, 0.107246, 0.0417931, 0.147759, -0.0735589, 0.571869, 0.488767, -0.315304, 1.71937};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00188333, 0.00156073, 0.00151031, 0.00181199, 0.00266245, 0.00155702, 0.00137462, 0.00132048, 0.00131871, 0.00136175, 0.00142741, 0.00150997, 0.00161189, 0.00173747, 0.00189366, 0.00206161, 0.00226274, 0.00248796, 0.00273639, 0.00303486, 0.00227613, 0.00293909, 0.00376378, 0.00482482, 0.00608811, 0.00752018, 0.00942054, 0.0115408, 0.0108768, 0.0160409, 0.0235301, 0.0337122, 0.0466674, 0.0674531, 0.0743068, 0.11877, 0.253677, 0.235641, 0.512443, 0.266431};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0.00188333, 0.00156073, 0.00151031, 0.00181199, 0.00266245, 0.00155702, 0.00137462, 0.00132048, 0.00131871, 0.00136175, 0.00142741, 0.00150997, 0.00161189, 0.00173747, 0.00189366, 0.00206161, 0.00226274, 0.00248796, 0.00273639, 0.00303486, 0.00227613, 0.00293909, 0.00376378, 0.00482482, 0.00608811, 0.00752018, 0.00942054, 0.0115408, 0.0108768, 0.0160409, 0.0235301, 0.0337122, 0.0466674, 0.0674531, 0.0743068, 0.11877, 0.253677, 0.235641, 0.512443, 0.266431};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 4.01257199999999984e-03;
+ Float_t pol1 = 2.17416299999999979e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(6, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Antiproton5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.00919056, 0.0178105, 0.0134286, 0.0295189, 0.0277064, 0.0434262, 0.0535665, 0.0715688, 0.0842733, 0.106768, 0.117998, 0.137741, 0.150551, 0.161897, 0.178599, 0.192242, 0.20269, 0.219659, 0.227496, 0.242855, 0.257706, 0.265325, 0.281052, 0.2813, 0.271633, 0.267676, 0.272005, 0.277673, 0.273667, 0.196607, 0.24668, 0.181115, 0.31068, 0.114003, 0.333805, 0.276964, -0.0473593, 0.207914, 0.12068};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00490617, 0.00402616, 0.00341963, 0.00302967, 0.00188597, 0.00172265, 0.00237703, 0.00226014, 0.00222069, 0.00223993, 0.00230435, 0.00239039, 0.00250534, 0.00265745, 0.00283418, 0.00304524, 0.00330038, 0.00358151, 0.00389282, 0.00287646, 0.00361525, 0.00453627, 0.00570268, 0.00498584, 0.00629115, 0.00797278, 0.010008, 0.00986531, 0.0151841, 0.0225399, 0.0331056, 0.0484569, 0.0652464, 0.0676624, 0.111366, 0.15898, 0.211355, 0.256669, 0.378091};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0, 0.00490617, 0.00402616, 0.00341963, 0.00302967, 0.00188597, 0.00172265, 0.00237703, 0.00226014, 0.00222069, 0.00223993, 0.00230435, 0.00239039, 0.00250534, 0.00265745, 0.00283418, 0.00304524, 0.00330038, 0.00358151, 0.00389282, 0.00287646, 0.00361525, 0.00453627, 0.00570268, 0.00498584, 0.00629115, 0.00797278, 0.010008, 0.00986531, 0.0151841, 0.0225399, 0.0331056, 0.0484569, 0.0652464, 0.0676624, 0.111366, 0.15898, 0.211355, 0.256669, 0.378091};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 5.50148450680349593e-03;
+ Float_t pol1 = 3.94017620709329313e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(6, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Pion6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.0275772, 0.0353857, 0.0451589, 0.0569504, 0.0645817, 0.0744759, 0.0846387, 0.103224, 0.116637, 0.12955, 0.141348, 0.150827, 0.163529, 0.166875, 0.175975, 0.177624, 0.186353, 0.18951, 0.191246, 0.197078, 0.195822, 0.194678, 0.19574, 0.182454, 0.186385, 0.192537, 0.171284, 0.176511, 0.15328, 0.170476, 0.165746, 0.142293, 0.153372, 0.152722, 0.132789, 0.103282, 0.0631696, 0.142603, 0.126161, 0.119172, -0.0503365};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000573254, 0.0005678, 0.000585761, 0.000612834, 0.00064773, 0.000688254, 0.000769859, 0.000841415, 0.000944491, 0.00106887, 0.00120962, 0.00137073, 0.00154395, 0.00174052, 0.00195924, 0.00220447, 0.00247752, 0.00278203, 0.00312082, 0.00349313, 0.00390327, 0.00297633, 0.00383881, 0.00485695, 0.00607907, 0.00740945, 0.00894688, 0.0107216, 0.0126575, 0.0112992, 0.0149453, 0.0195003, 0.0243844, 0.0308124, 0.036297, 0.0342476, 0.0454655, 0.0641991, 0.063416, 0.0867013, 0.127476};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0.000573254, 0.0005678, 0.000585761, 0.000612834, 0.00064773, 0.000688254, 0.000769859, 0.000841415, 0.000944491, 0.00106887, 0.00120962, 0.00137073, 0.00154395, 0.00174052, 0.00195924, 0.00220447, 0.00247752, 0.00278203, 0.00312082, 0.00349313, 0.00390327, 0.00297633, 0.00383881, 0.00485695, 0.00607907, 0.00740945, 0.00894688, 0.0107216, 0.0126575, 0.0112992, 0.0149453, 0.0195003, 0.0243844, 0.0308124, 0.036297, 0.0342476, 0.0454655, 0.0641991, 0.063416, 0.0867013, 0.127476};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 5.49768000000000045e-03;
+ Float_t pol1 = 2.97884999999999990e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(7, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Kaon6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.0166047, 0.0248478, 0.030513, 0.0411593, 0.0380696, 0.0639456, 0.0758458, 0.0897174, 0.102605, 0.116338, 0.133685, 0.140557, 0.141469, 0.15527, 0.167424, 0.171481, 0.179479, 0.187214, 0.177038, 0.178377, 0.187908, 0.181605, 0.20429, 0.173224, 0.18915, 0.193766, 0.195795, 0.189594, 0.17632, 0.158214, 0.154361, 0.0684557, 0.263961, 0.0779351, 0.0523301, -0.0182867, 0.264014, 0.135541, 0.027261, -3.29017};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00388478, 0.00326808, 0.00326331, 0.00427722, 0.00561727, 0.0033143, 0.00296018, 0.00287265, 0.00289959, 0.00299629, 0.00316135, 0.00335928, 0.00358978, 0.0038917, 0.00425027, 0.00463553, 0.0050853, 0.0056094, 0.00617222, 0.00685316, 0.00509904, 0.00653626, 0.00835353, 0.010359, 0.0134302, 0.0166309, 0.0204693, 0.0247671, 0.0232361, 0.0352802, 0.0483286, 0.0662901, 0.0989231, 0.12961, 0.143373, 0.313321, 0.49827, 0.675383, 0, 0.348563};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0.00388478, 0.00326808, 0.00326331, 0.00427722, 0.00561727, 0.0033143, 0.00296018, 0.00287265, 0.00289959, 0.00299629, 0.00316135, 0.00335928, 0.00358978, 0.0038917, 0.00425027, 0.00463553, 0.0050853, 0.0056094, 0.00617222, 0.00685316, 0.00509904, 0.00653626, 0.00835353, 0.010359, 0.0134302, 0.0166309, 0.0204693, 0.0247671, 0.0232361, 0.0352802, 0.0483286, 0.0662901, 0.0989231, 0.12961, 0.143373, 0.313321, 0.49827, 0.675383, 0, 0.348563};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 5.49768000000000045e-03;
+ Float_t pol1 = 2.97884999999999990e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(7, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Antiproton6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, -0.0130981, 0.0179731, 0.00939326, 0.0248886, 0.029577, 0.0550703, 0.0636149, 0.0798523, 0.104272, 0.112925, 0.115704, 0.146685, 0.149302, 0.179475, 0.181385, 0.184513, 0.208168, 0.213384, 0.225983, 0.232891, 0.231734, 0.241272, 0.270741, 0.246586, 0.266346, 0.227266, 0.245789, 0.208304, 0.234844, 0.194027, -0.0336696, 0.267591, 0.2404, 0.241992, 0.125957, 0.288086, -0.0589748, 0.311092, 0.477676};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00943873, 0.00785252, 0.00670716, 0.00596963, 0.00376045, 0.00346777, 0.00486688, 0.00467992, 0.00468118, 0.00479058, 0.00497572, 0.00521532, 0.00552991, 0.00590979, 0.00633209, 0.00685181, 0.00747093, 0.00816394, 0.00889636, 0.00662104, 0.00834123, 0.0105143, 0.0133603, 0.0113902, 0.014318, 0.0179343, 0.0226294, 0.0223227, 0.0342436, 0.0511045, 0.0730614, 0.097839, 0.132614, 0.150997, 0.218463, 0.348699, 0.362474, 0.57912, 0.796176};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0, 0.00943873, 0.00785252, 0.00670716, 0.00596963, 0.00376045, 0.00346777, 0.00486688, 0.00467992, 0.00468118, 0.00479058, 0.00497572, 0.00521532, 0.00552991, 0.00590979, 0.00633209, 0.00685181, 0.00747093, 0.00816394, 0.00889636, 0.00662104, 0.00834123, 0.0105143, 0.0133603, 0.0113902, 0.014318, 0.0179343, 0.0226294, 0.0223227, 0.0342436, 0.0511045, 0.0730614, 0.097839, 0.132614, 0.150997, 0.218463, 0.348699, 0.362474, 0.57912, 0.796176};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 7.53765601848897532e-03;
+ Float_t pol1 = 5.39848705646177145e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(7, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Pion7080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.0195733, 0.0309692, 0.0356384, 0.0462504, 0.0543824, 0.0647011, 0.0749217, 0.085954, 0.0999237, 0.117407, 0.12294, 0.137339, 0.140553, 0.145824, 0.156141, 0.15101, 0.159541, 0.163759, 0.171796, 0.179879, 0.167389, 0.166001, 0.176266, 0.179223, 0.18775, 0.185847, 0.206443, 0.148862, 0.175494, 0.189032, 0.233424, 0.0839163, 0.263219, 0.0629226, 0.320809, 0.134834, 0.190157, 0.0960499, 0.136835, -0.0485677, 0.389939};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.00157008, 0.00155061, 0.00160592, 0.00168889, 0.0017938, 0.00191324, 0.00215022, 0.00236305, 0.00267145, 0.00303387, 0.00344413, 0.00390738, 0.00441634, 0.00498694, 0.00562308, 0.00632594, 0.00710876, 0.00796577, 0.00892046, 0.00999595, 0.0111319, 0.00845832, 0.0108732, 0.0136163, 0.0167438, 0.0206408, 0.0247138, 0.0295918, 0.0351168, 0.0307851, 0.0417363, 0.0528758, 0.0669722, 0.0817049, 0.0994534, 0.0947033, 0.126801, 0.177027, 0.176152, 0.245739, 0.391682};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0.00157008, 0.00155061, 0.00160592, 0.00168889, 0.0017938, 0.00191324, 0.00215022, 0.00236305, 0.00267145, 0.00303387, 0.00344413, 0.00390738, 0.00441634, 0.00498694, 0.00562308, 0.00632594, 0.00710876, 0.00796577, 0.00892046, 0.00999595, 0.0111319, 0.00845832, 0.0108732, 0.0136163, 0.0167438, 0.0206408, 0.0247138, 0.0295918, 0.0351168, 0.0307851, 0.0417363, 0.0528758, 0.0669722, 0.0817049, 0.0994534, 0.0947033, 0.126801, 0.177027, 0.176152, 0.245739, 0.391682};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 8.29529000000000030e-03;
+ Float_t pol1 = 5.60073999999999989e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(8, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Kaon7080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.00726463, 0.0144253, 0.0334631, 0.0384761, 0.0494532, 0.0693552, 0.0762569, 0.0719228, 0.0937563, 0.0955609, 0.105749, 0.117711, 0.129626, 0.133837, 0.128721, 0.132298, 0.161963, 0.138618, 0.139166, 0.18394, 0.169776, 0.181286, 0.173951, 0.14043, 0.115846, 0.214474, 0.218691, 0.103945, 0.37536, -0.0865605, 0.228924, -0.115581, 0.110384, 0.184704, 0.509455, -0.485498, 0.0837004, -0.813161, -0.0297345, 0.0323336};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.0106177, 0.00884964, 0.00836979, 0.00948119, 0.0156272, 0.00929314, 0.00842046, 0.00821347, 0.0083515, 0.00868388, 0.00921062, 0.00978082, 0.0105426, 0.0114431, 0.0124756, 0.0136669, 0.0149571, 0.0164684, 0.0181788, 0.0200314, 0.014819, 0.0190758, 0.0243153, 0.0308707, 0.0377526, 0.0457948, 0.0569713, 0.0684405, 0.0634441, 0.0935611, 0.129774, 0.182993, 0.241246, 0.29603, 0.342445, 0.523882, 0.918355, 1.40502, 0, 0};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0.0106177, 0.00884964, 0.00836979, 0.00948119, 0.0156272, 0.00929314, 0.00842046, 0.00821347, 0.0083515, 0.00868388, 0.00921062, 0.00978082, 0.0105426, 0.0114431, 0.0124756, 0.0136669, 0.0149571, 0.0164684, 0.0181788, 0.0200314, 0.014819, 0.0190758, 0.0243153, 0.0308707, 0.0377526, 0.0457948, 0.0569713, 0.0684405, 0.0634441, 0.0935611, 0.129774, 0.182993, 0.241246, 0.29603, 0.342445, 0.523882, 0.918355, 1.40502, 0, 0};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 8.29529000000000030e-03;
+ Float_t pol1 = 5.60073999999999989e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(8, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2Antiproton7080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.0243855, 4.59379e-05, 0.00505587, 0.0407476, 0.0360989, 0.0659522, 0.0654352, 0.0672759, 0.0947919, 0.0946055, 0.108647, 0.108389, 0.120068, 0.154908, 0.201656, 0.179421, 0.179193, 0.209699, 0.209577, 0.190403, 0.267222, 0.257467, 0.17816, 0.252145, 0.270207, 0.311401, 0.147204, 0.197523, 0.149844, 0.175334, 0.0566661, 0.322004, -0.123699, 0.1207, 0.101863, -0.448652, -1.05087, 2.292, 0.286693};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.0243279, 0.020212, 0.0174078, 0.0154737, 0.00988768, 0.00926115, 0.0131909, 0.0128732, 0.0130524, 0.0135259, 0.0142208, 0.0150952, 0.0160249, 0.0173254, 0.0187753, 0.0203282, 0.0222585, 0.0243728, 0.0268049, 0.0199116, 0.0251891, 0.0316377, 0.0397848, 0.0345062, 0.0433967, 0.0542165, 0.0687569, 0.0658095, 0.0953791, 0.140737, 0.210719, 0.265241, 0.339048, 0.375181, 0.545855, 1.04449, 0.904123, 0.837606, 2.36757};
+ Double_t _yerr2[] = {0, 0, 0, 0, 0, 0, 0.0243279, 0.020212, 0.0174078, 0.0154737, 0.00988768, 0.00926115, 0.0131909, 0.0128732, 0.0130524, 0.0135259, 0.0142208, 0.0150952, 0.0160249, 0.0173254, 0.0187753, 0.0203282, 0.0222585, 0.0243728, 0.0268049, 0.0199116, 0.0251891, 0.0316377, 0.0397848, 0.0345062, 0.0433967, 0.0542165, 0.0687569, 0.0658095, 0.0953791, 0.140737, 0.210719, 0.265241, 0.339048, 0.375181, 0.545855, 1.04449, 0.904123, 0.837606, 2.36757};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _yerr2[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.13733682403531055e-02;
+ Float_t pol1 = 8.14563321585857515e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(8, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ _yerr2[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + nonflow*nonflow);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &_x[first], &_y[first], &_xerr[first],&_xerr[first], &_yerr2[first],&_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* ptscaling(TGraphErrors *g,Int_t nq){
+ Int_t n = g->GetN();
+ Double_t x[100],y[100],ex[100],ey[100];
+ Double_t *xo,*yo,*eyo,*exo;
+ xo = g->GetX();
+ yo = g->GetY();
+ eyo = g->GetEY();
+ exo = g->GetEX();
+ for(Int_t i=0;i < n;i++){
+ x[i] = xo[i]/nq;
+ y[i] = yo[i]/nq;
+ ey[i] = eyo[i]/nq;
+ ex[i] = exo[i]/2;
+ }
+
+ TGraphErrors *g2 = new TGraphErrors(n,x,y,ex,ey);
+
+ g2->SetMarkerStyle(g->GetMarkerStyle());
+ g2->SetMarkerColor(g->GetMarkerColor());
+ g2->SetLineColor(g->GetLineColor());
+
+ return g2;
+}
+
+TGraphAsymmErrors* ptscaling(TGraphAsymmErrors *g,Int_t nq){
+ Int_t n = g->GetN();
+ Double_t x[100],y[100],ex[100],ey[100],ex2[100],ey2[100];
+ Double_t *xo,*yo,*eyo,*eyo2,*exo;
+ xo = g->GetX();
+ yo = g->GetY();
+ exo = g->GetEXlow();
+ eyo = g->GetEYlow();
+ eyo2 = g->GetEYhigh();
+ for(Int_t i=0;i < n;i++){
+ x[i] = xo[i]/nq;
+ y[i] = yo[i]/nq;
+ ey[i] = eyo[i]/nq;
+ ey2[i] = eyo2[i]/nq;
+ ex[i] = exo[i]/2;
+ ex2[i] = exo[i]/2;
+ }
+
+ TGraphAsymmErrors *g2 = new TGraphAsymmErrors(n,x,y,ex,ex2,ey,ey2);
+
+ g2->SetMarkerStyle(g->GetMarkerStyle());
+ g2->SetMarkerColor(g->GetMarkerColor());
+ g2->SetLineColor(g->GetLineColor());
+
+ return g2;
+}
+
+TGraphErrors* mtscaling(TGraphErrors *g,Float_t mass,Int_t nq){
+ Int_t n = g->GetN();
+ Double_t x[100],y[100],ex[100],ey[100];
+ Double_t *xo,*yo,*eyo,*exo;
+ xo = g->GetX();
+ yo = g->GetY();
+ eyo = g->GetEY();
+ exo = g->GetEX();
+ for(Int_t i=0;i < n;i++){
+ x[i] = (TMath::Sqrt(xo[i]*xo[i] + mass*mass) - mass)/nq;
+ y[i] = yo[i]/nq;
+ ey[i] = eyo[i]/nq;
+ ex[i] = exo[i]/2;
+ }
+
+ TGraphErrors *g2 = new TGraphErrors(n,x,y,ex,ey);
+
+ g2->SetMarkerStyle(g->GetMarkerStyle());
+ g2->SetMarkerColor(g->GetMarkerColor());
+ g2->SetLineColor(g->GetLineColor());
+
+ return g2;
+}
+
+TGraphAsymmErrors* mtscaling(TGraphAsymmErrors *g,Float_t mass,Int_t nq){
+ Int_t n = g->GetN();
+ Double_t x[100],y[100],ex[100],ey[100],ex2[100],ey2[100];
+ Double_t *xo,*yo,*eyo,*eyo2,*exo;
+ xo = g->GetX();
+ yo = g->GetY();
+ eyo = g->GetEYlow();
+ eyo2 = g->GetEYhigh();
+ exo = g->GetEXhigh();
+ for(Int_t i=0;i < n;i++){
+ x[i] = (TMath::Sqrt(xo[i]*xo[i] + mass*mass) - mass)/nq;
+ y[i] = yo[i]/nq;
+ ey[i] = eyo[i]/nq;
+ ey2[i] = eyo2[i]/nq;
+ ex[i] = exo[i]/2;
+ ex2[i] = exo[i]/2;
+ }
+
+ TGraphAsymmErrors *g2 = new TGraphAsymmErrors(n,x,y,ex,ex2,ey,ey2);
+
+ g2->SetMarkerStyle(g->GetMarkerStyle());
+ g2->SetMarkerColor(g->GetMarkerColor());
+ g2->SetLineColor(g->GetLineColor());
+
+ return g2;
+}
+
+Float_t nonflow(Int_t ic,Float_t pt){ // non flow systematics [%]
+ Float_t mult[] = {55,47.5,35,22,14,8,5,3,2};
+
+ return (pt/300 + 0.01)*TMath::Sqrt(mult[ic]/35);
+}
+
+Float_t NUO(Int_t ic,Float_t pt){ // dE/dx modulation [%]
+ if(pt < 2) return 0.0;
+ if(pt > 3) return 0.06;
+
+ return (pt - 2)*0.06;
+}
+
+Float_t PIDpi(Int_t ic,Float_t pt){ // syst pi PID [%]
+ if(pt < 3) return 0.0;
+
+ return 0.02/6*pt;
+}
+
+Float_t PIDka(Int_t ic,Float_t pt){ // syst K PID [%]
+
+ return 0.004*(pt-2.3)*(pt-2.3);
+}
+
+Float_t PIDpr(Int_t ic,Float_t pt){ // syst p PID [%]
+
+ return 0.004*(pt-2.3)*(pt-2.3);
+}
+
+Float_t NUOtofall(Int_t ic,Float_t pt){ // syst pi PID NUO TOF [%]
+ if(pt < 0.4) return 0;
+ return 0.01;
+}
+
+Float_t NUOtofka(Int_t ic,Float_t pt){ // syst K PID NUO TOF [%]
+ if(pt < 0.4) return 0;
+ return 0.01/pt/pt;
+}
+
+Float_t NUOtofpr(Int_t ic,Float_t pt){ // syst p PID NUO TOF [%]
+ if(pt < 0.8) return 0;
+ return 0.03/pt/pt;
+}
+
+Float_t FeedDown(Int_t ic,Float_t pt){ // syst p PID NUO TOFfeed down [%]
+ return 0.05/pt/pt;
+}
+
+Float_t systPi(Int_t ic,Float_t pt){
+ Float_t e0 = 0.005; // event plane res
+ Float_t e1 = 0;//nonflow(ic,pt);
+ Float_t e2 = NUO(ic,pt);
+ Float_t e3 = PIDpi(ic,pt);
+ Float_t e4 = NUOtofall(ic,pt);
+
+ return TMath::Sqrt(e0*e0+e1*e1+e2*e2+e3*e3+e4*e4 + 0.02*0.02);
+}
+
+Float_t systKa(Int_t ic,Float_t pt){
+ Float_t e0 = 0.005; // event plane res
+ Float_t e1 = 0;//nonflow(ic,pt);
+ Float_t e2 = NUO(ic,pt);
+ Float_t e3 = PIDka(ic,pt);
+ Float_t e4 = NUOtofall(ic,pt);
+ Float_t e5 = NUOtofka(ic,pt);
+
+ return TMath::Sqrt(e0*e0+e1*e1+e2*e2+e3*e3+e4*e4+e5*e5 + 0.02*0.02);
+}
+
+Float_t systPr(Int_t ic,Float_t pt){
+ Float_t e0 = 0.005; // event plane res
+ Float_t e1 = 0;//nonflow(ic,pt);
+ Float_t e2 = NUO(ic,pt);
+ Float_t e3 = PIDpr(ic,pt);
+ Float_t e4 = NUOtofall(ic,pt);
+ Float_t e5 = NUOtofpr(ic,pt);
+ Float_t e6 = FeedDown(ic,pt);
+
+ return TMath::Sqrt(e0*e0+e1*e1+e2*e2+e3*e3+e4*e4+e5*e5+e6*e6 + 0.02*0.02);
+}
+
+TGraphErrors* v3Pion0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.00336251, 0.0042964, 0.00591363, 0.00745722, 0.00917811, 0.0114605, 0.0140557, 0.0179659, 0.0219244, 0.0262026, 0.0296011, 0.0327218, 0.036855, 0.0404912, 0.0438127, 0.045798, 0.0512975, 0.0549897, 0.059595, 0.058824, 0.0625847, 0.0662299, 0.0730445, 0.073744, 0.0756572, 0.0801984, 0.0794842, 0.0772571, 0.06879, 0.0540573, 0.0427378, 0.0531661, 0.0420874, 0.0124048, 0.0326177, 0.0529338, 0.080694, 0.00958407, -0.0393533, -0.0185034, 0.0631424};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000210522, 0.000206387, 0.000214394, 0.000242337, 0.000275482, 0.000302358, 0.00018653, 0.000199449, 0.000219671, 0.000242186, 0.000265206, 0.000305424, 0.000353422, 0.000419006, 0.000494644, 0.000562017, 0.00074144, 0.000805938, 0.000880169, 0.000956853, 0.00103696, 0.000785844, 0.00102401, 0.00134318, 0.00173053, 0.00221324, 0.00278667, 0.00347647, 0.00426881, 0.00398661, 0.00557066, 0.0074162, 0.00947343, 0.0116492, 0.0142187, 0.0127081, 0.0171297, 0.0219476, 0.0216085, 0.028262, 0.0392477};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.23867300000000003e-03;
+ Float_t pol1 = 6.71160999999999980e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(0, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Kaon0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.0015475, 0.00157659, 0.00184087, 0.00126819, 0.00306379, 0.00554225, 0.00878697, 0.0108394, 0.0140058, 0.0198785, 0.0221055, 0.029062, 0.0333972, 0.0361533, 0.0402771, 0.0465897, 0.0483209, 0.0515488, 0.0555625, 0.0597794, 0.0641036, 0.0744021, 0.0742929, 0.0796722, 0.0763208, 0.074773, 0.0773214, 0.107016, 0.0676339, 0.061203, 0.0238502, 0.0728963, -0.00581352, 0.136265, 0.23944, 0.351119, -0.296351, 0.224582, -0.408449, -0.145808};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00156347, 0.00127827, 0.00124381, 0.00157615, 0.0020528, 0.000885764, 0.000846416, 0.00088859, 0.000918216, 0.000933995, 0.000962436, 0.00101051, 0.00106814, 0.0011348, 0.00121794, 0.00128274, 0.00141546, 0.00158458, 0.00179081, 0.00203398, 0.00158186, 0.00212304, 0.00284786, 0.00386322, 0.0051468, 0.00683846, 0.0090759, 0.0119298, 0.0125558, 0.0220895, 0.0390313, 0.064347, 0.106476, 0.156529, 0.201189, 0.401203, 0.546208, 0.484561, 0.692492, 1.58935};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.23867300000000003e-03;
+ Float_t pol1 = 6.71160999999999980e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(0, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Antiproton0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, -0.00967204, 0.00535552, -0.000611655, 0.00156903, -0.000214743, 0.000930684, 0.00628733, 0.00346132, 0.00752828, 0.00776737, 0.00689048, 0.0117864, 0.0160731, 0.0216243, 0.0242861, 0.0317626, 0.036016, 0.0461436, 0.0447851, 0.0532914, 0.0656139, 0.0774954, 0.093497, 0.0932595, 0.097548, 0.104816, 0.103702, 0.104301, 0.113606, 0.0802858, 0.0906418, 0.0615356, 0.0523877, -0.0314623, 0.295411, 0.364149, 0.426971, 0.252544, 1.09528};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00507777, 0.00409405, 0.00348366, 0.00320362, 0.00211831, 0.00200809, 0.00152647, 0.00138163, 0.00133943, 0.00133443, 0.00143251, 0.00154796, 0.00168496, 0.00181804, 0.00188818, 0.00198545, 0.00210711, 0.00225372, 0.00242099, 0.00175226, 0.00216888, 0.00270259, 0.00337084, 0.00294624, 0.00377967, 0.00485491, 0.00629107, 0.00645914, 0.0108552, 0.017606, 0.0278862, 0.0433882, 0.0699234, 0.0828253, 0.157932, 0.276799, 0.359305, 0.35556, 0.390246};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.69829837126647719e-03;
+ Float_t pol1 = 1.21632530760273721e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(0, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Pion0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.00420951, 0.00533606, 0.00727045, 0.00880758, 0.0112568, 0.0140611, 0.0168202, 0.0213167, 0.0259051, 0.0307, 0.0352693, 0.0392127, 0.0438769, 0.0474563, 0.0511212, 0.0543492, 0.061692, 0.0649522, 0.0673741, 0.0720042, 0.0725524, 0.0783617, 0.0818539, 0.0921856, 0.0887707, 0.0907123, 0.0907136, 0.0818291, 0.0862718, 0.0811945, 0.0746985, 0.0519574, 0.0399439, 0.0504592, 0.0295955, 0.0107689, 0.0380752, 0.0217176, 0.0331197, 0.0475655, 0.0421606};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000228508, 0.000224354, 0.000233169, 0.000264022, 0.000300728, 0.000330391, 0.000201905, 0.000215871, 0.000237699, 0.000262189, 0.000287106, 0.000330327, 0.000382108, 0.000452355, 0.000533182, 0.0006056, 0.000799207, 0.000868309, 0.00094664, 0.00102796, 0.00111185, 0.00083961, 0.0010888, 0.00141987, 0.00181911, 0.00231573, 0.0029012, 0.0035933, 0.00441343, 0.00407112, 0.00565933, 0.00751697, 0.00952897, 0.0118462, 0.0142275, 0.013119, 0.0175258, 0.0226027, 0.0220753, 0.02934, 0.0409402};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.34651999999999992e-03;
+ Float_t pol1 = 7.29597999999999922e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(1, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Kaon0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, -0.00139525, 0.000403738, 0.00194544, 0.000362192, 0.00255818, 0.00623812, 0.00852105, 0.0157652, 0.0178431, 0.0237543, 0.0294554, 0.0330147, 0.0386089, 0.0435374, 0.0484218, 0.052563, 0.0576409, 0.063316, 0.0665299, 0.0712927, 0.0704316, 0.0830872, 0.0888531, 0.0855421, 0.0955255, 0.100167, 0.108107, 0.0858922, 0.0867649, 0.102963, 0.102207, 0.0689617, 0.137493, 0.232975, 0.014938, 0.109416, -0.11437, -0.0219904, -1.05656, 0.480083};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00168914, 0.00138095, 0.00134266, 0.00169063, 0.00220897, 0.000961223, 0.000916024, 0.00096254, 0.000996154, 0.00101286, 0.0010432, 0.00109366, 0.00115359, 0.00122476, 0.00131136, 0.00138, 0.00151985, 0.00169741, 0.00191603, 0.00217312, 0.00168575, 0.0022548, 0.00301049, 0.00406655, 0.00539095, 0.00712795, 0.00931687, 0.0123094, 0.0128226, 0.0224061, 0.0389769, 0.0662474, 0.103818, 0.157602, 0.189825, 0.433172, 0.5729, 0.481099, 0.629613, 2.73969};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.34651999999999992e-03;
+ Float_t pol1 = 7.29597999999999922e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(1, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Antiproton0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.00179347, -0.00174397, 0.00562031, -0.000854717, 0.00102079, 0.00268305, 0.00484297, 0.0095663, 0.0100514, 0.0122446, 0.010814, 0.0159408, 0.0223776, 0.0276956, 0.0328181, 0.0362557, 0.0455214, 0.049074, 0.0556873, 0.0661178, 0.0797023, 0.0959318, 0.10964, 0.112015, 0.118346, 0.119038, 0.140106, 0.14157, 0.10431, 0.116439, 0.10492, 0.0871708, 0.0568561, -0.0455202, 0.198776, 0.426306, 0.107729, 0.370331, 0.0994008};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00538956, 0.00437022, 0.00372889, 0.00343717, 0.00227295, 0.00215975, 0.0016284, 0.00148015, 0.00143673, 0.00143295, 0.00154079, 0.00166453, 0.00181946, 0.00196447, 0.00204408, 0.00215335, 0.00228741, 0.00244586, 0.00262781, 0.00190225, 0.00235167, 0.00292554, 0.0036415, 0.00316742, 0.0040373, 0.00516761, 0.00665627, 0.00678022, 0.0111978, 0.0183614, 0.0288174, 0.0448455, 0.0723913, 0.0836158, 0.15176, 0.3484, 0.344686, 0.400118, 0.447911};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.84616637865581655e-03;
+ Float_t pol1 = 1.32222872399611561e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(1, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Pion1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.00461794, 0.00642023, 0.00852456, 0.0103066, 0.0130283, 0.0157136, 0.0194803, 0.0248819, 0.0296363, 0.0344324, 0.0398318, 0.0442839, 0.0488051, 0.0535568, 0.0587408, 0.0608659, 0.0691928, 0.0715776, 0.0753062, 0.0791578, 0.0809953, 0.0870097, 0.0914991, 0.0965167, 0.100661, 0.0974432, 0.102311, 0.0922769, 0.0863138, 0.0857585, 0.0742174, 0.058852, 0.0443585, 0.0521248, 0.0365875, 0.0124116, 0.0456829, 0.00609852, 0.0251501, 0.0762395, 0.0729517};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000192925, 0.00018977, 0.000197506, 0.000224275, 0.000256092, 0.000281821, 0.00017049, 0.000182355, 0.000200813, 0.000221589, 0.000243065, 0.00027971, 0.000324058, 0.000382571, 0.000450527, 0.00051265, 0.000674555, 0.000731225, 0.000795309, 0.00086146, 0.000932844, 0.000702476, 0.000905643, 0.0011698, 0.00149335, 0.00189126, 0.00235292, 0.0029003, 0.00353017, 0.00324194, 0.00448472, 0.00592329, 0.00753801, 0.00932365, 0.0111649, 0.0103037, 0.0139087, 0.0180768, 0.0179247, 0.0232962, 0.0328189};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 7.36284000000000027e-04;
+ Float_t pol1 = 8.43209000000000037e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(2, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Kaon1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.00103604, -0.000214098, 0.00273713, 0.00117868, 0.00364223, 0.00963693, 0.0110632, 0.013632, 0.0215956, 0.0263831, 0.0334408, 0.0397796, 0.0429066, 0.0491487, 0.0559746, 0.059679, 0.0665367, 0.0664515, 0.0734363, 0.0706062, 0.0827271, 0.0854827, 0.0950996, 0.0986797, 0.0978439, 0.0942852, 0.0926222, 0.0934745, 0.107198, 0.0728447, 0.0950053, 0.044093, 0.013894, -0.247519, 0.362324, -0.215948, -0.210557, -0.496652, 0.187874, 1.75622};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00141303, 0.00115861, 0.00112637, 0.00141086, 0.00183742, 0.000797225, 0.000770476, 0.000812609, 0.000843751, 0.000858169, 0.000884989, 0.000926432, 0.000975764, 0.0010329, 0.00110305, 0.00115771, 0.00127264, 0.00141801, 0.00159964, 0.00181237, 0.0014013, 0.00186508, 0.00248639, 0.00331328, 0.00435613, 0.00572852, 0.00745468, 0.00969517, 0.00999537, 0.0169686, 0.0289983, 0.0484386, 0.0833753, 0.129986, 0.161529, 0.305458, 0.448385, 0.512319, 0.50547, 0.546504};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 7.36284000000000027e-04;
+ Float_t pol1 = 8.43209000000000037e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(2, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Antiproton1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.0162324, -0.00252875, -5.90144e-06, -0.00476797, -0.00229146, 0.00398366, 0.00388682, 0.0067282, 0.00975148, 0.0139623, 0.0196024, 0.0240234, 0.0274354, 0.0338669, 0.0383077, 0.0439452, 0.0512254, 0.0570444, 0.0664354, 0.0752314, 0.0935012, 0.100361, 0.121053, 0.122332, 0.132495, 0.14685, 0.13494, 0.144166, 0.147784, 0.143769, 0.119115, 0.0753315, 0.101949, 0.109027, -0.0198193, 0.195004, 0.532964, 0.159071, 0.304631};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00439881, 0.00358002, 0.00308529, 0.00284691, 0.00188604, 0.00179879, 0.00134515, 0.00121996, 0.00118715, 0.00119346, 0.00128806, 0.00139995, 0.00153443, 0.00166203, 0.00173607, 0.00183116, 0.00194285, 0.00208101, 0.00223829, 0.00162341, 0.0020054, 0.00249063, 0.00308347, 0.00267283, 0.00338056, 0.00430813, 0.00549979, 0.00551871, 0.00893073, 0.014277, 0.0224559, 0.0335484, 0.0527298, 0.0616519, 0.128009, 0.242888, 0.324704, 0.327696, 0.410988};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.13364693747489361e-03;
+ Float_t pol1 = 1.52812297971200361e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(2, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Pion2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.00519639, 0.00686685, 0.00875694, 0.0115813, 0.0149347, 0.0174483, 0.0218948, 0.0279923, 0.0332986, 0.0395437, 0.0448705, 0.0495976, 0.0549734, 0.0596968, 0.0646702, 0.0694171, 0.0761951, 0.0800467, 0.0820417, 0.0882722, 0.0909226, 0.0949481, 0.0998517, 0.0981284, 0.103912, 0.105908, 0.0958954, 0.0959066, 0.091531, 0.0858565, 0.0824873, 0.0789383, 0.0546646, 0.0323943, 0.0398512, 0.058909, 0.0315019, 0.0458475, 0.0152419, 0.0401339, 0.00171052};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000264306, 0.000261423, 0.000272779, 0.000310985, 0.000356496, 0.000393309, 0.000235694, 0.000252646, 0.000278736, 0.000308116, 0.000338422, 0.0003898, 0.000452198, 0.000538239, 0.000644435, 0.000738943, 0.000937402, 0.00101476, 0.0010981, 0.00118455, 0.00128004, 0.000961587, 0.00123273, 0.00158511, 0.00201169, 0.00249688, 0.00308622, 0.00378193, 0.00456781, 0.00416223, 0.00567462, 0.00744567, 0.00947753, 0.0117554, 0.014131, 0.0128392, 0.0175674, 0.0227266, 0.022365, 0.0298124, 0.0421548};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.90101399999999992e-03;
+ Float_t pol1 = 1.03004500000000005e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(3, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Kaon2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.00380575, 0.00351231, 0.00042128, 0.00337534, 0.00625768, 0.0112856, 0.0125639, 0.0191966, 0.0242974, 0.0322568, 0.0358068, 0.0447696, 0.0519689, 0.054212, 0.0615544, 0.0622953, 0.0705619, 0.0726914, 0.0826837, 0.0818793, 0.09019, 0.090596, 0.0953699, 0.100226, 0.108469, 0.102736, 0.0902474, 0.0857363, 0.0690082, 0.0664356, 0.0393149, -0.00799427, 0.0412672, 0.303438, 0.00582671, 0.820174, -0.580176, 1.08132, 1.61094, 0.836442};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00191587, 0.00157322, 0.00153987, 0.00194804, 0.00249873, 0.00108422, 0.00105534, 0.00112328, 0.00117285, 0.00119472, 0.00123609, 0.00129458, 0.00136514, 0.00144791, 0.00154846, 0.00162865, 0.00178834, 0.00198891, 0.0022366, 0.00252929, 0.00194906, 0.00257001, 0.0033886, 0.00447902, 0.00597657, 0.0077999, 0.010111, 0.0131682, 0.0136283, 0.0232701, 0.040096, 0.0695593, 0.11547, 0.188365, 0.224126, 0.453195, 0.735385, 0.612546, 0.702625, 0.84789};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.90101399999999992e-03;
+ Float_t pol1 = 1.03004500000000005e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(3, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Antiproton2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, -0.00162998, 0.00135553, 0.00268008, -2.88326e-05, 0.00717294, 0.00338302, 0.0098108, 0.0128466, 0.0121947, 0.0198757, 0.0265091, 0.0285274, 0.0366512, 0.0396301, 0.0494639, 0.0573915, 0.060973, 0.0692938, 0.0779223, 0.0859542, 0.105306, 0.123225, 0.124215, 0.133615, 0.145517, 0.14513, 0.152834, 0.154076, 0.149022, 0.158324, 0.141536, 0.0908961, 0.15833, 0.0454533, 0.195242, -0.368495, -0.0699533, -0.320681, 1.18474};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00574103, 0.00472569, 0.00408722, 0.00379418, 0.00251462, 0.00241207, 0.00178918, 0.00162871, 0.00159259, 0.00161675, 0.00174712, 0.00191264, 0.00211679, 0.0023059, 0.00242345, 0.00256207, 0.00273003, 0.00293429, 0.00315888, 0.00229873, 0.00285069, 0.00355799, 0.00442805, 0.00378705, 0.00477178, 0.00603747, 0.00764458, 0.00760955, 0.0121272, 0.0190318, 0.0291333, 0.0447506, 0.0639781, 0.0781551, 0.149547, 0.31162, 0.336667, 0.414484, 0.628442};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.60641395006084133e-03;
+ Float_t pol1 = 1.86671983155921230e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(3, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Pion3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.00514108, 0.00672007, 0.00967282, 0.012633, 0.0156524, 0.0188224, 0.0237045, 0.0299925, 0.0361635, 0.0422306, 0.0474108, 0.0534242, 0.0594919, 0.0656865, 0.0688581, 0.0724254, 0.0791741, 0.0818226, 0.0878019, 0.088663, 0.0937712, 0.0953295, 0.0966741, 0.10527, 0.0982133, 0.100045, 0.0955392, 0.103438, 0.0861584, 0.0826865, 0.0631282, 0.0609323, 0.0296266, 0.0360597, 0.0527848, 0.0153368, -0.00640239, 0.0210628, -0.113878, -0.0420435, 0.0684772};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.000387513, 0.000382062, 0.000399717, 0.000457563, 0.000526693, 0.000582927, 0.000347414, 0.000373975, 0.000414497, 0.00045968, 0.000506558, 0.000583763, 0.000678084, 0.000797031, 0.000941195, 0.00107603, 0.00138966, 0.00149598, 0.00160715, 0.00172442, 0.00186579, 0.00139376, 0.00178089, 0.00227312, 0.00286831, 0.00355367, 0.00438117, 0.0053019, 0.00637583, 0.00578408, 0.00781772, 0.0102514, 0.0130533, 0.0160274, 0.0196597, 0.0177473, 0.0243562, 0.0317803, 0.0318796, 0.0419259, 0.0606142};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.36398699999999969e-03;
+ Float_t pol1 = 1.28090200000000000e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(4, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Kaon3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, -0.000448657, -0.000397745, 0.00223929, 0.0020443, 0.00766057, 0.0147414, 0.0166677, 0.0204658, 0.0273593, 0.0331384, 0.041485, 0.0472078, 0.0543817, 0.063844, 0.0672682, 0.0634426, 0.0772583, 0.0792137, 0.0800184, 0.0878916, 0.0868313, 0.101706, 0.0976556, 0.108331, 0.0940934, 0.0924703, 0.1065, 0.0925592, 0.0792342, 0.0528274, 0.0691005, -0.00104652, 0.0222572, 0.273817, -0.309606, 0.0212317, 0.47615, -0.542112, 2.11997, -1.47365};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00274573, 0.00226854, 0.00224066, 0.00285215, 0.00353177, 0.0015494, 0.0015083, 0.00161636, 0.0017295, 0.00178111, 0.00184845, 0.00193832, 0.00203435, 0.0021395, 0.00227017, 0.00237759, 0.00261493, 0.00292321, 0.00330223, 0.00375077, 0.00290497, 0.0038074, 0.0049577, 0.00644356, 0.00841452, 0.0107389, 0.0136556, 0.0171925, 0.0169879, 0.0269182, 0.0418678, 0.0637165, 0.098592, 0.147218, 0.172146, 0.330455, 0.509198, 0.723025, 1.22814, 1.76288};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.36398699999999969e-03;
+ Float_t pol1 = 1.28090200000000000e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(4, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Antiproton3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, -0.00134837, 0.0129444, -0.00455304, -0.00508216, 0.00360254, 0.00671058, 0.0103081, 0.0153634, 0.0182269, 0.021164, 0.0300812, 0.0303042, 0.0409975, 0.0510105, 0.0536346, 0.0642107, 0.0722623, 0.0766332, 0.0832146, 0.0961881, 0.114689, 0.117237, 0.12622, 0.137184, 0.150702, 0.152045, 0.15773, 0.17032, 0.119951, 0.14929, 0.0586223, 0.1223, 0.0986238, 0.0153053, 0.133439, 0.254889, -0.0343679, 0.519122, 0.741424};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.00793538, 0.00654322, 0.00570034, 0.00530356, 0.00353453, 0.00341486, 0.00254129, 0.00232278, 0.00226879, 0.00231184, 0.00250502, 0.00275635, 0.00307742, 0.00341543, 0.00362731, 0.00385972, 0.00412541, 0.00445048, 0.00482212, 0.00351727, 0.00437345, 0.00543228, 0.00678885, 0.0057682, 0.00720011, 0.00902802, 0.0113323, 0.0111222, 0.0173232, 0.0261736, 0.0385091, 0.0554513, 0.078188, 0.0815409, 0.138491, 0.263223, 0.350662, 0.635402, 0.904071};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 3.24118098903184706e-03;
+ Float_t pol1 = 2.32134148520698243e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(4, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Pion4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.00470199, 0.00668197, 0.00976864, 0.0125668, 0.0165945, 0.0168669, 0.0223222, 0.0298682, 0.0368004, 0.0414957, 0.0466974, 0.0505491, 0.0584346, 0.0627035, 0.069766, 0.0730282, 0.0751266, 0.0784967, 0.0821991, 0.0868877, 0.0912784, 0.0915794, 0.0868381, 0.0954055, 0.0915013, 0.0850078, 0.078301, 0.0715817, 0.0778199, 0.0596224, 0.0704722, 0.0530317, 0.0880876, 0.018892, -0.0141094, 0.0397421, 0.0203508, 0.0266409, -0.0898402, 0.13245, 0.0615592};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.00061778, 0.000611419, 0.000642008, 0.00073809, 0.000853287, 0.000947983, 0.000563933, 0.000610585, 0.000681148, 0.000759122, 0.000837411, 0.000960857, 0.0011128, 0.00131825, 0.0015757, 0.0018105, 0.00228684, 0.00245037, 0.00261375, 0.00278801, 0.00300688, 0.00224118, 0.00285223, 0.00359793, 0.00451726, 0.00555495, 0.00680936, 0.00822186, 0.00977507, 0.00881085, 0.0118381, 0.0154212, 0.0192629, 0.0240823, 0.0291823, 0.0264709, 0.0360962, 0.0478299, 0.0477297, 0.0641824, 0.0930879};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 3.02312299999999996e-03;
+ Float_t pol1 = 1.63804399999999996e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(5, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Kaon4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, -0.000835722, -0.00111267, 0.00157752, 0.00530462, 0.0048155, 0.0162994, 0.0174401, 0.0175551, 0.0268205, 0.030134, 0.0433559, 0.0506271, 0.0540468, 0.05611, 0.0721392, 0.0651572, 0.0658194, 0.0746101, 0.0681309, 0.0737592, 0.0816147, 0.0780384, 0.0877877, 0.12141, 0.098673, 0.0775791, 0.103087, 0.0484423, 0.131149, 0.121459, -0.00237364, -0.0762335, 0.16375, -0.0902876, 0.255197, 0.320249, 0.501913, 0.241749, 0.982189, 0.100093};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00431504, 0.00356388, 0.00349553, 0.00436078, 0.00555725, 0.00247842, 0.00240435, 0.00259563, 0.00282875, 0.00294149, 0.00306727, 0.00322682, 0.00339458, 0.00358301, 0.0038133, 0.00400849, 0.00441698, 0.00494144, 0.00558109, 0.0063388, 0.00489129, 0.00641331, 0.00839007, 0.0107902, 0.014018, 0.0177179, 0.0222906, 0.0281227, 0.0272413, 0.0424294, 0.0655903, 0.100751, 0.148188, 0.20562, 0.253328, 0.548881, 0.746892, 1.45581, 2.2303, 0};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 3.02312299999999996e-03;
+ Float_t pol1 = 1.63804399999999996e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(5, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Antiproton4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, -0.00160495, -0.00375938, 0.00225361, -0.00138298, 0.00672974, 0.0146752, 0.0157013, 0.0181489, 0.0126964, 0.0253593, 0.0215832, 0.029294, 0.034828, 0.0494889, 0.0590901, 0.059864, 0.0638435, 0.0902087, 0.0877695, 0.0938779, 0.113694, 0.112781, 0.1215, 0.114081, 0.128978, 0.141657, 0.0967336, 0.113659, 0.0814051, 0.11728, 0.0545098, 0.302757, 0.121751, -0.0440605, -0.285575, -0.236346, -0.156475, -0.66292, 0.0716732};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.0118804, 0.00987968, 0.00863847, 0.00805332, 0.00541803, 0.00525946, 0.00392364, 0.00362233, 0.00357483, 0.00366657, 0.00398395, 0.00440916, 0.00496336, 0.00561059, 0.00604309, 0.00646088, 0.00695276, 0.00752836, 0.0081738, 0.00599113, 0.00750449, 0.00934324, 0.0117725, 0.0100423, 0.0125607, 0.0156953, 0.0197364, 0.0191932, 0.0295074, 0.0447571, 0.0636396, 0.0897913, 0.122813, 0.128055, 0.203871, 0.344707, 0.409889, 0.559407, 0.842927};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 4.14488622049151260e-03;
+ Float_t pol1 = 2.96857730797800597e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(5, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Pion5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.00348915, 0.00756235, 0.0107608, 0.00988755, 0.0121196, 0.0204889, 0.0220417, 0.030525, 0.0316641, 0.0401874, 0.0432457, 0.0534317, 0.0556032, 0.0610604, 0.0638937, 0.0631415, 0.0672388, 0.0790177, 0.0733123, 0.0786108, 0.0841621, 0.0848912, 0.0758076, 0.0703749, 0.0833439, 0.0778629, 0.0876323, 0.0388327, 0.0640147, 0.0516244, 0.0726542, 0.0812565, 0.0449663, -0.0553643, 0.0332307, 0.203045, 0.133275, 0.169177, 0.056018, -0.26421, -0.440226};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.00124936, 0.00123461, 0.0013016, 0.00150388, 0.00174677, 0.00194891, 0.00115884, 0.00126079, 0.00141183, 0.00157959, 0.00175432, 0.00202357, 0.00235303, 0.00278943, 0.00333422, 0.0038491, 0.00485018, 0.00519756, 0.00553165, 0.00591171, 0.00637311, 0.00473058, 0.00597128, 0.00750991, 0.00931667, 0.0114766, 0.0139393, 0.016774, 0.0199227, 0.0177383, 0.0237252, 0.0309059, 0.0389086, 0.0485901, 0.0578131, 0.0533689, 0.0743548, 0.0972631, 0.0985038, 0.13383, 0.197948};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 4.01257199999999984e-03;
+ Float_t pol1 = 2.17416299999999979e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(6, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Kaon5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.00792801, 0.00266082, 0.00470314, -0.00978977, -0.00565417, 0.0175624, 0.0186389, 0.0245958, 0.0396072, 0.0361056, 0.0526261, 0.0490507, 0.0426577, 0.0705987, 0.0541062, 0.0705978, 0.0609208, 0.07822, 0.0705974, 0.0903856, 0.0910678, 0.0668338, 0.0912261, 0.0751016, 0.0704388, 0.113234, 0.101156, 0.100512, 0.00977196, 0.0365165, 0.0487332, 0.223454, -0.042882, -0.278059, -0.434993, -0.428813, 3.15745, 0.0246815, 5.204, 1.15718};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.00854556, 0.00710258, 0.00701836, 0.00878387, 0.0111126, 0.00502841, 0.00493816, 0.00538809, 0.00590501, 0.00619556, 0.00648759, 0.00683347, 0.00718756, 0.00754521, 0.0079971, 0.00837843, 0.00924004, 0.0103362, 0.0116509, 0.0132779, 0.0102584, 0.0134035, 0.017172, 0.0220316, 0.0277159, 0.0343268, 0.0430676, 0.0526704, 0.0495564, 0.0733204, 0.106265, 0.150402, 0.212986, 0.312029, 0.337181, 0.54166, 1.02797, 1.06409, 2.42013, 6.94904};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 4.01257199999999984e-03;
+ Float_t pol1 = 2.17416299999999979e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(6, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Antiproton5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.0192241, 0.0260949, 0.0182832, -0.00275147, 0.0187805, 0.00631485, 0.0211281, 0.0259732, 0.0239513, 0.0400317, 0.0491792, 0.0397261, 0.0519205, 0.0519361, 0.0752147, 0.0842076, 0.07053, 0.0909382, 0.0816053, 0.0891785, 0.110612, 0.077322, 0.144557, 0.109386, 0.119593, 0.0787762, 0.0846064, 0.104219, 0.0807165, 0.0144733, 0.269359, -0.0582495, 0.247274, -0.709632, 0.214561, -0.705862, 1.36533, -0.323964, -0.366863};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.0223046, 0.0186193, 0.0164312, 0.0154014, 0.0104109, 0.0102522, 0.00769725, 0.00723415, 0.00717281, 0.00744624, 0.00819774, 0.00914984, 0.0103872, 0.0118351, 0.0128888, 0.0138632, 0.0150433, 0.0163627, 0.0178012, 0.013148, 0.0165023, 0.0206064, 0.0255859, 0.0222043, 0.0275954, 0.0343904, 0.0425941, 0.0410592, 0.0613099, 0.0888349, 0.127822, 0.177487, 0.232908, 0.244446, 0.385938, 0.593035, 0.727183, 0.763612, 1.33937};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 5.50148450680349593e-03;
+ Float_t pol1 = 3.94017620709329313e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(6, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Pion6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0.00532019, 0.00818378, 0.00724118, 0.00516368, 0.0128364, 0.0226381, 0.0233119, 0.0242261, 0.0404504, 0.0300591, 0.0367223, 0.0392187, 0.0631186, 0.0534841, 0.0547624, 0.0693861, 0.0707018, 0.0330524, 0.0641408, 0.0326427, 0.0693289, 0.0732374, 0.056526, 0.0186195, 0.13461, -0.00250564, -0.0807247, -0.0230955, 0.0770975, -0.074968, 0.114935, -0.0557285, 0.0529142, -0.115263, -0.265437, 0.025273, 0.163827, 0.357759, -0.314276, 0.815976, 0.15717};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.00354324, 0.00351164, 0.00371981, 0.0043181, 0.00504426, 0.00564883, 0.00336921, 0.00369073, 0.00416028, 0.00467844, 0.00520676, 0.0060233, 0.00700758, 0.00830575, 0.00992362, 0.0114483, 0.0143172, 0.0152843, 0.01618, 0.0171645, 0.018547, 0.0137816, 0.0173176, 0.0216648, 0.0269479, 0.0326113, 0.0392359, 0.0470618, 0.0553329, 0.0496574, 0.0657208, 0.0853741, 0.107096, 0.134301, 0.158415, 0.150224, 0.200109, 0.282743, 0.282242, 0.388098, 0.600491};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 5.49768000000000045e-03;
+ Float_t pol1 = 2.97884999999999990e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(7, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Kaon6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0.0197483, 0.0180058, -0.0171612, 0.0491509, 0.0332618, 0.0129175, 0.00558811, -0.00699739, 0.0317913, 0.0267255, 0.0401873, 0.0714799, 0.0342715, 0.0109885, 0.0215154, 0.0293005, 0.0669465, 0.0296294, 0.0647696, 0.129599, 0.0300014, 0.113043, 0.0821695, -0.0340911, 0.0442565, 0.165024, -0.0487434, -0.0213451, 0.0183962, 0.17259, 0.6626, -0.785362, 0.671771, 0.448768, -0.0679629, 0.861771, 4.27246, -2.42423, 0.39535, 4.5634};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.0239986, 0.0202105, 0.0206189, 0.0280924, 0.034233, 0.0146649, 0.0143844, 0.0157827, 0.0175924, 0.0185466, 0.0195311, 0.0206602, 0.0217104, 0.0228648, 0.0242888, 0.025484, 0.0282024, 0.0315494, 0.035468, 0.0404523, 0.0311365, 0.0404745, 0.0517413, 0.0641674, 0.082981, 0.103051, 0.126052, 0.154289, 0.144323, 0.217221, 0.303621, 0.412496, 0.605089, 0.792056, 0.900304, 1.79174, 2.68906, 5.38102, 0, 12.1419};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ //printf("%f %f %f\n",xrb[i],yrb[i],erb[i]);
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 5.49768000000000045e-03;
+ Float_t pol1 = 2.97884999999999990e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(7, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Antiproton6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, -0.0158129, 0.0656096, 0.0124522, 0.00267904, -0.024072, -0.0102232, 0.0401282, 0.0782716, 0.0132832, 0.0439476, 0.0226909, 0.0658784, 0.0467835, 0.0536947, 0.0234852, 0.0946235, 0.0983099, 0.0460588, 0.098392, 0.127964, 0.0978314, 0.268099, 0.138069, 0.18096, 0.0490962, -0.0279796, 0.33413, 0.312404, 0.0128821, 0.41463, 0.321723, 0.166142, -0.92738, -1.15805, -1.08636, -1.1947, 1.47742, -1.20375, 1.79054};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.0586293, 0.0494651, 0.0436259, 0.0414706, 0.0282552, 0.0281392, 0.0213093, 0.0203187, 0.0205207, 0.0215662, 0.0237977, 0.0268047, 0.0308095, 0.0356603, 0.0391952, 0.042407, 0.0463146, 0.0506837, 0.0550799, 0.0410941, 0.0513746, 0.0644241, 0.0820897, 0.0689592, 0.0852705, 0.105254, 0.130132, 0.12491, 0.185621, 0.265899, 0.381963, 0.506455, 0.65307, 0.689405, 0.991451, 1.50079, 1.63196, 3.34345, 4.67234};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 7.53765601848897532e-03;
+ Float_t pol1 = 5.39848705646177145e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(7, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Pion7080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, -0.0277715, 0.0200781, -0.147342, -0.0910199, 0.138053, -0.135879, 0.13, 0.00721135, 0.169047, 0.118246, 0.150001, 0.154404, 0.0494712, 0.289205, 0.0683699, 0.221813, 0.323357, 0.723906, 0.195442, 0.0600025, -0.551415, -0.0983314, -0.0333938, 0.391585, -0.0025392, 0.751968, -0.266348, -0.381468, 1.40929, -1.07184, -0.402591, 1.12346, -0.341909, 0.393444, 0.544109, 0.695897, -6.6012, -5.45095, -2.99495, -5.37993, -14.2584};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.0585941, 0.0578992, 0.0615916, 0.0718761, 0.0843703, 0.0949434, 0.0568047, 0.0626236, 0.0711161, 0.0805044, 0.0899988, 0.103695, 0.120911, 0.143206, 0.170331, 0.195689, 0.24354, 0.261, 0.274216, 0.291895, 0.315833, 0.234549, 0.294646, 0.363354, 0.446777, 0.548363, 0.657545, 0.786572, 0.929265, 0.817846, 1.09839, 1.40458, 1.78799, 2.15641, 2.71042, 2.50982, 3.42489, 4.76495, 4.69896, 6.3885, 11.134};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 8.29529000000000030e-03;
+ Float_t pol1 = 5.60073999999999989e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPi(8, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Kaon7080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, -0.0288316, -0.0592418, 0.369199, 0.575608, 0.0766474, -0.1637, 0.278165, 0.177826, -0.0377868, 0.63419, 0.0407312, -0.0816281, 0.255651, -0.0857342, -0.758954, 0.43096, 0.361551, 0.228773, 0.0348557, 1.36953, -0.264354, 0.774332, -0.0470566, 0.259239, 1.14279, -0.28058, -1.18877, -1.3862, 0.258608, -4.08418, -3.95216, 2.38053, 1.97998, -7.55988, 3.81951, -12.191, -18.1662, 39.2848, -0.47591, 2.15941};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0.396338, 0.330962, 0.320101, 0.378465, 0.517482, 0.248631, 0.244079, 0.266511, 0.301912, 0.324328, 0.34321, 0.361752, 0.380482, 0.395796, 0.417082, 0.440378, 0.482559, 0.541749, 0.61127, 0.699858, 0.539332, 0.711999, 0.905082, 1.15617, 1.39784, 1.72269, 2.12391, 2.55149, 2.41808, 3.44732, 4.75497, 7.01377, 9.18817, 11.0011, 12.3568, 20.7339, 35.7767, 47.8611, 0, 0};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 8.29529000000000030e-03;
+ Float_t pol1 = 5.60073999999999989e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systKa(8, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3Antiproton7080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1,Int_t rebin=1)
+{
+ //commentme
+ Int_t _nPoints = 45;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.5, 8.5, 9.5, 11, 13.5, 17.5};
+ Double_t _y[] = {0, 0, 0, 0, 0, 0, 0.781035, 0.265145, -0.629633, 0.067364, -0.224935, -0.248775, -0.0243976, -0.0547503, -0.206082, -0.320101, 0.0315955, 0.472627, -1.13402, 0.461416, 0.0404126, 0.763037, -0.155347, 0.107662, -0.543443, 0.176083, 0.833912, -0.640997, -0.489657, 1.29716, -0.302417, -0.145165, 3.6357, -2.42992, 1.71601, 9.63302, -5.31106, -2.49473, 15.5048, -2.05208, 28.5906, -63.943, -57.8212, 13.7189, -51.4378};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0, 0, 0.907785, 0.767146, 0.684745, 0.650857, 0.450223, 0.454094, 0.348794, 0.337984, 0.345745, 0.366159, 0.405809, 0.461621, 0.529708, 0.62245, 0.700744, 0.759008, 0.834023, 0.909172, 1.00179, 0.743342, 0.938799, 1.16354, 1.42633, 1.24775, 1.5373, 1.85767, 2.31073, 2.13039, 3.05418, 4.28533, 6.58975, 8.00336, 9.78783, 10.9298, 15.4178, 23.7608, 22.9556, 34.1062, 44.7479};
+
+ // rebinning
+ Int_t npRB = 0;
+ Double_t xrb[100];
+ Double_t yrb[100];
+ Double_t erb[100];
+
+ if(rebin > 1){
+ for(Int_t i=first;i<=last;){
+ Double_t sumw = 0;
+ xrb[npRB] = 0;
+ yrb[npRB] = 0;
+ erb[npRB] = 0;
+ for(Int_t j=0;j<rebin&&i <=last;j++){
+ Double_t weight = _yerr[i] * _yerr[i];
+ if(weight > 0){
+ weight = 1./weight;
+ sumw += weight;
+ xrb[npRB] += weight * _x[i];
+ yrb[npRB] += weight * _y[i];
+ erb[npRB] += weight * weight * _yerr[i] * _yerr[i];
+ }
+ i++;
+ }
+ if(sumw > 0){
+ xrb[npRB] /= sumw;
+ yrb[npRB] /= sumw;
+ erb[npRB] = TMath::Sqrt(erb[npRB]) / sumw;
+ }
+ npRB++;
+ }
+
+ _nPoints = npRB;
+ first = 0;
+ last = npRB-1;
+ for(Int_t i=0; i < npRB;i++){
+ _x[i] = xrb[i];
+ _y[i] = yrb[i];
+ _yerr[i] = erb[i];
+ }
+ }
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.13733682403531055e-02;
+ Float_t pol1 = 8.14563321585857515e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = _y[i]*systPr(8, _x[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr + nonflow*nonflow);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+Float_t systPiV3(Int_t ic,Float_t pt){
+ Float_t e0 = 0.04; // event plane res
+ Float_t e1 = 0;//nonflow(ic,pt);
+ Float_t e2 = 0;//NUO(ic,pt);
+ Float_t e3 = PIDpi(ic,pt);
+ Float_t e4 = NUOtofall(ic,pt);
+
+ return TMath::Sqrt(e0*e0+e1*e1+e2*e2+e3*e3+e4*e4);
+}
+
+Float_t systKaV3(Int_t ic,Float_t pt){
+ Float_t e0 = 0.04; // event plane res
+ Float_t e1 = 0;//nonflow(ic,pt);
+ Float_t e2 = 0;//NUO(ic,pt);
+ Float_t e3 = PIDka(ic,pt);
+ Float_t e4 = NUOtofall(ic,pt);
+ Float_t e5 = NUOtofka(ic,pt);
+
+ return TMath::Sqrt(e0*e0+e1*e1+e2*e2+e3*e3+e4*e4+e5*e5);
+}
+
+Float_t systPrV3(Int_t ic,Float_t pt){
+ Float_t e0 = 0.04; // event plane res
+ Float_t e1 = 0;//nonflow(ic,pt);
+ Float_t e2 = 0;//NUO(ic,pt);
+ Float_t e3 = PIDpr(ic,pt);
+ Float_t e4 = NUOtofall(ic,pt);
+ Float_t e5 = NUOtofpr(ic,pt);
+ Float_t e6 = FeedDown(ic,pt);
+
+ return TMath::Sqrt(e0*e0+e1*e1+e2*e2+e3*e3+e4*e4+e5*e5+e6*e6);
+}
+
+
+// phi v3 in 10-20% with LHC11h data
+TGraphErrors* v3QC2Phi1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1){
+ Double_t _x[ ] = {0.6, 1.2, 1.8, 2.4, 3, 4, 5};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ const Double_t v3QC2[] = {0.0102678, 0.0124233, 0.048642, 0.0545929, 0.0748703, 0.0682869 };
+ const Double_t v3QC2err[] = {0.0059634, 0.00477554, 0.00424124, 0.00477529, 0.00597224, 0.0122696 };
+ Int_t _nPoints = 6;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &v3QC2[first], &_xerr[first], &v3QC2err[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+
+}
+
+TGraphErrors* v3SPPhi1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1){
+ const Double_t v3SP[] = {0.0031926, 0.00884663, 0.046138, 0.0569548, 0.0814731, 0.0734251};
+ const Double_t v3SPerr[] = {0.0125239, 0.0101962, 0.00935323, 0.0106264, 0.0133925, 0.0277158 };
+ Double_t _x[ ] = {0.6, 1.2, 1.8, 2.4, 3, 4, 5};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ //commentme
+ Int_t _nPoints = 6;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &v3SP[first], &_xerr[first], &v3SPerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2PionAlex0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.0572121, 0.0503675, 0.0375937, 0.0268805, 0.0266244, 0.00924442, 0.0159123, 0.0441546, -0.0248131, 0.0214811, 0.0730123};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00201358, 0.00304022, 0.00437662, 0.0060147, 0.00619144, 0.00936874, 0.0130334, 0.0137247, 0.0214058, 0.0253415, 0.0478934};
+ Double_t _yerrH[] = {0.00201358, 0.00304022, 0.00437662, 0.0060147, 0.00619144, 0.00936874, 0.0130334, 0.0137247, 0.0214058, 0.0253415, 0.0478934};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 1.23867300000000003e-03;
+ Float_t pol1 = 6.71160999999999980e-04;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2PionAlex0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.100286, 0.0951594, 0.0870573, 0.0786874, 0.0653645, 0.0541408, 0.0457221, 0.0482269, 0.0519502, 0.0084316, 0.01122};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.0015204, 0.00226955, 0.00323721, 0.00443409, 0.00452888, 0.00689104, 0.00966223, 0.0102573, 0.0160961, 0.019199, 0.0347209};
+ Double_t _yerrH[] = {0.0015204, 0.00226955, 0.00323721, 0.00443409, 0.00452888, 0.00689104, 0.00966223, 0.0102573, 0.0160961, 0.019199, 0.0347209};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 1.34651999999999992e-03;
+ Float_t pol1 = 7.29597999999999922e-04;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2PionAlex1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.148558, 0.13737, 0.127354, 0.107954, 0.0923903, 0.0770206, 0.0654796, 0.0618298, 0.064932, 0.0533334, 0.0544499};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00101876, 0.00150302, 0.00211816, 0.00287069, 0.00290956, 0.00443253, 0.00620384, 0.00660053, 0.0104934, 0.012534, 0.02299};
+ Double_t _yerrH[] = {0.00101876, 0.00150302, 0.00211816, 0.00287069, 0.00290956, 0.00443253, 0.00620384, 0.00660053, 0.0104934, 0.012534, 0.02299};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 7.36284000000000027e-04;
+ Float_t pol1 = 8.43209000000000037e-04;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2PionAlex2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.184662, 0.172692, 0.158474, 0.133359, 0.121578, 0.0985604, 0.0726206, 0.0936145, 0.0556499, 0.0463445, 0.0218997};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00115285, 0.00167411, 0.00233323, 0.00311742, 0.00316527, 0.00477094, 0.00668583, 0.00706099, 0.0114757, 0.0134119, 0.0255548};
+ Double_t _yerrH[] = {0.00115285, 0.00167411, 0.00233323, 0.00311742, 0.00316527, 0.00477094, 0.00668583, 0.00706099, 0.0114757, 0.0134119, 0.0255548};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 1.90101399999999992e-03;
+ Float_t pol1 = 1.03004500000000005e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2PionAlex3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.201648, 0.188309, 0.170016, 0.158705, 0.132905, 0.107812, 0.104791, 0.0941046, 0.0588267, 0.033593, 0.0528952};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.0014898, 0.0021307, 0.00292622, 0.00390727, 0.0038914, 0.00588152, 0.00829931, 0.00880313, 0.0140397, 0.0171821, 0.031647};
+ Double_t _yerrH[] = {0.0014898, 0.0021307, 0.00292622, 0.00390727, 0.0038914, 0.00588152, 0.00829931, 0.00880313, 0.0140397, 0.0171821, 0.031647};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 2.36398699999999969e-03;
+ Float_t pol1 = 1.28090200000000000e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2PionAlex4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.20446, 0.185559, 0.177906, 0.163602, 0.141989, 0.127367, 0.105003, 0.100395, 0.110096, 0.11953, 0.0644066};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00220519, 0.00310504, 0.00420546, 0.00550637, 0.00551497, 0.00824085, 0.0116214, 0.0123683, 0.0201189, 0.0243315, 0.044922};
+ Double_t _yerrH[] = {0.00220519, 0.00310504, 0.00420546, 0.00550637, 0.00551497, 0.00824085, 0.0116214, 0.0123683, 0.0201189, 0.0243315, 0.044922};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 3.02312299999999996e-03;
+ Float_t pol1 = 1.63804399999999996e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2PionAlex5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.193713, 0.190999, 0.162508, 0.161684, 0.129319, 0.139517, 0.108649, 0.131493, 0.0577825, 0.153995, 0.0963159};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00385242, 0.00531271, 0.00718802, 0.00946356, 0.00929931, 0.0136617, 0.0196584, 0.0210118, 0.0344036, 0.0421224, 0.0798216};
+ Double_t _yerrH[] = {0.00385242, 0.00531271, 0.00718802, 0.00946356, 0.00929931, 0.0136617, 0.0196584, 0.0210118, 0.0344036, 0.0421224, 0.0798216};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 4.01257199999999984e-03;
+ Float_t pol1 = 2.17416299999999979e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2PionAlex6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.182112, 0.159495, 0.126087, 0.169947, 0.119372, 0.0960817, 0.121692, 0.080404, 0.0940447, 0.0126981, 0.0345412};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00863382, 0.0117304, 0.0157993, 0.0203184, 0.0202819, 0.0300107, 0.0437674, 0.0456399, 0.0741986, 0.0879486, 0.175398};
+ Double_t _yerrH[] = {0.00863382, 0.0117304, 0.0157993, 0.0203184, 0.0202819, 0.0300107, 0.0437674, 0.0456399, 0.0741986, 0.0879486, 0.175398};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 5.49768000000000045e-03;
+ Float_t pol1 = 2.97884999999999990e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2PionAlex7080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.17601, 0.18709, 0.0865992, 0.180606, 0.157716, 0.123429, 0.294631, 0.275269, 0.238633, 0.299389, 0.21161};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.0256103, 0.0351521, 0.0468882, 0.0601322, 0.0589281, 0.0875188, 0.129327, 0.138888, 0.218522, 0.274498, 0.540804};
+ Double_t _yerrH[] = {0.0256103, 0.0351521, 0.0468882, 0.0601322, 0.0589281, 0.0875188, 0.129327, 0.138888, 0.218522, 0.274498, 0.540804};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 8.29529000000000030e-03;
+ Float_t pol1 = 5.60073999999999989e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2AntiprotonAlex0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.0803428, 0.0795488, 0.0823786, 0.0722152, 0.0553335, 0.079474, 0.0727801, -9.92707e-05, 0.0413631, 0.0473471, -0.0285734};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00239983, 0.00330892, 0.0047863, 0.00697627, 0.00807388, 0.0146574, 0.0229816, 0.0263452, 0.0433039, 0.0502205, 0.0823823};
+ Double_t _yerrH[] = {0.00239983, 0.00330892, 0.0047863, 0.00697627, 0.00807388, 0.0146574, 0.0229816, 0.0263452, 0.0433039, 0.0502205, 0.0823823};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 1.69829837126647719e-03;
+ Float_t pol1 = 1.21632530760273721e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2AntiprotonAlex0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.152701, 0.154497, 0.144623, 0.149111, 0.138367, 0.10334, 0.103953, 0.123783, 0.152709, 0.0364577, 0.11831};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00193571, 0.0026302, 0.00376345, 0.00542586, 0.00623612, 0.0112432, 0.0177243, 0.0202246, 0.0345635, 0.0402301, 0.0615073};
+ Double_t _yerrH[] = {0.00193571, 0.0026302, 0.00376345, 0.00542586, 0.00623612, 0.0112432, 0.0177243, 0.0202246, 0.0345635, 0.0402301, 0.0615073};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 1.84616637865581655e-03;
+ Float_t pol1 = 1.32222872399611561e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2AntiprotonAlex1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.215715, 0.220329, 0.213535, 0.20526, 0.179853, 0.164986, 0.144028, 0.121122, 0.08483, 0.0873156, 0.142706};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00134312, 0.0017999, 0.0025414, 0.00364127, 0.00414403, 0.00743048, 0.01166, 0.0136733, 0.0240196, 0.0273348, 0.0425547};
+ Double_t _yerrH[] = {0.00134312, 0.0017999, 0.0025414, 0.00364127, 0.00414403, 0.00743048, 0.01166, 0.0136733, 0.0240196, 0.0273348, 0.0425547};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 2.13364693747489361e-03;
+ Float_t pol1 = 1.52812297971200361e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2AntiprotonAlex2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.267297, 0.271003, 0.264474, 0.253482, 0.228673, 0.175124, 0.134638, 0.135447, 0.14589, 0.13513, 0.267056};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00158214, 0.00209045, 0.0029266, 0.00409535, 0.00461357, 0.00827324, 0.0130239, 0.0151731, 0.0255994, 0.0331381, 0.0517058};
+ Double_t _yerrH[] = {0.00158214, 0.00209045, 0.0029266, 0.00409535, 0.00461357, 0.00827324, 0.0130239, 0.0151731, 0.0255994, 0.0331381, 0.0517058};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 2.60641395006084133e-03;
+ Float_t pol1 = 1.86671983155921230e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2AntiprotonAlex3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.29359, 0.299738, 0.285779, 0.261864, 0.227056, 0.187394, 0.167713, 0.167319, 0.0600002, 0.186913, 0.185933};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00212147, 0.00278448, 0.00381831, 0.00531457, 0.0059205, 0.0103991, 0.016121, 0.018671, 0.0338814, 0.0395379, 0.0737746};
+ Double_t _yerrH[] = {0.00212147, 0.00278448, 0.00381831, 0.00531457, 0.0059205, 0.0103991, 0.016121, 0.018671, 0.0338814, 0.0395379, 0.0737746};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 3.24118098903184706e-03;
+ Float_t pol1 = 2.32134148520698243e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2AntiprotonAlex4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.29195, 0.277526, 0.285899, 0.258206, 0.232818, 0.208127, 0.149166, 0.165656, 0.132402, 0.0834634, 0.139781};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.0032595, 0.00422106, 0.00576192, 0.00787184, 0.00847629, 0.0143821, 0.0225136, 0.0266895, 0.0474944, 0.0639686, 0.097342};
+ Double_t _yerrH[] = {0.0032595, 0.00422106, 0.00576192, 0.00787184, 0.00847629, 0.0143821, 0.0225136, 0.0266895, 0.0474944, 0.0639686, 0.097342};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 4.14488622049151260e-03;
+ Float_t pol1 = 2.96857730797800597e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2AntiprotonAlex5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.260472, 0.267568, 0.260439, 0.272361, 0.211514, 0.19635, 0.130636, 0.153759, 0.179847, 0.155681, -0.199146};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.00584754, 0.00745765, 0.00994934, 0.0133111, 0.0142698, 0.0240255, 0.0377183, 0.0435218, 0.0758897, 0.0932454, 0.157862};
+ Double_t _yerrH[] = {0.00584754, 0.00745765, 0.00994934, 0.0133111, 0.0142698, 0.0240255, 0.0377183, 0.0435218, 0.0758897, 0.0932454, 0.157862};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 5.50148450680349593e-03;
+ Float_t pol1 = 3.94017620709329313e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2AntiprotonAlex6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.265336, 0.217832, 0.223959, 0.179655, 0.143289, 0.157325, 0.115741, 0.197337, 0.139223, 0.220918, -1.13372};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.0133475, 0.0168104, 0.0220827, 0.0299551, 0.0316788, 0.0525262, 0.0819623, 0.0973168, 0.159925, 0.207026, 0.346889};
+ Double_t _yerrH[] = {0.0133475, 0.0168104, 0.0220827, 0.0299551, 0.0316788, 0.0525262, 0.0819623, 0.0973168, 0.159925, 0.207026, 0.346889};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 7.53765601848897532e-03;
+ Float_t pol1 = 5.39848705646177145e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* v2AntiprotonAlex7080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.288452, 0.272661, 0.24954, 0.282237, 0.254303, 0.428618, 0.627356, 0.254672, -0.245046, 1.56461, 0.350998};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrL[] = {0.0411726, 0.0515451, 0.0685134, 0.090632, 0.0937251, 0.155169, 0.242241, 0.298679, 0.660934, 0.787338, 1.0507};
+ Double_t _yerrH[] = {0.0411726, 0.0515451, 0.0685134, 0.090632, 0.0937251, 0.155169, 0.242241, 0.298679, 0.660934, 0.787338, 1.0507};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerrL[i] = 0;
+ _yerrH[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ Float_t pol0 = 1.13733682403531055e-02;
+ Float_t pol1 = 8.14563321585857515e-03;
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = TMath::Sqrt(0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.003*0.003 + 0.01*0.01 + 0.05*0.05) * _y[i];
+ _yerrH[i] = TMath::Sqrt(_yerrH[i]*_yerrH[i] + systerr*systerr);
+
+ systerr = TMath::Sqrt(systerr*systerr + (pol0 + pol1*_x[i])*(pol0 + pol1*_x[i]));
+ _yerrL[i] = TMath::Sqrt(_yerrL[i]*_yerrL[i] + systerr*systerr);
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1,
+ &_x[first],
+ &_y[first],
+ &_xerr[first],
+ &_xerr[first],
+ &_yerrL[first],
+ &_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+
+
+ return graph;
+}
+
+TGraphAsymmErrors* mergeGraph(TGraphErrors *g1,TGraphAsymmErrors *g2,Float_t pt=3)
+{
+ Int_t np=0;
+ Double_t _x[100];
+ Double_t _xerr[100];
+ Double_t _y[100];
+ Double_t _yerrL[100];
+ Double_t _yerrH[100];
+ if(g1){
+ for(Int_t i=0;i < g1->GetN();i++){
+ if(g1->GetX()[i] < pt){
+ _x[np] = g1->GetX()[i];
+ _xerr[np] = g1->GetEX()[i];
+ _y[np] = g1->GetY()[i];
+ _yerrL[np] = g1->GetEY()[i];
+ _yerrH[np] = g1->GetEY()[i];
+ np++;
+ }
+ }
+ }
+
+ if(g2){
+ for(Int_t i=0;i < g2->GetN();i++){
+ if(g2->GetX()[i] > pt){
+ _x[np] = g2->GetX()[i];
+ _xerr[np] = g2->GetEXlow()[i];
+ _y[np] = g2->GetY()[i];
+ _yerrL[np] = g2->GetEYlow()[i];
+ _yerrH[np] = g2->GetEYhigh()[i];
+ np++;
+ }
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(np,
+ _x,
+ _y,
+ _xerr,
+ _xerr,
+ _yerrL,
+ _yerrH);
+ return graph;
+}
+
+TGraphAsymmErrors* mergeGraph(TGraphAsymmErrors *g1,TGraphAsymmErrors *g2,Float_t pt=3)
+{
+ Int_t np=0;
+ Double_t _x[100];
+ Double_t _xerr[100];
+ Double_t _y[100];
+ Double_t _yerrL[100];
+ Double_t _yerrH[100];
+
+ if(g1){
+ for(Int_t i=0;i < g1->GetN();i++){
+ if(g1->GetX()[i] < pt){
+ _x[np] = g1->GetX()[i];
+ _xerr[np] = g1->GetEXlow()[i];
+ _y[np] = g1->GetY()[i];
+ _yerrL[np] = g1->GetEYlow()[i];
+ _yerrH[np] = g1->GetEYhigh()[i];
+ np++;
+ }
+ }
+ }
+
+ if(g2){
+ for(Int_t i=0;i < g2->GetN();i++){
+ if(g2->GetX()[i] > pt){
+ _x[np] = g2->GetX()[i];
+ _xerr[np] = g2->GetEXlow()[i];
+ _y[np] = g2->GetY()[i];
+ _yerrL[np] = g2->GetEYlow()[i];
+ _yerrH[np] = g2->GetEYhigh()[i];
+ np++;
+ }
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(np,
+ _x,
+ _y,
+ _xerr,
+ _xerr,
+ _yerrL,
+ _yerrH);
+ return graph;
+}
+
+TGraphErrors* v3PionAlex0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.0739456, 0.0727898, 0.0471398, 0.0381677, 0.0479825, 0.0139417, 0.0179028, 0.0395375, -0.0112012, -0.00243147, 0.0181051};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00311161, 0.00470213, 0.0067746, 0.00927911, 0.00956509, 0.0145144, 0.02021, 0.0211796, 0.0333082, 0.039139, 0.0719018};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.23867300000000003e-03;
+ Float_t pol1 = 6.71160999999999980e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3PionAlex0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.094798, 0.0852534, 0.0775351, 0.0629343, 0.048353, 0.0236994, 0.0133263, -0.00409467, 0.0381892, 0.00921291, 0.125329};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00323655, 0.00483726, 0.00689185, 0.00941221, 0.00965958, 0.0146739, 0.020628, 0.0217555, 0.0338957, 0.0406934, 0.0737968};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.34651999999999992e-03;
+ Float_t pol1 = 7.29597999999999922e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3PionAlex1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.0973472, 0.0790525, 0.0917722, 0.0810776, 0.0541923, 0.0569199, 0.0228887, 0.0146595, 0.0613978, 0.0654468, 0.0554691};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0026594, 0.00392309, 0.00551918, 0.007477, 0.0075928, 0.0115107, 0.0161408, 0.0171886, 0.0274932, 0.0326007, 0.0591033};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 7.36284000000000027e-04;
+ Float_t pol1 = 8.43209000000000037e-04;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3PionAlex2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.101055, 0.0875675, 0.0764201, 0.0896778, 0.0745688, 0.0508416, 0.0388729, 0.0392451, 0.0131711, -0.00475471, 0.163426};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00350531, 0.00508545, 0.00707063, 0.00944129, 0.0095415, 0.0143669, 0.0201868, 0.0214139, 0.0346041, 0.0406055, 0.0773843};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.90101399999999992e-03;
+ Float_t pol1 = 1.03004500000000005e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3PionAlex3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.0931397, 0.0940591, 0.0925068, 0.0748423, 0.0456136, 0.015763, 0.00281953, 0.019022, -0.0626833, 0.00124118, -0.0710237};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00505401, 0.00722202, 0.00992587, 0.0132183, 0.0131525, 0.019794, 0.0278607, 0.0295971, 0.0471327, 0.0572401, 0.103944};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.36398699999999969e-03;
+ Float_t pol1 = 1.28090200000000000e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3PionAlex4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.0737769, 0.0729844, 0.0669981, 0.0561869, 0.054891, -0.000311302, 0.00534945, 0.0473785, -0.0374926, -0.0609766, -0.0159348};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00821781, 0.0115396, 0.0156427, 0.0204538, 0.0204816, 0.030527, 0.0428393, 0.0459644, 0.0759178, 0.0894202, 0.162667};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 3.02312299999999996e-03;
+ Float_t pol1 = 1.63804399999999996e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3PionAlex5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.092788, 0.0365816, 0.0197854, 0.107325, 0.0648891, 0.0662658, 0.0233037, -0.0236122, -0.0682863, -0.207984, -0.336516};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0171159, 0.0236563, 0.0318208, 0.0416273, 0.0413343, 0.0610424, 0.0869106, 0.093073, 0.153723, 0.187896, 0.346795};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 4.01257199999999984e-03;
+ Float_t pol1 = 2.17416299999999979e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3PionAlex6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.0244232, -0.109517, -0.0827906, 0.161598, 0.0307236, -0.0999002, -0.392744, 0.145035, 0.152917, 0.0490188, 0.723248};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0426231, 0.0581957, 0.0778244, 0.100537, 0.0994573, 0.147997, 0.21388, 0.223613, 0.376758, 0.442241, 0.906303};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 5.49768000000000045e-03;
+ Float_t pol1 = 2.97884999999999990e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3AntiprotonAlex0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.0977845, 0.101319, 0.103091, 0.11351, 0.0722551, 0.10129, -0.00459366, 0.0529236, 0.173699, 0.0607847, 0.28877};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0037089, 0.00511687, 0.00740435, 0.0107892, 0.0124665, 0.0225462, 0.0361307, 0.0404895, 0.0672709, 0.0779826, 0.129084};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.69829837126647719e-03;
+ Float_t pol1 = 1.21632530760273721e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3AntiprotonAlex0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.110978, 0.119958, 0.134291, 0.111447, 0.114645, 0.0959741, 0.0778946, 0.0935617, 0.139158, 0.0898417, 0.035706};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00413053, 0.00561351, 0.0080384, 0.0115829, 0.0133399, 0.0239995, 0.0377082, 0.0437155, 0.0735175, 0.0854179, 0.133933};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 1.84616637865581655e-03;
+ Float_t pol1 = 1.32222872399611561e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3AntiprotonAlex1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.125172, 0.144867, 0.148934, 0.139593, 0.130398, 0.0804742, 0.0631514, 0.120612, -0.00968759, 0.0707184, -0.110791};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00353228, 0.00473819, 0.00666899, 0.00956468, 0.0108567, 0.0195176, 0.0305967, 0.0360753, 0.0642099, 0.0707663, 0.115075};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.13364693747489361e-03;
+ Float_t pol1 = 1.52812297971200361e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3AntiprotonAlex2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.137062, 0.133346, 0.138529, 0.143784, 0.12754, 0.101273, 0.0387196, 0.0968617, 0.110227, -0.103164, 0.252989};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00486502, 0.00644471, 0.00899533, 0.0125946, 0.0141578, 0.0251028, 0.0389365, 0.0461861, 0.0771875, 0.102432, 0.157139};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 2.60641395006084133e-03;
+ Float_t pol1 = 1.86671983155921230e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3AntiprotonAlex3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.131965, 0.139946, 0.158363, 0.0903046, 0.146713, 0.0872603, 0.113731, -0.124344, -0.000589159, 0.190572, -0.124482};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00729178, 0.00957906, 0.0131514, 0.01819, 0.0202096, 0.035221, 0.0537048, 0.0634878, 0.114044, 0.137072, 0.240824};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 3.24118098903184706e-03;
+ Float_t pol1 = 2.32134148520698243e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3AntiprotonAlex4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.138793, 0.145757, 0.0673552, 0.0754698, 0.165909, 0.14957, 0.0758562, -0.290112, -0.152356, -0.232926, 0.106716};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0122641, 0.015819, 0.0218204, 0.0294662, 0.0317047, 0.0533635, 0.0841067, 0.0986234, 0.179252, 0.226761, 0.366702};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 4.14488622049151260e-03;
+ Float_t pol1 = 2.96857730797800597e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3AntiprotonAlex5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.113443, 0.147393, 0.0654217, 0.155842, 0.0597213, -0.0416118, -0.14306, 0.273004, -0.328444, 0.192514, -0.127087};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0260424, 0.0332128, 0.0445912, 0.0593885, 0.0636087, 0.10658, 0.165977, 0.195681, 0.34504, 0.445066, 0.718467};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 5.50148450680349593e-03;
+ Float_t pol1 = 3.94017620709329313e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v3AntiprotonAlex6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 11;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 9, 11, 14, 18};
+ Double_t _y[] = {0.083703, 0.083255, 0.0590565, 0.0624293, 0.0867053, 0.247706, 0.576466, 0.0501761, 0.429465, 0.326308, 1.31989};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0663444, 0.0834688, 0.109026, 0.146809, 0.155555, 0.258989, 0.405504, 0.462926, 0.780885, 0.994817, 2.2086};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t pol0 = 7.53765601848897532e-03;
+ Float_t pol1 = 5.39848705646177145e-03;
+
+ Float_t nonflow = (pol0 + pol1*_x[i]);
+ Float_t systerr = TMath::Sqrt( nonflow*nonflow + (0.01*0.01 + 0.015*0.015 + 0.01*0.01 + 0.04*0.04 + 0.04*0.04 + 0.03*0.03 + 0.05*0.05)*_y[i]*_y[i]);
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// QM (SP eta gap > 1) by Mikolaj
+TGraphErrors* v22_etagap10_5060_pion(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, -0.0873219, 0.0597375, 0.0743915, 0.0931236, 0.109237, 0.122847, 0.135165, 0.150852, 0.160262, 0.166853, 0.178234, 0.192645, 0.192824, 0.196815, 0.200117, 0.202778, 0.1995, 0.210411, 0.214184, 0.223324, 0.217727, 0.213249, 0.208803, 0.209717, 0.178609, 0.226572, 0.230321, 0.243208, 0.177178, 0.197599, 0.263397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0.204799, 0.00488736, 0.0036102, 0.00391356, 0.00438879, 0.00490408, 0.00543342, 0.00607888, 0.00663274, 0.00717516, 0.0078937, 0.00876489, 0.00942504, 0.0102981, 0.0113314, 0.0125538, 0.0139245, 0.0158814, 0.0182328, 0.0208889, 0.0240269, 0.0277764, 0.0317578, 0.0359011, 0.0412365, 0.0445151, 0.0492254, 0.0546197, 0.0355352, 0.0709352, 0.465996, 0.110652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0.0999384, 0.00245063, 0.00153724, 0.00147518, 0.00156441, 0.00172669, 0.00192613, 0.00215318, 0.00241725, 0.00272092, 0.00306104, 0.00347236, 0.00392824, 0.0044454, 0.00506733, 0.00579985, 0.00667986, 0.0077041, 0.00901047, 0.0104883, 0.012436, 0.0144056, 0.0167576, 0.0190382, 0.0220889, 0.0237475, 0.0258547, 0.0288486, 0.0189844, 0.0390867, 0.250826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_4050_pion(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, -0.000724975, 0.0552354, 0.0732448, 0.0906073, 0.107367, 0.120443, 0.134765, 0.148343, 0.156962, 0.171834, 0.182009, 0.186255, 0.197146, 0.201325, 0.207395, 0.212444, 0.223133, 0.227715, 0.215306, 0.227535, 0.229997, 0.230652, 0.246553, 0.213974, 0.225505, 0.228866, 0.20663, 0.213873, 0.211377, 0.159562, 0.269798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0.12403, 0.00318662, 0.0027737, 0.0031637, 0.00364762, 0.00407577, 0.00455525, 0.00503037, 0.00539388, 0.00594982, 0.00639986, 0.00674716, 0.00729324, 0.00774568, 0.00832146, 0.00898665, 0.00986877, 0.0108603, 0.0118255, 0.013404, 0.0151841, 0.017233, 0.0197056, 0.0218697, 0.0247173, 0.0273353, 0.0300092, 0.0323873, 0.0218155, 0.0442529, 0.253422, 0.0522819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0.0661206, 0.00149826, 0.000936119, 0.000890212, 0.000936912, 0.00102774, 0.00114045, 0.00126956, 0.0014225, 0.00160352, 0.00179964, 0.002034, 0.00229325, 0.002606, 0.00297516, 0.0034027, 0.00390643, 0.00455883, 0.00535362, 0.00623856, 0.00738427, 0.00865204, 0.0100195, 0.0113015, 0.0129887, 0.014458, 0.0159583, 0.0168897, 0.0114366, 0.0240444, 0.139903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_3040_pion(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0.0134225, 0.0519218, 0.0665359, 0.0842276, 0.100815, 0.114049, 0.127699, 0.140248, 0.150695, 0.16182, 0.172197, 0.18134, 0.187407, 0.192411, 0.201391, 0.211336, 0.209113, 0.217154, 0.220327, 0.219292, 0.213611, 0.223944, 0.231156, 0.222101, 0.210007, 0.230393, 0.229598, 0.231779, 0.221272, 0.216799, 0.303872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0.0872183, 0.00247355, 0.00232267, 0.00276805, 0.00324864, 0.00365973, 0.00409325, 0.00450541, 0.00486738, 0.00526119, 0.00564843, 0.00602156, 0.00633633, 0.00665612, 0.00712018, 0.0076721, 0.00800948, 0.00870467, 0.00945645, 0.0103166, 0.0113037, 0.012766, 0.0144866, 0.0160066, 0.0177591, 0.019504, 0.0214444, 0.0231496, 0.0161895, 0.0316968, 0.202708, 0.0396501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0.0464175, 0.00105187, 0.000653968, 0.000618086, 0.000645372, 0.000704275, 0.000779312, 0.00086849, 0.000970154, 0.00108892, 0.00122422, 0.00138357, 0.00156242, 0.00177261, 0.00201701, 0.00231225, 0.00266135, 0.0030997, 0.00363381, 0.00428479, 0.00504451, 0.00586784, 0.00689493, 0.00788004, 0.00900252, 0.00993424, 0.010906, 0.0118421, 0.00803899, 0.0172747, 0.114742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_2030_pion(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0.0675354, 0.0453406, 0.0597064, 0.0729257, 0.0856194, 0.099743, 0.11087, 0.12233, 0.133139, 0.142766, 0.150798, 0.15726, 0.164193, 0.17088, 0.180412, 0.185874, 0.187267, 0.190105, 0.19678, 0.193095, 0.203633, 0.189152, 0.197994, 0.206382, 0.212811, 0.19176, 0.195015, 0.197307, 0.202853, 0.1925, 0.252937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0.065632, 0.00201808, 0.00201334, 0.00235429, 0.00272524, 0.00315311, 0.0035035, 0.0038686, 0.00422263, 0.00455118, 0.00484569, 0.00510894, 0.00540221, 0.00571347, 0.00612565, 0.00647902, 0.00677918, 0.00722552, 0.00786669, 0.00838991, 0.00940688, 0.0101343, 0.0114481, 0.0127734, 0.014505, 0.0155823, 0.0168149, 0.0184895, 0.0131523, 0.0251873, 0.161027, 0.0348376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0.0344332, 0.000816139, 0.0005061, 0.000476092, 0.00049599, 0.000538675, 0.000594465, 0.000658739, 0.000735579, 0.000824272, 0.000930675, 0.00104848, 0.00118504, 0.00134617, 0.00153402, 0.00176201, 0.00202544, 0.00237128, 0.00279278, 0.00327205, 0.0038541, 0.00454915, 0.0053078, 0.00607066, 0.00707512, 0.00785901, 0.00858144, 0.0094215, 0.00634443, 0.0135698, 0.0903221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_1020_pion(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, -0.0244474, 0.0361825, 0.0458614, 0.0568154, 0.0653387, 0.0761904, 0.0855912, 0.0931017, 0.100605, 0.108806, 0.115534, 0.122009, 0.12765, 0.133345, 0.139141, 0.140422, 0.142585, 0.149623, 0.153545, 0.157209, 0.158014, 0.159055, 0.161039, 0.163363, 0.160728, 0.173582, 0.151455, 0.159009, 0.162018, 0.148968, 0.552532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0.0549447, 0.00166051, 0.00157917, 0.00185472, 0.00210364, 0.00243219, 0.00272718, 0.0029743, 0.00322744, 0.00350813, 0.00375677, 0.00400998, 0.00425557, 0.00452476, 0.00482201, 0.00504417, 0.0053393, 0.00583931, 0.00636429, 0.00699075, 0.00768206, 0.00858417, 0.00960373, 0.0107919, 0.0120125, 0.0133585, 0.0142786, 0.0157435, 0.0111965, 0.0217748, 0.107326, 0.0304973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0.0297487, 0.000693128, 0.000430282, 0.000403147, 0.000418835, 0.000453801, 0.00049934, 0.000553943, 0.000617715, 0.000693185, 0.00078017, 0.000880407, 0.000998026, 0.0011363, 0.00129749, 0.00149084, 0.00171888, 0.00200843, 0.00237001, 0.00278848, 0.0032784, 0.00386639, 0.00452296, 0.005239, 0.00598587, 0.00667402, 0.00732162, 0.00816298, 0.00547164, 0.0118032, 0.0561392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_510_pion(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v22_etagap10_510_pion_nPoints = 32;
+ if (last>v22_etagap10_510_pion_nPoints-1) last=v22_etagap10_510_pion_nPoints-1;
+ if (last<0 && first<0) last=v22_etagap10_510_pion_nPoints-1;
+ if (last<0) last=v22_etagap10_510_pion_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v22_etagap10_510_pion_x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6};
+ Double_t v22_etagap10_510_pion_y[] = {0.,0.,0.,0.026881, 0.0316749, 0.0381939, 0.0462715, 0.0527852, 0.0589098, 0.0674904, 0.0711453, 0.0749032, 0.078903, 0.0833461, 0.0894323, 0.0928401, 0.097527, 0.0963054, 0.103171, 0.108102, 0.104966, 0.104179, 0.111621, 0.110965, 0.118524, 0.119141, 0.123375, 0.118692, 0.10753, 0.112698, 0.103193, 0.0966573};
+ Double_t v22_etagap10_510_pion_xerr[] = {0.,0.,0.,0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04};
+ Double_t v22_etagap10_510_pion_yerr[] = {0.,0.,0.,0.00214347, 0.00155063, 0.00162521, 0.00183525, 0.00205243, 0.00228006, 0.00258007, 0.00278512, 0.00301629, 0.00327933, 0.00358512, 0.00395689, 0.0043373, 0.00479985, 0.00524212, 0.00591262, 0.00673476, 0.00761607, 0.00876874, 0.0102147, 0.0118854, 0.013785, 0.0157642, 0.0180509, 0.0199667, 0.0219864, 0.0245517, 0.016479, 0.0353244};
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &v22_etagap10_510_pion_x[first], &v22_etagap10_510_pion_y[first], &v22_etagap10_510_pion_xerr[first], &v22_etagap10_510_pion_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_5060_kaon(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0, 0.0592854, 0.0581809, 0.0528559, 0.0758825, 0.0948136, 0.103104, 0.118047, 0.139711, 0.14803, 0.14964, 0.172821, 0.173198, 0.191228, 0.191121, 0.206676, 0.188007, 0.180187, 0.200772, 0.21883, 0.179475, 0.187122, 0.218256, 0.250577, 0.223592, 0.292999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0.0327399, 0.00952958, 0.00630952, 0.00536493, 0.0051041, 0.00505363, 0.00518118, 0.00541767, 0.00568562, 0.0060391, 0.00652267, 0.00706427, 0.00770117, 0.00846333, 0.00957273, 0.0109742, 0.0128912, 0.0151542, 0.0179697, 0.0223891, 0.0282206, 0.0392386, 0.0554708, 0.10338, 0.262149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0, 0.0623433, 0.0177094, 0.0118733, 0.0103362, 0.0100447, 0.0100381, 0.0104779, 0.0111214, 0.0116894, 0.0123778, 0.0135523, 0.0144775, 0.0158768, 0.017185, 0.0192743, 0.0216116, 0.0248209, 0.0293869, 0.0347478, 0.0427324, 0.0536825, 0.0742418, 0.104119, 0.180642, 0.555504, 0.0456015, 0.0717251, 0.202558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_4050_kaon(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0, 0.0619661, 0.0400546, 0.0619503, 0.0785653, 0.0916647, 0.105258, 0.118573, 0.140119, 0.148773, 0.157981, 0.167909, 0.176368, 0.190243, 0.197994, 0.192225, 0.201264, 0.208214, 0.217569, 0.215782, 0.209895, 0.205265, 0.214319, 0.231061, 0.257986, 0.383446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0.0201743, 0.00584789, 0.00382593, 0.00323562, 0.00303369, 0.00301693, 0.00305804, 0.00316891, 0.00329939, 0.00352794, 0.00377958, 0.00406431, 0.00447333, 0.00491623, 0.00554596, 0.00633044, 0.00740304, 0.0086718, 0.0104701, 0.0128577, 0.0165705, 0.0233379, 0.0316965, 0.0604997, 0.142815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0, 0.0368872, 0.010646, 0.00721477, 0.00638506, 0.00625038, 0.00641893, 0.00670512, 0.00724411, 0.00762642, 0.00811159, 0.00868884, 0.00928689, 0.0101344, 0.0109697, 0.0118869, 0.0132718, 0.015169, 0.0173855, 0.0205779, 0.025083, 0.031145, 0.0430324, 0.0585126, 0.102606, 0.255642, 0.0254592, 0.0349152, 0.0887712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_3040_kaon(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0, 0.000553789, 0.0404834, 0.0500686, 0.0659864, 0.0809581, 0.0979551, 0.111338, 0.125787, 0.138353, 0.152205, 0.162979, 0.171183, 0.178498, 0.189554, 0.194077, 0.195814, 0.204214, 0.210309, 0.215834, 0.206115, 0.227138, 0.20424, 0.216186, 0.203484, 0.1687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0.0142928, 0.00413782, 0.00269443, 0.00225036, 0.00211002, 0.00207131, 0.00208791, 0.00214672, 0.00224472, 0.00238231, 0.00255078, 0.00274784, 0.00298966, 0.00331916, 0.00372056, 0.00426177, 0.00498107, 0.00590833, 0.00707412, 0.0086493, 0.0114182, 0.0157553, 0.0219151, 0.0404066, 0.143742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0, 0.0259527, 0.00764997, 0.00519162, 0.00462467, 0.00462972, 0.0048717, 0.00515435, 0.00553526, 0.00593861, 0.00641789, 0.0068783, 0.00731213, 0.00780885, 0.00848646, 0.00915576, 0.00997916, 0.0112493, 0.0128153, 0.0148045, 0.017474, 0.022579, 0.0298356, 0.0427476, 0.0757909, 0.238668, 0.0178573, 0.0263078, 0.0551329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_2030_kaon(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0, 0.0212288, 0.0259616, 0.0411856, 0.0524764, 0.0668708, 0.0808397, 0.0942864, 0.106513, 0.119792, 0.130224, 0.139591, 0.15116, 0.15632, 0.16214, 0.1692, 0.170107, 0.183808, 0.194388, 0.191664, 0.192513, 0.192104, 0.197077, 0.200502, 0.182628, 0.147351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0.0107508, 0.00320911, 0.00207722, 0.00172773, 0.00161598, 0.00158404, 0.00158521, 0.00162636, 0.00169633, 0.00179334, 0.00191295, 0.00206472, 0.00224106, 0.00247143, 0.00279206, 0.00319885, 0.00375698, 0.00443323, 0.00534009, 0.00661798, 0.00862949, 0.0118678, 0.0174641, 0.030209, 0.100816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0, 0.0197657, 0.00587757, 0.00400434, 0.00356801, 0.0036119, 0.00382296, 0.00410052, 0.00441878, 0.00480124, 0.00516269, 0.00552864, 0.00597777, 0.00631951, 0.00674724, 0.00731513, 0.00790242, 0.00897728, 0.0101926, 0.0115865, 0.0137535, 0.0170439, 0.0226759, 0.0325735, 0.0548696, 0.18938, 0.0135812, 0.0203971, 0.0475816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_1020_kaon(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0, 0.026086, 0.0200684, 0.0287286, 0.0413946, 0.0518688, 0.0605028, 0.0735013, 0.0829178, 0.0920512, 0.0970675, 0.109182, 0.112781, 0.121785, 0.124268, 0.131138, 0.140937, 0.137646, 0.148586, 0.147178, 0.159076, 0.153502, 0.152984, 0.164356, 0.185492, 0.199013, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0.00909186, 0.00275495, 0.00176528, 0.00146439, 0.00136497, 0.00132616, 0.00132809, 0.00135637, 0.00141312, 0.00149465, 0.00159557, 0.00171572, 0.00187653, 0.00206897, 0.00234094, 0.00268047, 0.00314097, 0.00371948, 0.00447599, 0.00550291, 0.00716883, 0.0100772, 0.0149141, 0.0263166, 0.0846981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0, 0.0163953, 0.00499284, 0.00332771, 0.00295984, 0.00296082, 0.00305623, 0.00330957, 0.00354906, 0.00382349, 0.00403788, 0.00443445, 0.0046715, 0.00507456, 0.00539324, 0.00589863, 0.00656852, 0.00718652, 0.00826722, 0.00947331, 0.0113341, 0.0140336, 0.0190078, 0.0276842, 0.0481405, 0.142308, 0.0116544, 0.0178366, 0.0362519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_510_kaon(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v22_etagap10_510_kaon_nPoints = 26;
+ if (last>v22_etagap10_510_kaon_nPoints-1) last=v22_etagap10_510_kaon_nPoints-1;
+ if (last<0 && first<0) last=v22_etagap10_510_kaon_nPoints-1;
+ if (last<0) last=v22_etagap10_510_kaon_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v22_etagap10_510_kaon_x[] = {0.05, 0.15, 0.25,0.35,0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55};
+ Double_t v22_etagap10_510_kaon_y[] = {0.,0.,0.,0.,0.00966259, 0.0207807, 0.0256179, 0.0355533, 0.042711, 0.0502604, 0.0580054, 0.0591413, 0.0659689, 0.0769689, 0.076443, 0.0875564, 0.0921437, 0.0983687, 0.0969186, 0.0992941, 0.101035, 0.102316, 0.102327, 0.0984255, 0.119298, 0.138143};
+ Double_t v22_etagap10_510_kaon_xerr[] = {0.,0.,0.,0.,0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04};
+ Double_t v22_etagap10_510_kaon_yerr[] = {0.,0.,0.,0.,0.00784647, 0.00508557, 0.00427572, 0.00407675, 0.00403995, 0.00413015, 0.00430378, 0.0044739, 0.00477018, 0.00519501, 0.00552012, 0.00606902, 0.00663695, 0.00745315, 0.00835876, 0.009673, 0.0113138, 0.0136154, 0.0165971, 0.0213286, 0.0291213, 0.0427121};
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &v22_etagap10_510_kaon_x[first], &v22_etagap10_510_kaon_y[first], &v22_etagap10_510_kaon_xerr[first], &v22_etagap10_510_kaon_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_5060_antiproton(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0, 1.04828, 0.0216201, 0.0288792, 0.0475747, 0.0452145, 0.0510448, 0.0916252, 0.0800232, 0.0999849, 0.133603, 0.151354, 0.166441, 0.164859, 0.189033, 0.191063, 0.224191, 0.2235, 0.208137, 0.262829, 0.234087, 0.250857, 0.259322, 0.221027, 0.287725, 0.297794, 0.245738, 0.296381, 0.228615, 0.265392, 0.1527, 0.702683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0.00267392, 0.0480364, 0.0204747, 0.0141307, 0.0116684, 0.0105368, 0.0103799, 0.0102472, 0.0103013, 0.0106565, 0.0109217, 0.0113955, 0.0122391, 0.0130204, 0.0138631, 0.0148995, 0.0163369, 0.0172412, 0.0191165, 0.0208819, 0.0221608, 0.0248779, 0.0268306, 0.0292929, 0.0327247, 0.0364108, 0.0390226, 0.0242139, 0.0370034, 0.0681912, 0.36359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0, 0.0318153, 0.0863738, 0.0349737, 0.024328, 0.0204729, 0.0186663, 0.0184856, 0.0183288, 0.0185378, 0.0193167, 0.0201325, 0.0210981, 0.0223835, 0.0240191, 0.0257134, 0.0278661, 0.0303526, 0.0317838, 0.0355249, 0.0383376, 0.0412807, 0.0459884, 0.0500093, 0.0540488, 0.0595738, 0.0658101, 0.0698881, 0.0445687, 0.0687029, 0.124069, 0.596873, 0.0761726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_4050_antiproton(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0, 0, -0.00253575, 0.0196403, 0.0296492, 0.0558592, 0.0585807, 0.0789371, 0.0829314, 0.106347, 0.109234, 0.130626, 0.135786, 0.154787, 0.183858, 0.196135, 0.210303, 0.204343, 0.231183, 0.231211, 0.249107, 0.221292, 0.273605, 0.266969, 0.257376, 0.27806, 0.280984, 0.292262, 0.26905, 0.274387, 0.211313, 0.324339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0, 0.0313968, 0.013031, 0.00897124, 0.00746666, 0.00669911, 0.00643486, 0.00625644, 0.00625102, 0.0063233, 0.00648134, 0.00679227, 0.00711397, 0.00756203, 0.00803456, 0.00861781, 0.00930825, 0.00993977, 0.0107897, 0.0119757, 0.012844, 0.014168, 0.0151713, 0.0166566, 0.0184211, 0.0202448, 0.0218659, 0.0140385, 0.0214924, 0.0430906, 0.178145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0, 0.137912, 0.0550066, 0.0223057, 0.0155486, 0.0131162, 0.0119509, 0.0115947, 0.0113617, 0.0116088, 0.011777, 0.0123083, 0.0128657, 0.0135363, 0.0147092, 0.0156493, 0.0168069, 0.0178454, 0.0193603, 0.0208125, 0.0228027, 0.0242045, 0.0268854, 0.029038, 0.031391, 0.0345494, 0.0377226, 0.040746, 0.027034, 0.040086, 0.0771034, 0.360776, 0.0543393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_3040_antiproton(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0, 0.338705, 0.0518824, 0.0390561, 0.0276461, 0.0288275, 0.0450128, 0.0541352, 0.0696097, 0.078628, 0.0945815, 0.114324, 0.121956, 0.143111, 0.16049, 0.163625, 0.187258, 0.196448, 0.198742, 0.20469, 0.213722, 0.243047, 0.24687, 0.247373, 0.248214, 0.278438, 0.27313, 0.276065, 0.28618, 0.275928, 0.255872, 0.115524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0.000645641, 0.0219796, 0.00970872, 0.00665225, 0.00546807, 0.0048868, 0.00460971, 0.00445534, 0.00443915, 0.00440264, 0.00449212, 0.00469103, 0.00489613, 0.00509739, 0.00537234, 0.00577706, 0.00619733, 0.00656813, 0.00723524, 0.00786358, 0.00854128, 0.00919734, 0.0100571, 0.0107599, 0.0121505, 0.0133044, 0.0145959, 0.00927871, 0.0144753, 0.0271428, 0.101974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0, 0.0103031, 0.0399007, 0.0167902, 0.0116564, 0.00967558, 0.0087891, 0.00842169, 0.00826439, 0.00832211, 0.00845603, 0.00884102, 0.00924786, 0.00986379, 0.010438, 0.0109558, 0.0119274, 0.0127354, 0.0135081, 0.0146049, 0.0157881, 0.0172627, 0.0184926, 0.020007, 0.0214871, 0.0239718, 0.0257944, 0.0281455, 0.0192021, 0.0280399, 0.0496494, 0.182599, 0.0387317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_2030_antiproton(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0, 0.662474, 0.0185994, 0.0117562, 0.0259402, 0.0214211, 0.0304214, 0.0394749, 0.0546118, 0.0597476, 0.0794185, 0.0866745, 0.0970393, 0.10449, 0.129477, 0.136203, 0.149914, 0.158318, 0.181555, 0.188754, 0.194446, 0.197162, 0.223073, 0.227114, 0.23305, 0.245297, 0.240345, 0.245049, 0.259105, 0.26242, 0.287932, 0.243008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0.364261, 0.0177086, 0.00772697, 0.00537977, 0.00442251, 0.00393434, 0.0036613, 0.00350753, 0.00343486, 0.00345618, 0.00351172, 0.00356278, 0.00370219, 0.0038888, 0.00407012, 0.00430605, 0.00459197, 0.00497422, 0.0053417, 0.00573583, 0.00627158, 0.00680288, 0.00749132, 0.00815469, 0.00883801, 0.00985937, 0.0107836, 0.00687874, 0.0105095, 0.020312, 0.0866113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0, 0.786284, 0.0311215, 0.0133156, 0.00936461, 0.00774258, 0.00698169, 0.00658302, 0.00644905, 0.00637499, 0.00661681, 0.00679006, 0.00704375, 0.00736515, 0.00801826, 0.00841806, 0.00901493, 0.00960231, 0.0105292, 0.0112683, 0.0120311, 0.0128863, 0.0141925, 0.0152828, 0.0165364, 0.0178314, 0.0193874, 0.02123, 0.0149339, 0.0209609, 0.0385035, 0.152991, 0.0307381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_1020_antiproton(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 48;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4, 4.4, 4.8, 5.2, 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8, 8.4, 8.8, 9.2, 9.6, 9.9};
+ Double_t _y[] = {0, 0, 0, 0.0255935, 0.0326516, 0.00631974, 0.0156774, 0.0138975, 0.0183874, 0.0223836, 0.0376923, 0.0473871, 0.0504273, 0.0598239, 0.0756639, 0.0858968, 0.094869, 0.105419, 0.109821, 0.124009, 0.132104, 0.135292, 0.14661, 0.154133, 0.151872, 0.16556, 0.172129, 0.1835, 0.193187, 0.206297, 0.192187, 0.209371, 0.236101, 0.215908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0, 0, 0, 0.823453, 0.0150733, 0.00662216, 0.0047245, 0.00385231, 0.00342087, 0.00319976, 0.00302894, 0.00295194, 0.00293546, 0.00294981, 0.00303874, 0.00312892, 0.00323678, 0.00340637, 0.00359611, 0.00385576, 0.00412362, 0.00442889, 0.00484538, 0.00520886, 0.00565058, 0.00614164, 0.00677307, 0.00739301, 0.00811282, 0.00894112, 0.0057491, 0.00900794, 0.0178728, 0.0777444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerrSyst[] = {0, 0, 0, 1.28647, 0.0263428, 0.0113809, 0.00814393, 0.00674068, 0.00603507, 0.00567695, 0.00548342, 0.00543364, 0.0054437, 0.00558493, 0.00589599, 0.00618781, 0.00649389, 0.00690933, 0.00729146, 0.00789278, 0.00847596, 0.0090342, 0.00983544, 0.0105641, 0.0112837, 0.0122616, 0.0133408, 0.0146642, 0.0159207, 0.017622, 0.0120255, 0.017693, 0.0329639, 0.141832, 0.026807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v22_etagap10_510_antiproton(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v22_etagap10_510_antiproton_nPoints = 33;
+ if (last>v22_etagap10_510_antiproton_nPoints-1) last=v22_etagap10_510_antiproton_nPoints-1;
+ if (last<0 && first<0) last=v22_etagap10_510_antiproton_nPoints-1;
+ if (last<0) last=v22_etagap10_510_antiproton_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v22_etagap10_510_antiproton_x[] = {0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.05, 2.15, 2.25, 2.35, 2.45, 2.55, 2.65, 2.75, 2.85, 2.95, 3.2, 3.6, 4};
+ Double_t v22_etagap10_510_antiproton_y[] = {0.,0.,0.,0.,0.,0.0107737, 0.0128734, 0.00917658, 0.0105757, 0.0115926, 0.0329602, 0.0261356, 0.0313384, 0.0452816, 0.0526354, 0.0618944, 0.0574567, 0.0701679, 0.0701348, 0.0875208, 0.0878755, 0.104836, 0.10294, 0.110327, 0.11429, 0.106938, 0.115266, 0.107332, 0.133372, 0.130432, 0.121658, 0.154643, 0.105422};
+ Double_t v22_etagap10_510_antiproton_xerr[] = {0.,0.,0.,0.,0.,0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04};
+ Double_t v22_etagap10_510_antiproton_yerr[] = {0.,0.,0.,0.,0.,0.0187085, 0.0131334, 0.0109682, 0.00970316, 0.00905275, 0.00863548, 0.00845393, 0.00840426, 0.00854155, 0.00874073, 0.00902577, 0.00933217, 0.00988566, 0.0104503, 0.011238, 0.0120288, 0.0130014, 0.0139594, 0.0152531, 0.0166315, 0.0177388, 0.0196984, 0.0216449, 0.0237533, 0.025945, 0.016823, 0.0267045, 0.0516681};
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &v22_etagap10_510_antiproton_x[first], &v22_etagap10_510_antiproton_y[first], &v22_etagap10_510_antiproton_xerr[first], &v22_etagap10_510_antiproton_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// QM11 Ks and lambda
+TGraphErrors* v2KsQM114050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 22;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.9, 2.1, 2.3, 2.5, 2.7, 2.9, 3.2, 3.6, 4, 4.4, 4.8};
+ Double_t _y[] = {0.0149204, 0.0586289, 0.0649511, 0.0869282, 0.095823, 0.118562, 0.129187, 0.143078, 0.151888, 0.144034, 0.165162, 0.201767, 0.179882, 0.20807, 0.193481, 0.201477, 0.190785, 0.218286, 0.201261, 0.195918, 0.200895, 0.162648, 0.202368, 0.19096, 0.143372};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0300707, 0.021654, 0.0182861, 0.0190635, 0.0186501, 0.0204063, 0.0204742, 0.02106, 0.0211224, 0.0196578, 0.021203, 0.0238578, 0.0215306, 0.0235206, 0.0196785, 0.0196917, 0.0200961, 0.0221347, 0.0230998, 0.0261922, 0.0234749, 0.0306236, 0.0433844, 0.0608945, 0.0726564};
+ Double_t _yerrS[] = {0.0300707, 0.021654, 0.0182861, 0.0190635, 0.0186501, 0.0204063, 0.0204742, 0.02106, 0.0211224, 0.0196578, 0.021203, 0.0238578, 0.0215306, 0.0235206, 0.0196785, 0.0196917, 0.0200961, 0.0221347, 0.0230998, 0.0261922, 0.0234749, 0.0306236, 0.0433844, 0.0608945, 0.0726564};
+
+ _yerr[1-1]=0.0298;_yerrS[1-1]=0.0043;
+ _yerr[2-1]=0.0170;_yerrS[2-1]=0.0134;
+ _yerr[3-1]=0.0129;_yerrS[3-1]=0.0129;
+ _yerr[4-1]=0.0111;_yerrS[4-1]=0.0155;
+ _yerr[5-1]=0.0103;_yerrS[5-1]=0.0156;
+ _yerr[6-1]=0.0101;_yerrS[6-1]=0.0177;
+ _yerr[7-1]=0.0099;_yerrS[7-1]=0.0179;
+ _yerr[8-1]=0.0100;_yerrS[8-1]=0.0185;
+ _yerr[9-1]=0.0104;_yerrS[9-1]=0.0184;
+ _yerr[10-1]=0.0109;_yerrS[10-1]=0.0164;
+ _yerr[11-1]=0.0117;_yerrS[11-1]=0.0177;
+ _yerr[12-1]=0.0125;_yerrS[12-1]=0.0203;
+ _yerr[13-1]=0.0131;_yerrS[13-1]=0.0171;
+ _yerr[14-1]=0.0143;_yerrS[14-1]=0.0187;
+ _yerr[15-1]=0.0115;_yerrS[15-1]=0.0159;
+ _yerr[16-1]=0.0129;_yerrS[16-1]=0.0148;
+ _yerr[17-1]=0.0157;_yerrS[17-1]=0.0126;
+ _yerr[18-1]=0.0181;_yerrS[18-1]=0.0128;
+ _yerr[19-1]=0.0206;_yerrS[19-1]=0.0105;
+ _yerr[20-1]=0.0246;_yerrS[20-1]=0.0090;
+ _yerr[21-1]=0.0222;_yerrS[21-1]=0.0076;
+ _yerr[22-1]=0.0303;_yerrS[22-1]=0.0046;
+ _yerr[23-1]=0.0432;_yerrS[23-1]=0.0039;
+ _yerr[24-1]=0.0609;_yerrS[24-1]=0.0022;
+ _yerr[25-1]=0.0727;_yerrS[25-1]=0.0006;
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2LambdaQM114050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 10;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.1, 1.3, 1.5, 1.7, 1.9, 2.15, 2.45, 2.75, 2.95, 3.5, 4.5};
+ Double_t _y[] = {0.070888, 0.119342, 0.149007, 0.174366, 0.179891, 0.219007, 0.246098, 0.280332, 0.233308, 0.254311, 0.30027};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0193462, 0.026561, 0.0322, 0.036856, 0.0379916, 0.0464809, 0.0503634, 0.0963763, 0.0946555, 0.0545124, 0.0964832};
+ Double_t _yerrS[] = {0.0193462, 0.026561, 0.0322, 0.036856, 0.0379916, 0.0464809, 0.0503634, 0.0963763, 0.0946555, 0.0545124, 0.0964832};
+
+ _yerr[1-1]=0.0134;_yerrS[1-1]=0.0139;
+ _yerr[2-1]=0.0119;_yerrS[2-1]=0.0237;
+ _yerr[3-1]=0.0116;_yerrS[3-1]=0.0300;
+ _yerr[4-1]=0.0121;_yerrS[4-1]=0.0348;
+ _yerr[5-1]=0.0133;_yerrS[5-1]=0.0356;
+ _yerr[6-1]=0.0150;_yerrS[6-1]=0.0440;
+ _yerr[7-1]=0.0139;_yerrS[7-1]=0.0484;
+ _yerr[8-1]=0.0882;_yerrS[8-1]=0.0389;
+ _yerr[9-1]=0.0740;_yerrS[9-1]=0.0590;
+ _yerr[10-1]=0.0213;_yerrS[10-1]=0.0502;
+ _yerr[11-1]=0.0826;_yerrS[11-1]=0.0498;
+
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2KsQM111020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 22;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.9, 2.1, 2.3, 2.5, 2.7, 2.9, 3.2, 3.6, 4, 4.4, 4.8};
+ Double_t _y[] = {0.037872, 0.0427513, 0.040969, 0.042276, 0.0585498, 0.0594143, 0.0734317, 0.0825041, 0.0995797, 0.104865, 0.103593, 0.114106, 0.121967, 0.134521, 0.133603, 0.143376, 0.153956, 0.168784, 0.155898, 0.155901, 0.165062, 0.165088, 0.108553, 0.132339, 0.0308495};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0229751, 0.0146732, 0.0115235, 0.01008, 0.0113093, 0.0106629, 0.0116316, 0.0120922, 0.0133899, 0.0135076, 0.0127666, 0.0133961, 0.0137166, 0.0143667, 0.0126623, 0.0129384, 0.0137158, 0.0146097, 0.0157186, 0.0171808, 0.0151266, 0.0197935, 0.0268463, 0.0391686, 0.0471636};
+ Double_t _yerrS[] = {0.0229751, 0.0146732, 0.0115235, 0.01008, 0.0113093, 0.0106629, 0.0116316, 0.0120922, 0.0133899, 0.0135076, 0.0127666, 0.0133961, 0.0137166, 0.0143667, 0.0126623, 0.0129384, 0.0137158, 0.0146097, 0.0157186, 0.0171808, 0.0151266, 0.0197935, 0.0268463, 0.0391686, 0.0471636};
+
+ _yerr[1-1]=0.0202;_yerrS[1-1]=0.0109;
+ _yerr[2-1]=0.0109;_yerrS[2-1]=0.0098;
+ _yerr[3-1]=0.0082;_yerrS[3-1]=0.0081;
+ _yerr[4-1]=0.0067;_yerrS[4-1]=0.0075;
+ _yerr[5-1]=0.0061;_yerrS[5-1]=0.0095;
+ _yerr[6-1]=0.0059;_yerrS[6-1]=0.0089;
+ _yerr[7-1]=0.0056;_yerrS[7-1]=0.0102;
+ _yerr[8-1]=0.0057;_yerrS[8-1]=0.0107;
+ _yerr[9-1]=0.0058;_yerrS[9-1]=0.0121;
+ _yerr[10-1]=0.0063;_yerrS[10-1]=0.0119;
+ _yerr[11-1]=0.0063;_yerrS[11-1]=0.0111;
+ _yerr[12-1]=0.0069;_yerrS[12-1]=0.0115;
+ _yerr[13-1]=0.0073;_yerrS[13-1]=0.0116;
+ _yerr[14-1]=0.0078;_yerrS[14-1]=0.0121;
+ _yerr[15-1]=0.0063;_yerrS[15-1]=0.0110;
+ _yerr[16-1]=0.0075;_yerrS[16-1]=0.0106;
+ _yerr[17-1]=0.0092;_yerrS[17-1]=0.0101;
+ _yerr[18-1]=0.0107;_yerrS[18-1]=0.0099;
+ _yerr[19-1]=0.0135;_yerrS[19-1]=0.0081;
+ _yerr[20-1]=0.0156;_yerrS[20-1]=0.0072;
+ _yerr[21-1]=0.0138;_yerrS[21-1]=0.0062;
+ _yerr[22-1]=0.0192;_yerrS[22-1]=0.0046;
+ _yerr[23-1]=0.0268;_yerrS[23-1]=0.0021;
+ _yerr[24-1]=0.0391;_yerrS[24-1]=0.0015;
+ _yerr[25-1]=0.0472;_yerrS[25-1]=0.0001;
+
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2LambdaQM111020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 10;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.1, 1.3, 1.5, 1.7, 1.9, 2.15, 2.45, 2.75, 2.95, 3.5, 4.5};
+ Double_t _y[] = {0.0329731, 0.0598229, 0.0582877, 0.0862622, 0.105079, 0.11425, 0.131433, 0.165193, 0.167494, 0.206327, 0.156109};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0128034, 0.0148904, 0.0134535, 0.0186384, 0.0223601, 0.0240979, 0.0275226, 0.0479114, 0.041216, 0.0458347, 0.0765811};
+ Double_t _yerrS[] = {0.0128034, 0.0148904, 0.0134535, 0.0186384, 0.0223601, 0.0240979, 0.0275226, 0.0479114, 0.041216, 0.0458347, 0.0765811};
+
+ _yerr[1-1]=0.0111;_yerrS[1-1]=0.0065;
+ _yerr[2-1]=0.0082;_yerrS[2-1]=0.0124;
+ _yerr[3-1]=0.0073;_yerrS[3-1]=0.0113;
+ _yerr[4-1]=0.0070;_yerrS[4-1]=0.0173;
+ _yerr[5-1]=0.0074;_yerrS[5-1]=0.0211;
+ _yerr[6-1]=0.0080;_yerrS[6-1]=0.0227;
+ _yerr[7-1]=0.0072;_yerrS[7-1]=0.0266;
+ _yerr[8-1]=0.0408;_yerrS[8-1]=0.0252;
+ _yerr[9-1]=0.0282;_yerrS[9-1]=0.0300;
+ _yerr[10-1]=0.0283;_yerrS[10-1]=0.0361;
+ _yerr[11-1]=0.0637;_yerrS[11-1]=0.0425;
+
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+
+// Kink with VZERO SP method
+TGraphErrors* v2Kink0005(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.75, 3.25, 3.75, 4.25, 4.75};
+ Double_t _y[] = {0.00278912, 0.00150957, 0.00969046, 0.0104301, 0.0188253, 0.0227717, 0.0309487, 0.0341199, 0.0505573, 0.0482094, 0.0587934, 0.0527458, 0.058417, 0.0243267, -0.00413263, 0.049706, 0.124202};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00265733, 0.0021355, 0.00200978, 0.00210868, 0.0023306, 0.00266326, 0.00233616, 0.00321753, 0.00440557, 0.00612543, 0.00843734, 0.0115667, 0.0125789, 0.0219909, 0.0384996, 0.0573552, 0.0832343};
+ Double_t _yerrSyst[] = {0.000115953, 0.000744338, 0.000801153, 0.001446, 0.00174913, 0.00237721, 0.0026208, 0.00388338, 0.00370303, 0.00451601, 0.00405148, 0.0044871, 0.00232061, -0.000394227, 0.00761978, 0.0190399, 0.0190399};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0.0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* v2Kink0510(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.75, 3.25, 3.75, 4.25, 4.75};
+ Double_t _y[] = {0.0046225, 0.00633764, 0.0161419, 0.0231465, 0.031357, 0.0387739, 0.0525418, 0.0582742, 0.0787954, 0.0953374, 0.0912154, 0.0912694, 0.100176, 0.115121, 0.080661, 0.124693, 0.0479271};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00226415, 0.00180494, 0.0016965, 0.00176181, 0.0019341, 0.00219713, 0.0019242, 0.00263926, 0.00362214, 0.00502443, 0.00690064, 0.00938605, 0.0103232, 0.0181839, 0.0305616, 0.0480648, 0.0734767};
+ Double_t _yerrSyst[] = {0.000486803, 0.00123988, 0.00177792, 0.00240858, 0.00297828, 0.00403581, 0.00447613, 0.00605239, 0.00732301, 0.00700639, 0.00701053, 0.00769464, 0.0109818, 0.00769457, 0.019115, 0.00734709, 0.00734709};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0.0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2Kink1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.75, 3.25, 3.75, 4.25, 4.75};
+ Double_t _y[] = {0.00749225, 0.0170844, 0.0243086, 0.0381418, 0.052451, 0.0672117, 0.0814359, 0.101393, 0.117803, 0.132852, 0.150789, 0.147415, 0.148044, 0.154442, 0.173818, 0.22373, 0.105331};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00162693, 0.00129069, 0.00120872, 0.00124744, 0.0013639, 0.00154052, 0.00134308, 0.00184132, 0.00253054, 0.0034831, 0.00483312, 0.00652163, 0.00717336, 0.0125484, 0.0208724, 0.0309835, 0.0502633};
+ Double_t _yerrSyst[] = {0.00131228, 0.00186718, 0.00292973, 0.00402884, 0.00516263, 0.00625521, 0.00778814, 0.00904864, 0.0102046, 0.0115823, 0.0113232, 0.0113715, 0.0147328, 0.0165812, 0.0342972, 0.016147, 0.016147};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0.0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2Kink2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.75, 3.25, 3.75, 4.25, 4.75};
+ Double_t _y[] = {0.0072888, 0.0241204, 0.038972, 0.0557968, 0.0706379, 0.0905339, 0.110115, 0.137367, 0.154966, 0.173271, 0.187214, 0.197233, 0.196449, 0.204328, 0.190329, 0.198035, 0.215135};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00185852, 0.00147397, 0.00138144, 0.00142629, 0.00155702, 0.00175274, 0.00152882, 0.00209354, 0.00289508, 0.00399616, 0.00545056, 0.00742193, 0.00797779, 0.0139342, 0.0227111, 0.036162, 0.053161};
+ Double_t _yerrSyst[] = {0.00185272, 0.00299349, 0.00428583, 0.0054258, 0.00695404, 0.0084581, 0.0105514, 0.0119032, 0.0133092, 0.0143802, 0.0151497, 0.0150896, 0.0194916, 0.0181562, 0.0303583, 0.0329796, 0.0329796};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0.0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2Kink3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.75, 3.25, 3.75, 4.25, 4.75};
+ Double_t _y[] = {0.0198535, 0.0269752, 0.0489322, 0.0685815, 0.0871186, 0.106312, 0.130012, 0.153869, 0.181945, 0.191183, 0.200373, 0.217543, 0.22113, 0.227982, 0.152184, 0.204723, 0.10483};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00252247, 0.00200528, 0.00189274, 0.00196066, 0.00214449, 0.00242964, 0.0021233, 0.0029313, 0.00405387, 0.00556614, 0.00764924, 0.0105114, 0.0113762, 0.0191464, 0.0310815, 0.0459809, 0.063268};
+ Double_t _yerrSyst[] = {0.00207201, 0.00375855, 0.00526785, 0.0066917, 0.008166, 0.00998641, 0.0118189, 0.0139754, 0.0146851, 0.0153909, 0.0167098, 0.0169853, 0.0217481, 0.0145174, 0.0313835, 0.0160701, 0.0160701};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0.0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2Kink4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.75, 3.25, 3.75, 4.25, 4.75};
+ Double_t _y[] = {0.0184006, 0.039312, 0.0560155, 0.0744549, 0.105477, 0.117306, 0.14288, 0.168705, 0.187757, 0.211535, 0.21727, 0.230958, 0.232356, 0.211124, 0.215568, 0.261458, 0.29527};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00340412, 0.00271914, 0.00258583, 0.00270762, 0.00298639, 0.00338847, 0.00298335, 0.00410873, 0.00569788, 0.00789697, 0.0109218, 0.0148735, 0.0154399, 0.0265265, 0.045388, 0.0613099, 0.0871169};
+ Double_t _yerrSyst[] = {0.00301961, 0.00430263, 0.00571899, 0.00810186, 0.00901046, 0.0109748, 0.0129584, 0.0144219, 0.0162483, 0.0166888, 0.0177403, 0.0178476, 0.0201399, 0.0205639, 0.0400808, 0.045264, 0.045264};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0.0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2Kink5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.75, 3.25, 3.75, 4.25, 4.75};
+ Double_t _y[] = {0.0184053, 0.0421066, 0.0636918, 0.093209, 0.109357, 0.122793, 0.135598, 0.167734, 0.179235, 0.202347, 0.223503, 0.204778, 0.198038, 0.199902, 0.208692, 0.258469, 0.126576};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00520242, 0.00422132, 0.0040556, 0.00427233, 0.00476878, 0.00545619, 0.00489075, 0.00675269, 0.00942665, 0.0131378, 0.0176433, 0.0228161, 0.025738, 0.0438358, 0.0596872, 0.0951616, 0.126892};
+ Double_t _yerrSyst[] = {0.00323427, 0.00489226, 0.00715952, 0.00839988, 0.00943188, 0.0104155, 0.0128839, 0.0137673, 0.0155425, 0.0171676, 0.0157293, 0.0152116, 0.0190695, 0.0199079, 0.0396226, 0.0194037, 0.0194037};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0.0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2Kink6070(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.75, 3.25, 3.75, 4.25, 4.75};
+ Double_t _y[] = {0.0160665, 0.0369738, 0.0569239, 0.0756837, 0.10208, 0.116458, 0.12661, 0.128646, 0.146764, 0.171994, 0.180963, 0.183109, 0.139119, 0.19161, 0.108737, 0.177263, 0.189475};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00988879, 0.00800023, 0.00786797, 0.00846542, 0.00954037, 0.0110158, 0.00974575, 0.0135531, 0.0191612, 0.0260883, 0.0352833, 0.049656, 0.0488693, 0.0751465, 0.130463, 0.176409, 0.232558};
+ Double_t _yerrSyst[] = {0.00284001, 0.00437241, 0.00581338, 0.00784093, 0.00894528, 0.00972507, 0.00988149, 0.0112731, 0.0132111, 0.0139, 0.0140648, 0.010686, 0.0182784, 0.0103728, 0.0271739, 0.0290459, 0.0290459};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0.0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ Float_t systerr = _yerrSyst[i];
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + systerr*systerr);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// Xi and Omega approved for QM
+TGraphAsymmErrors* v2XiSQM110020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v2XiSQM110020_nPoints = 8;
+ if (last>v2XiSQM110020_nPoints-1) last=v2XiSQM110020_nPoints-1;
+ if (last<0 && first<0) last=v2XiSQM110020_nPoints-1;
+ if (last<0) last=v2XiSQM110020_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v2XiSQM110020_x[] = {1.25, 1.75, 2.25, 2.75, 3.25, 3.75, 4.25, 5.25};
+ Double_t v2XiSQM110020_y[] = {0.0122607, 0.0467335, 0.0787376, 0.103407, 0.127762, 0.14248, 0.138947, 0.158982};
+ Double_t v2XiSQM110020_xerr[] = {0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t v2XiSQM110020_yerrL[] = {0.000674581, 0.00295378, 0.00649944, 0.0107775, 0.016228, 0.0214342, 0.0242101, 0.0239034};
+ Double_t v2XiSQM110020_yerrH[] = {0.00196832, 0.00551615, 0.00760563, 0.0086593, 0.00962982, 0.00992244, 0.00911361, 0.00672358};
+ Double_t v2XiSQM110020_yerr[] = {0.00695454, 0.00390572, 0.00370856, 0.00461745, 0.00655036, 0.0100333, 0.015608, 0.0198221};
+
+ if(!kStat){
+ for(Int_t i=0;i<v2XiSQM110020_nPoints;i++){
+ v2XiSQM110020_yerr[i] = 0.0;
+ v2XiSQM110020_xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<v2XiSQM110020_nPoints;i++){
+ v2XiSQM110020_yerrL[i] = TMath::Sqrt(v2XiSQM110020_yerr[i]*v2XiSQM110020_yerr[i] + v2XiSQM110020_yerrL[i]*v2XiSQM110020_yerrL[i]);
+ v2XiSQM110020_yerrH[i] = TMath::Sqrt(v2XiSQM110020_yerr[i]*v2XiSQM110020_yerr[i] + v2XiSQM110020_yerrH[i]*v2XiSQM110020_yerrH[i]);
+ }
+ }
+ else{
+ for(Int_t i=0;i<v2XiSQM110020_nPoints;i++){
+ v2XiSQM110020_yerrL[i] = v2XiSQM110020_yerr[i];
+ v2XiSQM110020_yerrH[i] = v2XiSQM110020_yerr[i];
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &v2XiSQM110020_x[first], &v2XiSQM110020_y[first], &v2XiSQM110020_xerr[first], &v2XiSQM110020_xerr[first], &v2XiSQM110020_yerrL[first], &v2XiSQM110020_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2XiSQM112040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v2XiSQM112040_nPoints = 8;
+ if (last>v2XiSQM112040_nPoints-1) last=v2XiSQM112040_nPoints-1;
+ if (last<0 && first<0) last=v2XiSQM112040_nPoints-1;
+ if (last<0) last=v2XiSQM112040_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v2XiSQM112040_x[] = {1.25, 1.75, 2.25, 2.75, 3.25, 3.75, 4.25, 5.25};
+ Double_t v2XiSQM112040_y[] = {0.0712601, 0.112841, 0.172442, 0.213023, 0.244154, 0.264343, 0.301539, 0.250904};
+ Double_t v2XiSQM112040_xerr[] = {0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t v2XiSQM112040_yerrL[] = {0.00177606, 0.00378591, 0.00775254, 0.0122552, 0.0172471, 0.0222139, 0.0294304, 0.0213675};
+ Double_t v2XiSQM112040_yerrH[] = {0.00490055, 0.00593952, 0.00764103, 0.00840135, 0.00887289, 0.00905297, 0.00988339, 0.00559612};
+ Double_t v2XiSQM112040_yerr[] = {0.00681536, 0.0042213, 0.00417748, 0.00523159, 0.00731666, 0.0110357, 0.0169457, 0.0196909};
+
+ if(!kStat){
+ for(Int_t i=0;i<v2XiSQM112040_nPoints;i++){
+ v2XiSQM112040_yerr[i] = 0.0;
+ v2XiSQM112040_xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<v2XiSQM112040_nPoints;i++){
+ v2XiSQM112040_yerrL[i] = TMath::Sqrt(v2XiSQM112040_yerr[i]*v2XiSQM112040_yerr[i] + v2XiSQM112040_yerrL[i]*v2XiSQM112040_yerrL[i]);
+ v2XiSQM112040_yerrH[i] = TMath::Sqrt(v2XiSQM112040_yerr[i]*v2XiSQM112040_yerr[i] + v2XiSQM112040_yerrH[i]*v2XiSQM112040_yerrH[i]);
+ }
+ }
+ else{
+ for(Int_t i=0;i<v2XiSQM112040_nPoints;i++){
+ v2XiSQM112040_yerrL[i] = v2XiSQM112040_yerr[i];
+ v2XiSQM112040_yerrH[i] = v2XiSQM112040_yerr[i];
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &v2XiSQM112040_x[first], &v2XiSQM112040_y[first], &v2XiSQM112040_xerr[first], &v2XiSQM112040_xerr[first], &v2XiSQM112040_yerrL[first], &v2XiSQM112040_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2XiSQM114080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v2XiSQM114080_nPoints = 8;
+ if (last>v2XiSQM114080_nPoints-1) last=v2XiSQM114080_nPoints-1;
+ if (last<0 && first<0) last=v2XiSQM114080_nPoints-1;
+ if (last<0) last=v2XiSQM114080_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v2XiSQM114080_x[] = {1.25, 1.75, 2.25, 2.75, 3.25, 3.75, 4.25, 5.25};
+ Double_t v2XiSQM114080_y[] = {0.107555, 0.165226, 0.226318, 0.28282, 0.278062, 0.316736, 0.297305, 0.256274};
+ Double_t v2XiSQM114080_xerr[] = {0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t v2XiSQM114080_yerrL[] = {0.0063979, 0.0126659, 0.0216612, 0.0327278, 0.0378896, 0.049769, 0.0529833, 0.0387182};
+ Double_t v2XiSQM114080_yerrH[] = {0.00641104, 0.0096893, 0.0131776, 0.0164053, 0.0160933, 0.0183042, 0.0171653, 0.0104354};
+ Double_t v2XiSQM114080_yerr[] = {0.011815, 0.00792612, 0.00819157, 0.01045, 0.014573, 0.0213005, 0.0330642, 0.0357233};
+
+ if(!kStat){
+ for(Int_t i=0;i<v2XiSQM114080_nPoints;i++){
+ v2XiSQM114080_yerr[i] = 0.0;
+ v2XiSQM114080_xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<v2XiSQM114080_nPoints;i++){
+ v2XiSQM114080_yerrL[i] = TMath::Sqrt(v2XiSQM114080_yerr[i]*v2XiSQM114080_yerr[i] + v2XiSQM114080_yerrL[i]*v2XiSQM114080_yerrL[i]);
+ v2XiSQM114080_yerrH[i] = TMath::Sqrt(v2XiSQM114080_yerr[i]*v2XiSQM114080_yerr[i] + v2XiSQM114080_yerrH[i]*v2XiSQM114080_yerrH[i]);
+ }
+ }
+ else{
+ for(Int_t i=0;i<v2XiSQM114080_nPoints;i++){
+ v2XiSQM114080_yerrL[i] = v2XiSQM114080_yerr[i];
+ v2XiSQM114080_yerrH[i] = v2XiSQM114080_yerr[i];
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &v2XiSQM114080_x[first], &v2XiSQM114080_y[first], &v2XiSQM114080_xerr[first], &v2XiSQM114080_xerr[first], &v2XiSQM114080_yerrL[first], &v2XiSQM114080_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2XiSQM110080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v2XiSQM110080_nPoints = 8;
+ if (last>v2XiSQM110080_nPoints-1) last=v2XiSQM110080_nPoints-1;
+ if (last<0 && first<0) last=v2XiSQM110080_nPoints-1;
+ if (last<0) last=v2XiSQM110080_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v2XiSQM110080_x[] = {1.25, 1.75, 2.25, 2.75, 3.25, 3.75, 4.25, 5.25};
+ Double_t v2XiSQM110080_y[] = {0.0464933, 0.081694, 0.122039, 0.153568, 0.177207, 0.196881, 0.204888, 0.201544};
+ Double_t v2XiSQM110080_xerr[] = {0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t v2XiSQM110080_yerrL[] = {0.00215042, 0.00311255, 0.00400468, 0.00489034, 0.00630052, 0.00841482, 0.0106497, 0.00987109};
+ Double_t v2XiSQM110080_yerrH[] = {0.00595234, 0.00876142, 0.0112838, 0.0124532, 0.0126323, 0.012266, 0.0110847, 0.00597443};
+ Double_t v2XiSQM110080_yerr[] = {0.00463512, 0.00276248, 0.00269241, 0.00337086, 0.00475049, 0.00721294, 0.0111561, 0.0134438};
+
+ if(!kStat){
+ for(Int_t i=0;i<v2XiSQM110080_nPoints;i++){
+ v2XiSQM110080_yerr[i] = 0.0;
+ v2XiSQM110080_xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<v2XiSQM110080_nPoints;i++){
+ v2XiSQM110080_yerrL[i] = TMath::Sqrt(v2XiSQM110080_yerr[i]*v2XiSQM110080_yerr[i] + v2XiSQM110080_yerrL[i]*v2XiSQM110080_yerrL[i]);
+ v2XiSQM110080_yerrH[i] = TMath::Sqrt(v2XiSQM110080_yerr[i]*v2XiSQM110080_yerr[i] + v2XiSQM110080_yerrH[i]*v2XiSQM110080_yerrH[i]);
+ }
+ }
+ else{
+ for(Int_t i=0;i<v2XiSQM110080_nPoints;i++){
+ v2XiSQM110080_yerrL[i] = v2XiSQM110080_yerr[i];
+ v2XiSQM110080_yerrH[i] = v2XiSQM110080_yerr[i];
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &v2XiSQM110080_x[first], &v2XiSQM110080_y[first], &v2XiSQM110080_xerr[first], &v2XiSQM110080_xerr[first], &v2XiSQM110080_yerrL[first], &v2XiSQM110080_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2OmegaSQM110020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v2OmegaSQM110020_nPoints = 5;
+ if (last>v2OmegaSQM110020_nPoints-1) last=v2OmegaSQM110020_nPoints-1;
+ if (last<0 && first<0) last=v2OmegaSQM110020_nPoints-1;
+ if (last<0) last=v2OmegaSQM110020_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v2OmegaSQM110020_x[] = {1.75, 2.25, 2.75, 3.25, 4.25};
+ Double_t v2OmegaSQM110020_y[] = {0.0519195, 0.0834295, 0.107549, 0.123927, 0.118231};
+ Double_t v2OmegaSQM110020_xerr[] = {0, 0, 0, 0, 0};
+ Double_t v2OmegaSQM110020_yerrL[] = {0.00640247, 0.0102868, 0.0132677, 0.0152817, 0.00918066};
+ Double_t v2OmegaSQM110020_yerrH[] = {0.00875293, 0.0119141, 0.0138805, 0.0150067, 0.00861946};
+ Double_t v2OmegaSQM110020_yerr[] = {0.025909, 0.0176272, 0.0178206, 0.0234692, 0.0248951};
+
+ if(!kStat){
+ for(Int_t i=0;i<v2OmegaSQM110020_nPoints;i++){
+ v2OmegaSQM110020_yerr[i] = 0.0;
+ v2OmegaSQM110020_xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<v2OmegaSQM110020_nPoints;i++){
+ v2OmegaSQM110020_yerrL[i] = TMath::Sqrt(v2OmegaSQM110020_yerr[i]*v2OmegaSQM110020_yerr[i] + v2OmegaSQM110020_yerrL[i]*v2OmegaSQM110020_yerrL[i]);
+ v2OmegaSQM110020_yerrH[i] = TMath::Sqrt(v2OmegaSQM110020_yerr[i]*v2OmegaSQM110020_yerr[i] + v2OmegaSQM110020_yerrH[i]*v2OmegaSQM110020_yerrH[i]);
+ }
+ }
+ else{
+ for(Int_t i=0;i<v2OmegaSQM110020_nPoints;i++){
+ v2OmegaSQM110020_yerrL[i] = v2OmegaSQM110020_yerr[i];
+ v2OmegaSQM110020_yerrH[i] = v2OmegaSQM110020_yerr[i];
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &v2OmegaSQM110020_x[first], &v2OmegaSQM110020_y[first], &v2OmegaSQM110020_xerr[first], &v2OmegaSQM110020_xerr[first], &v2OmegaSQM110020_yerrL[first], &v2OmegaSQM110020_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2OmegaSQM112040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v2OmegaSQM112040_nPoints = 5;
+ if (last>v2OmegaSQM112040_nPoints-1) last=v2OmegaSQM112040_nPoints-1;
+ if (last<0 && first<0) last=v2OmegaSQM112040_nPoints-1;
+ if (last<0) last=v2OmegaSQM112040_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v2OmegaSQM112040_x[] = {1.75, 2.25, 2.75, 3.25, 4.25};
+ Double_t v2OmegaSQM112040_y[] = {0.0814009, 0.12127, 0.185807, 0.195268, 0.283225};
+ Double_t v2OmegaSQM112040_xerr[] = {0, 0, 0, 0, 0};
+ Double_t v2OmegaSQM112040_yerrL[] = {0.00965916, 0.0143777, 0.0219579, 0.0231921, 0.0196319};
+ Double_t v2OmegaSQM112040_yerrH[] = {0.00830306, 0.012386, 0.0189283, 0.0200527, 0.0169729};
+ Double_t v2OmegaSQM112040_yerr[] = {0.0234382, 0.0177883, 0.0182779, 0.0242621, 0.023935};
+
+ if(!kStat){
+ for(Int_t i=0;i<v2OmegaSQM112040_nPoints;i++){
+ v2OmegaSQM112040_yerr[i] = 0.0;
+ v2OmegaSQM112040_xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<v2OmegaSQM112040_nPoints;i++){
+ v2OmegaSQM112040_yerrL[i] = TMath::Sqrt(v2OmegaSQM112040_yerr[i]*v2OmegaSQM112040_yerr[i] + v2OmegaSQM112040_yerrL[i]*v2OmegaSQM112040_yerrL[i]);
+ v2OmegaSQM112040_yerrH[i] = TMath::Sqrt(v2OmegaSQM112040_yerr[i]*v2OmegaSQM112040_yerr[i] + v2OmegaSQM112040_yerrH[i]*v2OmegaSQM112040_yerrH[i]);
+ }
+ }
+ else{
+ for(Int_t i=0;i<v2OmegaSQM112040_nPoints;i++){
+ v2OmegaSQM112040_yerrL[i] = v2OmegaSQM112040_yerr[i];
+ v2OmegaSQM112040_yerrH[i] = v2OmegaSQM112040_yerr[i];
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &v2OmegaSQM112040_x[first], &v2OmegaSQM112040_y[first], &v2OmegaSQM112040_xerr[first], &v2OmegaSQM112040_xerr[first], &v2OmegaSQM112040_yerrL[first], &v2OmegaSQM112040_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2OmegaSQM114080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v2OmegaSQM114080_nPoints = 5;
+ if (last>v2OmegaSQM114080_nPoints-1) last=v2OmegaSQM114080_nPoints-1;
+ if (last<0 && first<0) last=v2OmegaSQM114080_nPoints-1;
+ if (last<0) last=v2OmegaSQM114080_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v2OmegaSQM114080_x[] = {1.75, 2.25, 2.75, 3.25, 4.25};
+ Double_t v2OmegaSQM114080_y[] = {0.142785, 0.198855, 0.245025, 0.324906, 0.251377};
+ Double_t v2OmegaSQM114080_xerr[] = {0, 0, 0, 0, 0};
+ Double_t v2OmegaSQM114080_yerrL[] = {0.0144081, 0.0200663, 0.0247293, 0.0327983, 0.0142125};
+ Double_t v2OmegaSQM114080_yerrH[] = {0.0149509, 0.0207167, 0.0254687, 0.0337345, 0.0145248};
+ Double_t v2OmegaSQM114080_yerr[] = {0.0382144, 0.033091, 0.033689, 0.0448856, 0.0454132};
+
+ if(!kStat){
+ for(Int_t i=0;i<v2OmegaSQM114080_nPoints;i++){
+ v2OmegaSQM114080_yerr[i] = 0.0;
+ v2OmegaSQM114080_xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<v2OmegaSQM114080_nPoints;i++){
+ v2OmegaSQM114080_yerrL[i] = TMath::Sqrt(v2OmegaSQM114080_yerr[i]*v2OmegaSQM114080_yerr[i] + v2OmegaSQM114080_yerrL[i]*v2OmegaSQM114080_yerrL[i]);
+ v2OmegaSQM114080_yerrH[i] = TMath::Sqrt(v2OmegaSQM114080_yerr[i]*v2OmegaSQM114080_yerr[i] + v2OmegaSQM114080_yerrH[i]*v2OmegaSQM114080_yerrH[i]);
+ }
+ }
+ else{
+ for(Int_t i=0;i<v2OmegaSQM114080_nPoints;i++){
+ v2OmegaSQM114080_yerrL[i] = v2OmegaSQM114080_yerr[i];
+ v2OmegaSQM114080_yerrH[i] = v2OmegaSQM114080_yerr[i];
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &v2OmegaSQM114080_x[first], &v2OmegaSQM114080_y[first], &v2OmegaSQM114080_xerr[first], &v2OmegaSQM114080_xerr[first], &v2OmegaSQM114080_yerrL[first], &v2OmegaSQM114080_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphAsymmErrors* v2OmegaSQM110080(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v2OmegaSQM110080_nPoints = 5;
+ if (last>v2OmegaSQM110080_nPoints-1) last=v2OmegaSQM110080_nPoints-1;
+ if (last<0 && first<0) last=v2OmegaSQM110080_nPoints-1;
+ if (last<0) last=v2OmegaSQM110080_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v2OmegaSQM110080_x[] = {1.75, 2.25, 2.75, 3.25, 4.25};
+ Double_t v2OmegaSQM110080_y[] = {0.0728013, 0.105837, 0.141493, 0.162115, 0.17853};
+ Double_t v2OmegaSQM110080_xerr[] = {0, 0, 0, 0, 0};
+ Double_t v2OmegaSQM110080_yerrL[] = {0.00476832, 0.00692521, 0.00925901, 0.0106143, 0.00707741};
+ Double_t v2OmegaSQM110080_yerrH[] = {0.00806897, 0.0106351, 0.0134897, 0.0150059, 0.00969192};
+ Double_t v2OmegaSQM110080_yerr[] = {0.0170676, 0.0124432, 0.0127703, 0.0168486, 0.0173784};
+
+ if(!kStat){
+ for(Int_t i=0;i<v2OmegaSQM110080_nPoints;i++){
+ v2OmegaSQM110080_yerr[i] = 0.0;
+ v2OmegaSQM110080_xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<v2OmegaSQM110080_nPoints;i++){
+ v2OmegaSQM110080_yerrL[i] = TMath::Sqrt(v2OmegaSQM110080_yerr[i]*v2OmegaSQM110080_yerr[i] + v2OmegaSQM110080_yerrL[i]*v2OmegaSQM110080_yerrL[i]);
+ v2OmegaSQM110080_yerrH[i] = TMath::Sqrt(v2OmegaSQM110080_yerr[i]*v2OmegaSQM110080_yerr[i] + v2OmegaSQM110080_yerrH[i]*v2OmegaSQM110080_yerrH[i]);
+ }
+ }
+ else{
+ for(Int_t i=0;i<v2OmegaSQM110080_nPoints;i++){
+ v2OmegaSQM110080_yerrL[i] = v2OmegaSQM110080_yerr[i];
+ v2OmegaSQM110080_yerrH[i] = v2OmegaSQM110080_yerr[i];
+ }
+ }
+
+ TGraphAsymmErrors* graph = new TGraphAsymmErrors(last-first+1, &v2OmegaSQM110080_x[first], &v2OmegaSQM110080_y[first], &v2OmegaSQM110080_xerr[first], &v2OmegaSQM110080_xerr[first], &v2OmegaSQM110080_yerrL[first], &v2OmegaSQM110080_yerrH[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// new phenix results
+//run7_pion_v2_0_10_new_sys.txt
+TGraphErrors* v2PionPHENIX0010(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 16;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.08603, 1.28304, 1.48005, 1.67805, 1.87506, 2.07207, 2.27106, 2.46906, 2.66607, 2.86506, 3.16899, 3.66399, 4.16493, 4.6629, 5.16186, 5.66379};
+ Double_t _y[] = {0.0447245, 0.0512504, 0.0574795, 0.0617296, 0.0659824, 0.067367, 0.0678192, 0.0700349, 0.0671657, 0.0659291, 0.0683715, 0.0631313, 0.0549763, 0.0721619, 0.020939, 0.0417612};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.000222701, 0.000298047, 0.000398824, 0.000531302, 0.000704507, 0.000921466, 0.00122938, 0.0016748, 0.00236021, 0.00362083, 0.00317037, 0.00518788, 0.00802641, 0.0112411, 0.0160144, 0.0189578};
+ Double_t _yerrS[] = {0.00232395, 0.00266305, 0.00298672, 0.00320756, 0.00342855, 0.00350049, 0.00352399, 0.00363912, 0.00349003, 0.00342578, 0.00355269, 0.0032804, 0.00315815, 0.00510262, 0.00148061, 0.0033927};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+//run7_pion_v2_10_20_new_sys.txt
+TGraphErrors* v2PionPHENIX1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 16;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.08055, 1.27656, 1.47258, 1.66958, 1.86559, 2.0616, 2.25959, 2.45659, 2.65261, 2.85059, 3.15298, 3.64548, 4.14389, 4.63935, 5.13579, 5.63519};
+ Double_t _y[] = {0.0838016, 0.0968691, 0.106677, 0.114742, 0.121115, 0.125837, 0.128677, 0.127835, 0.131393, 0.131373, 0.123985, 0.123396, 0.115131, 0.0932285, 0.0945603, 0.0750595};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.000190244, 0.000253536, 0.000337772, 0.000447675, 0.000590113, 0.000766905, 0.00101727, 0.00137521, 0.00193639, 0.00295942, 0.00247985, 0.0040054, 0.00611423, 0.00866822, 0.0126883, 0.0155469};
+ Double_t _yerrS[] = {0.00435446, 0.00503347, 0.0055431, 0.00596217, 0.00629332, 0.00653868, 0.00668625, 0.0066425, 0.00682738, 0.00682634, 0.00644245, 0.00641184, 0.00661377, 0.00659225, 0.00668642, 0.00609786};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+//run7_pion_v2_40_60_new_sys.txt
+TGraphErrors* v2PionPHENIX4060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 16;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.07396, 1.26878, 1.46361, 1.65941, 1.85423, 2.04905, 2.24583, 2.44163, 2.63645, 2.83323, 3.13378, 3.62328, 4.11865, 4.61109, 5.10451, 5.60086};
+ Double_t _y[] = {0.146249, 0.164058, 0.177614, 0.187203, 0.19349, 0.197953, 0.199169, 0.200115, 0.192651, 0.195101, 0.193315, 0.175433, 0.181669, 0.170734, 0.138554, 0.166739};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.000319726, 0.000427822, 0.000567271, 0.000746729, 0.000975056, 0.00125177, 0.00162971, 0.00214835, 0.0029677, 0.00413081, 0.00363466, 0.00567607, 0.00854216, 0.011881, 0.0183544, 0.0223662};
+ Double_t _yerrS[] = {0.00485053, 0.00544119, 0.00589079, 0.00620882, 0.00641734, 0.00656536, 0.00660569, 0.00663706, 0.00638951, 0.00647077, 0.00641153, 0.00581845, 0.0061446, 0.00580747, 0.0081134, 0.0104448};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// run7_kaon_v2_0_10_new_sys.txt
+TGraphErrors* v2KaonPHENIX0010(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 12;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.08822, 1.28563, 1.48403, 1.68144, 1.87885, 2.07626, 2.27565, 2.47405, 2.67146, 2.87085, 3.17539, 3.67139};
+ Double_t _y[] = {0.0357656, 0.0445811, 0.0510559, 0.056433, 0.0611297, 0.0651863, 0.0664281, 0.0659084, 0.0686639, 0.0618081, 0.0691171, 0.070925};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.000486801, 0.000587744, 0.000725444, 0.000904875, 0.00111919, 0.00136158, 0.00169396, 0.00216426, 0.00273625, 0.00346302, 0.00727094, 0.0150273};
+ Double_t _yerrS[] = {0.00185844, 0.0023165, 0.00265294, 0.00293234, 0.00317639, 0.00338718, 0.00345171, 0.0034247, 0.00356788, 0.00321164, 0.0037857, 0.00459647};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// run7_kaon_v2_10_20_new_sys.txt
+TGraphErrors* v2KaonPHENIX1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 12;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.08164, 1.27786, 1.47506, 1.67127, 1.86748, 2.0637, 2.26188, 2.45908, 2.6553, 2.85348, 3.15619, 3.64919};
+ Double_t _y[] = {0.0692813, 0.0828747, 0.0962352, 0.105263, 0.112471, 0.120031, 0.125193, 0.124436, 0.125841, 0.131877, 0.120636, 0.105541};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.0004194, 0.000504879, 0.000621801, 0.000772546, 0.000952328, 0.00115052, 0.00142343, 0.00179927, 0.00225918, 0.002827, 0.00553934, 0.0113803};
+ Double_t _yerrS[] = {0.00359996, 0.0043063, 0.00500053, 0.00546963, 0.00584416, 0.00623699, 0.00650522, 0.00646588, 0.00653889, 0.00685253, 0.00660751, 0.00683984};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+// run7_kaon_v2_40_60_new_sys.txt
+TGraphErrors* v2KaonPHENIX4060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 12;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.07506, 1.27008, 1.4651, 1.6611, 1.85612, 2.05114, 2.24812, 2.44412, 2.63914, 2.83612, 3.13698, 3.62698};
+ Double_t _y[] = {0.124107, 0.144895, 0.161632, 0.171836, 0.182351, 0.184241, 0.188441, 0.189411, 0.188685, 0.182045, 0.178534, 0.211813};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.000736268, 0.00089208, 0.0011, 0.00136603, 0.00167614, 0.00200908, 0.00243513, 0.00303598, 0.0037641, 0.00468641, 0.00828064, 0.0164834};
+ Double_t _yerrS[] = {0.00411616, 0.00480562, 0.00536073, 0.00569916, 0.0060479, 0.00611058, 0.00624988, 0.00628205, 0.00625797, 0.00603775, 0.00668013, 0.00792532};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// run7_proton_v2_0_10_new_sys.txt
+TGraphErrors* v2AntiprotonPHENIX0010(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 16;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.08932, 1.28693, 1.48454, 1.68314, 1.88074, 2.07835, 2.27794, 2.47654, 2.67415, 2.87374, 3.17859, 3.67509, 4.17755, 4.67703, 5.1775, 5.68095};
+ Double_t _y[] = {0.0210294, 0.0324285, 0.0433725, 0.054565, 0.0644553, 0.0715762, 0.0779503, 0.084824, 0.0906549, 0.0951113, 0.0942727, 0.115555, 0.106061, 0.126451, 0.0902255, 0.120818};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.000434053, 0.000480734, 0.0005626, 0.000684719, 0.000846039, 0.00106283, 0.00136236, 0.00173081, 0.00220325, 0.00280525, 0.00415681, 0.00777055, 0.013864, 0.0230551, 0.036464, 0.0527073};
+ Double_t _yerrS[] = {0.00109272, 0.00168503, 0.0022537, 0.00283528, 0.0033492, 0.00371921, 0.00405042, 0.00440758, 0.00471057, 0.00494213, 0.00516353, 0.00632921, 0.00609274, 0.00779496, 0.00637991, 0.0098153};
+
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// run7_proton_v2_10_20_new_sys.txt
+TGraphErrors* v2AntiprotonPHENIX1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 16;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.08274, 1.27915, 1.47557, 1.67297, 1.86938, 2.06579, 2.26418, 2.46158, 2.65799, 2.85638, 3.15939, 3.65289, 4.15231, 4.64877, 5.14622, 5.64663};
+ Double_t _y[] = {0.0463211, 0.0659061, 0.0868213, 0.103327, 0.120261, 0.133348, 0.145277, 0.15602, 0.164359, 0.169368, 0.170511, 0.179104, 0.158896, 0.159868, 0.166116, 0.130806};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.00037414, 0.000415018, 0.000486394, 0.000591698, 0.000730528, 0.00091517, 0.00116734, 0.00147657, 0.00186563, 0.00235995, 0.00329999, 0.00605461, 0.0105693, 0.0175421, 0.0284934, 0.0418104};
+ Double_t _yerrS[] = {0.00240691, 0.00342458, 0.00451137, 0.00536903, 0.00624894, 0.00692897, 0.00754881, 0.00810704, 0.00854034, 0.00880062, 0.00933927, 0.00980993, 0.00912788, 0.00985493, 0.0117462, 0.0106267};
+
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+// run7_proton_v2_40_60_new_sys.txt
+TGraphErrors* v2AntiprotonPHENIX4060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 16;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t _x[] = {1.07616, 1.27138, 1.4666, 1.6628, 1.85801, 2.05323, 2.25041, 2.44661, 2.64183, 2.83901, 3.14018, 3.63068, 4.12707, 4.62051, 5.11493, 5.6123};
+ Double_t _y[] = {0.111728, 0.142026, 0.168396, 0.192156, 0.212232, 0.230724, 0.24573, 0.248557, 0.254284, 0.262583, 0.26775, 0.267792, 0.26648, 0.226501, 0.217841, 0.20696};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.000627176, 0.00072307, 0.00087183, 0.0010793, 0.00135044, 0.00169897, 0.00217077, 0.00272808, 0.00343839, 0.00428991, 0.00552279, 0.00973688, 0.0163398, 0.0270507, 0.0416056, 0.0595448};
+ Double_t _yerrS[] = {0.0037056, 0.00471047, 0.00558506, 0.00637309, 0.00703894, 0.00765225, 0.00814994, 0.0082437, 0.00843365, 0.00870889, 0.00937125, 0.00987931, 0.010307, 0.00902884, 0.012994, 0.0142622};
+
+ if(!kStat){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = 0;
+ _xerr[i] = 0.05;
+ }
+ }
+
+ if(kSyst){
+ for(Int_t i=0;i<_nPoints;i++){
+ _yerr[i] = TMath::Sqrt(_yerr[i]*_yerr[i] + _yerrS[i]*_yerrS[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+
+// v3 from QM11 QC{2}
+TGraphErrors* v32_1020_pion(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ // commentme
+ Int_t v32_1020_pion_nPoints = 30;
+ if (last>v32_1020_pion_nPoints-1) last=v32_1020_pion_nPoints-1;
+ if (last<0 && first<0) last=v32_1020_pion_nPoints-1;
+ if (last<0) last=v32_1020_pion_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v32_1020_pion_x[] = {0.33, 0.43, 0.53, 0.63, 0.73, 0.83, 0.93, 1.03, 1.13, 1.23, 1.33, 1.43, 1.53, 1.63, 1.73, 1.83, 1.93, 2.18, 2.58, 2.98, 3.38, 3.78, 4.18, 4.58, 4.98, 5.38, 5.78, 6.18, 6.58, 6.98};
+ Double_t v32_1020_pion_y[] = {0.0134229, 0.0167432, 0.02107, 0.0262901, 0.0312443, 0.0362567, 0.0422287, 0.0474885, 0.0524595, 0.0567917, 0.0625859, 0.0673443, 0.0725898, 0.0765344, 0.0815771, 0.0849598, 0.08939, 0.0941734, 0.107589, 0.11532, 0.112264, 0.114684, 0.116536, 0, 0, 0, 0, 0, 0, 0};
+ Double_t v32_1020_pion_xerr[] = {0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04};
+ Double_t v32_1020_pion_yerr[] = {0.000816086, 0.000658693, 0.000742595, 0.000887094, 0.0010371, 0.00119473, 0.00138196, 0.00155296, 0.00171972, 0.00187557, 0.00207941, 0.00226254, 0.00247083, 0.0026593, 0.00289646, 0.00311194, 0.00338275, 0.00316069, 0.00400211, 0.00508831, 0.00656859, 0.00987805, 0.0189298, 0, 0, 0, 0, 0, 0, 0};
+
+ Double_t v32_1020_pion_statError_yerr[] = {0.000390094, 0.00023236, 0.000217013, 0.000228925, 0.00025102, 0.000280217, 0.000313372, 0.000350632, 0.000393107, 0.000444735, 0.000506531, 0.00057781, 0.000661905, 0.00076183, 0.000878565, 0.00101342, 0.00117191, 0.000806488, 0.00134727, 0.00212538, 0.0032084, 0.00527795, 0.0105326, 0, 0, 0, 0, 0, 0, 0};
+
+ if(kStat && !kSyst){
+ for(Int_t i=0;i < v32_1020_pion_nPoints;i++){
+ v32_1020_pion_yerr[i] = v32_1020_pion_statError_yerr[i];
+ }
+ }
+ else if(!kStat && kSyst){
+ for(Int_t i=0;i < v32_1020_pion_nPoints;i++){
+ v32_1020_pion_yerr[i] = v32_1020_pion_yerr[i]*v32_1020_pion_yerr[i] - v32_1020_pion_statError_yerr[i]* v32_1020_pion_statError_yerr[i];
+ v32_1020_pion_yerr[i] = TMath::Sqrt(v32_1020_pion_yerr[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &v32_1020_pion_x[first], &v32_1020_pion_y[first], &v32_1020_pion_xerr[first], &v32_1020_pion_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v32_1020_kaon(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v32_1020_kaon_nPoints = 25;
+ if (last>v32_1020_kaon_nPoints-1) last=v32_1020_kaon_nPoints-1;
+ if (last<0 && first<0) last=v32_1020_kaon_nPoints-1;
+ if (last<0) last=v32_1020_kaon_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v32_1020_kaon_x[] = {0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.2, 2.6, 3, 3.4, 3.8, 4.2, 4.6, 5, 5.4};
+ Double_t v32_1020_kaon_y[] = {0.00302743, 0.00670068, 0.00960944, 0.0140959, 0.0210006, 0.0261218, 0.0331506, 0.0390413, 0.0432323, 0.0498768, 0.0535018, 0.0609539, 0.0663136, 0.0701533, 0.0746404, 0.0797591, 0.0864142, 0.0969327, 0.117939, 0, 0, 0, 0, 0, 0};
+ Double_t v32_1020_kaon_xerr[] = {0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04};
+ Double_t v32_1020_kaon_yerr[] = {0.00291973, 0.00189558, 0.00156194, 0.00147753, 0.00151666, 0.00159995, 0.00174912, 0.00190683, 0.0020656, 0.00228462, 0.00246573, 0.00273975, 0.00300067, 0.00325875, 0.00355464, 0.00392612, 0.00336279, 0.00513077, 0.0134291, 0, 0, 0, 0, 0, 0};
+
+ Double_t v32_1020_kaon_statError_yerr[] = {0.00162595, 0.00105604, 0.000863028, 0.000799207, 0.000779598, 0.000790079, 0.000816257, 0.000853837, 0.000912805, 0.000980786, 0.00106406, 0.00115936, 0.00127764, 0.00141682, 0.00157074, 0.00177344, 0.00121994, 0.00240937, 0.00737108, 0, 0, 0, 0, 0, 0};
+
+ if(kStat && !kSyst){
+ for(Int_t i=0;i < v32_1020_kaon_nPoints;i++){
+ v32_1020_kaon_yerr[i] = v32_1020_kaon_statError_yerr[i];
+ }
+ }
+ else if(!kStat && kSyst){
+ for(Int_t i=0;i < v32_1020_kaon_nPoints;i++){
+ v32_1020_kaon_yerr[i] = v32_1020_kaon_yerr[i]*v32_1020_kaon_yerr[i] - v32_1020_kaon_statError_yerr[i]* v32_1020_kaon_statError_yerr[i];
+ v32_1020_kaon_yerr[i] = TMath::Sqrt(v32_1020_kaon_yerr[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &v32_1020_kaon_x[first], &v32_1020_kaon_y[first], &v32_1020_kaon_xerr[first], &v32_1020_kaon_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v32_1020_antiproton(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v32_1020_antiproton_nPoints = 28;
+ if (last>v32_1020_antiproton_nPoints-1) last=v32_1020_antiproton_nPoints-1;
+ if (last<0 && first<0) last=v32_1020_antiproton_nPoints-1;
+ if (last<0) last=v32_1020_antiproton_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v32_1020_antiproton_x[] = {0.57, 0.67, 0.77, 0.87, 0.97, 1.07, 1.17, 1.27, 1.37, 1.47, 1.57, 1.67, 1.77, 1.87, 1.97, 2.22, 2.62, 3.02, 3.42, 3.82, 4.22, 4.62, 5.02, 5.42, 5.82, 6.22, 6.62, 7.02};
+ Double_t v32_1020_antiproton_y[] = {0.00186436, 7.05025e-05, 0.00226371, 0.0025971, 0.00426813, 0.00596588, 0.0109206, 0.0170278, 0.0240831, 0.0275234, 0.0358475, 0.0415758, 0.0496074, 0.0573969, 0.0630463, 0.0785925, 0.102838, 0.120118, 0.137493, 0.142522, 0.151444, 0.144125, 0.192062, 0, 0, 0, 0, 0};
+ Double_t v32_1020_antiproton_xerr[] = {0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04};
+ Double_t v32_1020_antiproton_yerr[] = {0.00661632, 0.00481615, 0.00405812, 0.00364377, 0.00344754, 0.0033137, 0.0032578, 0.00326806, 0.0033384, 0.00343628, 0.00359836, 0.00377852, 0.00402085, 0.00431005, 0.00458806, 0.00340917, 0.00454227, 0.00595661, 0.00811159, 0.0117587, 0.0190361, 0.0338669, 0.134234, 0, 0, 0, 0, 0};
+
+ Double_t v32_1020_antiproton_statError_yerr[] = {0.00377499, 0.00276915, 0.00234124, 0.00210598, 0.00199562, 0.00191919, 0.00188437, 0.00187885, 0.00189756, 0.00194448, 0.00200543, 0.0020857, 0.00218184, 0.00231353, 0.00244858, 0.00144405, 0.00195883, 0.00279008, 0.00411264, 0.00646947, 0.0109628, 0.0199308, 0.0781864, 0, 0, 0, 0, 0};
+
+ if(kStat && !kSyst){
+ for(Int_t i=0;i < v32_1020_antiproton_nPoints;i++){
+ v32_1020_antiproton_yerr[i] = v32_1020_antiproton_statError_yerr[i];
+ }
+ }
+ else if(!kStat && kSyst){
+ for(Int_t i=0;i < v32_1020_antiproton_nPoints;i++){
+ v32_1020_antiproton_yerr[i] = v32_1020_antiproton_yerr[i]*v32_1020_antiproton_yerr[i] - v32_1020_antiproton_statError_yerr[i]* v32_1020_antiproton_statError_yerr[i];
+ v32_1020_antiproton_yerr[i] = TMath::Sqrt(v32_1020_antiproton_yerr[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &v32_1020_antiproton_x[first], &v32_1020_antiproton_y[first], &v32_1020_antiproton_xerr[first], &v32_1020_antiproton_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v32_4050_pion(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v32_4050_pion_nPoints = 30;
+ if (last>v32_4050_pion_nPoints-1) last=v32_4050_pion_nPoints-1;
+ if (last<0 && first<0) last=v32_4050_pion_nPoints-1;
+ if (last<0) last=v32_4050_pion_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v32_4050_pion_x[] = {0.33, 0.43, 0.53, 0.63, 0.73, 0.83, 0.93, 1.03, 1.13, 1.23, 1.33, 1.43, 1.53, 1.63, 1.73, 1.83, 1.93, 2.18, 2.58, 2.98, 3.38, 3.78, 4.18, 4.58, 4.98, 5.38, 5.78, 6.18, 6.58, 6.98};
+ Double_t v32_4050_pion_y[] = {0.0169421, 0.0226956, 0.027289, 0.0344464, 0.0401389, 0.0483862, 0.0538993, 0.0615618, 0.0668474, 0.0724796, 0.0775622, 0.0842534, 0.0894518, 0.0928943, 0.0977908, 0.106364, 0.107759, 0.114188, 0.121071, 0.121902, 0.129527, 0.134133, 0.180864, 0, 0, 0, 0, 0, 0, 0};
+ Double_t v32_4050_pion_xerr[] = {0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04};
+ Double_t v32_4050_pion_yerr[] = {0.00182104, 0.00124715, 0.00128606, 0.00147443, 0.0016766, 0.00195826, 0.00219382, 0.00249919, 0.00277752, 0.00307774, 0.0033925, 0.00375772, 0.00411319, 0.00447598, 0.00490496, 0.00544854, 0.00595246, 0.00477098, 0.00662221, 0.00943227, 0.0134523, 0.0209874, 0.038741, 0, 0, 0, 0, 0, 0, 0};
+
+ Double_t v32_4050_pion_statError_yerr[] = {0.000970601, 0.000579259, 0.00055439, 0.000591078, 0.000657755, 0.000742217, 0.000836199, 0.000950415, 0.00108627, 0.00123124, 0.00139699, 0.00157447, 0.00176577, 0.00198297, 0.00222574, 0.00250362, 0.00283409, 0.00188237, 0.00314542, 0.00493338, 0.00728232, 0.0117328, 0.0214989, 0, 0, 0, 0, 0, 0, 0};
+
+
+ if(kStat && !kSyst){
+ for(Int_t i=0;i < v32_4050_pion_nPoints;i++){
+ v32_4050_pion_yerr[i] = v32_4050_pion_statError_yerr[i];
+ }
+ }
+ else if(!kStat && kSyst){
+ for(Int_t i=0;i < v32_4050_pion_nPoints;i++){
+ v32_4050_pion_yerr[i] = v32_4050_pion_yerr[i]*v32_4050_pion_yerr[i] - v32_4050_pion_statError_yerr[i]* v32_4050_pion_statError_yerr[i];
+ v32_4050_pion_yerr[i] = TMath::Sqrt(v32_4050_pion_yerr[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &v32_4050_pion_x[first], &v32_4050_pion_y[first], &v32_4050_pion_xerr[first], &v32_4050_pion_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v32_4050_kaon(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v32_4050_kaon_nPoints = 25;
+ if (last>v32_4050_kaon_nPoints-1) last=v32_4050_kaon_nPoints-1;
+ if (last<0 && first<0) last=v32_4050_kaon_nPoints-1;
+ if (last<0) last=v32_4050_kaon_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v32_4050_kaon_x[] = {0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95, 2.2, 2.6, 3, 3.4, 3.8, 4.2, 4.6, 5, 5.4};
+ Double_t v32_4050_kaon_y[] = {0.00800406, 0.00824057, 0.0184803, 0.0236651, 0.0334773, 0.0394258, 0.042902, 0.0526186, 0.056656, 0.0609829, 0.0704108, 0.0727429, 0.0780242, 0.0906113, 0.0879405, 0.0954966, 0.101673, 0.110859, 0.12648, 0, 0, 0, 0, 0, 0};
+ Double_t v32_4050_kaon_xerr[] = {0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04};
+ Double_t v32_4050_kaon_yerr[] = {0.00647827, 0.00440681, 0.00382398, 0.00365843, 0.00370453, 0.0038315, 0.00398085, 0.00424222, 0.00450969, 0.00481112, 0.00520842, 0.00558284, 0.00606004, 0.00670006, 0.00727355, 0.00812917, 0.00608355, 0.0109859, 0.0319517, 0, 0, 0, 0, 0, 0};
+
+ Double_t v32_4050_kaon_statError_yerr[] = {0.00360466, 0.0024692, 0.00212939, 0.0020259, 0.00201447, 0.00206226, 0.00213368, 0.0022294, 0.00236744, 0.00252395, 0.0026997, 0.00291806, 0.00317155, 0.00347944, 0.00385033, 0.00432545, 0.00299177, 0.00595115, 0.0180812, 0, 0, 0, 0, 0, 0};
+
+ if(kStat && !kSyst){
+ for(Int_t i=0;i < v32_4050_kaon_nPoints;i++){
+ v32_4050_kaon_yerr[i] = v32_4050_kaon_statError_yerr[i];
+ }
+ }
+ else if(!kStat && kSyst){
+ for(Int_t i=0;i < v32_4050_kaon_nPoints;i++){
+ v32_4050_kaon_yerr[i] = v32_4050_kaon_yerr[i]*v32_4050_kaon_yerr[i] - v32_4050_kaon_statError_yerr[i]* v32_4050_kaon_statError_yerr[i];
+ v32_4050_kaon_yerr[i] = TMath::Sqrt(v32_4050_kaon_yerr[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &v32_4050_kaon_x[first], &v32_4050_kaon_y[first], &v32_4050_kaon_xerr[first], &v32_4050_kaon_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v32_4050_antiproton(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t v32_4050_antiproton_nPoints = 28;
+ if (last>v32_4050_antiproton_nPoints-1) last=v32_4050_antiproton_nPoints-1;
+ if (last<0 && first<0) last=v32_4050_antiproton_nPoints-1;
+ if (last<0) last=v32_4050_antiproton_nPoints-1+last;
+ if (first<0) first=0;
+ Double_t v32_4050_antiproton_x[] = {0.57, 0.67, 0.77, 0.87, 0.97, 1.07, 1.17, 1.27, 1.37, 1.47, 1.57, 1.67, 1.77, 1.87, 1.97, 2.22, 2.62, 3.02, 3.42, 3.82, 4.22, 4.62, 5.02, 5.42, 5.82, 6.22, 6.62, 7.02};
+ Double_t v32_4050_antiproton_y[] = {0.0088111, -0.00168695, 0.010351, 0.00911283, 0.0276992, 0.0240616, 0.0326823, 0.0380326, 0.0510652, 0.0538593, 0.0628152, 0.074492, 0.0831343, 0.0866683, 0.094179, 0.102877, 0.128451, 0.145513, 0.151148, 0.171606, 0.194494, 0.147614, -0.143488, 0, 0, 0, 0, 0};
+ Double_t v32_4050_antiproton_xerr[] = {0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04};
+ Double_t v32_4050_antiproton_yerr[] = {0.013943, 0.0098319, 0.0083454, 0.00762029, 0.00734332, 0.00721975, 0.00728574, 0.00737796, 0.0076756, 0.00797667, 0.00841186, 0.00894512, 0.00951378, 0.0101552, 0.0109422, 0.0070593, 0.00971959, 0.0135803, 0.0190688, 0.0278606, 0.045911, 0.0816557, 0.29937, 0, 0, 0, 0, 0};
+
+ Double_t v32_4050_antiproton_statError_yerr[] = {0.00790802, 0.00562316, 0.00479201, 0.00440497, 0.00422239, 0.00416259, 0.00418901, 0.00423755, 0.00437205, 0.00454936, 0.00478116, 0.00504625, 0.00534515, 0.00573639, 0.00617799, 0.00370405, 0.00521801, 0.00753314, 0.0108532, 0.0161127, 0.0265911, 0.0483794, 0.176792, 0, 0, 0, 0, 0};
+
+ if(kStat && !kSyst){
+ for(Int_t i=0;i < v32_4050_antiproton_nPoints;i++){
+ v32_4050_antiproton_yerr[i] = v32_4050_antiproton_statError_yerr[i];
+ }
+ }
+ else if(!kStat && kSyst){
+ for(Int_t i=0;i < v32_4050_antiproton_nPoints;i++){
+ v32_4050_antiproton_yerr[i] = v32_4050_antiproton_yerr[i]*v32_4050_antiproton_yerr[i] - v32_4050_antiproton_statError_yerr[i]* v32_4050_antiproton_statError_yerr[i];
+ v32_4050_antiproton_yerr[i] = TMath::Sqrt(v32_4050_antiproton_yerr[i]);
+ }
+ }
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &v32_4050_antiproton_x[first], &v32_4050_antiproton_y[first], &v32_4050_antiproton_xerr[first], &v32_4050_antiproton_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+
--- /dev/null
+TGraphErrors* v2CMS2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 6;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ Double_t _x[] = {1.79, 2.24, 2.74, 3.46, 4.89, 6.75};
+ Double_t _y[] = {0.161, 0.154, 0.169, 0.166, 0.131, 0.107};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.033, 0.031, 0.022, 0.033, 0.029, 0.034};
+
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* v2CMS3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 6;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ Double_t _x[] = {1.79, 2.24, 2.74, 3.46, 4.89, 6.75};
+ Double_t _y[] = {0.178, 0.175, 0.192, 0.180, 0.137, 0.118};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.016, 0.017, 0.023, 0.024, 0.024, 0.018};
+
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* v2CMS4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 6;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ Double_t _x[] = {1.79, 2.24, 2.74, 3.46, 4.89, 6.75};
+ Double_t _y[] = {0.192, 0.189, 0.194, 0.182, 0.153, 0.108};
+ Double_t _xerr[] = {0, 0, 0, 0, 0, 0};
+ Double_t _yerr[] = {0.012, 0.013, 0.020, 0.017, 0.016, 0.016};
+
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
--- /dev/null
+//source: Phys. Rev. Lett. 105, 142301 (2010)
+//http://www.phenix.bnl.gov/phenix/WWW/info/data/ppg110/fig1.txt
+
+TGraphErrors* v2PHENIX010(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5,6.5,7.5,8.5,9.5,11,13,15,17};
+ Double_t _y[] = {0.0523,0.0617,0.0697,0.0777,0.0746,0.0695,0.0612,0.0615,0.061,0.0391,0.0526,0.0467,0.0419,0.0055,0.0615,0.1435,0.1409};
+Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+Double_t _yerr[] = {0.0031,0.0019,0.0018,0.0022,0.0029,0.0034,0.0042,0.0054,0.0057,0.0088,0.0126,0.0184,0.0261,0.0283,0.0512,0.1019,0.1372};
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* v2PHENIX1020(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ //commentme
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5,6.5,7.5,8.5,9.5,11,13,15,17};
+ Double_t _y[] = {0.0996,0.1208,0.132,0.1386,0.1373,0.1221,0.1174,0.1071,0.0949,0.0855,0.0887,0.0783,0.0991,0.0648,0.1224,0.1507,-0.1153};
+Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+Double_t _yerr[] = {0.002,0.0012,0.0012,0.0014,0.0019,0.0022,0.003,0.004,0.0041,0.0066,0.01,0.0148,0.0211,0.0236,0.044,0.0753,0.1492};
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* v2PHENIX2030(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5,6.5,7.5,8.5,9.5,11,13,15,17};
+ Double_t _y[] = {0.1346,0.1572,0.1704,0.175,0.1726,0.1646,0.1493,0.1333,0.1242,0.1081,0.1043,0.0796,0.0741,0.0577,0.0294,0.0161,0.1917};
+Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+Double_t _yerr[] = {0.0018,0.0011,0.0011,0.0014,0.0018,0.0023,0.0031,0.0041,0.0039,0.0066,0.0103,0.0156,0.0222,0.0249,0.0455,0.0801,0.1424};
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2PHENIX3040(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5,6.5,7.5,8.5,9.5,11,13,15,17};
+ Double_t _y[] = {0.1534,0.1788,0.1898,0.192,0.1823,0.1791,0.164,0.1584,0.1406,0.1252,0.1224,0.109,0.1163,0.1112,0.1214,0.1556,0.1111};
+Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+Double_t _yerr[] = {0.0019,0.001,0.0011,0.0014,0.0019,0.0024,0.0032,0.0044,0.0044,0.0076,0.0122,0.0183,0.0278,0.0299,0.056,0.1043,0.194};
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
+TGraphErrors* v2PHENIX4050(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5,6.5,7.5,8.5,9.5,11,13,15,17};
+ Double_t _y[] = {0.1676,0.1862,0.1935,0.1989,0.1989,0.175,0.1736,0.1671,0.1473,0.1253,0.12,0.1098,0.1383,0.1269,0.054,0.0532,-0.0181};
+Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+Double_t _yerr[] = {0.0022,0.0012,0.0013,0.0017,0.0022,0.0028,0.0039,0.0054,0.0058,0.0102,0.0166,0.0256,0.0389,0.0426,0.0879,0.1456,0.2846};
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+TGraphErrors* v2PHENIX5060(Int_t color=1, Int_t marker=20, Int_t first=-1,Int_t last=-1)
+{
+ Int_t _nPoints = 17;
+ if (last>_nPoints-1) last=_nPoints-1;
+ if (last<0 && first<0) last=_nPoints-1;
+ if (last<0) last=_nPoints-1+last;
+ if (first<0) first=0;
+
+ Double_t _x[] = {1.25,1.75,2.25,2.75,3.25,3.75,4.25,4.75,5.5,6.5,7.5,8.5,9.5,11,13,15,17};
+ Double_t _y[] = {0.165,0.1841,0.1894,0.1888,0.1825,0.1763,0.1838,0.1747,0.1734,0.1771,0.1153,0.1617,0.1986,0.1398,0.2379,0.08,0.287};
+Double_t _xerr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+Double_t _yerr[] = {0.003,0.0016,0.0017,0.0022,0.0031,0.0042,0.0061,0.0085,0.0092,0.0161,0.0271,0.0419,0.0601,0.07,0.1227,0.2248,0.4645};
+
+ TGraphErrors* graph = new TGraphErrors(last-first+1, &_x[first], &_y[first], &_xerr[first], &_yerr[first]);
+ graph->SetLineColor(color);
+ graph->SetMarkerColor(color);
+ graph->SetMarkerStyle(marker);
+ return graph;
+}
+
#include "AliAODEvent.h"
#include "AliAODEvent.h"
#include "AliVCluster.h"
-#include "AliAODPWG4Particle.h"
+#include "AliCaloPhoton.h"
+#include "AliAODMCParticle.h"
#include "AliAnalysisManager.h"
#include "AliLog.h"
#include "TGeoManager.h"
#include "AliPHOSGeometry.h"
#include "AliTriggerAnalysis.h"
#include "AliEMCALGeometry.h"
-
+#include "AliAnalysisUtils.h"
+#include "AliOADBContainer.h"
ClassImp(AliAnalysisTaskTaggedPhotons)
fPHOSEvent(0x0),
fCurrentMixedList(0x0),
fTriggerAnalysis(0x0),
+ fUtils(0x0),
fZmax(0.),
fZmin(0.),
fPhimax(0.),
fPhimin(0.),
fCentrality(0.),
- fCentBin(0)
+ fCentBin(0),
+ fIsMB(0),
+ fIsMC(0)
{
//Deafult constructor
//no memory allocations
for(Int_t i=0;i<10;i++)
for(Int_t j=0;j<2;j++)
fPHOSEvents[i][j]=0x0 ; //Container for PHOS photons
- for(Int_t mod=0; mod<6; mod++)
- fPHOSBadMap[mod]=0x0 ;
+ for(Int_t i=0;i<6;i++)
+ fPHOSBadMap[i]=0x0;
}
//______________________________________________________________________________
AliAnalysisTaskTaggedPhotons::AliAnalysisTaskTaggedPhotons(const char *name) :
fPHOSEvent(0x0),
fCurrentMixedList(0x0),
fTriggerAnalysis(new AliTriggerAnalysis),
+ fUtils(0x0),
fZmax(-60.),
fZmin(60.),
fPhimax(250.),
fPhimin(320.),
fCentrality(0.),
- fCentBin(0)
+ fCentBin(0),
+ fIsMB(0),
+ fIsMC(0)
{
// Constructor.
for(Int_t i=0;i<1;i++)
for(Int_t j=0;j<5;j++)
fPHOSEvents[i][j]=0x0 ; //Container for PHOS photons
- // Create AOD track cut
-
- for(Int_t mod=0; mod<6; mod++)
- fPHOSBadMap[mod]=0x0 ;
+ for(Int_t i=0;i<6;i++)
+ fPHOSBadMap[i]=0x0;
}
fPHOSEvent(0x0),
fCurrentMixedList(0x0),
fTriggerAnalysis(new AliTriggerAnalysis),
+ fUtils(0x0),
fZmax(-60.),
fZmin(60.),
fPhimax(250.),
fPhimin(320.),
fCentrality(0.),
- fCentBin(0)
+ fCentBin(0),
+ fIsMB(0),
+ fIsMC(0)
{
// cpy ctor
fZmax=ap.fZmax ;
for(Int_t i=0;i<1;i++)
for(Int_t j=0;j<5;j++)
fPHOSEvents[i][j]=0x0 ; //Container for PHOS photons
- for(Int_t mod=0; mod<6; mod++)
- fPHOSBadMap[mod]=0x0 ;
+ for(Int_t i=0;i<6;i++)
+ fPHOSBadMap[i]=0x0;
}
fOutputContainer->Add(new TH1F("hNvertexTracks","N of primary tracks from the primary vertex",150,0.,150.));
fOutputContainer->Add(new TH1F("hZvertex","Z vertex",200,-50.,+50.));
fOutputContainer->Add(new TH2F("hTrackMult","Charged track multiplicity",100,0.,100.,250,0.,500.));
+ fOutputContainer->Add(new TH2F("hTrackEtaPhi","Charged track eta vs phi distribution",200,-2.,2.,200,0.,TMath::TwoPi()));
+ fOutputContainer->Add(new TH2F("hTrackEtaPt","Charged track eta vs pt distribution",200,-2.,2.,200,0.,50.));
//centrality
fOutputContainer->Add(new TH1F("hCentrality","Ccentrality",100,0.,100.));
fOutputContainer->Add(new TH2F("hPHOSCentrality","PHOS vs centrality",100,0.,100.,100,0.,100.));
fOutputContainer->Add(new TH2F("hTOF","cluster TOF",200,0.,20.,300,-3.e-6,6.e-6));
-
fOutputContainer->Add(new TH2F("hCluNXZM1","Clu (X,Z), M1" ,64,0.5,64.5, 56,0.5,56.5));
fOutputContainer->Add(new TH2F("hCluNXZM2","Clu (X,Z), M2" ,64,0.5,64.5, 56,0.5,56.5));
fOutputContainer->Add(new TH2F("hCluNXZM3","Clu (X,Z), M3" ,64,0.5,64.5, 56,0.5,56.5));
fOutputContainer->Add(new TH2F("hCluArea3M2","Clu (X,Z), M1" ,64,0.5,64.5, 56,0.5,56.5));
fOutputContainer->Add(new TH2F("hCluArea3M3","Clu (X,Z), M1" ,64,0.5,64.5, 56,0.5,56.5));
+ fOutputContainer->Add(new TH2F("hTofM1","TOF in mod1",200,-1.e-6,1.e-6,200,0.,20.)) ;
+ fOutputContainer->Add(new TH2F("hTofM2","TOF in mod2",200,-1.e-6,1.e-6,200,0.,20.)) ;
+ fOutputContainer->Add(new TH2F("hTofM3","TOF in mod3",200,-1.e-6,1.e-6,200,0.,20.)) ;
+
char cPID[4][5] ;
snprintf(cPID[0],5,"All") ;
snprintf(cPID[1],5,"Disp");
snprintf(cPID[3],5,"Both");
- const Int_t nPt=400 ;
- const Double_t ptMax=40. ;
+ const Int_t nPt=500 ;
+ const Double_t ptMax=50. ;
const Int_t nM=400 ;
const Double_t mMax=1. ;
fOutputContainer->Add(new TH1F(Form("hPhot_Area2_%s_cent%d",cPID[iPID],cen),"Spectrum of all reconstructed particles",nPt,0.,ptMax)) ;
fOutputContainer->Add(new TH1F(Form("hPhot_Area3_%s_cent%d",cPID[iPID],cen),"Spectrum of all reconstructed particles",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hPhot_nStrictTagged_Area1_%s_cent%d",cPID[iPID],cen),"Spectrum of all reconstructed particles, no PID",nPt,0.,ptMax)) ;
-
for(Int_t itag=0; itag<18; itag++){
fOutputContainer->Add(new TH1F(Form("hPhot_nTagged%d_Area1_%s_cent%d",itag,cPID[iPID],cen),"Spectrum of all reconstructed particles, no PID",nPt,0.,ptMax)) ;
fOutputContainer->Add(new TH1F(Form("hPhot_nTagged%d_Area2_%s_cent%d",itag,cPID[iPID],cen),"Spectrum of all reconstructed particles, no PID",nPt,0.,ptMax)) ;
for(Int_t kind=1; kind<33; kind*=2){
fOutputContainer->Add(new TH1F(Form("hPhot_Isolation%d_%s_cent%d",kind,cPID[iPID],cen),"Spectrum of all reconstructed particles, no PID",nPt,0.,ptMax)) ;
fOutputContainer->Add(new TH1F(Form("hPhot_Isolation%d_Area1_%s_cent%d",kind,cPID[iPID],cen),"Spectrum of all reconstructed particles, no PID",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hPhot_nStrictTagged_Isolation%d_Area1_%s_cent%d",kind,cPID[iPID],cen),"Spectrum of all reconstructed particles, no PID",nPt,0.,ptMax)) ;
fOutputContainer->Add(new TH1F(Form("hPhot_nTagged_Isolation%d_Area1_%s_cent%d",kind,cPID[iPID],cen),"Spectrum of all reconstructed particles, no PID",nPt,0.,ptMax)) ;
}
}
-
+ for(Int_t kind=1; kind<33; kind*=2){
+ fOutputContainer->Add(new TH1F(Form("hPi_Isolation%d_cent%d",kind,cen),"Spectrum of all reconstructed particles, no PID",nPt,0.,ptMax)) ;
+ }
+
fOutputContainer->Add(new TH1F(Form("hTaggedMult_cent%d",cen),"Spectrum of multiply tagged photons",nPt,0.,ptMax)) ;
fOutputContainer->Add(new TH2F(Form("QA_Cone1_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
fOutputContainer->Add(new TH2F(Form("QA_Cone2_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
fOutputContainer->Add(new TH2F(Form("QA_Cone3_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
+ fOutputContainer->Add(new TH2F(Form("QA_PCone1_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
+ fOutputContainer->Add(new TH2F(Form("QA_PCone2_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
+ fOutputContainer->Add(new TH2F(Form("QA_PCone3_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
+ fOutputContainer->Add(new TH2F(Form("QA_Pi0Cone1_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
+ fOutputContainer->Add(new TH2F(Form("QA_Pi0Cone2_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
+ fOutputContainer->Add(new TH2F(Form("QA_Pi0Cone3_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
+ fOutputContainer->Add(new TH2F(Form("QA_Pi0PCone1_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
+ fOutputContainer->Add(new TH2F(Form("QA_Pi0PCone2_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
+ fOutputContainer->Add(new TH2F(Form("QA_Pi0PCone3_Tracks_cent%d",cen),"Two-photon inv. mass vs first photon pt",50,0.,50.,200,0.,100.)) ;
}//centrality
//MC
- char partName[4][10] ;
+ char partName[15][10] ;
snprintf(partName[0],10,"gamma") ;
snprintf(partName[1],10,"pi0");
snprintf(partName[2],10,"eta") ;
snprintf(partName[3],10,"omega");
+ snprintf(partName[4],10,"K0s");
+ snprintf(partName[5],10,"Kpm");
+ snprintf(partName[6],10,"pipm");
+ snprintf(partName[7],10,"n");
+ snprintf(partName[8],10,"nbar");
+ snprintf(partName[9],10,"p");
+ snprintf(partName[10],10,"pbar");
+
- if(AliAnalysisManager::GetAnalysisManager()){
- AliMCEventHandler* mctruth = (AliMCEventHandler*)((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
- if(mctruth){
+ if(fIsMC){
fOutputContainer->Add(new TH1F("hMCConversionRadius","Clusters without label",600,0.,600.)) ;
fOutputContainer->Add(new TH2F("hMCRecPi0Vtx","Secondary pi0s",100,0.,10.,600,0.,600.)) ;
fOutputContainer->Add(new TH2F("hMCRecK0lVtx","Secondary K0l",100,0.,10.,600,0.,600.)) ;
fOutputContainer->Add(new TH2F("hMCGammaPi0MisConvR","Converted photons",400,0.,40.,600,0.,600.)) ;
- for(Int_t cen=0; cen<nCenBin; cen++){
- for(Int_t ipart=0; ipart<4; ipart++){
+ for(Int_t ipart=0; ipart<11; ipart++){
+ fOutputContainer->Add(new TH2F(Form("hMC%s_ptrap",partName[ipart]),"Spectrum of primary photons",100,0.,10.,100,-2.,2.)) ;
+ fOutputContainer->Add(new TH2F(Form("hMC%s_ptphi",partName[ipart]),"Spectrum of primary photons",100,0.,10.,100,0.,TMath::TwoPi())) ;
fOutputContainer->Add(new TH2F(Form("hMC_%s_vertex",partName[ipart]),"vertex",nPt,0.,ptMax,150,0.,600.)) ;
- fOutputContainer->Add(new TH1F(Form("hMC_all_%s",partName[ipart]),"Spectum (full rapifity)",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMC_unitEta_%s",partName[ipart]),"Spectum, |y|<0.15",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMC_rap_%s",partName[ipart]),"Rapidity",100,-5.,5.)) ;
- fOutputContainer->Add(new TH1F(Form("hMC_phi_%s",partName[ipart]),"Azimuthal angle",100,0.,TMath::TwoPi())) ;
+ for(Int_t cen=0; cen<nCenBin; cen++){
+ fOutputContainer->Add(new TH1F(Form("hMC_all_%s_cent%d",partName[ipart],cen),"Spectum (full rapifity)",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMC_unitEta_%s_cent%d",partName[ipart],cen),"Spectum, |y|<0.15",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMC_rap_%s_cent%d",partName[ipart],cen),"Rapidity",100,-5.,5.)) ;
+ fOutputContainer->Add(new TH1F(Form("hMC_phi_%s_cent%d",partName[ipart],cen),"Azimuthal angle",100,0.,TMath::TwoPi())) ;
+ }
}
-
+ for(Int_t cen=0; cen<nCenBin; cen++){
- fOutputContainer->Add(new TH2F(Form("LabelsNPrim_cent%d",cen),"vertex",nPt,0.,ptMax,20,0.,20.)) ;
- fOutputContainer->Add(new TH1F(Form("LabelsGamma_cent%d",cen),"vertex",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH2F(Form("LabelsGammaE_cent%d",cen),"vertex",nPt,0.,ptMax,100,0.,2.)) ;
+ fOutputContainer->Add(new TH2F(Form("LabelsNPrim_cent%d",cen),"vertex",nPt,0.,ptMax,20,0.,20.)) ;
+ fOutputContainer->Add(new TH1F(Form("LabelsGamma_cent%d",cen),"vertex",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH2F(Form("LabelsGammaE_cent%d",cen),"vertex",nPt,0.,ptMax,100,0.,2.)) ;
+
+
+ //Sort registered particles spectra according MC information
+ for(Int_t iPID=0; iPID<4; iPID++){
+ fOutputContainer->Add(new TH1F(Form("hMCRecPhoton_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. photons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecE_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. electrons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecPbar_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. electrons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecNbar_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. electrons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecCharg_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. electrons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecNeutral_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. electrons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecK0s_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. electrons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecNoPRim_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. electrons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecUnknown_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. electrons", nPt,0.,ptMax )) ;
+
+ //Decay photons
+ fOutputContainer->Add(new TH1F(Form("hMCRecPhotPi0_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. photons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecPhotEta_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. photons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecPhotOmega_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. photons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecPhotOther_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. photons", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecPhotNoPrim_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. photons", nPt,0.,ptMax )) ;
+
- fOutputContainer->Add(new TH1F(Form("hMCRecNoLabel_cent%d",cen),"Clusters without label",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCConversionRadius_cent%d",cen),"Clusters without label",600,0.,600.)) ;
- fOutputContainer->Add(new TH2F(Form("hMCRecPi0Vtx_cent%d",cen),"Secondary pi0s",100,0.,10.,600,0.,600.)) ;
- fOutputContainer->Add(new TH2F(Form("hMCRecEtaVtx_cent%d",cen),"Secondary etas",100,0.,10.,600,0.,600.)) ;
- fOutputContainer->Add(new TH2F(Form("hMCRecOmegaVtx_cent%d",cen),"Secondary etas",100,0.,10.,600,0.,600.)) ;
- fOutputContainer->Add(new TH2F(Form("hMCRecEtaprVtx_cent%d",cen),"Secondary etas",100,0.,10.,600,0.,600.)) ;
- fOutputContainer->Add(new TH2F(Form("hMCRecK0sVtx_cent%d",cen),"Secondary K0s",100,0.,10.,600,0.,600.)) ;
- fOutputContainer->Add(new TH2F(Form("hMCRecK0lVtx_cent%d",cen),"Secondary K0l",100,0.,10.,600,0.,600.)) ;
- fOutputContainer->Add(new TH2F(Form("hMCGammaPi0MisConvR_cent%d",cen),"Converted photons",400,0.,40.,600,0.,600.)) ;
+
+ //MC tagging: reasons of partner loss etc.
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnStack_%s_cent%d",cPID[iPID],cen),"Decay photons with partner not in Stack", nPt,0.,ptMax )) ;
+ for(Int_t iType=0; iType<9; iType++)
+ fOutputContainer->Add(new TH1F(Form("hMCDecWithFoundPartnType%d_%s_cent%d",iType,cPID[iPID],cen),"Decay photon with found partner", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWithWrongMass_%s_cent%d",cPID[iPID],cen),"Decay photon with wrong mass", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnAccept_%s_cent%d",cPID[iPID],cen),"Decay photon with parttner not in PHOS acc", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnAcceptFA1_%s_cent%d",cPID[iPID],cen),"Decay photons with partner missed due geometry Fid. area. 1", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnAcceptFA2_%s_cent%d",cPID[iPID],cen),"Decay photons with partner missed due geometry Fid. area. 2", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnAcceptFA3_%s_cent%d",cPID[iPID],cen),"Decay photons with partner missed due geometry Fid. area. 3", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnConv_%s_cent%d",cPID[iPID],cen),"Decay photons with partner missed due to conversion", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnEmin_%s_cent%d",cPID[iPID],cen),"Decay photons with partner missed due to low energy", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnOther_%s_cent%d",cPID[iPID],cen),"Decay photons with partner missed due unknown reason", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnAll_%s_cent%d",cPID[iPID],cen),"Decay photons with partner missed due to any reason", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnNPhot_%s_cent%d",cPID[iPID],cen),"pi0 decay photon with non-photon partner", nPt,0.,ptMax )) ;
+
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnCutEmin_%s_cent%d",cPID[iPID],cen),"Decay photons with rec. partner but failed Emin cut", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnCutNcell_%s_cent%d",cPID[iPID],cen),"Decay photons with rec. partner but failed Ncell cut", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnCutEcross_%s_cent%d",cPID[iPID],cen),"Decay photons with rec. partner but failed Ecross cut", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnCutM02_%s_cent%d",cPID[iPID],cen),"Decay photons with rec. partner but failed M02 cut", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnDefCuts_%s_cent%d",cPID[iPID],cen),"Decay photons with rec. partner but failed default cuts", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWRecPartn_%s_cent%d",cPID[iPID],cen),"Decay photons with rec partner", nPt,0.,ptMax )) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWRecUniqPartn_%s_cent%d",cPID[iPID],cen),"Decay photons with rec partner", nPt,0.,ptMax )) ;
+
+ fOutputContainer->Add(new TH2F(Form("hMC_InvM_Re_%s_cent%d",cPID[iPID],cen),"Two-photon inv. mass vs first photon pt",nM,0.,mMax,nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH2F(Form("hMC_InvM_Re_Strict_%s_cent%d",cPID[iPID],cen),"Two-photon inv. mass vs first photon pt",nM,0.,mMax,nPt,0.,ptMax)) ;
+ }
+ fOutputContainer->Add(new TH2F(Form("hMCmass_cent%d",cen),"Mass with reconstructed decay partner",nM,0.,mMax,nPt,0.,ptMax )) ;
+ }
+
+/*
+ fOutputContainer->Add(new TH1F(Form("hMCRecNoLabel_cent%d",cen),"Clusters without label",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCConversionRadius_cent%d",cen),"Clusters without label",600,0.,600.)) ;
+ fOutputContainer->Add(new TH2F(Form("hMCRecPi0Vtx_cent%d",cen),"Secondary pi0s",100,0.,10.,600,0.,600.)) ;
+ fOutputContainer->Add(new TH2F(Form("hMCRecEtaVtx_cent%d",cen),"Secondary etas",100,0.,10.,600,0.,600.)) ;
+ fOutputContainer->Add(new TH2F(Form("hMCRecOmegaVtx_cent%d",cen),"Secondary etas",100,0.,10.,600,0.,600.)) ;
+ fOutputContainer->Add(new TH2F(Form("hMCRecEtaprVtx_cent%d",cen),"Secondary etas",100,0.,10.,600,0.,600.)) ;
+ fOutputContainer->Add(new TH2F(Form("hMCRecK0sVtx_cent%d",cen),"Secondary K0s",100,0.,10.,600,0.,600.)) ;
+ fOutputContainer->Add(new TH2F(Form("hMCRecK0lVtx_cent%d",cen),"Secondary K0l",100,0.,10.,600,0.,600.)) ;
+ fOutputContainer->Add(new TH2F(Form("hMCGammaPi0MisConvR_cent%d",cen),"Converted photons",400,0.,40.,600,0.,600.)) ;
- fOutputContainer->Add(new TH2F(Form("hMCGammaPi0PrimMgg_cent%d",cen),"Two-photon inv. mass vs first photon pt",nM,0.,mMax,nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH2F(Form("hMCGammaPi0RecMgg_cent%d",cen),"Two-photon inv. mass vs first photon pt",nM,0.,mMax,nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH2F(Form("hMCGammaPi0PrimMgg_cent%d",cen),"Two-photon inv. mass vs first photon pt",nM,0.,mMax,nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH2F(Form("hMCGammaPi0RecMgg_cent%d",cen),"Two-photon inv. mass vs first photon pt",nM,0.,mMax,nPt,0.,ptMax)) ;
- for(Int_t iPID=0; iPID<4; iPID++){
- fOutputContainer->Add(new TH1F(Form("hMCRecNoPrim_%s_cent%d",cPID[iPID],cen),"Reconstructed particles withour primary",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecGamma_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: Gamma",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecPhotConv_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: e+-",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecPi0_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: pi0",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecEta_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: eta",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecOmega_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: Gamma",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecEtapr_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: eta prime",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecPbar_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: bar(p)",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecNbar_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: bar(n)",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecPipm_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: pipm",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecN_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: n",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecP_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: p",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecKpm_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: K+-",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecK0s_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: K0s",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecK0l_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: K0l",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecUnknownCh_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: K0l",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecUnknownNeu_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: K0l",nPt,0.,ptMax)) ;
-
- //Decay photons
- fOutputContainer->Add(new TH1F(Form("hMCRecGammaDir_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, no primary",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecGammaPi0_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecGammaEta_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from eta",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecGammaOmega_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from omega",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecGammaOther_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from other",nPt,0.,ptMax)) ;
+ for(Int_t iPID=0; iPID<4; iPID++){
+ fOutputContainer->Add(new TH1F(Form("hMCRecNoPrim_%s_cent%d",cPID[iPID],cen),"Reconstructed particles withour primary",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecGamma_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: Gamma",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecPhotConv_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: e+-",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecPi0_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: pi0",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecEta_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: eta",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecOmega_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: Gamma",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecEtapr_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: eta prime",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecPbar_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: bar(p)",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecNbar_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: bar(n)",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecPipm_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: pipm",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecN_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: n",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecP_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: p",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecKpm_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: K+-",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecK0s_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: K0s",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecK0l_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: K0l",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecUnknownCh_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: K0l",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecUnknownNeu_%s_cent%d",cPID[iPID],cen),"Reconstructed particles with primary: K0l",nPt,0.,ptMax)) ;
+
+ //Decay photons
+ fOutputContainer->Add(new TH1F(Form("hMCRecGammaDir_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, no primary",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecGammaPi0_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecGammaEta_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from eta",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecGammaOmega_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from omega",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecGammaOther_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from other",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecPhotNoPrim_%s_cent%d",cPID[iPID],cen),"Spectrum of rec. photons", nPt,0.,ptMax)) ;
- //Pi0 decay photons
- fOutputContainer->Add(new TH1F(Form("hMCRecGammaPi0Dalitz_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCRecGammaPi0NoStack_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCGammaPi02Gamma_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCGammaPi0Rec_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCGammaPi0RecSoft_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH1F(Form("hMCGammaPi0RecCells_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
+ //Pi0 decay photons
+
+ //MC tagging: reasons of partner loss etc.
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnStack_cent%d",cen),"Decay photons with partner not in Stack", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWithFoundPartn_cent%d",cen),"Decay photon with found partner", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWithWrongMass_cent%d",cen),"Decay photon with wrong mass", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnAccept_cent%d",cen),"Decay photon with parttner not in PHOS acc", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnAcceptFA1_cent%d",cen),"Decay photons with partner missed due geometry Fid. area. 1", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnAcceptFA2_cent%d",cen),"Decay photons with partner missed due geometry Fid. area. 2", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnAcceptFA3_cent%d",cen),"Decay photons with partner missed due geometry Fid. area. 3", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnConv_cent%d",cen),"Decay photons with partner missed due to conversion", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnEmin_cent%d",cen),"Decay photons with partner missed due to low energy", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnOther_cent%d",cen),"Decay photons with partner missed due unknown reason", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnAll_cent%d",cen),"Decay photons with partner missed due to any reason", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnNPhot_cent%d",cen),"pi0 decay photon with non-photon partner", nPt,0.,ptMax)) ;
+
+
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnCutEmin_cent%d",cen),"Decay photons with rec. partner but failed Emin cut", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnCutNcell_cent%d",cen),"Decay photons with rec. partner but failed Ncell cut", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnCutEcross_cent%d",cen),"Decay photons with rec. partner but failed Ecross cut", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnCutM02_cent%d",cen),"Decay photons with rec. partner but failed M02 cut", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWMisPartnDefCuts_cent%d",cen),"Decay photons with rec. partner but failed default cuts", nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCDecWRecPartn_cent%d",cen),"Decay photons with rec partner", nPt,0.,ptMax)) ;
+
+ fOutputContainer->Add(new TH2F(Form("hMCmass_cent%d",cen),"Mass with reconstructed decay partner",nM,0.,mMax,nPt,0.,ptMax)) ;
+
+
+ fOutputContainer->Add(new TH1F(Form("hMCRecGammaPi0Dalitz_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCRecGammaPi0NoStack_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCGammaPi02Gamma_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCGammaPi0Rec_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCGammaPi0RecSoft_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
+ fOutputContainer->Add(new TH1F(Form("hMCGammaPi0RecCells_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
fOutputContainer->Add(new TH1F(Form("hMCGammaPi0Tagged_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
fOutputContainer->Add(new TH1F(Form("hMCGammaPi0FakeTagged_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
//all clusters fake tagged
fOutputContainer->Add(new TH1F(Form("hMCAllFakeTagged_%s_cent%d",cPID[iPID],cen),"Reconstructed gammas, from pi0",nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH2F(Form("hMC_InvM_Re_%s_cent%d",cPID[iPID],cen),"Two-photon inv. mass vs first photon pt",nM,0.,mMax,nPt,0.,ptMax)) ;
- fOutputContainer->Add(new TH2F(Form("hMC_InvM_Re_Strict_%s_cent%d",cPID[iPID],cen),"Two-photon inv. mass vs first photon pt",nM,0.,mMax,nPt,0.,ptMax)) ;
}
fOutputContainer->Add(new TH1F(Form("hMCGammaPi0MisPartner_cent%d",cen),"Spectrum of missed partners",nPt,0.,ptMax)) ;
fOutputContainer->Add(new TH2F(Form("hMCGammaPi0MisPartnerEtaPhi_cent%d",cen),"Spectrum of missed partners",100,-0.2,0.2,100,4.5,5.6)) ;
}
- }
- }//If MC handler exists...
+*/
+ }
+
+ //If we work with MC, need to set Sumw2 - we will use weights
+ if(fIsMC){
+ for(Int_t i=0; i<fOutputContainer->GetSize();i++){
+ ((TH1*)fOutputContainer->At(i))->Sumw2() ;
+ }
+ }
+
- for(Int_t i=0;i<1;i++)
+
+ for(Int_t i=0;i<10;i++)
for(Int_t j=0;j<5;j++)
fPHOSEvents[i][j]=0x0 ; //Container for PHOS photons
//Select photons
//Fill QA histograms
//Fill Tagging histogsms
+
+
+ const Double_t kEcrossCut=0.98 ;
+ const Double_t kTOFMaxCut= 100.e-9 ;
+ const Double_t kTOFMinCut=-100.e-9 ;
// Event selection flags
-
- FillHistogram("hSelEvents",1) ;
+ // FillHistogram("hSelEvents",0) ;
AliVEvent* event = (AliVEvent*)InputEvent();
if(!event){
PostData(1, fOutputContainer);
return;
}
- FillHistogram("hSelEvents",2) ;
+ FillHistogram("hSelEvents",1) ;
+
+ //MC stack init
+ fStack = (TClonesArray*)event->FindListObject(AliAODMCParticle::StdBranchName());
//read geometry if not read yet
- if(fPHOSgeom==0)
+ if(fPHOSgeom==0){
InitGeometry() ;
-
- //MC stack init
- fStack=0x0 ;
- if(AliAnalysisManager::GetAnalysisManager()){
- AliMCEventHandler* mctruth = (AliMCEventHandler*)((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
- if(mctruth)
- fStack = mctruth->MCEvent()->Stack();
}
+ if(!fUtils)
+ fUtils = new AliAnalysisUtils();
+
+ Bool_t isMB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kINT7) ;
+ Bool_t isPHI7 = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kPHI7);
+
+ if((fIsMB && !isMB) || (!fIsMB && !isPHI7)){
+ PostData(1, fOutputContainer);
+ return;
+ }
+ FillHistogram("hSelEvents",2) ;
// Checks if we have a primary vertex
// Get primary vertices form AOD
-/*
- if(event->GetPrimaryVertexTracks()->GetNContributors()>0)
- eventVtxExist = kTRUE;
- else
- if(event->GetPrimaryVertexSPD()->GetNContributors()>0)
- eventVtxExist = kTRUE;
-*/
-
Double_t vtx5[3];
vtx5[0] = event->GetPrimaryVertex()->GetX();
vtx5[1] = event->GetPrimaryVertex()->GetY();
}
FillHistogram("hSelEvents",3) ;
+ //Vtx class z-bin
+ Int_t zvtx = TMath::Min(9,Int_t((vtx5[2]+10.)/2.)) ;
+
// if (event->IsPileupFromSPD()){
// PostData(1, fOutputContainer);
// return ;
// }
-
+
+ if(!fUtils->IsVertexSelected2013pA(event)){
+ PostData(1, fOutputContainer);
+ return ;
+ }
FillHistogram("hSelEvents",4) ;
-
+
+ if(fUtils->IsPileUpEvent(event)){
+ PostData(1, fOutputContainer);
+ return ;
+ }
+ FillHistogram("hSelEvents",5) ;
+
//centrality
AliCentrality *centrality = event->GetCentrality();
if( centrality )
}
fCentBin = (Int_t)(fCentrality/20.) ;
- FillHistogram("hSelEvents",5) ;
+ FillHistogram("hSelEvents",6) ;
- //Vtx class z-bin
- Int_t zvtx = 0 ;
-
//Calculate charged multiplicity
Int_t trackMult = 0;
if(fTrackEvent)
fTrackEvent->Clear() ;
else
- fTrackEvent = new TClonesArray("AliAODPWG4Particle",event->GetNumberOfTracks()) ;
+ fTrackEvent = new TClonesArray("AliCaloPhoton",event->GetNumberOfTracks()) ;
+
for (Int_t i=0;i<event->GetNumberOfTracks();++i) {
- AliVParticle *track = event->GetTrack(i) ;
+ AliAODTrack *track = (AliAODTrack*)event->GetTrack(i) ;
+ if(!track->IsHybridGlobalConstrainedGlobal())
+ continue ;
if(TMath::Abs(track->Eta())< 0.9){
if(trackMult>=fTrackEvent->GetSize())
fTrackEvent->Expand(2*trackMult) ;
- new ((*fTrackEvent)[trackMult]) AliAODPWG4Particle(track->Px(),track->Py(),track->Pz(),track->P());
+ new ((*fTrackEvent)[trackMult]) AliCaloPhoton(track->Px(),track->Py(),track->Pz(),track->P());
trackMult++;
+ FillHistogram("hTrackEtaPhi",track->Eta(),track->Phi()) ;
+ FillHistogram("hTrackEtaPt",track->Eta(),track->Pt()) ;
}
}
FillHistogram("hTrackMult",fCentrality,trackMult+0.5) ;
//---------Select photons-------------------
Int_t multClust = event->GetNumberOfCaloClusters();
if(!fPHOSEvent)
- fPHOSEvent = new TClonesArray("AliAODPWG4Particle",multClust);
+ fPHOSEvent = new TClonesArray("AliCaloPhoton",multClust);
else
fPHOSEvent->Clear() ;
Int_t inList = 0; //counter of caloClusters
if(clu->GetM02()<0.2)
continue ;
- if(clu->GetMCEnergyFraction()>0.98) //Ecross cut, should be filled with Tender
+ if(clu->GetMCEnergyFraction()>kEcrossCut) //Ecross cut, should be filled with Tender
continue ;
-
- FillHistogram("hTOF",clu->E(),clu->GetTOF()) ;
- if(TMath::Abs(clu->GetTOF())>100.e-9)
- continue ;
-
-// if(clu->GetDistanceToBadChannel()<2.5)
-// continue ;
Float_t pos[3] ;
clu->GetPosition(pos) ;
Int_t fidArea=GetFiducialArea(pos) ;
- if(fidArea==0) //Bad cell
- continue;
-
+// if(fidArea==0) //Bad cell
+// continue;
TVector3 global1(pos) ;
Int_t relId[4] ;
Int_t mod = relId[0] ;
Int_t cellX = relId[2];
Int_t cellZ = relId[3] ;
+
+ FillHistogram("hTOF",clu->E(),clu->GetTOF()) ;
+ FillHistogram(Form("hTofM%d",mod),clu->GetTOF(),clu->E()) ;
+ if((!fIsMC) && (clu->GetTOF() < kTOFMinCut || clu->GetTOF() > kTOFMaxCut))
+ continue ;
+
+// if(clu->GetDistanceToBadChannel()<2.5)
+// continue ;
+
FillHistogram(Form("hCluNXZM%d",mod),cellX,cellZ,1.);
FillHistogram(Form("hCluEXZM%d",mod),cellX,cellZ,clu->E());
TLorentzVector momentum ;
clu->GetMomentum(momentum, vtx5);
- AliAODPWG4Particle *p = new ((*fPHOSEvent)[inList]) AliAODPWG4Particle(momentum.Px(),momentum.Py(),momentum.Pz(),clu->E() );
+ AliCaloPhoton *p = new ((*fPHOSEvent)[inList]) AliCaloPhoton(momentum.Px(),momentum.Py(),momentum.Pz(),clu->E() );
inList++;
-
- Int_t isolation = EvalIsolation(&momentum) ;
- p->SetBtag(isolation) ;
- p->SetDistToBad((Int_t)(1.+clu->GetDistanceToBadChannel()/2.2));
+ Int_t isolation = EvalIsolation(&momentum,kTRUE) ;
+ p->SetIsolationTag(isolation) ;
- p->SetTag(0); //Strict PID pi0 partner not found
+ p->SetDistToBad((Int_t)(1.+clu->GetDistanceToBadChannel()/2.2));
+ p->SetBC(i) ; //reference to CaloCluster
+ p->SetTagInfo(0); //Strict PID pi0 partner not found
p->SetTagged(kFALSE); //Reconstructed pairs found
- Bool_t sure = 0;
+
p->SetFiducialArea(fidArea) ;
- if(fStack){
- //This is primary entered PHOS
- Int_t primLabel=FindPrimary(clu,sure) ;
- //Look what particle left vertex
- if(primLabel>-1){
- TParticle * prim = fStack->Particle(primLabel) ;
- Int_t iparent=primLabel;
- TParticle * parent = prim;
- while((parent->R() > rcut) && (iparent>-1)){
- iparent=parent->GetFirstMother();
- parent=fStack->Particle(iparent);
- }
- p->SetCaloLabel(primLabel,iparent); //This and partner cluster
- }
- else{
- p->SetCaloLabel(-1,-1); //This and partner cluster
- }
-
+ if(fIsMC){
+ //This is primary entered PHOS
+ FillHistogram(Form("LabelsNPrim_cent%d",fCentBin),clu->E(),float(clu->GetNLabels())) ;
+ Int_t primLabel=clu->GetLabelAt(0) ; //FindPrimary(clu,sure) ;
+ //Look what particle left vertex
+ if(primLabel>-1){
+ AliAODMCParticle * prim = (AliAODMCParticle*)fStack->At(primLabel) ;
+ Int_t iparent=primLabel;
+ AliAODMCParticle * parent = prim;
+ Double_t r2=prim->Xv()*prim->Xv()+prim->Yv()*prim->Yv() ;
+ while((r2 > rcut*rcut) && (iparent>-1)){
+ iparent=parent->GetMother();
+ parent=(AliAODMCParticle*)fStack->At(iparent);
+ r2=parent->Xv()*parent->Xv()+parent->Yv()*parent->Yv() ;
+ }
+ p->SetPrimary(primLabel) ;
+ p->SetPrimaryAtVertex(iparent) ;
+ p->SetWeight(PrimaryParticleWeight(parent)) ;
+ }
+ else{
+ p->SetPrimary(-1); //Primary index
+ p->SetPrimaryAtVertex(-1) ;
+ p->SetWeight(1.) ;
+ }
}
else{
- //This is primary at vertex(R<1cm)
- p->SetCaloLabel(-1,-1); //This and partner cluster
+ p->SetPrimary(-1); //Primary index
+ p->SetPrimaryAtVertex(-1) ;
+ p->SetWeight(1.) ;
}
- p->SetLabel(i); //Cluster index
//PID criteria
-// p->SetDispBit(clu->Chi2()) ;
p->SetDispBit(clu->Chi2()<2.5) ;
p->SetTOFBit(TestTOF(clu->GetTOF(),clu->E())) ;
- p->SetChargedBit(clu->GetEmcCpvDistance()>2.5) ;
+ p->SetCPVBit(clu->GetEmcCpvDistance()>2.5) ;
}
FillHistogram("hPHOSCentrality",fCentrality,inList+0.5) ;
+
FillMCHistos() ;
FillTaggingHistos() ;
void AliAnalysisTaskTaggedPhotons::FillMCHistos(){
//MC info about this particle
- if(!fStack)
+ if(!fIsMC)
return ;
-
const Double_t rcut=1. ; //cut on vertex to consider particle as "primary"
- AliAODEvent* event = (AliAODEvent*)InputEvent();
+ const Double_t phiMin=260.*TMath::Pi()/180. ;
+ const Double_t phiMax=320.*TMath::Pi()/180. ;
+
+ AliVEvent* event = (AliVEvent*)InputEvent();
+
+ Int_t nPrim = fStack->GetEntriesFast() ;
+ //Fill Primary particl yields
- //Fill spectra of primary particles
- char partName[10] ;
- for(Int_t i=0;i<fStack->GetNtrack();i++){
- TParticle* particle = fStack->Particle(i);
+ for(Int_t i=0;i<nPrim;i++){
+ AliAODMCParticle * prim = (AliAODMCParticle*)fStack->At(i) ;
+ Double_t r2=prim->Xv()*prim->Xv()+prim->Yv()*prim->Yv() ;
+ if(r2>rcut*rcut)
+ continue ;
+
+ Int_t pdg=prim->GetPdgCode() ;
+ char partName[30] ;
+ if(pdg == 111)
+ snprintf(partName,30,"pi0") ;
+ else
+ if(pdg == 221)
+ snprintf(partName,30,"eta") ;
+ else
+ if(pdg == 22)
+ snprintf(partName,30,"gamma") ;
+ else
+ if(pdg == 310)
+ snprintf(partName,30,"K0s") ;
+ else
+ if(abs(pdg) == 321)
+ snprintf(partName,30,"Kpm") ;
+ else
+ if(abs(pdg) == 211)
+ snprintf(partName,30,"pipm") ;
+ else
+ if(abs(pdg) == 2212)
+ snprintf(partName,30,"p") ;
+ else
+ if(abs(pdg) ==-2212)
+ snprintf(partName,30,"pbar") ;
+ else
+ if(abs(pdg) == 2112)
+ snprintf(partName,30,"n") ;
+ else
+ if(abs(pdg) ==-2112)
+ snprintf(partName,30,"nbar") ;
+ else
+ continue ;
+
//Primary particle
- Double_t r=particle->R() ;
-
- switch(particle->GetPdgCode()){
- case 111: snprintf(partName,10,"pi0") ;
- break ;
- case 221: snprintf(partName,10,"eta") ;
- break ;
- case 223: snprintf(partName,10,"omega") ;
- break ;
- case 22: snprintf(partName,10,"gamma") ;
- break ;
- default: continue ;
- }
-
- Double_t pt = particle->Pt() ;
- //Distribution over vertex
- FillHistogram(Form("hMC_%s_vertex",partName),pt,r) ;
+ Double_t phi=prim->Phi() ;
+ while(phi<0.)phi+=TMath::TwoPi() ;
+ while(phi>TMath::TwoPi())phi-=TMath::TwoPi() ;
+ Double_t pt=prim->Pt() ;
- if(r >rcut)
- continue ;
-
//Total number of pi0 with creation radius <1 cm
- Double_t w = PrimaryParticleWeight(particle) ;
- FillHistogram(Form("hMC_all_%s",partName),pt,w) ;
- if(TMath::Abs(particle->Y())<0.15){
- FillHistogram(Form("hMC_unitEta_%s",partName),pt,w) ;
+ Double_t w = PrimaryParticleWeight(prim) ;
+ FillHistogram(Form("hMC_all_%s_cent%d",partName,fCentBin),pt,w) ;
+ if(TMath::Abs(prim->Y())<0.13){
+ FillHistogram(Form("hMC_phi_%s_cent%d",partName,fCentBin),phi,w) ;
+ if(phi>phiMin && phi<phiMax)
+ FillHistogram(Form("hMC_unitEta_%s_cent%d",partName,fCentBin),pt,w) ;
}
- FillHistogram(Form("hMC_rap_%s",partName),particle->Y(),w) ;
+ FillHistogram(Form("hMC_rap_%s_cent%d",partName,fCentBin),prim->Y(),w) ;
+ //Some additional QA
+ if(pdg == 111){
+ FillHistogram("hMCpi0_ptrap",pt,prim->Y(),w) ;
+ FillHistogram("hMCpi0_ptphi",pt,phi,w) ;
+ }
+ if(pdg == 22){
+ FillHistogram("hMCgamma_ptrap",pt,prim->Y(),w) ;
+ FillHistogram("hMCgamma_ptphi",pt,phi,w) ;
+ }
- Double_t phi=particle->Phi() ;
- while(phi<0.)phi+=TMath::TwoPi() ;
- while(phi>TMath::TwoPi())phi-=TMath::TwoPi() ;
- FillHistogram(Form("hMC_phi_%s",partName),phi,w) ;
}
+
//Clussify reconstructed clusters
const Int_t n=fPHOSEvent->GetEntriesFast() ;
for(Int_t i=0;i<n;i++){
- AliAODPWG4Particle *p = static_cast<AliAODPWG4Particle*>(fPHOSEvent->At(i));
- Int_t iprim=p->GetCaloLabel(0) ; //Particle entered PHOS
- if(iprim<0){ //No label!
- FillHistogram("hMCRecNoLabel",p->Pt());
+ AliCaloPhoton *p = static_cast<AliCaloPhoton*>(fPHOSEvent->At(i));
+ Int_t label=p->GetPrimary() ;
+ if(label<0){ //No label!
+ FillHistogram("hMCRecNoLabel",p->Pt(),p->GetWeight());
continue ;
}
-
- TParticle * prim = fStack->Particle(iprim) ;
-
- //Look what particle left vertex
- Int_t iparent=p->GetCaloLabel(1); //Particle left vertex
- TParticle * parent =fStack->Particle(iparent);
- Int_t grandpaPDG=-1 ;
- if(parent){
- grandpaPDG=parent->GetPdgCode() ;
- }
- switch(grandpaPDG){
- case -1: //no primary
- FillPIDHistograms("hMCRecNoPrim",p);
- break ;
- case 22:
- FillPIDHistograms("hMCRecGamma",p);
- break ;
- case 11:
- case -11: //electron/positron conversion
- FillPIDHistograms("hMCRecPhotConv",p); //Reconstructed with photon from conversion primary
- FillHistogram("hMCConversionRadius",prim->R());
+
+ AliAODMCParticle * prim = (AliAODMCParticle*)fStack->At(p->GetPrimary()) ;
+ //Look what particle left virtex
+ Int_t iparent=p->GetPrimary();
+ AliAODMCParticle * parent = prim;
+ while(parent->Xv()*parent->Xv()+parent->Yv()*parent->Yv() > rcut*rcut){
+ iparent=parent->GetMother();
+ if(iparent<0)
break ;
- case 111: //Pi0 decay //Primary decay photon (as in MC)
- FillPIDHistograms("hMCRecPi0",p);
- //Strange, vertex of pi0?
- FillHistogram("hMCRecPi0Vtx",p->Pt(),parent->R());
+ parent = (AliAODMCParticle*)fStack->At(iparent) ;
+ }
+ Int_t parentPDG=parent->GetPdgCode() ;
+ switch(parentPDG){
+ case 22: //electron/positron conversion
+ FillPIDHistograms("hMCRecPhoton",p); //Reconstructed with photon from conversion primary
break ;
- case 221: //eta decay
- FillPIDHistograms("hMCRecEta",p);
- //Strange, vertex of eta?
- FillHistogram("hMCRecEtaVtx",p->Pt(),parent->R());
- break ;
- case 223: //omega meson decay
- FillPIDHistograms("hMCRecOmega",p);
- //Strange, vertex of omega?
- FillHistogram("hMCRecOmegaVtx",p->Pt(),parent->R());
+ case 11:
+ case -11: //electron/positron conversion
+ FillPIDHistograms("hMCRecE",p); //Reconstructed with photon from conversion primary
break ;
- case 331: //eta' decay
- FillPIDHistograms("hMCRecEtapr",p);
- //Strange, vertex of eta'?
- FillHistogram("hMCRecEtaprVtx",p->Pt(),parent->R());
- break ;
- case -2212:
+ case -2212:
FillPIDHistograms("hMCRecPbar",p); //Reconstructed with photon from antibaryon annihilation
break ;
- case -2112: //antineutron & antiproton
+ case -2112: //antineutron & antiproton conversion
FillPIDHistograms("hMCRecNbar",p); //Reconstructed with photon from antibaryon annihilation
break ;
- case 211:
- case -211:
- FillPIDHistograms("hMCRecPipm",p); //Reconstructed with photon from antibaryon annihilation
- break ;
- case 2112:
- FillPIDHistograms("hMCRecN",p); //Reconstructed with photon from antibaryon annihilation
- break ;
- case 2212:
- FillPIDHistograms("hMCRecP",p); //Reconstructed with photon from antibaryon annihilation
- break ;
- case 321:
- case -321:
- FillPIDHistograms("hMCRecKpm",p); //Reconstructed with photon from conversion primary
+ case 211:
+ case -211:
+ case 2212:
+ case 321:
+ case -321:
+ FillPIDHistograms("hMCRecCharg",p); //Reconstructed with photon from conversion primary
break ;
- case 130:
- FillHistogram("hMCRecK0sVtx",p->Pt(),prim->R());
+ case 310:
FillPIDHistograms("hMCRecK0s",p); //Reconstructed with photon from conversion primary
break ;
- case 310:
- FillHistogram("hMCRecK0lVtx",p->Pt(),prim->R());
- FillPIDHistograms("hMCRecK0l",p); //Reconstructed with photon from conversion primary
+ case 2112: //antineutron & antiproton conversion
+ case 130:
+ FillPIDHistograms("hMCRecNeutral",p); //Reconstructed with photon from antibaryon annihilation
break ;
- default:
- if(parent->GetPDG()->Charge()!=0)
- FillPIDHistograms("hMCRecUnknownCh",p);
- else
- FillPIDHistograms("hMCRecUnknownNeu",p);
- printf("Unknown PDG code: %d \n",grandpaPDG) ;
- }
-//Put here filling histograms vs PID...
+ case -1: //direct photon or no primary
+ FillPIDHistograms("hMCRecNoPRim",p);
+ break ;
+ default:
+ printf("Unknown PDG: %d \n",parentPDG) ;
+ FillPIDHistograms("hMCRecUnknown",p);
+ break ;
+ }
-
- //Now classify decay photons
- if(grandpaPDG==22){
- //Separate gammas from pi0s, eta, omega, eta', e+-, other, no primary
- Int_t igrandpa = -1 ;
- if(parent)
- igrandpa=parent->GetFirstMother();
- Int_t decayPDG=-1 ;
- TParticle * decay=0x0 ;
- if(igrandpa>-1){
- decay=fStack->Particle(igrandpa) ;
- decayPDG=decay->GetPdgCode() ;
- }
- switch(decayPDG){
- case -1 :// Direct gamma?
- FillPIDHistograms("hMCRecGammaDir",p);
- break ;
- case 111 :// pi0 decays
- FillPIDHistograms("hMCRecGammaPi0",p);
- break ;
- case 221 :// eta decays
- FillPIDHistograms("hMCRecGammaEta",p);
- break ;
- case 223 :// omega decays
- FillPIDHistograms("hMCRecGammaOmega",p);
- break ;
- default:
- FillPIDHistograms("hMCRecGammaOther",p);
- }
-
-
- //Classify photons from pi0 decay
- if(decayPDG==111){
- //Dalitz decay
- if(decay->GetNDaughters()>2){
- FillPIDHistograms("hMCRecGammaPi0Dalitz",p);
- continue ;
- }
- Int_t ipartner = decay->GetFirstDaughter();
- if(ipartner==iparent){ //look other
- ipartner = decay->GetLastDaughter();
+
+ //Now classify decay photon
+ if(parentPDG==22){
+ Int_t iGrandParent=parent->GetMother();
+ if(iGrandParent<0 || iGrandParent>=fStack->GetEntriesFast()){
+ FillPIDHistograms("hMCRecPhotNoPrim",p);
+ continue ;
}
- //No partner in Stack
- if(ipartner==-1){
- FillPIDHistograms("hMCRecGammaPi0NoStack",p) ;
+ AliAODMCParticle * grandParent = (AliAODMCParticle*)fStack->At(iGrandParent) ;
+ Int_t grandParentPDG=grandParent->GetPdgCode() ;
+ switch(grandParentPDG){
+ case 111: //pi0
+ FillPIDHistograms("hMCRecPhotPi0",p);
+ break ;
+ case 221: //eta decay
+ FillPIDHistograms("hMCRecPhotEta",p);
+ break ;
+ case 223: //omega meson decay
+ FillPIDHistograms("hMCRecPhotOmega",p);
+ break ;
+ default:
+ FillPIDHistograms("hMCRecPhotOther",p);
}
- else{
- //
- FillPIDHistograms("hMCGammaPi02Gamma",p) ;
- TParticle * partner = fStack->Particle(ipartner);
- //Check if partner is registered and made correct mass
- Double_t mPrim=(parent->Energy()+partner->Energy())*(parent->Energy()+partner->Energy())-
- (parent->Px()+partner->Px())*(parent->Px()+partner->Px()) -
- (parent->Py()+partner->Py())*(parent->Py()+partner->Py()) -
- (parent->Pz()+partner->Pz())*(parent->Pz()+partner->Pz()) ;
- if(mPrim>0.)mPrim=TMath::Sqrt(mPrim) ;
- FillHistogram(Form("hMCGammaPi0PrimMgg_cent%d",fCentBin),mPrim,p->Pt()) ;
-
- //find corresponding PWG4particle
- Bool_t isPartnerRec=kFALSE ;
- Bool_t isTagged=kFALSE ;
- for(Int_t j=0;j<n;j++){
- if(j==i)
- continue ;
- AliAODPWG4Particle *p2 = static_cast<AliAODPWG4Particle*>(fPHOSEvent->At(j));
- Double_t invMass = p->GetPairMass(p2);
- if(p2->GetCaloLabel(1)==ipartner){ //partner
- isPartnerRec=kTRUE ;
- FillHistogram("hMCGammaPi0RecMgg",invMass,p->Pt()) ;
- FillPIDHistograms("hMCGammaPi0Rec",p) ;
-
- //estimate proportion passed PI0 cut
- if(IsInPi0Band(invMass,p->Pt(),2)){ //Check type!!!!!!!!!!!!!!
- FillPIDHistograms("hMCGammaPi0TrueTagged",p) ;
- if(isTagged)
- FillPIDHistograms("hMCGammaPi0MultyTagged",p) ;
- isTagged=kTRUE ;
- }
+ //--------consider pi0 decays--------------------
+ if(grandParentPDG==111){
+ //First find which daughter is our cluster
+ //iparent - index of curent photon
+ Int_t ipartner=grandParent->GetDaughter(0) ;
+ if(ipartner==iparent){//look for other
+ if(grandParent->GetNDaughters()>1){
+ ipartner=grandParent->GetDaughter(1);
}
else{
- if(IsInPi0Band(invMass,p->Pt(),2)){//Check type!!!!!!!!!!!!!!
- FillPIDHistograms("hMCGammaPi0FakeTagged",p) ;
- if(isTagged)
- FillPIDHistograms("hMCGammaPi0MultyTagged",p) ;
- isTagged=kTRUE ;
- }
+ ipartner=-1 ;
}
}
- if(isTagged)
- FillPIDHistograms("hMCGammaPi0Tagged",p) ;
+ //There is no partner in stack
+ if(ipartner==-1){
+ FillPIDHistograms("hMCDecWMisPartnStack",p) ;
+ }
+ else{
+ AliAODMCParticle * partner = (AliAODMCParticle *)fStack->At(ipartner);
+ //Check if partner is registered and made correct mass
+ //If not - trace the reason
+ AliCaloPhoton *pp = 0x0 ;
- //If no PWG4particle trace the reason
- if(!isPartnerRec){
- //conversion
- if(partner->GetPdgCode()==22){
+ for(Int_t ii=0;ii<n;ii++){
+ if(i==ii) continue;
+ AliCaloPhoton * tmp = static_cast<AliCaloPhoton*>(fPHOSEvent->At(ii));
+ Int_t ipartnPrim = tmp->GetPrimary() ;
+ while(ipartnPrim>-1){
+ if(ipartnPrim==ipartner){
+ break ;
+ }
+ ipartnPrim = ((AliAODMCParticle *)fStack->At(ipartnPrim))->GetMother();
+ }
+ if(ipartnPrim==ipartner){
+ pp=tmp ;
+ break ;
+ }
+ }
+ if(pp){
+ //Partner reconstructed, but did not pass cuts
+ FillPIDHistograms("hMCDecWRecUniqPartn",p) ;
+ }
+ //Partner not found. Check if it is not dominant contributor?
+ if(!pp){
+ for(Int_t ii=0;(ii<n) && (!pp);ii++){
+ if(i==ii) continue;
+ AliCaloPhoton * tmp = static_cast<AliCaloPhoton*>(fPHOSEvent->At(ii));
+ Int_t iCaloCluster=tmp->GetBC();//index of AODCaloCluster
+ AliVCluster * clu = event->GetCaloCluster(iCaloCluster);
+ Int_t nCluPrimaries = clu->GetNLabels() ;
+ for(Int_t iAODLabel=0; (iAODLabel<nCluPrimaries) && (!pp); iAODLabel++){
+ Int_t ipartnPrim = clu->GetLabelAt(iAODLabel) ;
+ while(ipartnPrim>-1){
+ if(ipartnPrim==ipartner){
+ break ;
+ }
+ ipartnPrim = ((AliAODMCParticle *)fStack->At(ipartnPrim))->GetMother();
+ }
+ if(ipartnPrim==ipartner){
+ pp=tmp ;
+ break ;
+ }
+ }
+ }
+ }
+
+ if(pp){
+ //Partner reconstructed, but did not pass cuts
+ FillPIDHistograms("hMCDecWRecPartn",p) ;
+ Double_t invMass=(*p+ *pp).M() ;
+ FillHistogram(Form("hMCmass_cent%d",fCentBin),invMass,p->Pt(),p->GetWeight()) ;
+ Double_t nSigma=InPi0Band(invMass,p->Pt()) ;
+ // analog to Tag
+ for(Int_t eminType=0; eminType<3; eminType++){
+ if(pp->E()>0.1*(eminType+1)){
+ for(Int_t isigma=0; isigma<3; isigma++){
+ if(nSigma<1.+isigma){
+ Int_t iType=3*eminType+isigma ;
+ FillPIDHistograms(Form("hMCDecWithFoundPartnType%d",iType),p) ;
+ }
+ }
+ }
+ }
+ if(nSigma>3.){
+ FillPIDHistograms("hMCDecWithWrongMass",p) ;
+ }
+ }
+ else{//Partner not reconstructed
+ if(partner->GetPdgCode()==22){
Bool_t isPartnerLost=kFALSE; //If partner is lost for some reason
- //did not hit PHOS
- Int_t modulenum ;
+ //Check if partner miss PHOS
+ Int_t modulenum ;
Double_t ztmp=0.,xtmp=0. ;
- Bool_t impact=fPHOSgeom->ImpactOnEmc(partner,modulenum,ztmp,xtmp) ;
- //Check Bad Map
- Int_t fidArea=0 ;
- TVector3 partnerGlobaPos ;
- if(impact){
- fPHOSgeom->Local2Global(modulenum,xtmp, ztmp,partnerGlobaPos) ;
- Float_t pos[3] ;
- partnerGlobaPos.GetXYZ(pos);
- fidArea=GetFiducialArea(pos) ;
- }
-
- if(!impact || (fidArea==0) ){ //this photon cannot hit PHOS
- FillPIDHistograms("hMCGammaPi0MisGeo",p);
+ Double_t vtx[3]={partner->Xv(),partner->Yv(),partner->Zv()} ;
+ Bool_t impact=fPHOSgeom->ImpactOnEmc(vtx,partner->Theta(),partner->Phi(),modulenum,ztmp,xtmp) ;
+
+ if(impact){//still check bad map
+ Int_t relId[4] ;
+ fPHOSgeom->RelPosToRelId(modulenum,xtmp,ztmp,relId) ;
+ if ( !IsGoodChannel(modulenum,relId[2],relId[3]) ) {
+ impact=kFALSE ;
+ }
+ }
+
+ if(!impact){ //this photon cannot hit PHOS
+ FillPIDHistograms("hMCDecWMisPartnAccept",p) ; //Spectrum of tagged with missed partner
Int_t iFidArea = p->GetFiducialArea();
if(iFidArea>0){
- FillPIDHistograms("hMCGammaPi0MisGeoFA1",p) ; //Spectrum of tagged with missed partner
+ FillPIDHistograms("hMCDecWMisPartnAcceptFA1",p) ; //Spectrum of tagged with missed partner
if(iFidArea>1){
- FillPIDHistograms("hMCGammaPi0MisGeoFA2",p) ; //Spectrum of tagged with missed partner
+ FillPIDHistograms("hMCDecWMisPartnAcceptFA2",p) ; //Spectrum of tagged with missed partner
if(iFidArea>2){
- FillPIDHistograms("hMCGammaPi0MisGeoFA3",p) ; //Spectrum of tagged with missed partner
+ FillPIDHistograms("hMCDecWMisPartnAcceptFA3",p) ; //Spectrum of tagged with missed partner
}
}
}
isPartnerLost=kTRUE;
}
-
- //this photon is converted before it is registered
- if(!isPartnerLost){
- if(partner->GetNDaughters()>0 &&
- fStack->Particle(partner->GetFirstDaughter())->R()<450.){
- FillPIDHistograms("hMCGammaPi0MisConv",p);
- FillHistogram("hMCGammaPi0MisConvR",p->Pt(),fStack->Particle(partner->GetFirstDaughter())->R()) ; //Spectrum of tagged with missed partner
- isPartnerLost=kTRUE;
- }
- }
- // too soft
+ if(!isPartnerLost){
+ //this photon is converted before it is registered
+ if(partner->GetNDaughters()>0){
+ AliAODMCParticle* tmpP=(AliAODMCParticle*)fStack->At(partner->GetDaughter(0));
+ if(tmpP->Xv()*tmpP->Xv()+tmpP->Yv()*tmpP->Yv()<450.*450.){
+ FillPIDHistograms("hMCDecWMisPartnConv",p) ; //Spectrum of tagged with missed partner
+ isPartnerLost=kTRUE;
+ }
+ }
+ }
if(!isPartnerLost &&
- partner->Energy()<0.3){ //energy is not enough to be registered by PHOS
- FillPIDHistograms("hMCGammaPi0MisEmin",p);
+ partner->E()<0.3){ //energy is not enough to be registered by PHOS
+ FillPIDHistograms("hMCDecWMisPartnEmin",p) ; //Spectrum of tagged with missed partner
isPartnerLost=kTRUE;
}
- //Other reason
- if(!isPartnerLost){
- FillHistogram("hMCGammaPi0MisPartner",partner->Pt());
- FillHistogram("hMCGammaPi0MisPartnerEtaPhi",partner->Eta(),partner->Phi());
- //May be overlap?
- Bool_t fakePrimary=kFALSE ;
+ if(!isPartnerLost){ //Reason not found!!!!!
+ FillPIDHistograms("hMCDecWMisPartnOther",p);
Int_t multClust = event->GetNumberOfCaloClusters();
- for (Int_t iclu=0; iclu<multClust; iclu++) {
- AliAODCaloCluster * clu = event->GetCaloCluster(iclu);
- Float_t pos[3] ;
- clu->GetPosition(pos) ;
- TVector3 global1(pos) ;
- Double_t d=(partnerGlobaPos-global1).Mag();
- if( d<4 ){//same cluster
- //check is partner is in list?
- Int_t nlab=clu->GetNLabels() ;
- for(Int_t ilab=0; ilab<nlab; ilab++){
- Int_t labelA = clu->GetLabelAt(ilab) ;
- while(labelA>-1){
- if(labelA==ipartner){
- if(clu->E()>0.3)
- FillPIDHistograms("hMCGammaPi0RecSoft",p);
- else
- if(clu->GetNCells()<3)
- FillPIDHistograms("hMCGammaPi0RecCells",p);
- else
- FillPIDHistograms("hMCGammaPi0MisFoundPrim",p);
- break ;
- }
- labelA=fStack->Particle(labelA)->GetFirstMother() ;
- }
- }
- fakePrimary=kTRUE ;
- break ;
+ for (Int_t iclu=0; (iclu<multClust) && (!isPartnerLost); iclu++) {
+ AliVCluster * clu = event->GetCaloCluster(iclu);
+ if(!clu->IsPHOS())
+ continue ;
+ if(clu->E()==p->E()) //same cluster as current
+ continue ;
+ Int_t nCluPrimaries = clu->GetNLabels() ;
+ for(Int_t iAODLabel=0; (iAODLabel<nCluPrimaries) && (!isPartnerLost); iAODLabel++){
+ Int_t ipartnPrim = clu->GetLabelAt(iAODLabel) ;
+ while(ipartnPrim>-1){
+ if(ipartnPrim==ipartner)
+ break ;
+ ipartnPrim = ((AliAODMCParticle *)fStack->At(ipartnPrim))->GetMother();
+ }
+ if(ipartnPrim==ipartner){
+ isPartnerLost=kTRUE;
+ break ;
+ }
}
- }//end of loop over clusters
- //No cluster in this region
- if(fakePrimary)
- FillPIDHistograms("hMCGammaPi0MisFakePrim",p);
- else
- FillPIDHistograms("hMCGammaPi0MisOther",p);
-
+ }
+ if(isPartnerLost){//Did not pass default cuts
+ FillPIDHistograms("hMCDecWMisPartnDefCuts",p);
+ }
+ }
+ else{//Sum of all missed partners
+ FillPIDHistograms("hMCDecWMisPartnAll",p);
}
}//Partner - photon
else{//partner not photon
- FillPIDHistograms("hMCGammaPi0MisNPhot",p);
+ FillPIDHistograms("hMCDecWMisPartnNPhot",p);
}
- }
- }
- }
- }
- } //PHOS clusters
-
-
- //Fill histograms with all clusters fake tagging
- for(Int_t i=0;i<n-1;i++){
- AliAODPWG4Particle *p = static_cast<AliAODPWG4Particle*>(fPHOSEvent->At(i));
-
- Int_t ipartner=-999 ; // this will be partner if this cluster from pi0 decay
- //Look what particle left vertex
- Int_t iparent=p->GetCaloLabel(1); //Particle left vertex
- TParticle * parent =fStack->Particle(iparent);
- if(parent){
- Int_t grandpaPDG=parent->GetPdgCode() ;
- if(grandpaPDG==22){
- Int_t igrandpa =parent->GetFirstMother();
- if(igrandpa>-1){
- TParticle * decay=fStack->Particle(igrandpa) ;
- Int_t decayPDG=decay->GetPdgCode() ;
- if(decayPDG==111){
- //Dalitz decay
- if(decay->GetNDaughters()==2){
- ipartner = decay->GetFirstDaughter();
- if(ipartner==iparent){ //look other
- ipartner = decay->GetLastDaughter();
- }
- if(ipartner==-1) //no partner
- ipartner=-999 ;
- }
- }
- }
- }
- }
- for(Int_t j=i+1;j<n;j++){
- AliAODPWG4Particle *p2 = static_cast<AliAODPWG4Particle*>(fPHOSEvent->At(j));
- if(p2->GetCaloLabel(1)!=ipartner){ //partner
- Double_t invMass = p->GetPairMass(p2);
- if(IsInPi0Band(invMass,p->Pt(),2)){
- FillPIDHistograms("hMCAllFakeTagged",p) ;
- }
- if(IsInPi0Band(invMass,p2->Pt(),2)){
- FillPIDHistograms("hMCAllFakeTagged",p2) ;
- }
- }
- }
- }
+
+ }//Partner not reconstructed
+ }//Partner in stack
+ }//photon from pi0 decay
+ }//photon
+ } //PHOS clusters
}
+
//________________________________________________
void AliAnalysisTaskTaggedPhotons::FillTaggingHistos(){
//Fill all necessary histograms
//Invariant Mass analysis
const Int_t n=fPHOSEvent->GetEntriesFast() ;
for(Int_t i=0;i<n-1;i++){
- AliAODPWG4Particle *p1 = static_cast<AliAODPWG4Particle*>(fPHOSEvent->At(i));
+ AliCaloPhoton *p1 = static_cast<AliCaloPhoton*>(fPHOSEvent->At(i));
for(Int_t j = i+1 ; j < n ; j++) {
- AliAODPWG4Particle * p2 = static_cast<AliAODPWG4Particle*>(fPHOSEvent->At(j));
+ AliCaloPhoton * p2 = static_cast<AliCaloPhoton*>(fPHOSEvent->At(j));
- Double_t invMass = p1->GetPairMass(p2);
+ Double_t invMass = (*p1 + *p2).M();
if((p1->E()>0.1) && (p2->E()>0.1)){
- FillPIDHistograms("hInvM_Re_Emin1",p1,p2,invMass) ;
+ FillPIDHistograms("hInvM_Re_Emin1",p1,p2,invMass,kTRUE) ;
if((p1->E()>0.2) && (p2->E()>0.2)){
- FillPIDHistograms("hInvM_Re_Emin2",p1,p2,invMass) ;
+ FillPIDHistograms("hInvM_Re_Emin2",p1,p2,invMass,kTRUE) ;
if((p1->E()>0.3) && (p2->E()>0.3)){
- FillPIDHistograms("hInvM_Re_Emin3",p1,p2,invMass) ;
+ FillPIDHistograms("hInvM_Re_Emin3",p1,p2,invMass,kTRUE) ;
+
+ //Fill izolated pi0s
+ Double_t nsigma1 = InPi0Band(invMass,p1->Pt()) ; //in band with n sigmas
+ Double_t nsigma2 = InPi0Band(invMass,p2->Pt()) ; //in band with n sigmas
+ if(nsigma1<2 || nsigma2<2){ //2 sigma band
+ TLorentzVector pi0=*p1+*p2 ;
+ Int_t isolation=EvalIsolation(&pi0,0) ;
+ for(Int_t kind=1; kind<33; kind*=2){
+ if((isolation&kind)){
+ FillHistogram(Form("hPi_Isolation%d_cent%d",kind,fCentBin),pi0.Pt()) ;
+ }
+ }
+ }
+
}
}
}
}
}
}
- if(IsSamePi0(p1,p2)){
+ if(IsSameParent(p1,p2)==111){
FillPIDHistograms("hMC_InvM_Re",p1,invMass) ;
FillPIDHistograms("hMC_InvM_Re",p2,invMass) ;
if(TestPID(3, p2)){
//Tagging: 1,2,3 sigma
//Emin=100,200,300 Mev
- //IsInPi0Band(mass, Ptphoton, type Emin cut
+ //InPi0Band(mass, Ptphoton, type Emin cut
Int_t tag1=0 ;
for(Int_t eminType=0; eminType<3; eminType++){
if(p2->E()>0.1*(eminType+1)){
//Set corresponding bit
- Double_t nsigma = IsInPi0Band(invMass,p1->Pt(),eminType) ; //in band with n sigmas
+ Double_t nsigma = InPi0Band(invMass,p1->Pt()) ; //in band with n sigmas
for(Int_t isigma=0; isigma<3; isigma++){
if(nsigma<1+isigma){
tag1|= (1 << (3*eminType+isigma)) ;
}
}
}
- p1->SetTag(tag1) ;
+ p1->SetTagInfo(tag1) ;
Int_t tag2=0 ;
for(Int_t eminType=0; eminType<3; eminType++){
if(p1->E()>0.1*(eminType+1)){
//Set corresponding bit
- Double_t nsigma = IsInPi0Band(invMass,p2->Pt(),eminType) ; //in band with n sigmas
+ Double_t nsigma = InPi0Band(invMass,p2->Pt()) ; //in band with n sigmas
for(Int_t isigma=0; isigma<3; isigma++){
if(nsigma<1+isigma){
tag2|= (1 << (3*eminType+isigma)) ;
}
}
}
- p2->SetTag(tag2) ;
+ p2->SetTagInfo(tag2) ;
if(tag1 & (1<<7)){ //2 sigma, Emin=0.3: default tagging
if(p1->IsTagged()){//Multiple tagging
- FillHistogram(Form("hTaggedMult_cent%d",fCentBin),p1->Pt());
+ FillHistogram(Form("hTaggedMult_cent%d",fCentBin),p1->Pt(),p1->GetWeight());
}
p1->SetTagged(kTRUE) ;
}
if(tag2 & (1<<7)){ //2 sigma, Emin=0.3: default tagging
if(p2->IsTagged()){//Multiple tagging
- FillHistogram(Form("hTaggedMult_cent%d",fCentBin),p2->Pt());
+ FillHistogram(Form("hTaggedMult_cent%d",fCentBin),p2->Pt(),p2->GetWeight());
}
p2->SetTagged(kTRUE) ;
}
//Single particle histgams
for(Int_t i=0;i<n;i++){
- AliAODPWG4Particle *p = static_cast<AliAODPWG4Particle*>(fPHOSEvent->At(i));
+ AliCaloPhoton *p = static_cast<AliCaloPhoton*>(fPHOSEvent->At(i));
- Int_t isolation = p->GetBtag();
+ Int_t isolation = p->GetIsolationTag();
//Inclusive spectra
FillPIDHistograms("hPhot",p) ;
//3 Emin cuts
//Default Emin, 1,2,3 sigmas
//strict and loose PID cut on partner
- Int_t tag=p->GetTag() ;
+ Int_t tag=p->GetTagInfo() ;
for(Int_t ibit=0; ibit<18; ibit++){
if((tag & (1<<ibit))==0){
FillPIDHistograms(Form("hPhot_nTagged%d_Area1",ibit),p) ;
-// for(Int_t kind=1; kind<33; kind*=2){
-// if((isolation&kind)){
-// FillPIDHistograms(Form("hPhot_nStrictTagged_Isolation%d_Area1",kind),p) ;
-// }
-// }
}
}
//Fill Mixed InvMass distributions:
TIter nextEv(fCurrentMixedList) ;
for(Int_t i=0;i<n;i++){
- AliAODPWG4Particle *p1 = static_cast<AliAODPWG4Particle*>(fPHOSEvent->At(i));
+ AliCaloPhoton *p1 = static_cast<AliCaloPhoton*>(fPHOSEvent->At(i));
while(TClonesArray * event2 = static_cast<TClonesArray*>(nextEv())){
Int_t nPhotons2 = event2->GetEntriesFast() ;
for(Int_t j=0; j < nPhotons2 ; j++){
- AliAODPWG4Particle * p2 = static_cast<AliAODPWG4Particle*>(event2->At(j)) ;
- Double_t invMass = p1->GetPairMass(p2);
+ AliCaloPhoton * p2 = static_cast<AliCaloPhoton*>(event2->At(j)) ;
+ Double_t invMass = (*p1 + *p2).M();
if((p1->E()>0.1) && (p2->E()>0.1)){
- FillPIDHistograms("hInvM_Mi_Emin1",p1,p2,invMass) ;
+ FillPIDHistograms("hInvM_Mi_Emin1",p1,p2,invMass,kFALSE) ;
if((p1->E())>0.2 && (p2->E()>0.2)){
- FillPIDHistograms("hInvM_Mi_Emin2",p1,p2,invMass) ;
+ FillPIDHistograms("hInvM_Mi_Emin2",p1,p2,invMass,kFALSE) ;
if((p1->E())>0.3 && (p2->E()>0.3)){
- FillPIDHistograms("hInvM_Mi_Emin3",p1,p2,invMass) ;
+ FillPIDHistograms("hInvM_Mi_Emin3",p1,p2,invMass,kFALSE) ;
}
}
}
}
}
}
-
}
if (fDebug > 1) Printf("Terminate()");
}
//______________________________________________________________________________
-Bool_t AliAnalysisTaskTaggedPhotons::IsInPi0Band(Double_t m, Double_t pt, Int_t /*type*/)const
+Double_t AliAnalysisTaskTaggedPhotons::InPi0Band(Double_t m, Double_t pt)const
{
//Parameterization of the pi0 peak region
-// Double_t mpi0mean = 1.33259e-01 - 2.910e-03 * TMath::Exp(-pt/3.616) ;
//for LHC13bcdef
Double_t mpi0mean = 0.13447 - 1.41259e-03 * TMath::Exp(-pt/1.30044) ;
-// Double_t mpi0mean = 0.136 ; //fPi0MeanP0 + fPi0MeanP1 * pt + fPi0MeanP2 * pt*pt + fPi0MeanP3 * pt*pt*pt;
-// Double_t mpi0sigma=TMath::Sqrt(4.17927e-03*4.17927e-03+2.81581e-03*2.81581e-03/pt+3.59218e-04*3.59218e-04*pt*pt) ;
- Double_t mpi0sigma=TMath::Sqrt(5.22245e-03*5.22245e-03 +2.86851e-03*2.86851e-03/pt) + 9.09932e-05*pt ;
+ Double_t mpi0sigma=TMath::Sqrt(5.22245e-03*5.22245e-03 +2.86851e-03*2.86851e-03/pt) + 9.09932e-05*pt ;
- return (m>mpi0mean-2*mpi0sigma && m<mpi0mean+2*mpi0sigma) ;
+ return TMath::Abs(m-mpi0mean)/mpi0sigma ;
}
//______________________________________________________________________________
-Bool_t AliAnalysisTaskTaggedPhotons::IsSamePi0(const AliAODPWG4Particle *p1, const AliAODPWG4Particle *p2)const{
+Int_t AliAnalysisTaskTaggedPhotons::IsSameParent(const AliCaloPhoton *p1, const AliCaloPhoton *p2)const{
//Looks through parents and finds if there was commont pi0 among ancestors
- if(!fStack)
- return kFALSE ; //can not say anything
+ if(!fIsMC)
+ return 0 ; //can not say anything
- Int_t prim1 = p1->GetCaloLabel(0);
+ Int_t prim1 = p1->GetPrimary();
while(prim1!=-1){
- Int_t prim2 = p2->GetCaloLabel(0);
- while(prim2!=-1){
+ Int_t prim2 = p2->GetPrimary();
+
+ while(prim2!=-1){
if(prim1==prim2){
- if(fStack->Particle(prim1)->GetPdgCode()==111)
- return kTRUE ;
- else
- return kFALSE ;
+ return ((AliAODMCParticle*)fStack->At(prim1))->GetPdgCode() ;
}
- prim2=fStack->Particle(prim2)->GetFirstMother() ;
+ prim2=((AliAODMCParticle*)fStack->At(prim2))->GetMother() ;
}
- prim1=fStack->Particle(prim1)->GetFirstMother() ;
+ prim1=((AliAODMCParticle*)fStack->At(prim1))->GetMother() ;
}
- return kFALSE ;
+ return 0 ;
}
//______________________________________________________________________________
Int_t AliAnalysisTaskTaggedPhotons::GetFiducialArea(const Float_t * position)const{
TVector3 global1(position) ;
Int_t relId[4] ;
fPHOSgeom->GlobalPos2RelId(global1,relId) ;
- Int_t mod = relId[0] ;
+// Int_t mod = relId[0] ;
Int_t cellX = relId[2];
Int_t cellZ = relId[3] ;
- if(fPHOSBadMap[mod] && fPHOSBadMap[mod]->GetBinContent(cellX,cellZ)>0)
- return 0 ;
-
//New we are in good channel,
//calculate distance to the closest group of bad channels
const Int_t cut1=10;
if( cellX<=cut1 || cellX>=65-cut1 || cellZ<=cut1 || cellZ>=57-cut1)
return 1;
// //and from large dead area
-// if(fPHOSBadMap[mod]->Integral(cellX-cut1,cellX+cut1,cellZ-cut1,cellZ+cut1)>0.2*cut1*cut1)
-// return 1 ;
//Full configuration
// if((mod==3 && cellX<=cut2) || (mod==1 && cellX>=65-cut2) || cellZ<=cut2 || cellZ>=57-cut2)
//1+3 configuration
if( cellX<=cut2 || cellX>=65-cut2 || cellZ<=cut2 || cellZ>=57-cut2)
return 2;
-// if(fPHOSBadMap[mod]->Integral(cellX-cut2,cellX+cut2,cellZ-cut2,cellZ+cut2)>0.8*cut2*cut2)
-// return 2 ;
//Very good channel
return 3 ;
//Rotation matrixes are set with Tender
if(fPHOSgeom) return ;
- else
- fPHOSgeom = AliPHOSGeometry::GetInstance() ;
+
+ fPHOSgeom = AliPHOSGeometry::GetInstance() ;
+
+ if(!fPHOSgeom){ //Geometry not yet constructed with Tender
+ fPHOSgeom = AliPHOSGeometry::GetInstance("IHEP","");
+
+ AliOADBContainer geomContainer("phosGeo");
+ geomContainer.InitFromFile("$ALICE_ROOT/OADB/PHOS/PHOSGeometry.root","PHOSRotationMatrixes");
+ TObjArray *matrixes = (TObjArray*)geomContainer.GetObject(170000,"PHOSRotationMatrixes");
+ for(Int_t mod=0; mod<5; mod++) {
+ if(!matrixes->At(mod)) continue;
+ fPHOSgeom->SetMisalMatrix(((TGeoHMatrix*)matrixes->At(mod)),mod) ;
+ }
+ }
+
+ //Read BadMap for MC simulations
+ Int_t runNumber=196208 ; //LHC13bcdef
+ AliOADBContainer badmapContainer(Form("phosBadMap"));
+ badmapContainer.InitFromFile("$ALICE_ROOT/OADB/PHOS/PHOSBadMaps.root","phosBadMap");
+ TObjArray *maps = (TObjArray*)badmapContainer.GetObject(runNumber,"phosBadMap");
+ if(!maps){
+ AliError("TaggedPhotons: Can not read Bad map\n") ;
+ }
+ else{
+ AliInfo(Form("TaggedPhotons: Setting PHOS bad map with name %s \n",maps->GetName())) ;
+ for(Int_t mod=0; mod<5;mod++){
+ if(fPHOSBadMap[mod])
+ delete fPHOSBadMap[mod] ;
+ TH2I * h = (TH2I*)maps->At(mod) ;
+ if(h)
+ fPHOSBadMap[mod]=new TH2I(*h) ;
+ }
+ }
}
//_____________________________________________________________________________
void AliAnalysisTaskTaggedPhotons::FillHistogram(const char * key,Double_t x)const{
}
}
//_____________________________________________________________________________
-void AliAnalysisTaskTaggedPhotons::FillPIDHistograms(const char * name, const AliAODPWG4Particle * p) const{
-
- FillHistogram(Form("%s_All_cent%d",name,fCentBin),p->Pt()) ;
- if(p->GetDispBit())
- FillHistogram(Form("%s_Disp_cent%d",name,fCentBin),p->Pt()) ;
- if(p->GetChargedBit())
- FillHistogram(Form("%s_CPV_cent%d",name,fCentBin),p->Pt()) ;
- if(p->GetDispBit() && p->GetChargedBit())
- FillHistogram(Form("%s_Both_cent%d",name,fCentBin),p->Pt()) ;
+void AliAnalysisTaskTaggedPhotons::FillPIDHistograms(const char * name, const AliCaloPhoton * p) const{
+
+ FillHistogram(Form("%s_All_cent%d",name,fCentBin),p->Pt(),p->GetWeight()) ;
+ if(p->IsDispOK())
+ FillHistogram(Form("%s_Disp_cent%d",name,fCentBin),p->Pt(),p->GetWeight()) ;
+ if(p->IsCPVOK())
+ FillHistogram(Form("%s_CPV_cent%d",name,fCentBin),p->Pt(),p->GetWeight()) ;
+ if(p->IsDispOK() && p->IsCPVOK())
+ FillHistogram(Form("%s_Both_cent%d",name,fCentBin),p->Pt(),p->GetWeight()) ;
}
//_____________________________________________________________________________
-void AliAnalysisTaskTaggedPhotons::FillPIDHistograms(const char * name, const AliAODPWG4Particle * p,Double_t x) const{
-
- FillHistogram(Form("%s_All_cent%d",name,fCentBin),x,p->Pt()) ;
- if(p->GetDispBit())
- FillHistogram(Form("%s_Disp_cent%d",name,fCentBin),x,p->Pt()) ;
- if(p->GetChargedBit())
- FillHistogram(Form("%s_CPV_cent%d",name,fCentBin),x,p->Pt()) ;
- if(p->GetDispBit() && p->GetChargedBit())
- FillHistogram(Form("%s_Both_cent%d",name,fCentBin),x,p->Pt()) ;
+void AliAnalysisTaskTaggedPhotons::FillPIDHistograms(const char * name, const AliCaloPhoton * p,Double_t x) const{
+
+ FillHistogram(Form("%s_All_cent%d",name,fCentBin),x,p->Pt(),p->GetWeight()) ;
+ if(p->IsDispOK())
+ FillHistogram(Form("%s_Disp_cent%d",name,fCentBin),x,p->Pt(),p->GetWeight()) ;
+ if(p->IsCPVOK())
+ FillHistogram(Form("%s_CPV_cent%d",name,fCentBin),x,p->Pt(),p->GetWeight()) ;
+ if(p->IsDispOK() && p->IsCPVOK())
+ FillHistogram(Form("%s_Both_cent%d",name,fCentBin),x,p->Pt(),p->GetWeight()) ;
}
//_____________________________________________________________________________
-void AliAnalysisTaskTaggedPhotons::FillPIDHistograms(const char * name, const AliAODPWG4Particle * p1,const AliAODPWG4Particle * p2,Double_t x) const{
-
- Double_t ptPi = (*(p1->Momentum()) + *(p2->Momentum())).Pt() ;
- FillHistogram(Form("%s_All_cent%d",name,fCentBin),x,ptPi) ;
- if(p1->GetDispBit() && p2->GetDispBit())
- FillHistogram(Form("%s_Disp_cent%d",name,fCentBin),x,ptPi) ;
- if(p1->GetChargedBit() && p2->GetChargedBit())
- FillHistogram(Form("%s_CPV_cent%d",name,fCentBin),x,ptPi) ;
- if(p1->GetDispBit() && p1->GetChargedBit() && p2->GetDispBit() && p2->GetChargedBit())
- FillHistogram(Form("%s_Both_cent%d",name,fCentBin),x,ptPi) ;
+void AliAnalysisTaskTaggedPhotons::FillPIDHistograms(const char * name, const AliCaloPhoton * p1,const AliCaloPhoton * p2,Double_t x, Bool_t /*isRe*/) const{
+
+ Double_t ptPi = (*p1 + *p2).Pt() ;
+ Double_t w=TMath::Sqrt(p1->GetWeight()*p2->GetWeight()) ;
+// if(isRe){
+// Int_t pdg=IsSameParent(p1,p2) ;
+// if(pdg!=0)
+// w=p1->GetWeight() ;
+// }
+ FillHistogram(Form("%s_All_cent%d",name,fCentBin),x,ptPi,w) ;
+ if(p1->IsDispOK() && p2->IsDispOK())
+ FillHistogram(Form("%s_Disp_cent%d",name,fCentBin),x,ptPi,w) ;
+ if(p1->IsCPVOK() && p2->IsCPVOK())
+ FillHistogram(Form("%s_CPV_cent%d",name,fCentBin),x,ptPi,w) ;
+ if(p1->IsDispOK() && p1->IsCPVOK() && p2->IsDispOK() && p2->IsCPVOK())
+ FillHistogram(Form("%s_Both_cent%d",name,fCentBin),x,ptPi,w) ;
}
//_____________________________________________________________________________
}
//_________________________________________________________________________________
-Int_t AliAnalysisTaskTaggedPhotons::EvalIsolation(TLorentzVector * ph){
+Int_t AliAnalysisTaskTaggedPhotons::EvalIsolation(TLorentzVector * ph, Bool_t isPhoton){
// Check if this particle is isolated.
//We use several cone radii and epsilons.
const Double_t coneR2=0.4 ;
const Double_t coneR3=0.5 ;
- const Double_t epsilon1=0.1 ;
- const Double_t epsilon2=0.05 ;
+ const Double_t cutEcone1=3. ;
+ const Double_t cutEcone2=4.5 ;
+ const Double_t cutEcone3=6.5 ;
if(!ph) return 0 ;
Double_t eCone1 = 0;
Double_t eCone2 = 0;
Double_t eCone3 = 0;
+ //Cross-check, energy in cone perpr to photon
+ Double_t eP1Cone1 = 0;
+ Double_t eP1Cone2 = 0;
+ Double_t eP1Cone3 = 0;
+ Double_t eP2Cone1 = 0;
+ Double_t eP2Cone2 = 0;
+ Double_t eP2Cone3 = 0;
+
Double_t phiTrig = ph->Phi();
Double_t etaTrig = ph->Eta();
Int_t n=fTrackEvent->GetEntriesFast() ;
for(Int_t itr=0; itr<n; itr++){
- AliAODPWG4Particle * track = (AliAODPWG4Particle*)fTrackEvent->At(itr) ;
+ AliCaloPhoton * track = (AliCaloPhoton*)fTrackEvent->At(itr) ;
Double_t deleta = etaTrig - track->Eta() ;
Double_t delphi = phiTrig - track->Phi() ;
while(delphi<-TMath::Pi()) delphi+=TMath::TwoPi() ;
while(delphi>TMath::Pi()) delphi-=TMath::TwoPi() ;
+ //Perp cones
+ Double_t delphiP1 = phiTrig +TMath::PiOver2()- track->Phi() ;
+ while(delphiP1<-TMath::Pi()) delphiP1+=TMath::TwoPi() ;
+ while(delphiP1>TMath::Pi()) delphiP1-=TMath::TwoPi() ;
+ Double_t delphiP2 = phiTrig -TMath::PiOver2()- track->Phi() ;
+ while(delphiP2<-TMath::Pi()) delphiP2+=TMath::TwoPi() ;
+ while(delphiP2>TMath::Pi()) delphiP2-=TMath::TwoPi() ;
+
+
Double_t dr = TMath::Sqrt(deleta * deleta + delphi * delphi);
+ Double_t drP1 = TMath::Sqrt(deleta * deleta + delphiP1 * delphiP1);
+ Double_t drP2 = TMath::Sqrt(deleta * deleta + delphiP2 * delphiP2);
if(dr<coneR3){
eCone3+=track->Pt() ;
}
}
}
+
+ if(drP1<coneR3){
+ eP1Cone3+=track->Pt() ;
+ if(drP1<coneR2){
+ eP1Cone2+=track->Pt() ;
+ if(drP1<coneR1){
+ eP1Cone1+=track->Pt() ;
+ }
+ }
+ }
+
+ if(drP2<coneR3){
+ eP2Cone3+=track->Pt() ;
+ if(drP2<coneR2){
+ eP2Cone2+=track->Pt() ;
+ if(drP2<coneR1){
+ eP2Cone1+=track->Pt() ;
+ }
+ }
+ }
}
//Fill QA histgams
Double_t ptTrig=ph->Pt() ;
+ if(isPhoton){
FillHistogram(Form("QA_Cone1_Tracks_cent%d",fCentBin),ptTrig,eCone1) ;
FillHistogram(Form("QA_Cone2_Tracks_cent%d",fCentBin),ptTrig,eCone2) ;
FillHistogram(Form("QA_Cone3_Tracks_cent%d",fCentBin),ptTrig,eCone3) ;
-
+ FillHistogram(Form("QA_PCone1_Tracks_cent%d",fCentBin),ptTrig,eP1Cone1) ;
+ FillHistogram(Form("QA_PCone2_Tracks_cent%d",fCentBin),ptTrig,eP1Cone2) ;
+ FillHistogram(Form("QA_PCone3_Tracks_cent%d",fCentBin),ptTrig,eP1Cone3) ;
+ FillHistogram(Form("QA_PCone1_Tracks_cent%d",fCentBin),ptTrig,eP2Cone1) ;
+ FillHistogram(Form("QA_PCone2_Tracks_cent%d",fCentBin),ptTrig,eP2Cone2) ;
+ FillHistogram(Form("QA_PCone3_Tracks_cent%d",fCentBin),ptTrig,eP2Cone3) ;
+ }
+ else{
+ FillHistogram(Form("QA_Pi0Cone1_Tracks_cent%d",fCentBin),ptTrig,eCone1) ;
+ FillHistogram(Form("QA_Pi0Cone2_Tracks_cent%d",fCentBin),ptTrig,eCone2) ;
+ FillHistogram(Form("QA_Pi0Cone3_Tracks_cent%d",fCentBin),ptTrig,eCone3) ;
+ FillHistogram(Form("QA_Pi0PCone1_Tracks_cent%d",fCentBin),ptTrig,eP1Cone1) ;
+ FillHistogram(Form("QA_Pi0PCone2_Tracks_cent%d",fCentBin),ptTrig,eP1Cone2) ;
+ FillHistogram(Form("QA_Pi0PCone3_Tracks_cent%d",fCentBin),ptTrig,eP1Cone3) ;
+ FillHistogram(Form("QA_Pi0PCone1_Tracks_cent%d",fCentBin),ptTrig,eP2Cone1) ;
+ FillHistogram(Form("QA_Pi0PCone2_Tracks_cent%d",fCentBin),ptTrig,eP2Cone2) ;
+ FillHistogram(Form("QA_Pi0PCone3_Tracks_cent%d",fCentBin),ptTrig,eP2Cone3) ;
+
+ }
//Fill Bits
- Int_t iCone1E1 = (epsilon1*ptTrig > eCone1) ;
- Int_t iCone2E1 = (epsilon1*ptTrig > eCone2) ;
- Int_t iCone3E1 = (epsilon1*ptTrig > eCone3) ;
+ Int_t iCone1E1 = (cutEcone1 > eCone1) ;
+ Int_t iCone2E1 = (cutEcone2 > eCone2) ;
+ Int_t iCone3E1 = (cutEcone3 > eCone3) ;
- Int_t iCone1E2 = (epsilon2*ptTrig > eCone1) ;
- Int_t iCone2E2 = (epsilon2*ptTrig > eCone2) ;
- Int_t iCone3E2 = (epsilon2*ptTrig > eCone3) ;
+ Int_t iCone1E2 = (1.5*cutEcone1 > eCone1) ;
+ Int_t iCone2E2 = (1.5*cutEcone2 > eCone2) ;
+ Int_t iCone3E2 = (1.5*cutEcone3 > eCone3) ;
Int_t isolation= iCone1E1+ 2*iCone2E1 +4*iCone3E1+
return isolation ;
}
//_________________________________________________________________________________
-Bool_t AliAnalysisTaskTaggedPhotons::TestPID(Int_t iPID, AliAODPWG4Particle* part){
+Bool_t AliAnalysisTaskTaggedPhotons::TestPID(Int_t iPID, AliCaloPhoton* part){
// //Checks PID of particle
if(!part) return kFALSE ;
if(iPID==0) return kTRUE ;
- if(iPID==1) return part->GetDispBit() ;
- if(iPID==2) return part->GetChargedBit() ;
- if(iPID==3) return part->GetDispBit() && part->GetChargedBit() ;
+ if(iPID==1) return part->IsDispOK() ;
+ if(iPID==2) return part->IsCPVOK() ;
+ if(iPID==3) return part->IsDispOK() && part->IsCPVOK() ;
return kFALSE ;
}
//_________________________________________________________________________________
-Double_t AliAnalysisTaskTaggedPhotons::PrimaryParticleWeight(TParticle * /*particle*/){
- return 1;
+Double_t AliAnalysisTaskTaggedPhotons::PrimaryParticleWeight(AliAODMCParticle * particle){
+ if(!fIsMC) //This is real data
+ return 1;
+ //Classify parent at vertex
+ //Introduce for eta and pi0 weights
+
+ Double_t r2=particle->Xv()*particle->Xv()+particle->Yv()*particle->Yv() ;
+ Int_t mother = particle->GetMother() ;
+ while(mother>-1){
+ if(r2<1.)
+ break ;
+ particle = (AliAODMCParticle*) fStack->At(mother);
+ mother = particle->GetMother() ;
+ r2=particle->Xv()*particle->Xv()+particle->Yv()*particle->Yv() ;
+ }
+
+ //Particle within 1 cm from the virtex
+ Int_t pdg = particle->GetPdgCode() ;
+ Double_t x = particle->Pt() ;
+ mother = particle->GetMother() ;
+ while(TMath::Abs(pdg)<100){//gamma, electrons, muons
+ if(mother>-1){
+ AliAODMCParticle * tmpP=(AliAODMCParticle*)fStack->At(mother) ;
+ pdg=tmpP->GetPdgCode() ;
+ x = tmpP->Pt() ;
+ mother = tmpP->GetMother() ;
+ }
+ else{ //direct photon/electron....
+ return 1.;
+ }
+ }
+ if(pdg == 111){
+ //Pi0
+ if(x<1) return 1. ;
+ else return fWeightParamPi0[0]*TMath::Power(x,fWeightParamPi0[1])*
+ (1.+fWeightParamPi0[2]*x+fWeightParamPi0[3]*x*x)/
+ (1.+fWeightParamPi0[4]*x+fWeightParamPi0[5]*x*x) ;
+ }
+ if(pdg == 221){
+ //Eta - same weight
+ if(x<1) return 1. ;
+ else return fWeightParamPi0[0]*TMath::Power(x,fWeightParamPi0[1])*
+ (1.+fWeightParamPi0[2]*x+fWeightParamPi0[3]*x*x)/
+ (1.+fWeightParamPi0[4]*x+fWeightParamPi0[5]*x*x) ;
+ }
+ return 1. ;
+}
+//_________________________________________________________________________________
+void AliAnalysisTaskTaggedPhotons::SetPi0WeightParameters(TArrayD * ar){
+
+ for(Int_t i=0; i<6; i++){ //Array range
+ if(ar->GetSize()>i) fWeightParamPi0[i]=ar->At(i) ;
+ else fWeightParamPi0[i]=0.;
+ }
+ //normalize to obtain smooth transition at 1 GeV
+ Double_t x=1. ;
+ fWeightParamPi0[0]=1./(TMath::Power(x,fWeightParamPi0[1])*
+ (1.+fWeightParamPi0[2]*x+fWeightParamPi0[3]*x*x)/
+ (1.+fWeightParamPi0[4]*x+fWeightParamPi0[5]*x*x)) ;
+
}
//___________________________________________________________________________
Bool_t hasGamma=kFALSE ;
Double_t eMax=0. ;
for(Int_t i=0; i<n; i++){
- TParticle* p= fStack->Particle(clu->GetLabelAt(i)) ;
+ AliAODMCParticle* p= (AliAODMCParticle*)fStack->At(clu->GetLabelAt(i)) ;
Int_t pdg = p->GetPdgCode() ;
if(pdg==22){
hasGamma=kTRUE ;
- if(p->Energy()>eMax){
- eMax=p->Energy();
+ if(p->E()>eMax){
+ eMax=p->E();
}
}
}
}
for(Int_t i=0; i<n; i++){
- TParticle* p= fStack->Particle(clu->GetLabelAt(i)) ;
+ AliAODMCParticle* p= (AliAODMCParticle*) fStack->At(clu->GetLabelAt(i)) ;
Int_t pdg = p->GetPdgCode() ;
if(pdg==22 || pdg==11 || pdg == -11){
- if(p->Energy()>emFraction*clu->E()){
+ if(p->E()>emFraction*clu->E()){
sure=kTRUE ;
return clu->GetLabelAt(i);
}
Double_t* Ekin= new Double_t[n] ;
for(Int_t i=0; i<n; i++){
- TParticle* p= fStack->Particle(clu->GetLabelAt(i)) ;
+ AliAODMCParticle* p=(AliAODMCParticle*) fStack->At(clu->GetLabelAt(i)) ;
Ekin[i]=p->P() ; // estimate of kinetic energy
if(p->GetPdgCode()==-2212 || p->GetPdgCode()==-2112){
Ekin[i]+=1.8 ; //due to annihilation
delete[] Ekin;
return clu->GetLabelAt(iMax) ;
}
+//___________________________________________________________________________
+Bool_t AliAnalysisTaskTaggedPhotons::IsGoodChannel(Int_t mod, Int_t ix, Int_t iz)
+{
+ //Check if this channel belogs to the good ones
+
+ if(mod>4 || mod<1){
+ return kFALSE ;
+ }
+ if(!fPHOSBadMap[mod]){
+ return kTRUE ;
+ }
+ if(fPHOSBadMap[mod]->GetBinContent(ix,iz)>0)
+ return kFALSE ;
+ else
+ return kTRUE ;
+}
//////////////////////////////////////////////////////////////////////////////
#include "AliAnalysisTaskSE.h"
-
-class AliStack ;
+class AliAnalysisUtils ;
class AliAODEvent ;
class THashList ;
class TH2I ;
class AliPHOSGeometry;
-class AliAODPWG4Particle;
+class AliCaloPhoton;
+class AliAODMCParticle ;
class AliVCluster ;
class AliTriggerAnalysis ;
class TParticle ;
virtual void UserExec(Option_t * opt = "") ;
virtual void Terminate(Option_t * opt = "") ;
- void SetPHOSBadMap(Int_t mod,TH2I * h)
- {
- if(fPHOSBadMap[mod]) delete fPHOSBadMap[mod] ;
- fPHOSBadMap[mod]=new TH2I(*h) ;
- printf("Set %s \n",fPHOSBadMap[mod]->GetName());
- }
+ void SetTrigger(Bool_t isPHOSTrig){fIsMB=isPHOSTrig;}
+ void SetMC(Bool_t isMC=kTRUE){fIsMC=isMC;}
+ void SetPi0WeightParameters(TArrayD * ar) ;
protected:
void FillMCHistos() ;
void FillTaggingHistos() ;
Int_t GetFiducialArea(const Float_t * pos)const ; //what kind of fiducial area hit the photon
- Bool_t IsSamePi0(const AliAODPWG4Particle *p1, const AliAODPWG4Particle *p2) const; //Check MC genealogy
- Bool_t IsInPi0Band(Double_t m, Double_t pt,Int_t type)const; //Check if invariant mass is within pi0 peak
+ Int_t IsSameParent(const AliCaloPhoton *p1, const AliCaloPhoton *p2) const; //Check MC genealogy; return PDG of parent
+ Bool_t IsGoodChannel(Int_t mod, Int_t ix, Int_t iz) ;
+ Double_t InPi0Band(Double_t m, Double_t pt)const; //Check if invariant mass is within pi0 peak
Bool_t TestDisp(Double_t l0, Double_t l1, Double_t e)const ;
Bool_t TestTOF(Double_t /*t*/,Double_t /*en*/)const{return kTRUE;}
Bool_t TestCharged(Double_t dr,Double_t en)const ;
void InitGeometry() ; //read reotation matrixes from AOD/AOD
- Int_t EvalIsolation(TLorentzVector * ph) ;
+ Int_t EvalIsolation(TLorentzVector * ph,Bool_t isPhoton) ;
Bool_t TestLambda(Double_t pt,Double_t l1,Double_t l2) ;
- Bool_t TestPID(Int_t iPID, AliAODPWG4Particle* part) ;
- Double_t PrimaryParticleWeight(TParticle * particle) ;
+ Bool_t TestPID(Int_t iPID, AliCaloPhoton* part) ;
+ Double_t PrimaryParticleWeight(AliAODMCParticle * particle) ;
Int_t FindPrimary(AliVCluster*, Bool_t&);
void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key
void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key
void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key
- void FillPIDHistograms(const char * name, const AliAODPWG4Particle * p) const ;
- void FillPIDHistograms(const char * name, const AliAODPWG4Particle * p ,Double_t y) const ;
- void FillPIDHistograms(const char * name, const AliAODPWG4Particle * p , const AliAODPWG4Particle * p2,Double_t y) const ;
+ void FillPIDHistograms(const char * name, const AliCaloPhoton * p) const ;
+ void FillPIDHistograms(const char * name, const AliCaloPhoton * p ,Double_t y) const ;
+ void FillPIDHistograms(const char * name, const AliCaloPhoton * p , const AliCaloPhoton * p2,Double_t y, Bool_t isReal) const ;
private:
AliPHOSGeometry *fPHOSgeom; //!PHOS geometry
THashList * fOutputContainer ; //! List of output histograms
- AliStack *fStack ; //!Pointer to MC stack
+ TClonesArray *fStack ; //!Pointer to MC stack
TClonesArray * fTrackEvent ; //!List of tracks in the event
TClonesArray * fPHOSEvent ; //!List of tracks in the event
- TList * fPHOSEvents[1][5] ; //!Previous events for mixing
+ TList * fPHOSEvents[10][5] ; //!Previous events for mixing
TList * fCurrentMixedList; //! list of previous evetns for given centrality
AliTriggerAnalysis * fTriggerAnalysis ; //!
+ AliAnalysisUtils * fUtils ;
//Fiducial area parameters
Float_t fZmax ; //Rectangular
Float_t fZmin ; //area
Float_t fPhimax ; //covered by
Float_t fPhimin ; //full calorimeter
-
+ Double_t fWeightParamPi0[6] ; //Parameters to calculate weights
//
Double_t fCentrality;
Int_t fCentBin ;
-
- // Histograms
+ Bool_t fIsMB ; //which trigger to use
+ Bool_t fIsMC ; //Is this is MC
TH2I * fPHOSBadMap[6] ;
-
+
ClassDef(AliAnalysisTaskTaggedPhotons, 2); // a PHOS photon analysis task
};
#endif // ALIANALYSISTASKTAGGEDPHOTONS_H
-AliAnalysisTaskPi0FlowMC* AddTaskPHOSPi0pPbMC (const char* name = "PHOSPi0pPbMC",
- const char* options = "",
+AliAnalysisTaskPi0FlowMC* AddTaskPHOSPi0pPbMC (Bool_t kWeightsApplied = kFALSE,
+ const char* name = "PHOSPi0pPbMC",
+ const char* options = "",
UInt_t offlineTriggerMask = AliVEvent::kINT7,
const char* centrality = "V0M",
const Int_t nCentBins = 5,
return NULL;
}
- AliAnalysisTaskPi0FlowMC* task = new AliAnalysisTaskPi0FlowMC(Form("%sTask", name));
+ AliAnalysisTaskPi0FlowMC* task;
+
+ if(kWeightsApplied) task = new AliAnalysisTaskPi0FlowMCParamWeights(Form("%sTask", name));
+ else task = new AliAnalysisTaskPi0FlowMC(Form("%sTask", name));
if( AliVEvent::kINT7 == offlineTriggerMask ) {
if (nCentBins<1) {
fIsIsolated(0),
fIsPhoton(0),
fUnfolded(0),
- fX(0.),
- fY(0.),
- fZ(0.),
- fLambda0(0.),
- fLambda1(0.),
- fTime(0.),
fModule(0),
fBC(0),
fBadDist(0),
fNCells(0),
+ fFiducialArea(0),
fPi0Decayflag(0),
fPi0Id(0),
fConverted(0),
fConvertedPartner(0),
+ fIsolationTag(0),
+ fTagInfo(0),
+ fPrimary(-1),
+ fPrimaryAtVertex(-1),
+ fX(0.),
+ fY(0.),
+ fZ(0.),
+ fLambda0(0.),
+ fLambda1(0.),
+ fTime(0.),
fPartnerPt(0),
fWeight(1.),
- fPrimary(0),
fCluster(0x0)
{
fIsIsolated(0),
fIsPhoton(0),
fUnfolded(0),
- fX(0.),
- fY(0.),
- fZ(0.),
- fLambda0(0.),
- fLambda1(0.),
- fTime(0.),
fModule(0),
fBC(0),
fBadDist(0),
fNCells(0),
+ fFiducialArea(0),
fPi0Decayflag(0),
fPi0Id(0),
fConverted(0),
fConvertedPartner(0),
+ fIsolationTag(0),
+ fTagInfo(0),
+ fPrimary(-1),
+ fPrimaryAtVertex(-1),
+ fX(0.),
+ fY(0.),
+ fZ(0.),
+ fLambda0(0.),
+ fLambda1(0.),
+ fTime(0.),
fPartnerPt(0),
fWeight(1.),
- fPrimary(0),
fCluster(0x0)
{
~AliCaloPhoton(){}
const TLorentzVector * GetMomV2()const{return &fMomV2;}
- Double_t EMCx(void)const {return fX;}
- Double_t EMCy(void)const {return fY;}
- Double_t EMCz(void)const {return fZ;}
- Int_t Module(void)const{return fModule;}
- Int_t GetBC()const{return fBC;}
- Int_t DistToBad()const {return fBadDist ;}
- Int_t GetNCells()const { return fNCells ;}
- Double_t GetTime(void) const {return fTime ;}
- void SetTime(Double_t t) {fTime=t ;}
+ Int_t DistToBad() const {return fBadDist ;}
+ Double_t EMCx(void) const {return fX;}
+ Double_t EMCy(void) const {return fY;}
+ Double_t EMCz(void) const {return fZ;}
+ Int_t Module(void)const {return fModule;}
+ Int_t GetBC(void) const {return fBC;}
+ Int_t GetFiducialArea(void) const {return fFiducialArea ;}
+ Int_t GetIsolationTag(void) const {return fIsolationTag ;}
+ Double_t GetLambda1(void) const {return fLambda0;}
+ Double_t GetLambda2(void) const {return fLambda1;}
+ Int_t GetNCells() const { return fNCells ;}
+ Int_t GetPrimary()const {return fPrimary;}
+ Int_t GetPrimaryAtVertex() const {return fPrimaryAtVertex;}
+ Double_t GetPartnerPt(void) const {return fPartnerPt;}
+ Int_t GetTagInfo(void) const {return fTagInfo;}
+ Double_t GetTime(void) const {return fTime ;}
+ Double_t GetWeight(void) const {return fWeight;}
- Bool_t IsDispOK(void)const {return fDisp;}
- Bool_t IsDisp2OK(void)const {return fDisp2;} //stricter cut
- Bool_t IsTOFOK(void)const {return fTof;}
- Bool_t IsCPVOK(void)const {return fCpv;}
- Bool_t IsCPV2OK(void)const {return fCpv2;}
- Bool_t IsIsolated(void)const{return fIsIsolated ;}
- Bool_t IsTagged(void) const{return fIsTagged ;} //check if this photon is tagged
- Bool_t IsTagged(Int_t i,Int_t k) const{return fIsTagged_reg[i][k] ;} //check if this photon is tagged
+ Int_t IsConvertedPartner() const { if(fConvertedPartner == 1) return 1; else return 0; }
+ Bool_t IsCPVOK(void) const {return fCpv;}
+ Bool_t IsCPV2OK(void) const {return fCpv2;}
+ Bool_t IsDispOK(void) const {return fDisp;}
+ Bool_t IsDisp2OK(void) const {return fDisp2;} //stricter cut
+ Bool_t IsIsolated(void)const {return fIsIsolated ;}
+ Bool_t IsPhoton() const {return fIsPhoton ;} //check if this particle is indeed photon (this bit is set with MC stack info
Bool_t IsPIDOK(const Int_t ipid) const ;
- Bool_t IsPhoton()const {return fIsPhoton ;} //check if this particle is indeed photon (this bit is set with MC stack info
- Bool_t IsntUnfolded()const{return fUnfolded;}
- Int_t IsConvertedPartner(){ if(fConvertedPartner == 1) return 1; else return 0; }
- Bool_t IsTrig(void)const{ return fTrig ; }
- Double_t GetWeight(void){return fWeight;}
+ Bool_t IsTagged(void) const {return fIsTagged ;} //check if this photon is tagged
+ Bool_t IsTagged(Int_t i,Int_t k) const {return fIsTagged_reg[i][k] ;} //check if this photon is tagged
+ Bool_t IsTOFOK(void) const {return fTof;}
+ Bool_t IsTrig(void) const{ return fTrig ; }
+ Bool_t IsntUnfolded(void)const{return fUnfolded;}
//ConvertedPair bit is set for events when photon's FirstMother is not e+/e- but pi0, but after pi0 decayed
//there is conversion of one or both of the photons and results of their conversion are registered by PHOS.
//This process is marked as tagged photons but actually the energy of photons is changed and pi0 can't be
//correctly found.
- Int_t IsConverted(){ if(fConverted == 1) return 1; else return 0; }
+ Int_t IsConverted(void) const { if(fConverted == 1) return 1; else return 0; }
//Converted bit is set if this photon originate from e+/e- conversion on medium
- Int_t IsPi0Decay(){ if(fPi0Decayflag == 1) return 1; else return 0; }
+ Int_t IsPi0Decay(void) const { if(fPi0Decayflag == 1) return 1; else return 0; }
//Pi0Decayflag is set if this photon originate from pi0 decay
void Pi0Decay(Int_t flag){ fPi0Decayflag=flag; }
void Pi0Id(Int_t id){ fPi0Id=id; }
//Id of pi0 from which this photon is decayed (to check if 2 photons originate from the same pi0 or not)
+ Int_t ComparePi0Ids( AliCaloPhoton *phot) { if(AliCaloPhoton::fPi0Id!=0 && (*phot).fPi0Id !=0 && AliCaloPhoton::fPi0Id == (*phot).fPi0Id) return 1; else return 0; }
- void SetMomV2(TLorentzVector * p){fMomV2=(*p);}
- void SetNCells(Int_t n){fNCells=n;}
+ void SetBC(Int_t bc){fBC = bc;}
+ void SetCluster(AliVCluster* cluster) { fCluster = cluster; }
void SetConverted(Int_t flag){ fConverted=flag; }
- Int_t ComparePi0Ids( AliCaloPhoton *phot) { if(AliCaloPhoton::fPi0Id!=0 && (*phot).fPi0Id !=0 && AliCaloPhoton::fPi0Id == (*phot).fPi0Id) return 1; else return 0; }
void SetConvertedPartner(Int_t flag){ fConvertedPartner=flag; }
- void SetPhoton(Int_t flag){ fIsPhoton=flag; }
- void SetDispBit(Bool_t chi2){fDisp = chi2 ;}
- void SetDisp2Bit(Bool_t chi2){fDisp2 = chi2 ;}
- void SetTOFBit(Bool_t tof){fTof = tof ;}
void SetCPVBit(Bool_t cpv){fCpv = cpv; }
void SetCPV2Bit(Bool_t cpv){fCpv2 = cpv; }
- void SetPCAPID(Bool_t pca){fPCA = pca;}
- void SetTrig(Bool_t trig){fTrig=trig;}
+ void SetDispBit(Bool_t chi2){fDisp = chi2 ;}
+ void SetDisp2Bit(Bool_t chi2){fDisp2 = chi2 ;}
+ void SetDistToBad(Int_t dist){fBadDist=dist;}
void SetEMCx(Double_t x){fX = x ;}
void SetEMCy(Double_t y){fY = y ;}
void SetEMCz(Double_t z){fZ = z ;}
- void SetModule(Int_t mod){fModule = mod ;}
- void SetBC(Int_t bc){fBC = bc;}
- void SetDistToBad(Int_t dist){fBadDist=dist;}
- void SetTagged(Bool_t bit){fIsTagged=bit;}
- void SetTagged(Bool_t bit,Int_t i,Int_t k){fIsTagged_reg[i][k]=bit;}
+ void SetFiducialArea(Int_t a){fFiducialArea=a ;}
+ void SetIsolationTag(Int_t tag){fIsolationTag=tag ;}
void SetIsolated(Bool_t bit){fIsIsolated=bit;}
+ void SetLambdas(Double_t l1,Double_t l2){fLambda0=l1; fLambda1=l2;}
+ void SetModule(Int_t mod){fModule = mod ;}
+ void SetMomV2(TLorentzVector * p){fMomV2=(*p);}
+ void SetNCells(Int_t n){fNCells=n;}
void SetPartnerPt(Double_t pt){fPartnerPt=pt;}
+ void SetPCAPID(Bool_t pca){fPCA = pca;}
+ void SetPhoton(Int_t flag){ fIsPhoton=flag; }
void SetPrimary(Int_t label){fPrimary=label;}
+ void SetPrimaryAtVertex(Int_t label){fPrimaryAtVertex=label;}
+ void SetTagged(Bool_t bit){fIsTagged=bit;}
+ void SetTagged(Bool_t bit,Int_t i,Int_t k){fIsTagged_reg[i][k]=bit;}
+ void SetTagInfo(Int_t bits){fTagInfo=bits;}
+ void SetTime(Double_t t) {fTime=t ;}
+ void SetTOFBit(Bool_t tof){fTof = tof ;}
+ void SetTrig(Bool_t trig){fTrig=trig;}
void SetUnfolded(Bool_t wasNotUnfolded){fUnfolded=wasNotUnfolded;}
void SetWeight(Double_t w){fWeight=w;}
- void SetCluster(AliVCluster* cluster) { fCluster = cluster; }
AliVCluster* GetCluster() { return fCluster; }
- void SetLambdas(Double_t l1,Double_t l2){fLambda0=l1; fLambda1=l2;}
- Double_t GetLambda1(void){return fLambda0;}
- Double_t GetLambda2(void){return fLambda1;}
-
- Int_t GetPrimary(){return fPrimary;}
- Double_t GetPartnerPt(){return fPartnerPt;}
private:
AliCaloPhoton(const AliCaloPhoton&); // not implemented
AliCaloPhoton& operator=(const AliCaloPhoton&);
Bool_t fIsIsolated ; //it is isolated
Bool_t fIsPhoton; //If it is really photon or not
Bool_t fUnfolded; //True if was not unfolded
- Double_t fX ; //Cluster coordinates in ALICE ref system
- Double_t fY ; //Cluster coordinates in ALICE ref system
- Double_t fZ ; //Cluster coordinates in ALICE ref system
- Double_t fLambda0 ; //Short and
- Double_t fLambda1 ; //Long dispersion axis
- Double_t fTime ; //time of the cluster
Int_t fModule ; //Module number
Int_t fBC ; //Bunch crossing number (BC=0 is main-main collision)
Int_t fBadDist ; //Distance to bad module in module units
Int_t fNCells ; //Number of cells in cluster
+ Int_t fFiducialArea ; //class of fiducial areas
Int_t fPi0Decayflag; //if this photon is from pi0 decay (from simulation)
Int_t fPi0Id;
Int_t fConverted; //If this photon originated from convertion on material (i.e. its primary is electron)
Int_t fConvertedPartner;
+ Int_t fIsolationTag ;
+ Int_t fTagInfo ;
+ Int_t fPrimary; //Primary entered PHOS
+ Int_t fPrimaryAtVertex; //Primary at vertex
+ Double_t fX ; //Cluster coordinates in ALICE ref system
+ Double_t fY ; //Cluster coordinates in ALICE ref system
+ Double_t fZ ; //Cluster coordinates in ALICE ref system
+ Double_t fLambda0 ; //Short and
+ Double_t fLambda1 ; //Long dispersion axis
+ Double_t fTime ; //time of the cluster
Double_t fPartnerPt;
Double_t fWeight ; //Weight of parent particle
- Int_t fPrimary; //Primary label
AliVCluster* fCluster; //! Originating Cluster the Photon Candidate is based on
- ClassDef(AliCaloPhoton,6);
+ ClassDef(AliCaloPhoton,7);
};
#pragma link C++ class AliAnalysisTaskPi0FlowMC+;
#pragma link C++ class AliAnalysisTaskPi0FlowMCAOD+;
#pragma link C++ class AliAnalysisTaskPi0FlowMCHijing+;
+#pragma link C++ class AliAnalysisTaskPi0FlowMCParamWeights+;
#pragma link C++ class AliPHOSTenderTask+;
//PHOS_EpRatio
set ( DHDR PWGHFhfeLinkDef.h)
-set ( EINCLUDE PWG/muon PWGHF/hfe TPC CORRFW STEER/STEERBase PWG/FLOW/Base PWG/FLOW/Tasks ANALYSIS)
+set ( EINCLUDE EMCAL PWG/muon PWGHF/hfe TPC CORRFW STEER/STEERBase PWG/FLOW/Base PWG/FLOW/Tasks ANALYSIS)
// Task for Heavy-flavour electron analysis in pPb collisions //
// (+ Electron-Hadron Jetlike Azimuthal Correlation) //
// //
- // version: March 23, 2014. //
+ // version: May 30, 2014. //
// //
// Authors //
// Elienos Pereira de Oliveira Filho (epereira@cern.ch) //
//include to use reader as Lucile does
#include "AliCaloTrackAODReader.h"
#include "AliCaloTrackReader.h"
+#include "AliEMCALRecoUtils.h" //to remove exotics
+#include "AliAODHeader.h"
+#include "AliEMCALGeometry.h"
+
+
+
+ // --- ANALYSIS system ---
+#include "AliCalorimeterUtils.h"
+#include "AliESDEvent.h"
+#include "AliMCEvent.h"
+#include "AliStack.h"
+#include "AliAODPWG4Particle.h"
+#include "AliVCluster.h"
+#include "AliVCaloCells.h"
+#include "AliMixedEvent.h"
+#include "AliAODCaloCluster.h"
+#include "AliOADBContainer.h"
+#include "AliAnalysisManager.h"
+
+ // --- Detector ---
+#include "AliEMCALGeometry.h"
+#include "AliPHOSGeoUtils.h"
//______________________________________________________________________
,fCorrelationFlag(0)
,fIsMC(0)
,fUseEMCal(kFALSE)
+
,fUseTrigger(kFALSE)
,fUseShowerShapeCut(kFALSE)
,fFillBackground(kFALSE)
,fZvtx(0)
,fEstimator(0)
,fClus(0)
- //,fClusESD(0)
+//,fClusESD(0)
,fNevent(0)
+,fNevent2(0)
,fPtElec_Inc(0)
,fPtPrim(0)
,fPtSec(0)
,fTPCnsigma_phi(0)
,fECluster(0)
,fECluster_pure(0)
+,fECluster_not_exotic(0)
+,fECluster_not_exotic1(0)
+,fECluster_not_exotic2(0)
+,fECluster_exotic(0)
+,fNCluster_pure(0)
+,fNCluster_pure_aod(0)
+,fNCluster_ECluster(0)
+,fNcells_energy(0)
+,fNcells_energy_elec_selected(0)
+,fNcells_energy_not_exotic(0)
+
,fEtaPhi(0)
,fEtaPhi_num(0)
,fEtaPhi_den(0)
+,fEtaPhi_data(0)
,fpt_reco_pt_MC_num(0)
,fpt_reco_pt_MC_den(0)
,fVtxZ(0)
,fVtxZ_new3(0)
,fVtxZ_new4(0)
+,fzRes1(0)
+,fzRes2(0)
+,fSPD_track_vtx1(0)
+,fSPD_track_vtx2(0)
+
+
,fEtad(0)
,fNTracks(0)
+,fTrack_Multi(0)
,fNTracks_pt(0)
,fNTracks_eta(0)
,fNTracks_phi(0)
,fPtMCeta(0)
,fPtMCpi02(0)
,fPtMCeta2(0)
+,fPtMCpi03(0)
+,fPtMCeta3(0)
,fPtMC_EMCal_All(0)
,fPtMC_EMCal_Selected(0)
,fPtMC_TPC_All(0)
,fEventMixingFlag(0)
,fCEtaPhi_Inc_DiHadron(0)
,fPtTrigger_Inc(0)
+ //,fEMCALRecoUtils(new AliEMCALRecoUtils)
+ //,fEMCALGeo(0x0)
+ //,fCaloUtils(0x0)
+
+,fBitEGA(0)
+//,fEMCALRecoUtils(0)//exotic
+
{
//Named constructor
// Define input and output slots here
// Input slot #0 works with a TChain
+
+ //exotic
+ //fEMCALRecoUtils = new AliEMCALRecoUtils();
+
DefineInput(0, TChain::Class());
// Output slot #0 id reserved by the base class for AOD
// Output slot #1 writes into a TH1 container
,fClus(0)
//,fClusESD(0)
,fNevent(0)
+,fNevent2(0)
,fPtElec_Inc(0)
,fPtPrim(0)
,fPtSec(0)
,fTPCnsigma_phi(0)
,fECluster(0)
,fECluster_pure(0)
+,fECluster_not_exotic(0)
+,fECluster_not_exotic1(0)
+,fECluster_not_exotic2(0)
+,fECluster_exotic(0)
+,fNCluster_pure(0)
+,fNCluster_pure_aod(0)
+,fNCluster_ECluster(0)
+,fNcells_energy(0)
+,fNcells_energy_elec_selected(0)
+,fNcells_energy_not_exotic(0)
,fEtaPhi(0)
,fEtaPhi_num(0)
,fEtaPhi_den(0)
+,fEtaPhi_data(0)
,fpt_reco_pt_MC_num(0)
,fpt_reco_pt_MC_den(0)
,fVtxZ(0)
,fVtxZ_new3(0)
,fVtxZ_new4(0)
+,fzRes1(0)
+,fzRes2(0)
+,fSPD_track_vtx1(0)
+,fSPD_track_vtx2(0)
+
+
+
,fEtad(0)
,fNTracks(0)
+,fTrack_Multi(0)
,fNTracks_pt(0)
,fNTracks_eta(0)
,fNTracks_phi(0)
,fPtMCeta(0)
,fPtMCpi02(0)
,fPtMCeta2(0)
+,fPtMCpi03(0)
+,fPtMCeta3(0)
,fPtMC_EMCal_All(0)
,fPtMC_EMCal_Selected(0)
,fPtMC_TPC_All(0)
,fEventMixingFlag(0)
,fCEtaPhi_Inc_DiHadron(0)
,fPtTrigger_Inc(0)
+ //,fEMCALRecoUtils(new AliEMCALRecoUtils)
+ //,fEMCALGeo(0x0)
+ //,fCaloUtils(0x0)
+,fBitEGA(0)
+ //,fEMCALRecoUtils(0)//exotic
{
// Constructor
// Define input and output slots here
// Input slot #0 works with a TChain
+
+ //exotic
+ // fEMCALRecoUtils = new AliEMCALRecoUtils();
+
DefineInput(0, TChain::Class());
// Output slot #0 id reserved by the base class for AOD
// Output slot #1 writes into a TH1 container
delete fPIDqa;
//Lucile
//delete reader;
+ //if(fEMCALRecoUtils) delete fEMCALRecoUtils ;
}
//______________________________________________________________________
//Store the number of events
//Define the histo
- fNevent = new TH1F("fNevent","Number of Events",15,0,15);
+ fNevent = new TH1F("fNevent","Number of Events",30,0,30);
+ fNevent2 = new TH1F("fNevent2","Number of Events 2",30,0,30);
//And then, add to the output list
fOutputList->Add(fNevent);
+ fOutputList->Add(fNevent2);
fpid = new TH1F("fpid","PID flag",5,0,5);
fOutputList->Add(fpid);
fShowerShapeCut = new TH2F("fShowerShapeCut","Shower Shape;M02;M20",500,0,1.8,500,0,1.8);
fEtaPhi_num=new TH2F("fEtaPhi_num","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
fEtaPhi_den=new TH2F("fEtaPhi_den","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
+ fEtaPhi_data=new TH2F("fEtaPhi_data","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
fpt_reco_pt_MC_num=new TH2F("fpt_reco_pt_MC_num","pt reco x pt MC;pt reco; pt MC",300,0.,30,300,0.,30);
fpt_reco_pt_MC_den=new TH2F("fpt_reco_pt_MC_den","pt reco x pt MC;pt reco; pt MC",300,0.,30,300,0.,30);
fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
fECluster_pure= new TH1F("fECluster_pure", ";ECluster pure",2000,0,100);
+ fECluster_not_exotic= new TH1F("fECluster_not_exotic", ";ECluster not exotic - function ",2000,0,100);
+
+ fECluster_not_exotic1= new TH1F("fECluster_not_exotic1", ";ECluster not exotic Ncells > E/3+1",2000,0,100);
+
+ fECluster_not_exotic2= new TH1F("fECluster_not_exotic2", ";ECluster not exotic 2",2000,0,100);
+ fECluster_exotic= new TH1F("fECluster_exotic", ";ECluster exotic",2000,0,100);
+
+ //not associated with tracks
+ fNCluster_pure= new TH1F("fNCluster_pure", ";Number of clusters - pure",2000,-1,1999);
+ fNCluster_pure_aod= new TH1F("fNCluster_pure_aod", ";Number of clusters - pure -aod",2000,-1,1999);
+ fNCluster_ECluster= new TH2F("fNCluster_ECluster", ";Number of clusters vs. Energy of Cluster",2000,-1,1999, 4000, -1, 1999);
+
+ fNcells_energy= new TH2F("fNcells_energy", "all clusters;Number of cells;Energy of Cluster",100,0,100, 2000, 0, 100);
+ fNcells_energy_elec_selected= new TH2F("fNcells_energy_elec_selected", "clusters for electrons on TPC;Number of cells;Energy of Cluster",100,0,100, 2000, 0, 100);
+ fNcells_energy_not_exotic= new TH2F("fNcells_energy_not_exotic", "not exotic cluster;Number of cells;Energy of Cluster ",100,0,100, 2000, 0, 100);
if(fUseEMCal){
fOutputList->Add(fEtaPhi_num);
fOutputList->Add(fEtaPhi_den);
+ fOutputList->Add(fEtaPhi_data);
fOutputList->Add(fpt_reco_pt_MC_num);
fOutputList->Add(fpt_reco_pt_MC_den);
fOutputList->Add(fCharge_p);
fOutputList->Add(fECluster_pure);
+ fOutputList->Add(fECluster_not_exotic);
+ fOutputList->Add(fECluster_not_exotic1);
+ fOutputList->Add(fECluster_not_exotic2);
+ fOutputList->Add(fECluster_exotic);
+
+ fOutputList->Add(fNCluster_pure);
+ fOutputList->Add(fNCluster_pure_aod);
+
+ fOutputList->Add(fNCluster_ECluster);
+ fOutputList->Add(fNcells_energy);
+ fOutputList->Add(fNcells_energy_elec_selected);
+ fOutputList->Add(fNcells_energy_not_exotic);
+
if(fUseEMCal){
}
- fVtxZ_new1= new TH1F("fVtxZ_new1","fVtxZ_new1",1000, -50,50);
- fVtxZ_new2= new TH1F("fVtxZ_new2","fVtxZ_new2",1000, -50,50);
- fVtxZ_new3= new TH1F("fVtxZ_new3","fVtxZ_new3",1000, -50,50);
- fVtxZ_new4= new TH1F("fVtxZ_new4","fVtxZ_new4",1000, -50,50);
+ fVtxZ_new1= new TH1F("fVtxZ_new1","fVtxZ_new1",4000, -50,50);
+ fVtxZ_new2= new TH1F("fVtxZ_new2","fVtxZ_new2",4000, -50,50);
+ fVtxZ_new3= new TH1F("fVtxZ_new3","fVtxZ_new3",4000, -50,50);
+ fVtxZ_new4= new TH1F("fVtxZ_new4","fVtxZ_new4",4000, -50,50);
+
+ fzRes1= new TH1F("fzRes1","fzRes1",4000, 0,1);
+ fzRes2= new TH1F("fzRes2","fzRes2",4000, 0,1);
+ fSPD_track_vtx1= new TH1F("fSPD_track_vtx1","fSPD_track_vtx1",4000, -5,5);
+ fSPD_track_vtx2= new TH1F("fSPD_track_vtx2","fSPD_track_vtx2",4000, -5,5);
+
//General Histograms
//Steps
fOutputList->Add(fTPCNcls_EoverP[i]);
}
+ fTrack_Multi= new TH1F("fTrack_Multi","fTrack_Multi",1000, 0,1000);
+
for(Int_t i = 0; i < 4; i++)
{
fTPCNcls_pid[i]= new TH2F(Form("fTPCNcls_pid%d",i),"fTPCNcls_pid;NCls;NCls for PID",200,0,200,200,0,200);
fOutputList->Add(fVtxZ_new3);
fOutputList->Add(fVtxZ_new4);
+ fOutputList->Add(fzRes1);
+ fOutputList->Add(fzRes2);
+ fOutputList->Add(fSPD_track_vtx1);
+ fOutputList->Add(fSPD_track_vtx2);
fPtMCeta = new TH1F("fPtMCeta",";p_{T} (GeV/c);Count",200,0,30);
fPtMCpi02 = new TH1F("fPtMCpi02",";p_{t} (GeV/c);Count",200,0,30);
fPtMCeta2 = new TH1F("fPtMCeta2",";p_{T} (GeV/c);Count",200,0,30);
+ fPtMCpi03 = new TH1F("fPtMCpi03",";p_{t} (GeV/c);Count",200,0,30);
+ fPtMCeta3 = new TH1F("fPtMCeta3",";p_{T} (GeV/c);Count",200,0,30);
+
fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{T} (GeV/c);Count",200,0,40);
fOutputList->Add(fPtMCeta);
fOutputList->Add(fPtMCpi02);
fOutputList->Add(fPtMCeta2);
+ fOutputList->Add(fPtMCpi03);
+ fOutputList->Add(fPtMCeta3);
fOutputList->Add(fPtMC_EMCal_All);
fOutputList->Add(fPtMC_EMCal_Selected);
fOutputList->Add(fPtMC_TPC_All);
fOutputList->Add(fCentralityHist);
fOutputList->Add(fCentralityHistPass);
- //______________________________________________________________________
- //Mixed event analysis
+ //______________________________________________________________________
+ //Mixed event analysis
if(fEventMixingFlag)
{
fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
Int_t fNumberOfVertices = 0;
Int_t fNumberOfMotherkink = 0;
- //______________________________________________________________________
- //Vertex Selection
+
+ //total event before event selection
+ fNevent->Fill(1);
+
+ //______________________________________________________________________
+ //Vertex Selection
if(fIsAOD)
{
-
const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
if(!trkVtx || trkVtx->GetNContributors()<=0) return;
TString vtxTtl = trkVtx->GetTitle();
if(!vtxTtl.Contains("VertexerTracks")) return;
- Float_t zvtx = trkVtx->GetZ();
+ //Float_t zvtx = trkVtx->GetZ();
+ Float_t zvtx = -100;
+ zvtx=trkVtx->GetZ();
fZvtx = zvtx;
fVtxZ_new1->Fill(fZvtx);
Double_t cov[6]={0};
spdVtx->GetCovarianceMatrix(cov);
Double_t zRes = TMath::Sqrt(cov[5]);
+
+ fzRes1->Fill(zRes);
if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
+ fzRes2->Fill(zRes);
+
+ fSPD_track_vtx1->Fill(spdVtx->GetZ() - trkVtx->GetZ());
if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
- if(TMath::Abs(zvtx) > 10) return;
+ fSPD_track_vtx2->Fill(spdVtx->GetZ() - trkVtx->GetZ());
+
+ if(TMath::Abs(zvtx) > 10) return;
fVtxZ_new2->Fill(fZvtx);
- //Look for kink mother for AOD
+ if(fabs(zvtx>10.0))return;
+ fVtxZ_new3->Fill(fZvtx);
+
+
+ //Look for kink mother for AOD
fNumberOfVertices = 0;
fNumberOfMotherkink = 0;
if(!trkVtx || trkVtx->GetNContributors()<=0) return;
TString vtxTtl = trkVtx->GetTitle();
if(!vtxTtl.Contains("VertexerTracks")) return;
- Float_t zvtx = trkVtx->GetZ();
+ Float_t zvtx = -100;
+ zvtx=trkVtx->GetZ();
+
const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
if(spdVtx->GetNContributors()<=0) return;
if(TMath::Abs(zvtx) > 10) return;
}
- //______________________________________________________________________
+ //______________________________________________________________________
+ //after vertex selection
+ fNevent->Fill(10);
+
+ //______________________________________________________________________
+ //EMCal Trigger Selection (Threshold selection)
+
+ TString firedTrigger;
+ TString TriggerEG1("EG1"); //takes trigger with name with EG1, ex: CEMC7EG1-B-NOPF-CENTNOTRD
+ TString TriggerEG2("EG2");
+ //Jan 17, 2014
+ //TString TriggerEJE("EJE");
+
+ if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
+ else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
+ //Bool_t IsEventEMCALL0=kTRUE;
+ Bool_t IsEventEMCALL1=kFALSE;
+ if(firedTrigger.Contains(TriggerEG1)){
+ fNevent->Fill(2);
+ IsEventEMCALL1=kTRUE;
+ }
+ if(firedTrigger.Contains(TriggerEG2)){
+ fNevent->Fill(3);
+ IsEventEMCALL1=kTRUE;
+ }
+
+ //if the flag is for a given threshold and it was not fired, return.
+
+ if(fEMCEG1){
+ if(!firedTrigger.Contains(TriggerEG1))return;
+ if(firedTrigger.Contains(TriggerEG2)){
+ fNevent->Fill(4);
+
+ }
+
+ }
+
+
+ if(fEMCEG2){
+ if(!firedTrigger.Contains(TriggerEG2))return;
+ if(firedTrigger.Contains(TriggerEG1)){
+ fNevent->Fill(5);
+ }
- //Only events with at least 2 tracks are accepted
- Int_t fNOtrks = fVevent->GetNumberOfTracks();
+ }
+
+
+
+ //______________________________________________________________________
+ //Testing if there is an overlap EGA and EJE
+ //none
+ /*
+ if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2) ) && !firedTrigger.Contains(TriggerEJE))
+ {
+ fNevent->Fill(6);
+ }
+ //only GA
+ if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && !firedTrigger.Contains(TriggerEJE))
+ {
+ fNevent->Fill(7);
+ }
+ //only JE
+ if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
+ {
+ fNevent->Fill(8);
+ }
+ //both
+ if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
+ {
+ fNevent->Fill(9);
+ }
+ */
- //if(fIsAOD) Int_t fNOtrks = fAOD->GetNumberOfTracks();
- //if(!fIsAOD) Int_t fNOtrks = fESD->GetNumberOfTracks();
- //commented to test
+
+
+ //Only events with at least 2 tracks are accepted
+ Int_t fNOtrks = fVevent->GetNumberOfTracks();
if(fNOtrks<2) return;
-
- //new track loop to select events
+ fNevent->Fill(11);
- fNevent->Fill(13);
+ if(fIsAOD){
+ Int_t fNOtrks2 = fAOD->GetNumberOfTracks();
+ if(fNOtrks2<2) return;
+ }
+ fNevent->Fill(12);
+
+ //______________________________________________________________________
+ //new track loop to select events
+ //track pt cut (at least 2)
/*
if(fUseTrigger){
if(fIsAOD){
for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
{
AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
- if (!Vtrack)
- {
- printf("ERROR: Could not receive track %d\n", iTracks);
- continue;
- }
-
+ if (!Vtrack) continue;
+
AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
- //AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
- AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
+ //AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
if((track->Pt())<0.2 || (track->Pt())>1000.0) continue;
- //if it is not a hybrid track, continue
- if(!atrack->TestFilterBit(768)) continue;
- else fTrackMulti=fTrackMulti+1;
+ else fTrackMulti=fTrackMulti+1;
}
//Only take event if track multiplicity is bigger than 2.
if(fTrackMulti<2) return;
}
}
- */
-
- fVtxZ_new3->Fill(fZvtx);
-
- fNevent->Fill(14);
+ fNevent->Fill(13);
+ //______________________________________________________________________
+ //Using more cuts than I have beeing using
+ //eta cut and primary (at least 2)
+ if(fUseTrigger){
+ if(fIsAOD){
+ double fTrackMulti2=0;
+ for(Int_t i = 0; i < fVevent->GetNumberOfTracks(); i++)
+ {
+ AliVParticle* Vtrack2 = fVevent->GetTrack(i);
+ if (!Vtrack2) continue;
+
+
+ AliVTrack *track_new = dynamic_cast<AliVTrack*>(Vtrack2);
+ AliAODTrack *aodtrack = dynamic_cast<AliAODTrack*>(Vtrack2);
+
+
+ if(aodtrack)
+ {
+
+
+ if(TMath::Abs(track_new->Eta())> 0.9) continue;
+ if (aodtrack->GetType()!= AliAODTrack::kPrimary) continue ;
+ else fTrackMulti2=fTrackMulti2+1;
+ }
+ }
+ //Only take event if track multiplicity is bigger than 2.
+ if(fTrackMulti2<2) return;
+
+
+ }
+ }
+ fNevent->Fill(14);
+//______________________________________________________________________
+//Using more cuts than I have beeing using
+//hybrid (at least2)
+ if(fUseTrigger){
+ if(fIsAOD){
+ double fTrackMulti3=0;
+ for(Int_t i = 0; i < fVevent->GetNumberOfTracks(); i++)
+ {
+ AliVParticle* Vtrack3 = fVevent->GetTrack(i);
+ if (!Vtrack3) continue;
+
+ //AliVTrack *track_new = dynamic_cast<AliVTrack*>(Vtrack3);
+ AliAODTrack *aodtrack = dynamic_cast<AliAODTrack*>(Vtrack3);
+
+
+ if(aodtrack)
+ {
+
+ if (!aodtrack->IsHybridGlobalConstrainedGlobal()) continue ;
+ //another option if I don't want to use hybrid
+ //if ( aodtrack->TestFilterBit(128)==kFALSE) continue ;
+ else fTrackMulti3=fTrackMulti3+1;
+ }
+ }
+ //Only take event if track multiplicity is bigger than 2.
+ if(fTrackMulti3<2) return;
+
+ }
+ }
+ fNevent->Fill(15);
+//______________________________________________________________________
-
- //trying to use same as Lucile
- /*if(fIsAOD) {
- //reader = new AliCaloTrackAODReader();
- reader->SwitchOnCTS();
- reader->SetCTSPtMin(0.2);
- reader->SetCTSPtMax(1000);
- reader->SwitchOffRecalculateVertexBC();
- reader->SwitchOffVertexBCEventSelection();
- reader->SwitchOffUseTrackTimeCut();
- reader->SwitchOffUseTrackDCACut();
- reader->SwitchOnAODHybridTrackSelection();
- reader->SwitchOnRejectNoTrackEvents();
- }*/
+ if(fUseTrigger){
+ if(fIsAOD){
+ double fTrackMulti4=0;
+ for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
+ {
+ AliVParticle* Vtrack4 = fVevent->GetTrack(iTracks);
+ if (!Vtrack4) continue;
+
+
+ //AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack4);
+ AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack4);
+
+ if(!atrack->TestFilterBit(768)) continue;
+ if(!atrack->IsHybridGlobalConstrainedGlobal()) continue ;
+
+
+ else fTrackMulti4=fTrackMulti4+1;
+
+ }
+ //Only take event if track multiplicity is bigger than 2.
+ if(fTrackMulti4<2) return;
+ fTrack_Multi->Fill(fTrackMulti4);
+ }
+ }
+ fNevent->Fill(16);
+//______________________________________________________________________
+ */
- //______________________________________________________________________
- //Centrality Selection
+//______________________________________________________________________
+//Centrality Selection
if(fHasCentralitySelection)
{
Float_t centrality = -1;
fCentralityHistPass->Fill(centrality);
}
- //______________________________________________________________________
+ //______________________________________________________________________
- //______________________________________________________________________
+
+ fNevent->Fill(17);
+
+ //______________________________________________________________________
if(fIsMC)
{
Int_t pdg = fMCparticle->GetPdgCode();
+ //====================================================================
+ //trying take pions spectra 27/May/2014
+ //IsPrimary only take events from pythia
+ //IsPhysicalPrimariee: (all prompt particles, including strong decay products plus weak decay product from heavy-flavor).
+ //eta cut same as MinJung
+
+ if(fMCparticle->Eta()>=-0.8 && fMCparticle->Eta()<=0.8)
+ {
+ if(fMCparticle->IsPrimary()){
+
+ if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
+ if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
+ //eta cut same as MinJung
+ }
+
+ if(fMCparticle->IsPhysicalPrimary()){
+ if(TMath::Abs(pdg)==111) fPtMCpi02->Fill(fMCparticle->Pt());
+ if(TMath::Abs(pdg)==221) fPtMCeta2->Fill(fMCparticle->Pt());
+
+ }
+
+ if(TMath::Abs(pdg)==111) fPtMCpi03->Fill(fMCparticle->Pt());
+ if(TMath::Abs(pdg)==221) fPtMCeta3->Fill(fMCparticle->Pt());
+ }
+ //====================================================================
double proX = fMCparticle->Xv();
double proY = fMCparticle->Yv();
}
}
- if (TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCparticleAlle_Primary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons primary
+ if (TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()){
+ fPtMCparticleAlle_Primary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons primary
+ }
if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
{
} //denominator for total efficiency and tracking
- if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
+ if(fIsHFE2){
+ fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
+ }
}
}
}
}//eta cut
- //only primary pions
- if(fMCparticle->IsPhysicalPrimary()){
- if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
- if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
+
+
+ }//loop tracks
+
+
+
+ //second loop over track, but only the primaries ones
+ //only primary pions --> how to take the primaries ones in AOD?
+ /*
+ for(Int_t iMC = 0; iMC < fMCarray->GetNPrimary(); iMC++){
+ fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
+ pdg = fMCparticle->GetPdgCode();
+
+ if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
+ if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
+
+ if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax)
+ {
- if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax)
- {
-
- if(TMath::Abs(pdg)==111) fPtMCpi02->Fill(fMCparticle->Pt());
- if(TMath::Abs(pdg)==221) fPtMCeta2->Fill(fMCparticle->Pt());
-
- }
+ if(TMath::Abs(pdg)==111) fPtMCpi02->Fill(fMCparticle->Pt());
+ if(TMath::Abs(pdg)==221) fPtMCeta2->Fill(fMCparticle->Pt());
}
-
- }//loop tracks
+ }
+ */
+
+
}//AOD
else
{
fMCstack = fMCevent->Stack();
+ //pion and eta spectrum
+ //MinJung code
+
+ //----------------------------------------------------------------------------------------------------
+ AliVParticle *mctrack2 = NULL;
+ AliMCParticle *mctrack0 = NULL;
+
+
+ for(Int_t imc = 0; imc <fMCEvent->GetNumberOfPrimaries(); imc++){
+ if(!(mctrack2 = fMCEvent->GetTrack(imc))) continue;
+ TParticle* mcpart0 = fMCEvent->Stack()->Particle(imc);
+ if(!mcpart0) continue;
+ mctrack0 = dynamic_cast<AliMCParticle *>(mctrack2);
+ if(!mctrack0) continue;
+
+ if(TMath::Abs(AliHFEtools::GetRapidity(mcpart0))<0.8){
+
+ if(TMath::Abs(mctrack0->PdgCode()) == 111) // pi0
+ {
+ fPtMCpi0->Fill(mctrack0->Pt());
+ }
+
+ if(TMath::Abs(mctrack0->PdgCode()) == 221) // eta
+ {
+ fPtMCeta->Fill(mctrack0->Pt());
+ }
+
+ }
+
+ }
+ // end of MinJung
+ //----------------------------------------------------------------------------------------------------
+
+
for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
{
fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency and tracking
fEtaPhi_den->Fill(fMCtrack->Phi(),fMCtrack->Eta());
}
- if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
+ if(fIsHFE2){
+ fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
+ }
}
}//Is Physical primary
}
}//ESD
}//Is MC
- //______________________________________________________________________
- //EMCal Trigger Selection (Threshold selection)
- TString firedTrigger;
- TString TriggerEG1("CEMC7EG1"); //takes trigger with name with EG1, ex: CEMC7EG1-B-NOPF-CENTNOTRD
- TString TriggerEG2("CEMC7EG2");
- //Jan 17, 2014
- TString TriggerEJE("EJE");
-
- if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
- else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
+//______________________________________________________________________
+//threshold selection was here
+//______________________________________________________________________
+//all events selected
fNevent->Fill(0);
- if(firedTrigger.Contains(TriggerEG1)) fNevent->Fill(1);
- if(firedTrigger.Contains(TriggerEG2)) fNevent->Fill(2);
- // Jan 06, 2014: I changed the counters: Only fill with 3 or 4 if we want the trigger threshold selected.
- //EG1
+
+//______________________________________________________________________
+//events in the threshold
+
if(firedTrigger.Contains(TriggerEG1))
{
- if(fEMCEG1) fNevent->Fill(3);
- }
- else
- {
- if(fEMCEG1) return;
+ if(fEMCEG1){
+ fNevent->Fill(18);
+ if(!firedTrigger.Contains(TriggerEG2)) fNevent->Fill(19);
+ //if(firedTrigger.Contains(TriggerEG2)) return;
+ }
}
+
//EG2
if(firedTrigger.Contains(TriggerEG2))
{
- if(fEMCEG2) fNevent->Fill(4);
- }
- else
- {
- if(fEMCEG2) return;
+ if(fEMCEG2){
+ fNevent->Fill(20);
+ if(!firedTrigger.Contains(TriggerEG1)) fNevent->Fill(21);
+ //if(firedTrigger.Contains(TriggerEG1)) return;
+ }
}
- //______________________________________________________________________
- //Testing if there is an overlap EGA and EJE
- //none
- if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2) ) && !firedTrigger.Contains(TriggerEJE))
- {
- fNevent->Fill(6);
- }
- //only GA
- if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && !firedTrigger.Contains(TriggerEJE))
- {
- fNevent->Fill(7);
- }
- //only JE
- if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
- {
- fNevent->Fill(8);
- }
- //both
- if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
- {
- fNevent->Fill(9);
- }
-
+
//New cluster information
//after trigger threshold selection
- Int_t ClsNo2 = fVevent->GetNumberOfCaloClusters();
+ Int_t ClsNo2 = -999;
+ ClsNo2 = fVevent->GetNumberOfCaloClusters();
+ fNCluster_pure->Fill(ClsNo2);
+
+
if(ClsNo2<=0){
- fNevent->Fill(11); //events with no cluster
+ fNevent->Fill(22); //events with no cluster
return;
}
- for (Int_t i=0; i< ClsNo2; i++ ){
+
+ //in order to include time cut
+ //fEMCALCells = fAOD->GetEMCALCells();
+ //Double_t tof = clus->GetTOF();
+ //clus->GetNCells()
+ //if ( clus->E() < minE ) continue ;
+
- fClus = fVevent->GetCaloCluster(i);
- if(fClus->IsEMCAL())
- {
- //pure cluster information
- fECluster_pure->Fill(fClus->E());
+
+ if(fUseTrigger && fIsAOD){
+
+ //AliAODHeader * aodh = fAOD->GetHeader();
+ //Int_t bc= aodh->GetBunchCrossNumber();
+
+
+ Int_t ClsNo_aod = -999;
+ ClsNo_aod = fAOD->GetNumberOfCaloClusters();
+ fNCluster_pure_aod->Fill(ClsNo_aod);
+ //Bool_t exotic=kTRUE;
+
+ for (Int_t i=0; i< ClsNo_aod; i++ ){
+
+ //fClus = fVevent->GetCaloCluster(i);
+ //to be compatible with Shingo
+ AliVCluster *clust = 0x0;
+ clust = (AliVCluster*) fAOD->GetCaloCluster(i);
+
+ if(clust && clust->IsEMCAL())
+ {
+ //pure cluster information
+ fECluster_pure->Fill(clust->E());
+
+ fNcells_energy->Fill(clust->GetNCells(),clust->E());
+ fNCluster_ECluster->Fill(ClsNo_aod,clust->E());
+
+ if(clust->E()>1000) fNevent->Fill(23);
+
+ //exotic
+ /*
+ exotic = fEMCALRecoUtils->IsExoticCluster(clust, (AliVCaloCells*)fAOD->GetEMCALCells(), bc);
+ if(exotic == kFALSE){
+ fECluster_not_exotic->Fill(clust->E());
+ fNcells_energy_not_exotic->Fill(clust->GetNCells(),clust->E());
+ }
+ */
+
+ //approximation to remove exotics
+ if(clust->GetNCells()<5 && clust->E()>15.0){
+ fECluster_exotic->Fill(clust->E());
+ }
+ //Marcel cut
+ else if((clust->GetNCells())> ((clust->E())/3+1)){
+ fECluster_not_exotic1->Fill(clust->E());
+ }
+ else{
+ fECluster_not_exotic2->Fill(clust->E());
+ }
+
+
+ }
+ /*
+ //______________________________________________________________________
+ //Trying to remove events with bad cells and find patches
+ //First, I will try to count them
+ //______________________________________________________________________
+
+ if(clust && clust->IsEMCAL())
+ {
+ Bool_t badchannel = ContainsBadChannel("EMCAL", clust->GetCellsAbsId(),clust->GetNCells() );
+ printf("Contém bad channel? %d ", badchannel);
+ if(badchannel)fNevent2->Fill(0);
+
+ //trying to find patches
+ TArrayI patches_found=GetTriggerPatches(IsEventEMCALL0, IsEventEMCALL1);
+ printf("N patches %d, first %d, last %d\n",patches_found.GetSize(), patches_found.At(0), patches_found.At(patches_found.GetSize()-1));
+
+ }
+
+ //end of bad cells
+ //______________________________________________________________________
+*/
+
}
}
- fNevent->Fill(12); //events with cluster
+ fNevent->Fill(24); //events with cluster
+
fVtxZ_new4->Fill(fZvtx);
- //__________________________________________________________________
-
+
Int_t ClsNo = -999;
if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
else ClsNo = fAOD->GetNumberOfCaloClusters();
AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
- //aod test -- Francesco suggestion
- AliAODTrack *aod_track=fAOD->GetTrack(iTracks);
-
+
Double_t fTPCnSigma = -999;
Double_t fTOFnSigma = -999;
Double_t fTPCnSigma_pion = -999;
if(fIsAOD){
//AOD test -- Fancesco suggestion
+ //aod test -- Francesco suggestion
+ AliAODTrack *aod_track=fAOD->GetTrack(iTracks);
+
Int_t type=aod_track->GetType();
if(type==AliAODTrack::kPrimary) fPtPrim->Fill(aod_track->Pt());
if(type==AliAODTrack::kSecondary) fPtSec->Fill(aod_track->Pt());
if(fIsMC && track->GetLabel()>=0)
{
- if(fIsAOD){
+ if(fIsAOD)
+ {
fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
- if(fMCparticle->IsPhysicalPrimary()) fPtIsPhysicaPrimary->Fill(fPt);
+ if(fMCparticle->IsPhysicalPrimary())
+ {
+ fPtIsPhysicaPrimary->Fill(fPt);
+ }
Int_t pdg = fMCparticle->GetPdgCode();
if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
Bool_t MotherFound = FindMother(track->GetLabel());
if(MotherFound)
{
- if(fIsHFE1){
+ if(fIsHFE1)
+ {
fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());//numerator tracking
//unfolding
fpt_reco_pt_MC_den->Fill(track->Pt(),fMCparticle->Pt());
}
- if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
+ if(fIsHFE2){
+ fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
+ }
}
}
}
//----------------------------------------------------------------------------------------
-
- // EtaCut electrons histogram
+ //
+ //EtaCut electrons histogram
//Shower Shape Cut
if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
fShowerShapeCut->Fill(M02,M20);
+ //in order to check if there are exotic cluster in this selected cluster (27 may 2014)
+ fNcells_energy_elec_selected->Fill(ncells,Energy);
}
if(!fUseShowerShapeCut){
fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
fShowerShapeCut->Fill(M02,M20);
+ fNcells_energy_elec_selected->Fill(ncells,Energy);
+
}
if(fUseEMCal) fShowerShape_ele->Fill(M02,M20);
if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
{
- fECluster[2]->Fill(Energy);
- fTPCNcls_pid[3]->Fill(TPCNcls, TPCNcls_pid);
+
+ fECluster[2]->Fill(Energy);
+ fTPCNcls_pid[3]->Fill(TPCNcls, TPCNcls_pid);
+
if(fUseEMCal)
{
- fPtElec_Inc->Fill(fPt);
+ if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
+ fPtElec_Inc->Fill(fPt);
+ //eta phi distribution for data
+ fEtaPhi_data->Fill(track->Phi(),track->Eta());
+ }
+
//Eta cut for background
if(fFillBackground){
fEtad[2]->Fill(track->Eta());
if(track->Charge()>0) fCharge_p->Fill(fPt);
fMCtrack = fMCstack->Particle(track->GetLabel());
- if(fMCtrack->GetFirstMother()>0) fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
+ if(fMCtrack->GetFirstMother()>0)
+ {
+ fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
+ }
TParticle *particle=fMCstack->Particle(track->GetLabel());
Int_t pdg = fMCtrack->GetPdgCode();
- if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
- if( TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0 ){
+ if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
+ {
+ if( TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0 )
+ {
Int_t mpdg = fMCtrackMother->GetPdgCode();
- if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
+ if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111)
+ {
Double_t proR=particle->R();
- if(proR<7){
+ if(proR<7)
+ {
fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
}
}
}
- if( TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(track->GetLabel())) fPtMCelectronAfterAll_Primary->Fill(fMCtrack->Pt());
+ if( TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(track->GetLabel()))
+ {
+ fPtMCelectronAfterAll_Primary->Fill(fMCtrack->Pt());
+ }
}
if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
if(MotherFound)
{
- if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
-
-
+ if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
+ {
if(!fUseShowerShapeCut){
if(fIsHFE1){
fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
- if(fIsHFE1)fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());
+ if(fIsHFE1){fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());}
}
}
}
{
///_________________________________________________________________
///MC analysis
- Bool_t IsMCefix=kFALSE; //to make correction on efix, use kTRUE (do not change the efficiency, so I will keep the correction only for d3)
+ //Bool_t IsMCefix=kFALSE; //to make correction on efix, use kTRUE (do not change the efficiency, so I will keep the correction only for d3)
if(fIsMC)
{
Double_t mPt=fMCparticleMother->Pt();
Double_t mweight=1;
- //________________________________________________________________
- //correction for efix based on data - parametrization from MinJung
- if(IsMCefix){
- if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
- Double_t x=mPt;
- if(0.100000 <= x < 0.112797 ) mweight=1.030419;
- if(0.112797 <= x < 0.127231 ) mweight=1.044554;
- if(0.127231 <= x < 0.143512 ) mweight=1.062733;
- if(0.143512 <= x < 0.161877 ) mweight=1.085332;
- if(0.161877 <= x < 0.182592 ) mweight=1.115248;
- if(0.182592 <= x < 0.205957 ) mweight=1.153990;
- if(0.205957 <= x < 0.232313 ) mweight=1.201346;
- if(0.232313 <= x < 0.262041 ) mweight=1.257332;
- if(0.262041 <= x < 0.295573 ) mweight=1.315488;
- if(0.295573 <= x < 0.333397 ) mweight=1.369138;
- if(0.333397 <= x < 0.376060 ) mweight=1.407632;
- if(0.376060 <= x < 0.424183 ) mweight=1.422232;
- if(0.424183 <= x < 0.478465 ) mweight=1.406922;
- if(0.478465 <= x < 0.539692 ) mweight=1.360082;
- if(0.539692 <= x < 0.608754 ) mweight=1.284405;
- if(0.608754 <= x < 0.686654 ) mweight=1.182017;
- if(0.686654 <= x < 0.774523 ) mweight=1.062002;
- if(0.774523 <= x < 0.873636 ) mweight=0.935533;
- if(0.873636 <= x < 0.985432 ) mweight=0.816081;
- if(0.985432 <= x < 1.111534 ) mweight=0.717527;
- if(1.111534 <= x < 1.253773 ) mweight=0.647465;
- if(1.253773 <= x < 1.414214 ) mweight=0.607212;
- if(1.414214 <= x < 1.595185 ) mweight=0.589750;
- if(1.595185 <= x < 1.799315 ) mweight=0.587406;
- if(1.799315 <= x < 2.029567 ) mweight=0.592858;
- if(2.029567 <= x < 2.289283 ) mweight=0.601059;
- if(2.289283 <= x < 2.582235 ) mweight=0.608003;
- if(2.582235 <= x < 2.912674 ) mweight=0.611705;
- if(2.912674 <= x < 3.285398 ) mweight=0.610086;
- if(3.285398 <= x < 3.705818 ) mweight=0.605015;
- if(3.705818 <= x < 4.180038 ) mweight=0.596299;
- if(4.180038 <= x < 4.714942 ) mweight=0.590727;
- if(4.714942 <= x < 5.318296 ) mweight=0.585358;
- if(5.318296 <= x < 5.998859 ) mweight=0.585257;
- if(5.998859 <= x < 6.766511 ) mweight=0.580812;
- if(6.766511 <= x < 7.632396 ) mweight=0.576207;
- if(7.632396 <= x < 8.609086 ) mweight=0.575912;
- if(8.609086 <= x < 9.710759 ) mweight=0.558718;
- if(9.710759 <= x < 10.953409 ) mweight=0.555625;
- if(10.953409 <= x < 12.355077 ) mweight=0.558886;
- if(12.355077 <= x < 13.936111 ) mweight=0.545318;
- if(13.936111 <= x < 15.719464 ) mweight=0.517607;
- if(15.719464 <= x < 17.731026 ) mweight=0.512366;
- if(17.731026 <= x < 20.000000 ) mweight=0.497034;
-
-
- }
-
- }//end of IsMCefix
+ //________________________________________________________________
+ //correction for d3 based on data //from Jan
- //________________________________________________________________
- //correction for d3 based on data //from Jan
- if(!IsMCefix){
if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
Double_t x=mPt;
- if(0.100000 <= x < 0.112797 ) mweight=1.262120;
- if(0.112797 <= x < 0.127231 ) mweight=1.277765;
- if(0.127231 <= x < 0.143512 ) mweight=1.295605;
- if(0.143512 <= x < 0.161877 ) mweight=1.318155;
- if(0.161877 <= x < 0.182592 ) mweight=1.348693;
- if(0.182592 <= x < 0.205957 ) mweight=1.388636;
- if(0.205957 <= x < 0.232313 ) mweight=1.439122;
- if(0.232313 <= x < 0.262041 ) mweight=1.497452;
- if(0.262041 <= x < 0.295573 ) mweight=1.559409;
- if(0.295573 <= x < 0.333397 ) mweight=1.615169;
- if(0.333397 <= x < 0.376060 ) mweight=1.654954;
- if(0.376060 <= x < 0.424183 ) mweight=1.668753;
- if(0.424183 <= x < 0.478465 ) mweight=1.652225;
- if(0.478465 <= x < 0.539692 ) mweight=1.603119;
- if(0.539692 <= x < 0.608754 ) mweight=1.526049;
- if(0.608754 <= x < 0.686654 ) mweight=1.426724;
- if(0.686654 <= x < 0.774523 ) mweight=1.312684;
- if(0.774523 <= x < 0.873636 ) mweight=1.195395;
- if(0.873636 <= x < 0.985432 ) mweight=1.086264;
- if(0.985432 <= x < 1.111534 ) mweight=0.993666;
- if(1.111534 <= x < 1.253773 ) mweight=0.922587;
- if(1.253773 <= x < 1.414214 ) mweight=0.875739;
- if(1.414214 <= x < 1.595185 ) mweight=0.852181;
- if(1.595185 <= x < 1.799315 ) mweight=0.847828;
- if(1.799315 <= x < 2.029567 ) mweight=0.863875;
- if(2.029567 <= x < 2.289283 ) mweight=0.899112;
- if(2.289283 <= x < 2.582235 ) mweight=0.955194;
- if(2.582235 <= x < 2.912674 ) mweight=1.033824;
- if(2.912674 <= x < 3.285398 ) mweight=1.133714;
- if(3.285398 <= x < 3.705818 ) mweight=1.259471;
- if(3.705818 <= x < 4.180038 ) mweight=1.406883;
- if(4.180038 <= x < 4.714942 ) mweight=1.578923;
- if(4.714942 <= x < 5.318296 ) mweight=1.778513;
- if(5.318296 <= x < 5.998859 ) mweight=2.001171;
- if(5.998859 <= x < 6.766511 ) mweight=2.223161;
- if(6.766511 <= x < 7.632396 ) mweight=2.449445;
- if(7.632396 <= x < 8.609086 ) mweight=2.661734;
- if(8.609086 <= x < 9.710759 ) mweight=2.851935;
- if(9.710759 <= x < 10.953409 ) mweight=2.974319;
- if(10.953409 <= x < 12.355077 ) mweight=3.106314;
- if(12.355077 <= x < 13.936111 ) mweight=3.126815;
- if(13.936111 <= x < 15.719464 ) mweight=3.150053;
- if(15.719464 <= x < 17.731026 ) mweight=3.218509;
- if(17.731026 <= x < 20.000000 ) mweight=3.252141;
-
+ mweight=CalculateWeight(111, x);
+
}
- }
- //________________________________________________________________
- //Histo pT mother versus pT electron
+ //________________________________________________________________
+
+ //Histo pT mother versus pT electron
fpT_m_electron->Fill(mPt, track->Pt());
if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./mweight);
Double_t gmPt=fMCparticleGMother->Pt();
Double_t gmweight=1;
- //________________________________________________________________
- //correction for efix based on data - parametrization from MinJung
- if(IsMCefix){
- if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
- Double_t x=gmPt;
- if(0.100000 <= x < 0.112797 ) gmweight=1.030419;
- if(0.112797 <= x < 0.127231 ) gmweight=1.044554;
- if(0.127231 <= x < 0.143512 ) gmweight=1.062733;
- if(0.143512 <= x < 0.161877 ) gmweight=1.085332;
- if(0.161877 <= x < 0.182592 ) gmweight=1.115248;
- if(0.182592 <= x < 0.205957 ) gmweight=1.153990;
- if(0.205957 <= x < 0.232313 ) gmweight=1.201346;
- if(0.232313 <= x < 0.262041 ) gmweight=1.257332;
- if(0.262041 <= x < 0.295573 ) gmweight=1.315488;
- if(0.295573 <= x < 0.333397 ) gmweight=1.369138;
- if(0.333397 <= x < 0.376060 ) gmweight=1.407632;
- if(0.376060 <= x < 0.424183 ) gmweight=1.422232;
- if(0.424183 <= x < 0.478465 ) gmweight=1.406922;
- if(0.478465 <= x < 0.539692 ) gmweight=1.360082;
- if(0.539692 <= x < 0.608754 ) gmweight=1.284405;
- if(0.608754 <= x < 0.686654 ) gmweight=1.182017;
- if(0.686654 <= x < 0.774523 ) gmweight=1.062002;
- if(0.774523 <= x < 0.873636 ) gmweight=0.935533;
- if(0.873636 <= x < 0.985432 ) gmweight=0.816081;
- if(0.985432 <= x < 1.111534 ) gmweight=0.717527;
- if(1.111534 <= x < 1.253773 ) gmweight=0.647465;
- if(1.253773 <= x < 1.414214 ) gmweight=0.607212;
- if(1.414214 <= x < 1.595185 ) gmweight=0.589750;
- if(1.595185 <= x < 1.799315 ) gmweight=0.587406;
- if(1.799315 <= x < 2.029567 ) gmweight=0.592858;
- if(2.029567 <= x < 2.289283 ) gmweight=0.601059;
- if(2.289283 <= x < 2.582235 ) gmweight=0.608003;
- if(2.582235 <= x < 2.912674 ) gmweight=0.611705;
- if(2.912674 <= x < 3.285398 ) gmweight=0.610086;
- if(3.285398 <= x < 3.705818 ) gmweight=0.605015;
- if(3.705818 <= x < 4.180038 ) gmweight=0.596299;
- if(4.180038 <= x < 4.714942 ) gmweight=0.590727;
- if(4.714942 <= x < 5.318296 ) gmweight=0.585358;
- if(5.318296 <= x < 5.998859 ) gmweight=0.585257;
- if(5.998859 <= x < 6.766511 ) gmweight=0.580812;
- if(6.766511 <= x < 7.632396 ) gmweight=0.576207;
- if(7.632396 <= x < 8.609086 ) gmweight=0.575912;
- if(8.609086 <= x < 9.710759 ) gmweight=0.558718;
- if(9.710759 <= x < 10.953409 ) gmweight=0.555625;
- if(10.953409 <= x < 12.355077 ) gmweight=0.558886;
- if(12.355077 <= x < 13.936111 ) gmweight=0.545318;
- if(13.936111 <= x < 15.719464 ) gmweight=0.517607;
- if(15.719464 <= x < 17.731026 ) gmweight=0.512366;
- if(17.731026 <= x < 20.000000 ) gmweight=0.497034;
-
-
-
- }
-
-
- }//end of IsMCefix
+ //________________________________________________________________
+ //correction for d3 based on data
- //________________________________________________________________
- //correction for d3 based on data
- if(!IsMCefix){
if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
Double_t x=gmPt;
- if(0.100000 <= x < 0.112797 ) gmweight=1.262120;
- if(0.112797 <= x < 0.127231 ) gmweight=1.277765;
- if(0.127231 <= x < 0.143512 ) gmweight=1.295605;
- if(0.143512 <= x < 0.161877 ) gmweight=1.318155;
- if(0.161877 <= x < 0.182592 ) gmweight=1.348693;
- if(0.182592 <= x < 0.205957 ) gmweight=1.388636;
- if(0.205957 <= x < 0.232313 ) gmweight=1.439122;
- if(0.232313 <= x < 0.262041 ) gmweight=1.497452;
- if(0.262041 <= x < 0.295573 ) gmweight=1.559409;
- if(0.295573 <= x < 0.333397 ) gmweight=1.615169;
- if(0.333397 <= x < 0.376060 ) gmweight=1.654954;
- if(0.376060 <= x < 0.424183 ) gmweight=1.668753;
- if(0.424183 <= x < 0.478465 ) gmweight=1.652225;
- if(0.478465 <= x < 0.539692 ) gmweight=1.603119;
- if(0.539692 <= x < 0.608754 ) gmweight=1.526049;
- if(0.608754 <= x < 0.686654 ) gmweight=1.426724;
- if(0.686654 <= x < 0.774523 ) gmweight=1.312684;
- if(0.774523 <= x < 0.873636 ) gmweight=1.195395;
- if(0.873636 <= x < 0.985432 ) gmweight=1.086264;
- if(0.985432 <= x < 1.111534 ) gmweight=0.993666;
- if(1.111534 <= x < 1.253773 ) gmweight=0.922587;
- if(1.253773 <= x < 1.414214 ) gmweight=0.875739;
- if(1.414214 <= x < 1.595185 ) gmweight=0.852181;
- if(1.595185 <= x < 1.799315 ) gmweight=0.847828;
- if(1.799315 <= x < 2.029567 ) gmweight=0.863875;
- if(2.029567 <= x < 2.289283 ) gmweight=0.899112;
- if(2.289283 <= x < 2.582235 ) gmweight=0.955194;
- if(2.582235 <= x < 2.912674 ) gmweight=1.033824;
- if(2.912674 <= x < 3.285398 ) gmweight=1.133714;
- if(3.285398 <= x < 3.705818 ) gmweight=1.259471;
- if(3.705818 <= x < 4.180038 ) gmweight=1.406883;
- if(4.180038 <= x < 4.714942 ) gmweight=1.578923;
- if(4.714942 <= x < 5.318296 ) gmweight=1.778513;
- if(5.318296 <= x < 5.998859 ) gmweight=2.001171;
- if(5.998859 <= x < 6.766511 ) gmweight=2.223161;
- if(6.766511 <= x < 7.632396 ) gmweight=2.449445;
- if(7.632396 <= x < 8.609086 ) gmweight=2.661734;
- if(8.609086 <= x < 9.710759 ) gmweight=2.851935;
- if(9.710759 <= x < 10.953409 ) gmweight=2.974319;
- if(10.953409 <= x < 12.355077 ) gmweight=3.106314;
- if(12.355077 <= x < 13.936111 ) gmweight=3.126815;
- if(13.936111 <= x < 15.719464 ) gmweight=3.150053;
- if(15.719464 <= x < 17.731026 ) gmweight=3.218509;
- if(17.731026 <= x < 20.000000 ) gmweight=3.252141;
-
+ gmweight=CalculateWeight(111, x);
}
- }
- //________________________________________________________________
+ //________________________________________________________________
+ //Histo pT gmother versus pT electron
- //Histo pT gmother versus pT electron
fpT_gm_electron->Fill(gmPt, track->Pt());
if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./gmweight);
}
}//IsMC
- ///_________________________________________________________________
+ ///_________________________________________________________________
- //________________________________________________
- //Associated particle cut
+ //________________________________________________
+ //Associated particle cut
fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
fPartnerCuts->SetRequireITSRefit(kTRUE);
fPartnerCuts->SetRequireTPCRefit(kTRUE);
fPartnerCuts->SetEtaRange(-0.9,0.9);
fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
fPartnerCuts->SetMinNClustersTPC(80);
- fPartnerCuts->SetPtRange(0.3,1e10);
- //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
- //fPartnerCuts->SetMaxDCAToVertexXY(1);
- //fPartnerCuts->SetMaxDCAToVertexZ(3);
- //_________________________________________________
-
- ///#################################################################
- //Non-HFE reconstruction
+ fPartnerCuts->SetPtRange(0,1e10);
+ //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
+ //fPartnerCuts->SetMaxDCAToVertexXY(1);
+ //fPartnerCuts->SetMaxDCAToVertexZ(3);
+ //_________________________________________________
+
+ ///#################################################################
+ //Non-HFE reconstruction
fNonHFE = new AliSelectNonHFE();
fNonHFE->SetAODanalysis(fIsAOD);
if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
Double_t mPt=fMCparticleMother->Pt();
- Double_t mweight1=1;
- Double_t mweight2=1;
+ Double_t mweight1=1;
+ Double_t mweight2=1;
//Double_t weight=1;
- //----------------------------------------------------------------------------
- if(IsMCefix){
- if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
- Double_t x=mPt;
- if(0.100000 <= x < 0.112797 ) weight=1.030419;
- if(0.112797 <= x < 0.127231 ) weight=1.044554;
- if(0.127231 <= x < 0.143512 ) weight=1.062733;
- if(0.143512 <= x < 0.161877 ) weight=1.085332;
- if(0.161877 <= x < 0.182592 ) weight=1.115248;
- if(0.182592 <= x < 0.205957 ) weight=1.153990;
- if(0.205957 <= x < 0.232313 ) weight=1.201346;
- if(0.232313 <= x < 0.262041 ) weight=1.257332;
- if(0.262041 <= x < 0.295573 ) weight=1.315488;
- if(0.295573 <= x < 0.333397 ) weight=1.369138;
- if(0.333397 <= x < 0.376060 ) weight=1.407632;
- if(0.376060 <= x < 0.424183 ) weight=1.422232;
- if(0.424183 <= x < 0.478465 ) weight=1.406922;
- if(0.478465 <= x < 0.539692 ) weight=1.360082;
- if(0.539692 <= x < 0.608754 ) weight=1.284405;
- if(0.608754 <= x < 0.686654 ) weight=1.182017;
- if(0.686654 <= x < 0.774523 ) weight=1.062002;
- if(0.774523 <= x < 0.873636 ) weight=0.935533;
- if(0.873636 <= x < 0.985432 ) weight=0.816081;
- if(0.985432 <= x < 1.111534 ) weight=0.717527;
- if(1.111534 <= x < 1.253773 ) weight=0.647465;
- if(1.253773 <= x < 1.414214 ) weight=0.607212;
- if(1.414214 <= x < 1.595185 ) weight=0.589750;
- if(1.595185 <= x < 1.799315 ) weight=0.587406;
- if(1.799315 <= x < 2.029567 ) weight=0.592858;
- if(2.029567 <= x < 2.289283 ) weight=0.601059;
- if(2.289283 <= x < 2.582235 ) weight=0.608003;
- if(2.582235 <= x < 2.912674 ) weight=0.611705;
- if(2.912674 <= x < 3.285398 ) weight=0.610086;
- if(3.285398 <= x < 3.705818 ) weight=0.605015;
- if(3.705818 <= x < 4.180038 ) weight=0.596299;
- if(4.180038 <= x < 4.714942 ) weight=0.590727;
- if(4.714942 <= x < 5.318296 ) weight=0.585358;
- if(5.318296 <= x < 5.998859 ) weight=0.585257;
- if(5.998859 <= x < 6.766511 ) weight=0.580812;
- if(6.766511 <= x < 7.632396 ) weight=0.576207;
- if(7.632396 <= x < 8.609086 ) weight=0.575912;
- if(8.609086 <= x < 9.710759 ) weight=0.558718;
- if(9.710759 <= x < 10.953409 ) weight=0.555625;
- if(10.953409 <= x < 12.355077 ) weight=0.558886;
- if(12.355077 <= x < 13.936111 ) weight=0.545318;
- if(13.936111 <= x < 15.719464 ) weight=0.517607;
- if(15.719464 <= x < 17.731026 ) weight=0.512366;
- if(17.731026 <= x < 20.000000 ) weight=0.497034;
-
-
- }
-
- }//end of IsMCefix
//----------------------------------------------------------------------------
//correction based on data only for pi0
- if(!IsMCefix){
if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
Double_t x=mPt;
- if(0.100000 <= x < 0.112797 ) weight=1.262120;
- if(0.112797 <= x < 0.127231 ) weight=1.277765;
- if(0.127231 <= x < 0.143512 ) weight=1.295605;
- if(0.143512 <= x < 0.161877 ) weight=1.318155;
- if(0.161877 <= x < 0.182592 ) weight=1.348693;
- if(0.182592 <= x < 0.205957 ) weight=1.388636;
- if(0.205957 <= x < 0.232313 ) weight=1.439122;
- if(0.232313 <= x < 0.262041 ) weight=1.497452;
- if(0.262041 <= x < 0.295573 ) weight=1.559409;
- if(0.295573 <= x < 0.333397 ) weight=1.615169;
- if(0.333397 <= x < 0.376060 ) weight=1.654954;
- if(0.376060 <= x < 0.424183 ) weight=1.668753;
- if(0.424183 <= x < 0.478465 ) weight=1.652225;
- if(0.478465 <= x < 0.539692 ) weight=1.603119;
- if(0.539692 <= x < 0.608754 ) weight=1.526049;
- if(0.608754 <= x < 0.686654 ) weight=1.426724;
- if(0.686654 <= x < 0.774523 ) weight=1.312684;
- if(0.774523 <= x < 0.873636 ) weight=1.195395;
- if(0.873636 <= x < 0.985432 ) weight=1.086264;
- if(0.985432 <= x < 1.111534 ) weight=0.993666;
- if(1.111534 <= x < 1.253773 ) weight=0.922587;
- if(1.253773 <= x < 1.414214 ) weight=0.875739;
- if(1.414214 <= x < 1.595185 ) weight=0.852181;
- if(1.595185 <= x < 1.799315 ) weight=0.847828;
- if(1.799315 <= x < 2.029567 ) weight=0.863875;
- if(2.029567 <= x < 2.289283 ) weight=0.899112;
- if(2.289283 <= x < 2.582235 ) weight=0.955194;
- if(2.582235 <= x < 2.912674 ) weight=1.033824;
- if(2.912674 <= x < 3.285398 ) weight=1.133714;
- if(3.285398 <= x < 3.705818 ) weight=1.259471;
- if(3.705818 <= x < 4.180038 ) weight=1.406883;
- if(4.180038 <= x < 4.714942 ) weight=1.578923;
- if(4.714942 <= x < 5.318296 ) weight=1.778513;
- if(5.318296 <= x < 5.998859 ) weight=2.001171;
- if(5.998859 <= x < 6.766511 ) weight=2.223161;
- if(6.766511 <= x < 7.632396 ) weight=2.449445;
- if(7.632396 <= x < 8.609086 ) weight=2.661734;
- if(8.609086 <= x < 9.710759 ) weight=2.851935;
- if(9.710759 <= x < 10.953409 ) weight=2.974319;
- if(10.953409 <= x < 12.355077 ) weight=3.106314;
- if(12.355077 <= x < 13.936111 ) weight=3.126815;
- if(13.936111 <= x < 15.719464 ) weight=3.150053;
- if(15.719464 <= x < 17.731026 ) weight=3.218509;
- if(17.731026 <= x < 20.000000 ) weight=3.252141;
-
-
+ weight=CalculateWeight(111, x);
}
- }
+
//----------------------------------------------------------------------------
//check this
}
else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
Double_t gmPt=fMCparticleGMother->Pt();
- Double_t gmweight1=1;
- Double_t gmweight2=1;
+ Double_t gmweight1=1;
+ Double_t gmweight2=1;
//Double_t weight=1;
- //----------------------------------------------------------------------------
- if(IsMCefix){
- if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
- Double_t x=gmPt;
- if(0.100000 <= x < 0.112797 ) weight=1.030419;
- if(0.112797 <= x < 0.127231 ) weight=1.044554;
- if(0.127231 <= x < 0.143512 ) weight=1.062733;
- if(0.143512 <= x < 0.161877 ) weight=1.085332;
- if(0.161877 <= x < 0.182592 ) weight=1.115248;
- if(0.182592 <= x < 0.205957 ) weight=1.153990;
- if(0.205957 <= x < 0.232313 ) weight=1.201346;
- if(0.232313 <= x < 0.262041 ) weight=1.257332;
- if(0.262041 <= x < 0.295573 ) weight=1.315488;
- if(0.295573 <= x < 0.333397 ) weight=1.369138;
- if(0.333397 <= x < 0.376060 ) weight=1.407632;
- if(0.376060 <= x < 0.424183 ) weight=1.422232;
- if(0.424183 <= x < 0.478465 ) weight=1.406922;
- if(0.478465 <= x < 0.539692 ) weight=1.360082;
- if(0.539692 <= x < 0.608754 ) weight=1.284405;
- if(0.608754 <= x < 0.686654 ) weight=1.182017;
- if(0.686654 <= x < 0.774523 ) weight=1.062002;
- if(0.774523 <= x < 0.873636 ) weight=0.935533;
- if(0.873636 <= x < 0.985432 ) weight=0.816081;
- if(0.985432 <= x < 1.111534 ) weight=0.717527;
- if(1.111534 <= x < 1.253773 ) weight=0.647465;
- if(1.253773 <= x < 1.414214 ) weight=0.607212;
- if(1.414214 <= x < 1.595185 ) weight=0.589750;
- if(1.595185 <= x < 1.799315 ) weight=0.587406;
- if(1.799315 <= x < 2.029567 ) weight=0.592858;
- if(2.029567 <= x < 2.289283 ) weight=0.601059;
- if(2.289283 <= x < 2.582235 ) weight=0.608003;
- if(2.582235 <= x < 2.912674 ) weight=0.611705;
- if(2.912674 <= x < 3.285398 ) weight=0.610086;
- if(3.285398 <= x < 3.705818 ) weight=0.605015;
- if(3.705818 <= x < 4.180038 ) weight=0.596299;
- if(4.180038 <= x < 4.714942 ) weight=0.590727;
- if(4.714942 <= x < 5.318296 ) weight=0.585358;
- if(5.318296 <= x < 5.998859 ) weight=0.585257;
- if(5.998859 <= x < 6.766511 ) weight=0.580812;
- if(6.766511 <= x < 7.632396 ) weight=0.576207;
- if(7.632396 <= x < 8.609086 ) weight=0.575912;
- if(8.609086 <= x < 9.710759 ) weight=0.558718;
- if(9.710759 <= x < 10.953409 ) weight=0.555625;
- if(10.953409 <= x < 12.355077 ) weight=0.558886;
- if(12.355077 <= x < 13.936111 ) weight=0.545318;
- if(13.936111 <= x < 15.719464 ) weight=0.517607;
- if(15.719464 <= x < 17.731026 ) weight=0.512366;
- if(17.731026 <= x < 20.000000 ) weight=0.497034;
-
-
- }
-
-
- }//end of IsMCefix
- //----------------------------------------------------------------------------
+ //----------------------------------------------------------------------------
+
+ //----------------------------------------------------------------------------
+
+ //correction based on data only for pi0
- //correction based on data only for pi0
- if(!IsMCefix){
if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
Double_t x=gmPt;
- if(0.100000 <= x < 0.112797 ) weight=1.262120;
- if(0.112797 <= x < 0.127231 ) weight=1.277765;
- if(0.127231 <= x < 0.143512 ) weight=1.295605;
- if(0.143512 <= x < 0.161877 ) weight=1.318155;
- if(0.161877 <= x < 0.182592 ) weight=1.348693;
- if(0.182592 <= x < 0.205957 ) weight=1.388636;
- if(0.205957 <= x < 0.232313 ) weight=1.439122;
- if(0.232313 <= x < 0.262041 ) weight=1.497452;
- if(0.262041 <= x < 0.295573 ) weight=1.559409;
- if(0.295573 <= x < 0.333397 ) weight=1.615169;
- if(0.333397 <= x < 0.376060 ) weight=1.654954;
- if(0.376060 <= x < 0.424183 ) weight=1.668753;
- if(0.424183 <= x < 0.478465 ) weight=1.652225;
- if(0.478465 <= x < 0.539692 ) weight=1.603119;
- if(0.539692 <= x < 0.608754 ) weight=1.526049;
- if(0.608754 <= x < 0.686654 ) weight=1.426724;
- if(0.686654 <= x < 0.774523 ) weight=1.312684;
- if(0.774523 <= x < 0.873636 ) weight=1.195395;
- if(0.873636 <= x < 0.985432 ) weight=1.086264;
- if(0.985432 <= x < 1.111534 ) weight=0.993666;
- if(1.111534 <= x < 1.253773 ) weight=0.922587;
- if(1.253773 <= x < 1.414214 ) weight=0.875739;
- if(1.414214 <= x < 1.595185 ) weight=0.852181;
- if(1.595185 <= x < 1.799315 ) weight=0.847828;
- if(1.799315 <= x < 2.029567 ) weight=0.863875;
- if(2.029567 <= x < 2.289283 ) weight=0.899112;
- if(2.289283 <= x < 2.582235 ) weight=0.955194;
- if(2.582235 <= x < 2.912674 ) weight=1.033824;
- if(2.912674 <= x < 3.285398 ) weight=1.133714;
- if(3.285398 <= x < 3.705818 ) weight=1.259471;
- if(3.705818 <= x < 4.180038 ) weight=1.406883;
- if(4.180038 <= x < 4.714942 ) weight=1.578923;
- if(4.714942 <= x < 5.318296 ) weight=1.778513;
- if(5.318296 <= x < 5.998859 ) weight=2.001171;
- if(5.998859 <= x < 6.766511 ) weight=2.223161;
- if(6.766511 <= x < 7.632396 ) weight=2.449445;
- if(7.632396 <= x < 8.609086 ) weight=2.661734;
- if(8.609086 <= x < 9.710759 ) weight=2.851935;
- if(9.710759 <= x < 10.953409 ) weight=2.974319;
- if(10.953409 <= x < 12.355077 ) weight=3.106314;
- if(12.355077 <= x < 13.936111 ) weight=3.126815;
- if(13.936111 <= x < 15.719464 ) weight=3.150053;
- if(15.719464 <= x < 17.731026 ) weight=3.218509;
- if(17.731026 <= x < 20.000000 ) weight=3.252141;
-
-
+ weight=CalculateWeight(111, x);
}
- }
+
if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
-
-
-
//new 08 October //weighted histograms
if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
Double_t mPt=fMCparticleMother->Pt();
- Double_t mweight1=1;
- Double_t mweight2=1;
+ Double_t mweight1=1;
+ Double_t mweight2=1;
//Double_t weight=1;
- //----------------------------------------------------------------------------
- if(IsMCefix){
- if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
- Double_t x=mPt;
- if(0.100000 <= x < 0.112797 ) weight=1.030419;
- if(0.112797 <= x < 0.127231 ) weight=1.044554;
- if(0.127231 <= x < 0.143512 ) weight=1.062733;
- if(0.143512 <= x < 0.161877 ) weight=1.085332;
- if(0.161877 <= x < 0.182592 ) weight=1.115248;
- if(0.182592 <= x < 0.205957 ) weight=1.153990;
- if(0.205957 <= x < 0.232313 ) weight=1.201346;
- if(0.232313 <= x < 0.262041 ) weight=1.257332;
- if(0.262041 <= x < 0.295573 ) weight=1.315488;
- if(0.295573 <= x < 0.333397 ) weight=1.369138;
- if(0.333397 <= x < 0.376060 ) weight=1.407632;
- if(0.376060 <= x < 0.424183 ) weight=1.422232;
- if(0.424183 <= x < 0.478465 ) weight=1.406922;
- if(0.478465 <= x < 0.539692 ) weight=1.360082;
- if(0.539692 <= x < 0.608754 ) weight=1.284405;
- if(0.608754 <= x < 0.686654 ) weight=1.182017;
- if(0.686654 <= x < 0.774523 ) weight=1.062002;
- if(0.774523 <= x < 0.873636 ) weight=0.935533;
- if(0.873636 <= x < 0.985432 ) weight=0.816081;
- if(0.985432 <= x < 1.111534 ) weight=0.717527;
- if(1.111534 <= x < 1.253773 ) weight=0.647465;
- if(1.253773 <= x < 1.414214 ) weight=0.607212;
- if(1.414214 <= x < 1.595185 ) weight=0.589750;
- if(1.595185 <= x < 1.799315 ) weight=0.587406;
- if(1.799315 <= x < 2.029567 ) weight=0.592858;
- if(2.029567 <= x < 2.289283 ) weight=0.601059;
- if(2.289283 <= x < 2.582235 ) weight=0.608003;
- if(2.582235 <= x < 2.912674 ) weight=0.611705;
- if(2.912674 <= x < 3.285398 ) weight=0.610086;
- if(3.285398 <= x < 3.705818 ) weight=0.605015;
- if(3.705818 <= x < 4.180038 ) weight=0.596299;
- if(4.180038 <= x < 4.714942 ) weight=0.590727;
- if(4.714942 <= x < 5.318296 ) weight=0.585358;
- if(5.318296 <= x < 5.998859 ) weight=0.585257;
- if(5.998859 <= x < 6.766511 ) weight=0.580812;
- if(6.766511 <= x < 7.632396 ) weight=0.576207;
- if(7.632396 <= x < 8.609086 ) weight=0.575912;
- if(8.609086 <= x < 9.710759 ) weight=0.558718;
- if(9.710759 <= x < 10.953409 ) weight=0.555625;
- if(10.953409 <= x < 12.355077 ) weight=0.558886;
- if(12.355077 <= x < 13.936111 ) weight=0.545318;
- if(13.936111 <= x < 15.719464 ) weight=0.517607;
- if(15.719464 <= x < 17.731026 ) weight=0.512366;
- if(17.731026 <= x < 20.000000 ) weight=0.497034;
-
-
- }
-
- }//end of IsMCefix
//----------------------------------------------------------------------------
- //correction based on data only for pi0 for d3
- if(!IsMCefix){
+ //correction based on data only for pi0 for d3
+
if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
Double_t x=mPt;
- if(0.100000 <= x < 0.112797 ) weight=1.262120;
- if(0.112797 <= x < 0.127231 ) weight=1.277765;
- if(0.127231 <= x < 0.143512 ) weight=1.295605;
- if(0.143512 <= x < 0.161877 ) weight=1.318155;
- if(0.161877 <= x < 0.182592 ) weight=1.348693;
- if(0.182592 <= x < 0.205957 ) weight=1.388636;
- if(0.205957 <= x < 0.232313 ) weight=1.439122;
- if(0.232313 <= x < 0.262041 ) weight=1.497452;
- if(0.262041 <= x < 0.295573 ) weight=1.559409;
- if(0.295573 <= x < 0.333397 ) weight=1.615169;
- if(0.333397 <= x < 0.376060 ) weight=1.654954;
- if(0.376060 <= x < 0.424183 ) weight=1.668753;
- if(0.424183 <= x < 0.478465 ) weight=1.652225;
- if(0.478465 <= x < 0.539692 ) weight=1.603119;
- if(0.539692 <= x < 0.608754 ) weight=1.526049;
- if(0.608754 <= x < 0.686654 ) weight=1.426724;
- if(0.686654 <= x < 0.774523 ) weight=1.312684;
- if(0.774523 <= x < 0.873636 ) weight=1.195395;
- if(0.873636 <= x < 0.985432 ) weight=1.086264;
- if(0.985432 <= x < 1.111534 ) weight=0.993666;
- if(1.111534 <= x < 1.253773 ) weight=0.922587;
- if(1.253773 <= x < 1.414214 ) weight=0.875739;
- if(1.414214 <= x < 1.595185 ) weight=0.852181;
- if(1.595185 <= x < 1.799315 ) weight=0.847828;
- if(1.799315 <= x < 2.029567 ) weight=0.863875;
- if(2.029567 <= x < 2.289283 ) weight=0.899112;
- if(2.289283 <= x < 2.582235 ) weight=0.955194;
- if(2.582235 <= x < 2.912674 ) weight=1.033824;
- if(2.912674 <= x < 3.285398 ) weight=1.133714;
- if(3.285398 <= x < 3.705818 ) weight=1.259471;
- if(3.705818 <= x < 4.180038 ) weight=1.406883;
- if(4.180038 <= x < 4.714942 ) weight=1.578923;
- if(4.714942 <= x < 5.318296 ) weight=1.778513;
- if(5.318296 <= x < 5.998859 ) weight=2.001171;
- if(5.998859 <= x < 6.766511 ) weight=2.223161;
- if(6.766511 <= x < 7.632396 ) weight=2.449445;
- if(7.632396 <= x < 8.609086 ) weight=2.661734;
- if(8.609086 <= x < 9.710759 ) weight=2.851935;
- if(9.710759 <= x < 10.953409 ) weight=2.974319;
- if(10.953409 <= x < 12.355077 ) weight=3.106314;
- if(12.355077 <= x < 13.936111 ) weight=3.126815;
- if(13.936111 <= x < 15.719464 ) weight=3.150053;
- if(15.719464 <= x < 17.731026 ) weight=3.218509;
- if(17.731026 <= x < 20.000000 ) weight=3.252141;
-
-
+ weight=CalculateWeight(111, x);
+
}
- }
+
//check this
if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
//Double_t weight=1;
- //----------------------------------------------------------------------------
- if(IsMCefix){
- if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
- Double_t x=gmPt;
- if(0.100000 <= x < 0.112797 ) weight=1.030419;
- if(0.112797 <= x < 0.127231 ) weight=1.044554;
- if(0.127231 <= x < 0.143512 ) weight=1.062733;
- if(0.143512 <= x < 0.161877 ) weight=1.085332;
- if(0.161877 <= x < 0.182592 ) weight=1.115248;
- if(0.182592 <= x < 0.205957 ) weight=1.153990;
- if(0.205957 <= x < 0.232313 ) weight=1.201346;
- if(0.232313 <= x < 0.262041 ) weight=1.257332;
- if(0.262041 <= x < 0.295573 ) weight=1.315488;
- if(0.295573 <= x < 0.333397 ) weight=1.369138;
- if(0.333397 <= x < 0.376060 ) weight=1.407632;
- if(0.376060 <= x < 0.424183 ) weight=1.422232;
- if(0.424183 <= x < 0.478465 ) weight=1.406922;
- if(0.478465 <= x < 0.539692 ) weight=1.360082;
- if(0.539692 <= x < 0.608754 ) weight=1.284405;
- if(0.608754 <= x < 0.686654 ) weight=1.182017;
- if(0.686654 <= x < 0.774523 ) weight=1.062002;
- if(0.774523 <= x < 0.873636 ) weight=0.935533;
- if(0.873636 <= x < 0.985432 ) weight=0.816081;
- if(0.985432 <= x < 1.111534 ) weight=0.717527;
- if(1.111534 <= x < 1.253773 ) weight=0.647465;
- if(1.253773 <= x < 1.414214 ) weight=0.607212;
- if(1.414214 <= x < 1.595185 ) weight=0.589750;
- if(1.595185 <= x < 1.799315 ) weight=0.587406;
- if(1.799315 <= x < 2.029567 ) weight=0.592858;
- if(2.029567 <= x < 2.289283 ) weight=0.601059;
- if(2.289283 <= x < 2.582235 ) weight=0.608003;
- if(2.582235 <= x < 2.912674 ) weight=0.611705;
- if(2.912674 <= x < 3.285398 ) weight=0.610086;
- if(3.285398 <= x < 3.705818 ) weight=0.605015;
- if(3.705818 <= x < 4.180038 ) weight=0.596299;
- if(4.180038 <= x < 4.714942 ) weight=0.590727;
- if(4.714942 <= x < 5.318296 ) weight=0.585358;
- if(5.318296 <= x < 5.998859 ) weight=0.585257;
- if(5.998859 <= x < 6.766511 ) weight=0.580812;
- if(6.766511 <= x < 7.632396 ) weight=0.576207;
- if(7.632396 <= x < 8.609086 ) weight=0.575912;
- if(8.609086 <= x < 9.710759 ) weight=0.558718;
- if(9.710759 <= x < 10.953409 ) weight=0.555625;
- if(10.953409 <= x < 12.355077 ) weight=0.558886;
- if(12.355077 <= x < 13.936111 ) weight=0.545318;
- if(13.936111 <= x < 15.719464 ) weight=0.517607;
- if(15.719464 <= x < 17.731026 ) weight=0.512366;
- if(17.731026 <= x < 20.000000 ) weight=0.497034;
-
-
- }
-
-
- }//end of IsMCefix
- //----------------------------------------------------------------------------
+ //----------------------------------------------------------------------------
//correction based on data only for pi0
- if(!IsMCefix){
+
if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
Double_t x=gmPt;
- if(0.100000 <= x < 0.112797 ) weight=1.262120;
- if(0.112797 <= x < 0.127231 ) weight=1.277765;
- if(0.127231 <= x < 0.143512 ) weight=1.295605;
- if(0.143512 <= x < 0.161877 ) weight=1.318155;
- if(0.161877 <= x < 0.182592 ) weight=1.348693;
- if(0.182592 <= x < 0.205957 ) weight=1.388636;
- if(0.205957 <= x < 0.232313 ) weight=1.439122;
- if(0.232313 <= x < 0.262041 ) weight=1.497452;
- if(0.262041 <= x < 0.295573 ) weight=1.559409;
- if(0.295573 <= x < 0.333397 ) weight=1.615169;
- if(0.333397 <= x < 0.376060 ) weight=1.654954;
- if(0.376060 <= x < 0.424183 ) weight=1.668753;
- if(0.424183 <= x < 0.478465 ) weight=1.652225;
- if(0.478465 <= x < 0.539692 ) weight=1.603119;
- if(0.539692 <= x < 0.608754 ) weight=1.526049;
- if(0.608754 <= x < 0.686654 ) weight=1.426724;
- if(0.686654 <= x < 0.774523 ) weight=1.312684;
- if(0.774523 <= x < 0.873636 ) weight=1.195395;
- if(0.873636 <= x < 0.985432 ) weight=1.086264;
- if(0.985432 <= x < 1.111534 ) weight=0.993666;
- if(1.111534 <= x < 1.253773 ) weight=0.922587;
- if(1.253773 <= x < 1.414214 ) weight=0.875739;
- if(1.414214 <= x < 1.595185 ) weight=0.852181;
- if(1.595185 <= x < 1.799315 ) weight=0.847828;
- if(1.799315 <= x < 2.029567 ) weight=0.863875;
- if(2.029567 <= x < 2.289283 ) weight=0.899112;
- if(2.289283 <= x < 2.582235 ) weight=0.955194;
- if(2.582235 <= x < 2.912674 ) weight=1.033824;
- if(2.912674 <= x < 3.285398 ) weight=1.133714;
- if(3.285398 <= x < 3.705818 ) weight=1.259471;
- if(3.705818 <= x < 4.180038 ) weight=1.406883;
- if(4.180038 <= x < 4.714942 ) weight=1.578923;
- if(4.714942 <= x < 5.318296 ) weight=1.778513;
- if(5.318296 <= x < 5.998859 ) weight=2.001171;
- if(5.998859 <= x < 6.766511 ) weight=2.223161;
- if(6.766511 <= x < 7.632396 ) weight=2.449445;
- if(7.632396 <= x < 8.609086 ) weight=2.661734;
- if(8.609086 <= x < 9.710759 ) weight=2.851935;
- if(9.710759 <= x < 10.953409 ) weight=2.974319;
- if(10.953409 <= x < 12.355077 ) weight=3.106314;
- if(12.355077 <= x < 13.936111 ) weight=3.126815;
- if(13.936111 <= x < 15.719464 ) weight=3.150053;
- if(15.719464 <= x < 17.731026 ) weight=3.218509;
- if(17.731026 <= x < 20.000000 ) weight=3.252141;
+ weight=CalculateWeight(111, x);
}
- }
+
//----------------------------------------------------------------------------
if(fNonHFE->IsLS()) fPtElec_LS2_weight->Fill(fPtE,fNonHFE->GetNLS());
}
- //ULS with no weight from ULS-LS original
- // we have to know if track2 comes from same mother!!!
+
+ //----------------------------------------------------------------------------
+ //to check other way to calculate efficiency
+ //ULS with no weight from ULS-LS original
+ //we have to know if track2 comes from same mother!!!
+ //----------------------------------------------------------------------------
if(fNonHFE->IsULS()){
for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
{
if(fUlsPartner[i]==iTracks){
//only fill if it has same mother
-
- if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC->Fill(fPtE);
+ //with weight to take into account the number of partners
+ if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC->Fill(fPtE, fNonHFE->GetNULS());
//-----------------------------------------------------------------------------------------------------------
//weight for mother
- Double_t weight2=1;
+ //Double_t weight2=1;
Double_t mPt=fMCparticleMother->Pt();
if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
Double_t x=mPt;
-
- if(!IsMCefix){
- if(0.100000 <= x < 0.112797 ) weight=1.262120;
- if(0.112797 <= x < 0.127231 ) weight=1.277765;
- if(0.127231 <= x < 0.143512 ) weight=1.295605;
- if(0.143512 <= x < 0.161877 ) weight=1.318155;
- if(0.161877 <= x < 0.182592 ) weight=1.348693;
- if(0.182592 <= x < 0.205957 ) weight=1.388636;
- if(0.205957 <= x < 0.232313 ) weight=1.439122;
- if(0.232313 <= x < 0.262041 ) weight=1.497452;
- if(0.262041 <= x < 0.295573 ) weight=1.559409;
- if(0.295573 <= x < 0.333397 ) weight=1.615169;
- if(0.333397 <= x < 0.376060 ) weight=1.654954;
- if(0.376060 <= x < 0.424183 ) weight=1.668753;
- if(0.424183 <= x < 0.478465 ) weight=1.652225;
- if(0.478465 <= x < 0.539692 ) weight=1.603119;
- if(0.539692 <= x < 0.608754 ) weight=1.526049;
- if(0.608754 <= x < 0.686654 ) weight=1.426724;
- if(0.686654 <= x < 0.774523 ) weight=1.312684;
- if(0.774523 <= x < 0.873636 ) weight=1.195395;
- if(0.873636 <= x < 0.985432 ) weight=1.086264;
- if(0.985432 <= x < 1.111534 ) weight=0.993666;
- if(1.111534 <= x < 1.253773 ) weight=0.922587;
- if(1.253773 <= x < 1.414214 ) weight=0.875739;
- if(1.414214 <= x < 1.595185 ) weight=0.852181;
- if(1.595185 <= x < 1.799315 ) weight=0.847828;
- if(1.799315 <= x < 2.029567 ) weight=0.863875;
- if(2.029567 <= x < 2.289283 ) weight=0.899112;
- if(2.289283 <= x < 2.582235 ) weight=0.955194;
- if(2.582235 <= x < 2.912674 ) weight=1.033824;
- if(2.912674 <= x < 3.285398 ) weight=1.133714;
- if(3.285398 <= x < 3.705818 ) weight=1.259471;
- if(3.705818 <= x < 4.180038 ) weight=1.406883;
- if(4.180038 <= x < 4.714942 ) weight=1.578923;
- if(4.714942 <= x < 5.318296 ) weight=1.778513;
- if(5.318296 <= x < 5.998859 ) weight=2.001171;
- if(5.998859 <= x < 6.766511 ) weight=2.223161;
- if(6.766511 <= x < 7.632396 ) weight=2.449445;
- if(7.632396 <= x < 8.609086 ) weight=2.661734;
- if(8.609086 <= x < 9.710759 ) weight=2.851935;
- if(9.710759 <= x < 10.953409 ) weight=2.974319;
- if(10.953409 <= x < 12.355077 ) weight=3.106314;
- if(12.355077 <= x < 13.936111 ) weight=3.126815;
- if(13.936111 <= x < 15.719464 ) weight=3.150053;
- if(15.719464 <= x < 17.731026 ) weight=3.218509;
- if(17.731026 <= x < 20.000000 ) weight=3.252141;
-
- }
- if(IsMCefix){
-
- if(0.100000 <= x < 0.112797 ) weight2=1.030419;
- if(0.112797 <= x < 0.127231 ) weight2=1.044554;
- if(0.127231 <= x < 0.143512 ) weight2=1.062733;
- if(0.143512 <= x < 0.161877 ) weight2=1.085332;
- if(0.161877 <= x < 0.182592 ) weight2=1.115248;
- if(0.182592 <= x < 0.205957 ) weight2=1.153990;
- if(0.205957 <= x < 0.232313 ) weight2=1.201346;
- if(0.232313 <= x < 0.262041 ) weight2=1.257332;
- if(0.262041 <= x < 0.295573 ) weight2=1.315488;
- if(0.295573 <= x < 0.333397 ) weight2=1.369138;
- if(0.333397 <= x < 0.376060 ) weight2=1.407632;
- if(0.376060 <= x < 0.424183 ) weight2=1.422232;
- if(0.424183 <= x < 0.478465 ) weight2=1.406922;
- if(0.478465 <= x < 0.539692 ) weight2=1.360082;
- if(0.539692 <= x < 0.608754 ) weight2=1.284405;
- if(0.608754 <= x < 0.686654 ) weight2=1.182017;
- if(0.686654 <= x < 0.774523 ) weight2=1.062002;
- if(0.774523 <= x < 0.873636 ) weight2=0.935533;
- if(0.873636 <= x < 0.985432 ) weight2=0.816081;
- if(0.985432 <= x < 1.111534 ) weight2=0.717527;
- if(1.111534 <= x < 1.253773 ) weight2=0.647465;
- if(1.253773 <= x < 1.414214 ) weight2=0.607212;
- if(1.414214 <= x < 1.595185 ) weight2=0.589750;
- if(1.595185 <= x < 1.799315 ) weight2=0.587406;
- if(1.799315 <= x < 2.029567 ) weight2=0.592858;
- if(2.029567 <= x < 2.289283 ) weight2=0.601059;
- if(2.289283 <= x < 2.582235 ) weight2=0.608003;
- if(2.582235 <= x < 2.912674 ) weight2=0.611705;
- if(2.912674 <= x < 3.285398 ) weight2=0.610086;
- if(3.285398 <= x < 3.705818 ) weight2=0.605015;
- if(3.705818 <= x < 4.180038 ) weight2=0.596299;
- if(4.180038 <= x < 4.714942 ) weight2=0.590727;
- if(4.714942 <= x < 5.318296 ) weight2=0.585358;
- if(5.318296 <= x < 5.998859 ) weight2=0.585257;
- if(5.998859 <= x < 6.766511 ) weight2=0.580812;
- if(6.766511 <= x < 7.632396 ) weight2=0.576207;
- if(7.632396 <= x < 8.609086 ) weight2=0.575912;
- if(8.609086 <= x < 9.710759 ) weight2=0.558718;
- if(9.710759 <= x < 10.953409 ) weight2=0.555625;
- if(10.953409 <= x < 12.355077 ) weight2=0.558886;
- if(12.355077 <= x < 13.936111 ) weight2=0.545318;
- if(13.936111 <= x < 15.719464 ) weight2=0.517607;
- if(15.719464 <= x < 17.731026 ) weight2=0.512366;
- if(17.731026 <= x < 20.000000 ) weight2=0.497034;
-
-
- }
+ weight=CalculateWeight(111, x);
+
}
- //weight for grandmother
+
+ //weight for grandmother
Double_t gmPt=fMCparticleGMother->Pt();
if(TMath::Abs((fMCparticleMother->GetMother()>0) && ((fMCparticleGMother->GetPdgCode())==111))){
Double_t x=gmPt;
-
- if(!IsMCefix){
- if(0.100000 <= x < 0.112797 ) weight=1.262120;
- if(0.112797 <= x < 0.127231 ) weight=1.277765;
- if(0.127231 <= x < 0.143512 ) weight=1.295605;
- if(0.143512 <= x < 0.161877 ) weight=1.318155;
- if(0.161877 <= x < 0.182592 ) weight=1.348693;
- if(0.182592 <= x < 0.205957 ) weight=1.388636;
- if(0.205957 <= x < 0.232313 ) weight=1.439122;
- if(0.232313 <= x < 0.262041 ) weight=1.497452;
- if(0.262041 <= x < 0.295573 ) weight=1.559409;
- if(0.295573 <= x < 0.333397 ) weight=1.615169;
- if(0.333397 <= x < 0.376060 ) weight=1.654954;
- if(0.376060 <= x < 0.424183 ) weight=1.668753;
- if(0.424183 <= x < 0.478465 ) weight=1.652225;
- if(0.478465 <= x < 0.539692 ) weight=1.603119;
- if(0.539692 <= x < 0.608754 ) weight=1.526049;
- if(0.608754 <= x < 0.686654 ) weight=1.426724;
- if(0.686654 <= x < 0.774523 ) weight=1.312684;
- if(0.774523 <= x < 0.873636 ) weight=1.195395;
- if(0.873636 <= x < 0.985432 ) weight=1.086264;
- if(0.985432 <= x < 1.111534 ) weight=0.993666;
- if(1.111534 <= x < 1.253773 ) weight=0.922587;
- if(1.253773 <= x < 1.414214 ) weight=0.875739;
- if(1.414214 <= x < 1.595185 ) weight=0.852181;
- if(1.595185 <= x < 1.799315 ) weight=0.847828;
- if(1.799315 <= x < 2.029567 ) weight=0.863875;
- if(2.029567 <= x < 2.289283 ) weight=0.899112;
- if(2.289283 <= x < 2.582235 ) weight=0.955194;
- if(2.582235 <= x < 2.912674 ) weight=1.033824;
- if(2.912674 <= x < 3.285398 ) weight=1.133714;
- if(3.285398 <= x < 3.705818 ) weight=1.259471;
- if(3.705818 <= x < 4.180038 ) weight=1.406883;
- if(4.180038 <= x < 4.714942 ) weight=1.578923;
- if(4.714942 <= x < 5.318296 ) weight=1.778513;
- if(5.318296 <= x < 5.998859 ) weight=2.001171;
- if(5.998859 <= x < 6.766511 ) weight=2.223161;
- if(6.766511 <= x < 7.632396 ) weight=2.449445;
- if(7.632396 <= x < 8.609086 ) weight=2.661734;
- if(8.609086 <= x < 9.710759 ) weight=2.851935;
- if(9.710759 <= x < 10.953409 ) weight=2.974319;
- if(10.953409 <= x < 12.355077 ) weight=3.106314;
- if(12.355077 <= x < 13.936111 ) weight=3.126815;
- if(13.936111 <= x < 15.719464 ) weight=3.150053;
- if(15.719464 <= x < 17.731026 ) weight=3.218509;
- if(17.731026 <= x < 20.000000 ) weight=3.252141;
-
- }
- if(IsMCefix){
-
- if(0.100000 <= x < 0.112797 ) weight2=1.030419;
- if(0.112797 <= x < 0.127231 ) weight2=1.044554;
- if(0.127231 <= x < 0.143512 ) weight2=1.062733;
- if(0.143512 <= x < 0.161877 ) weight2=1.085332;
- if(0.161877 <= x < 0.182592 ) weight2=1.115248;
- if(0.182592 <= x < 0.205957 ) weight2=1.153990;
- if(0.205957 <= x < 0.232313 ) weight2=1.201346;
- if(0.232313 <= x < 0.262041 ) weight2=1.257332;
- if(0.262041 <= x < 0.295573 ) weight2=1.315488;
- if(0.295573 <= x < 0.333397 ) weight2=1.369138;
- if(0.333397 <= x < 0.376060 ) weight2=1.407632;
- if(0.376060 <= x < 0.424183 ) weight2=1.422232;
- if(0.424183 <= x < 0.478465 ) weight2=1.406922;
- if(0.478465 <= x < 0.539692 ) weight2=1.360082;
- if(0.539692 <= x < 0.608754 ) weight2=1.284405;
- if(0.608754 <= x < 0.686654 ) weight2=1.182017;
- if(0.686654 <= x < 0.774523 ) weight2=1.062002;
- if(0.774523 <= x < 0.873636 ) weight2=0.935533;
- if(0.873636 <= x < 0.985432 ) weight2=0.816081;
- if(0.985432 <= x < 1.111534 ) weight2=0.717527;
- if(1.111534 <= x < 1.253773 ) weight2=0.647465;
- if(1.253773 <= x < 1.414214 ) weight2=0.607212;
- if(1.414214 <= x < 1.595185 ) weight2=0.589750;
- if(1.595185 <= x < 1.799315 ) weight2=0.587406;
- if(1.799315 <= x < 2.029567 ) weight2=0.592858;
- if(2.029567 <= x < 2.289283 ) weight2=0.601059;
- if(2.289283 <= x < 2.582235 ) weight2=0.608003;
- if(2.582235 <= x < 2.912674 ) weight2=0.611705;
- if(2.912674 <= x < 3.285398 ) weight2=0.610086;
- if(3.285398 <= x < 3.705818 ) weight2=0.605015;
- if(3.705818 <= x < 4.180038 ) weight2=0.596299;
- if(4.180038 <= x < 4.714942 ) weight2=0.590727;
- if(4.714942 <= x < 5.318296 ) weight2=0.585358;
- if(5.318296 <= x < 5.998859 ) weight2=0.585257;
- if(5.998859 <= x < 6.766511 ) weight2=0.580812;
- if(6.766511 <= x < 7.632396 ) weight2=0.576207;
- if(7.632396 <= x < 8.609086 ) weight2=0.575912;
- if(8.609086 <= x < 9.710759 ) weight2=0.558718;
- if(9.710759 <= x < 10.953409 ) weight2=0.555625;
- if(10.953409 <= x < 12.355077 ) weight2=0.558886;
- if(12.355077 <= x < 13.936111 ) weight2=0.545318;
- if(13.936111 <= x < 15.719464 ) weight2=0.517607;
- if(15.719464 <= x < 17.731026 ) weight2=0.512366;
- if(17.731026 <= x < 20.000000 ) weight2=0.497034;
-
- }
+ weight=CalculateWeight(111, x);
+
}
- if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC_weight->Fill(fPtE, 1./weight2);
- //-----------------------------------------------------------------------------------------------------------
- //end of weight
+ if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC_weight->Fill(fPtE, (fNonHFE->GetNULS())*1./weight);
+
+ //-----------------------------------------------------------------------------------------------------------
+ //end of weight
}//partner found same as track
}//loop in all partner
}//track
}//is ULS
+ //----------------------------------------------------------------------------
+ //end of part to check other way to calculate efficiency
+ //----------------------------------------------------------------------------
}//IsTPConly
}
}
}
+/*
+Bool_t AliAnalysisTaskEMCalHFEpA::ContainsBadChannel(TString calorimeter,UShort_t* cellList, Int_t nCells)
+{
+ // Check that in the cluster cells, there is no bad channel of those stored
+ // in fEMCALBadChannelMap
+ // adapted from AliCalorimeterUtils
+
+ //if (!fRemoveBadChannels) return kFALSE;
+ //printf("fEMCALBadChannelMap %p, fPHOSBadChannelMap %p \n",fEMCALBadChannelMap,fPHOSBadChannelMap);
+ if( !fEMCALRecoUtils->GetEMCALChannelStatusMap(0)) return kFALSE;
+
+ //Int_t icol = -1;
+ //Int_t irow = -1;
+ //Int_t imod = -1;
+ for(Int_t iCell = 0; iCell<nCells; iCell++){
+
+ //Get the column and row
+ if(calorimeter == "EMCAL"){
+ return fEMCALRecoUtils->ClusterContainsBadChannel((AliEMCALGeometry*)fEMCALGeo,cellList,nCells);
+ }
+ else return kFALSE;
+
+ }// cell cluster loop
+
+ return kFALSE;
+
+}
+*/
+/*
+
+//________________________________________________________________________________
+TArrayI AliAnalysisTaskEMCalHFEpA::GetTriggerPatches(Bool_t IsEventEMCALL0, Bool_t IsEventEMCALL1)
+{
+ // Select the patches that triggered
+ // Depend on L0 or L1
+
+ // some variables
+ //Int_t trigtimes[30], globCol, globRow,ntimes, i;
+ Int_t globCol, globRow;
+
+ Int_t absId = -1; //[100];
+ Int_t nPatch = 0;
+
+ TArrayI patches(0);
+
+ // get object pointer
+ AliVCaloTrigger *caloTrigger = InputEvent()->GetCaloTrigger( "EMCAL" );
+
+ // class is not empty
+ if( caloTrigger->GetEntries() > 0 )
+ {
+ // must reset before usage, or the class will fail
+ caloTrigger->Reset();
+
+ // go throuth the trigger channels
+ while( caloTrigger->Next() )
+ {
+ // get position in global 2x2 tower coordinates
+ caloTrigger->GetPosition( globCol, globRow );
+
+ //L0
+ if(IsEventEMCALL0)
+ {
+ //not implemented
+ }
+
+
+ else if(IsEventEMCALL1) // L1
+ {
+ Int_t bit = 0;
+ caloTrigger->GetTriggerBits(bit);
+
+ Bool_t isEGA = ((bit >> fBitEGA) & 0x1);
+ //Bool_t isEJE = ((bit >> fBitEJE) & 0x1) && IsEventEMCALL1Jet () ;
+
+ if(!isEGA) continue;
+
+ Int_t patchsize = -1;
+ if(isEGA) patchsize = 2;
+ //else if (isEJE) patchsize = 16;
+
+ // add 2x2 (EGA) or 16x16 (EJE) patches
+ for(Int_t irow=0; irow < patchsize; irow++)
+ {
+ for(Int_t icol=0; icol < patchsize; icol++)
+ {
+ GetCaloUtils()->GetEMCALGeometry()->GetAbsFastORIndexFromPositionInEMCAL(globCol+icol,globRow+irow, absId);
+ //printf("pass the time cut globCol %d, globRow %d absId %d\n",globCol,globRow, absIDTrig[nTrig]);
+ patches.Set(nPatch+1); // Set size of this array to nPatch+1 ints.
+ patches.AddAt(absId,nPatch++); //Add Int_t absId at position nPatch++
+ }
+ }
+
+ } // L1
+
+ } // trigger iterator
+ } // go thorough triggers
+
+ printf("N patches %d, test %d,first %d, last %d\n",patches.GetSize(), nPatch, patches.At(0), patches.At(patches.GetSize()-1));
+
+ return patches;
+}
+ */
+Double_t AliAnalysisTaskEMCalHFEpA::CalculateWeight(Int_t pdg_particle, Double_t x)
+{
+ //weight for d3 based on MinJung parametrization //sent by Jan
+ Double_t weight=1;
+ if(pdg_particle==111){
+ if(x>= 0.100000 && x < 0.112797 ) weight=1.262120;
+ if(x>= 0.112797 && x < 0.127231 ) weight=1.277765;
+ if(x>= 0.127231 && x < 0.143512 ) weight=1.295605;
+ if(x>= 0.143512 && x < 0.161877 ) weight=1.318155;
+ if(x>= 0.161877 && x < 0.182592 ) weight=1.348693;
+ if(x>= 0.182592 && x < 0.205957 ) weight=1.388636;
+ if(x>= 0.205957 && x < 0.232313 ) weight=1.439122;
+ if(x>= 0.232313 && x < 0.262041 ) weight=1.497452;
+ if(x>= 0.262041 && x < 0.295573 ) weight=1.559409;
+ if(x>= 0.295573 && x < 0.333397 ) weight=1.615169;
+ if(x>= 0.333397 && x < 0.376060 ) weight=1.654954;
+ if(x>= 0.376060 && x < 0.424183 ) weight=1.668753;
+ if(x>= 0.424183 && x < 0.478465 ) weight=1.652225;
+ if(x>= 0.478465 && x < 0.539692 ) weight=1.603119;
+ if(x>= 0.539692 && x < 0.608754 ) weight=1.526049;
+ if(x>= 0.608754 && x < 0.686654 ) weight=1.426724;
+ if(x>= 0.686654 && x < 0.774523 ) weight=1.312684;
+ if(x>= 0.774523 && x < 0.873636 ) weight=1.195395;
+ if(x>= 0.873636 && x < 0.985432 ) weight=1.086264;
+ if(x>= 0.985432 && x < 1.111534 ) weight=0.993666;
+ if(x>= 1.111534 && x < 1.253773 ) weight=0.922587;
+ if(x>= 1.253773 && x < 1.414214 ) weight=0.875739;
+ if(x>= 1.414214 && x < 1.595185 ) weight=0.852181;
+ if(x>= 1.595185 && x < 1.799315 ) weight=0.847828;
+ if(x>= 1.799315 && x < 2.029567 ) weight=0.863875;
+ if(x>= 2.029567 && x < 2.289283 ) weight=0.899112;
+ if(x>= 2.289283 && x < 2.582235 ) weight=0.955194;
+ if(x>= 2.582235 && x < 2.912674 ) weight=1.033824;
+ if(x>= 2.912674 && x < 3.285398 ) weight=1.133714;
+ if(x>= 3.285398 && x < 3.705818 ) weight=1.259471;
+ if(x>= 3.705818 && x < 4.180038 ) weight=1.406883;
+ if(x>= 4.180038 && x < 4.714942 ) weight=1.578923;
+ if(x>= 4.714942 && x < 5.318296 ) weight=1.778513;
+ if(x>= 5.318296 && x < 5.998859 ) weight=2.001171;
+ if(x>= 5.998859 && x < 6.766511 ) weight=2.223161;
+ if(x>= 6.766511 && x < 7.632396 ) weight=2.449445;
+ if(x>= 7.632396 && x < 8.609086 ) weight=2.661734;
+ if(x>= 8.609086 && x < 9.710759 ) weight=2.851935;
+ if(x>= 9.710759 && x < 10.953409 ) weight=2.974319;
+ if(x>= 10.953409 && x < 12.355077 ) weight=3.106314;
+ if(x>= 12.355077 && x < 13.936111 ) weight=3.126815;
+ if(x>= 13.936111 && x < 15.719464 ) weight=3.150053;
+ if(x>= 15.719464 && x < 17.731026 ) weight=3.218509;
+ if(x>= 17.731026 && x < 20.000000 ) weight=3.252141;
+
+ }
+ else if(pdg_particle==221){
+ weight=1;
+ }
+ else weight=1;
+
+ return weight;
+
+}
+
+
+
+
//Lucile
class AliCaloTrackAODReader;
class AliCaloTrackReader;
+ //exotic
+class AliEMCALRecoUtils;
+class AliAODReader;
+class AliCalorimeterUtils;
+
+ // --- ROOT system ---
+#include <TObject.h>
+#include <TString.h>
+#include <TObjArray.h>
+class TArrayF;
+#include <TH2I.h>
+#include <TGeoMatrix.h>
+
+ //--- ANALYSIS system ---
+class AliVEvent;
+class AliVTrack;
+class AliAODPWG4Particle;
+class AliAODCaloCluster;
+class AliVCaloCells;
+class AliPHOSGeoUtils;
+class AliEMCALGeometry;
+#include "AliEMCALRecoUtils.h"
//______________________________________________________________________
//Getters
AliHFEpid *GetPID() const {return fPID;};
+ //bad channel
+ //AliEMCALGeometry * GetEMCALGeometry() const { return fEMCALGeo; }
+ //AliCalorimeterUtils * GetCaloUtils() const { return fCaloUtils; }
+ /*AliCalorimeterUtils * GetCaloUtils() { if(!fCaloUtils) fCaloUtils = new AliCalorimeterUtils();
+ return fCaloUtils ; }*/
+
//______________________________________________________________________
//______________________________________________________________________
void DiHadronCorrelation(AliVTrack *track, Int_t trackIndex);
//Find Mothers (Finde HFE and NonHFE from MC information)
Bool_t FindMother(Int_t mcIndex);
+ Bool_t ContainsBadChannel(TString calorimeter,UShort_t* cellList, Int_t nCells);
+ TArrayI GetTriggerPatches(Bool_t IsEventEMCALL0, Bool_t IsEventEMCALL1);
+ Double_t CalculateWeight(Int_t pdg_particle, Double_t x);
//Flags for specifics analysis
Bool_t fCorrelationFlag;
//Histograms
TH1F *fNevent;
+ TH1F *fNevent2;
TH1F *fPtElec_Inc;
TH1F *fPtPrim;
TH2F *fTOF01;
TH2F *fTOF02;
TH2F *fTOF03;
-
TH1F *fpid;
-
TH2F **fEoverP_pt;
TH2F **fEoverP_tpc;
-
TH1F **fTPC_pt;
TH2F **fTPC_p;
-
TH1F **fTPCnsigma_pt;
TH2F **fTPCnsigma_p;
TH2F *fTPCnsigma_pt_2D;
TH2F *fShowerShapeM20_EoverP;
TH2F *fShowerShape_ha;
TH2F *fShowerShape_ele;
-
TH2F *fTPCnsigma_eta;
TH2F *fTPCnsigma_phi;
-
-
TH1F **fECluster;
TH1F *fECluster_pure;
+ TH1F *fECluster_not_exotic;
+ TH1F *fECluster_not_exotic1;
+ TH1F *fECluster_not_exotic2;
+ TH1F *fECluster_exotic;
+ TH1F *fNCluster_pure;
+ TH1F *fNCluster_pure_aod;
+ TH2F *fNCluster_ECluster;
+ TH2F *fNcells_energy;
+ TH2F *fNcells_energy_elec_selected;
+ TH2F *fNcells_energy_not_exotic;
TH2F **fEtaPhi;
TH2F *fEtaPhi_num;
TH2F *fEtaPhi_den;
-
+ TH2F *fEtaPhi_data;
TH2F *fpt_reco_pt_MC_num;
TH2F *fpt_reco_pt_MC_den;
-
TH1F **fVtxZ;
-
TH1F *fVtxZ_new1;
TH1F *fVtxZ_new2;
TH1F *fVtxZ_new3;
TH1F *fVtxZ_new4;
+ TH1F *fzRes1;
+ TH1F *fzRes2;
+ TH1F *fSPD_track_vtx1;
+ TH1F *fSPD_track_vtx2;
+
TH1F **fEtad;
TH1F **fNTracks;
-
+ TH1F *fTrack_Multi;
TH2F **fNTracks_pt;
TH2F **fNTracks_eta;
TH2F **fNTracks_phi;
-
TH1F **fNClusters;
TH2F **fTPCNcls_EoverP;
TH2F **fTPCNcls_pid;
-
TH1F **fEta;
TH1F **fPhi;
TH1F **fR;
TH2F **fM20_EoverP;
TH2F **fTPCnsigma_eta_electrons;
TH2F **fTPCnsigma_eta_hadrons;
-
TH2F *fEoverP_pt_pions;
-
TH2F *ftpc_p_EoverPcut;
TH2F *fnsigma_p_EoverPcut;
-
TH2F *fEoverP_pt_pions2;
TH2F *fNcells_pt;
TH2F *fEoverP_pt_hadrons;
-
//Electron-Hadron Correlation Histograms
TH2F **fCEtaPhi_Inc;
-
TH2F **fCEtaPhi_ULS;
TH2F **fCEtaPhi_LS;
TH2F **fCEtaPhi_ULS_NoP;
TH2F **fCEtaPhi_LS_NoP;
-
TH2F **fCEtaPhi_ULS_Weight;
TH2F **fCEtaPhi_LS_Weight;
TH2F **fCEtaPhi_ULS_NoP_Weight;
TH2F **fCEtaPhi_LS_NoP_Weight;
-
TH1F *fInvMass;
TH1F *fInvMassBack;
TH1F *fDCA;
TH1F *fDCABack;
TH1F *fOpAngle;
TH1F *fOpAngleBack;
-
TH1F *fInvMass2;
TH1F *fInvMassBack2;
TH1F *fDCA2;
TH1F *fDCABack2;
TH1F *fOpAngle2;
TH1F *fOpAngleBack2;
-
Double_t fMassCut;
Double_t fEtaCutMin;
Double_t fEtaCutMax;
-
Double_t fdPhiCut;
Double_t fdEtaCut;
-
Double_t fEoverPCutMin;
Double_t fEoverPCutMax;
Double_t fM20CutMin;
Double_t fM20CutMax;
Double_t fM02CutMin;
Double_t fM02CutMax;
-
Double_t fAngleCut;
Double_t fChi2Cut;
Double_t fDCAcut;
Bool_t fAngleCutFlag;
Bool_t fChi2CutFlag;
Bool_t fDCAcutFlag;
-
//Correlation Function
Double_t fAssHadronPtMin;
Double_t fAssHadronPtMax;
-
- //Non-HFE reconstruction efficiency
+ //Non-HFE reconstruction efficiency
TH1F *fPtBackgroundBeforeReco;
TH1F *fPtBackgroundBeforeReco2;
TH1F *fPtBackgroundBeforeReco_weight;
TH1F *fPtBackgroundBeforeReco2_weight;
-
TH2F *fpT_m_electron;
TH2F *fpT_gm_electron;
-
TH1F *fPtBackgroundAfterReco;
-
Double_t fPtMinAsso;
Int_t fTpcNclsAsso;
-
//Tracking Efficiency
TH1F *fPtMCparticleAll;
TH1F *fPtMCparticleAll_nonPrimary;
TH1F *fPtMCparticleAlle_nonPrimary;
TH1F *fPtMCparticleAlle_Primary;
-
TH1F *fPtMCparticleReco;
TH1F *fPtMCparticleReco_nonPrimary;
TH1F *fPtMCparticleAllHfe1;
TH1F *fPtMCeta;
TH1F *fPtMCpi02;
TH1F *fPtMCeta2;
+ TH1F *fPtMCpi03;
+ TH1F *fPtMCeta3;
TH1F *fPtMC_EMCal_All;
TH1F *fPtMC_EMCal_Selected;
//Di-hadron correlation
TH2F **fCEtaPhi_Inc_DiHadron;
TH1F *fPtTrigger_Inc;
+
+ //AliEMCALRecoUtils *fEMCALRecoUtils; // EMCAL Reco Utils //exotic
+ //AliEMCALGeometry *fEMCALGeo ; //! EMCAL geometry pointer
+ //AliCalorimeterUtils *fCaloUtils;
+
+ Int_t fBitEGA; // Trigger bit on VCaloTrigger for EGA
+
+
//______________________________________________________________________
AliAnalysisTaskEMCalHFEpA(const AliAnalysisTaskEMCalHFEpA&); // not implemented
fQACollection->CreateTH2F("Kinkbefore", "Kink status before filter; p_{T} (GeV/c); kink status", 100, 0., 20., 3, -0.5, 2.5);
fQACollection->CreateTH2F("Kinkafter", "Kink status after filter; p_{T} (GeV/c); kink status", 100, 0., 20., 3, -0.5, 2.5);
fQACollection->CreateTH1F("HFPuzzle", "Source definition for electrons from HF", 11, -0.5, 10.5);
-
+ InitHistoRadius();
InitHistoITScluster();
InitContaminationQA();
fQA->Add(fQACollection);
if(TestBit(kTreeStream)){
fMCQA->EnableDebugStreamer();
}
+ if(TestBit(kWeightHist)){
+ fMCQA->EnableGetWeightHist();
+ }
fMCQA->CreatDefaultHistograms(fHistMCQA);
fMCQA->SetBackgroundWeightFactor(fElecBackgroundFactor[0][0][0],fBinLimit);
fQA->Add(fHistMCQA);
if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
fQACollection->Fill("Kinkafter", track->Pt(), kinkstatus);
+ // production radius
+ Double_t pradius[3] = {fCentralityF,track->Pt(),-1.};
+ Bool_t fill = kFALSE;
+ if(HasMCData()){
+ Int_t labelr = track->GetLabel();
+ if(labelr >=0) {
+ AliMCParticle *mctrackk = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(labelr));
+ if((mctrackk>=0) && (TMath::Abs(mctrackk->Particle()->GetPdgCode()) == 11)) {
+ Int_t motherlabel = mctrackk->Particle()->GetFirstMother();
+ if(motherlabel >= 0){
+ AliMCParticle *mothertrack = NULL;
+ if((mothertrack = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(motherlabel)))){
+ TParticle * mother = mothertrack->Particle();
+ Int_t pdgmother = mother->GetPdgCode();
+ if(pdgmother == 22) {
+ pradius[2] = mctrackk->Particle()->R();
+ fill = kTRUE;
+ }
+ }
+ }
+ }
+ }
+ if(fill) fQACollection->Fill("RadiusBefore", pradius);
+ }
+
// HFEcuts: ITS layers cuts
if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
+ // production vertex
+ if(fill) {
+ fQACollection->Fill("RadiusAfter", pradius);
+ FillProductionVertex(track);
+ }
+
// HFE cuts: TOF PID and mismatch flag
if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTOF, track)) continue;
}
if(HasMCData()){
- FillProductionVertex(track);
+ //FillProductionVertex(track);
if(fMCQA && signal){
fMCQA->SetCentrality(fCentralityF);
if(fisNonHFEsystematics){
//Fill additional containers for electron source distinction
Int_t elecSource = 0;
- elecSource = fMCQA->GetElecSource(mctrack->Particle());
+ elecSource = fMCQA->GetElecSource(mctrack->Particle(), kTRUE);
const Char_t *sourceName[kElecBgSpecies]={"Pion","Eta","Omega","Phi","EtaPrime","Rho"};
const Char_t *levelName[kBgLevels]={"Best","Lower","Upper"};
Int_t iName = 0;
mcsource = fBackgroundSubtraction->FindMother(mctrack->GetLabel(),indexmother);
if(fBackgroundSubtraction->GetLevelBack()>=0) {
if(fMCQA) {
- mcQAsource = fMCQA->GetElecSource(mctrack);
+ mcQAsource = fMCQA->GetElecSource(mctrack, kTRUE);
weightNonPhotonicFactor = TMath::Abs(fMCQA->GetWeightFactor(mctrack, fBackgroundSubtraction->GetLevelBack())); // positive:conversion e, negative: nonHFE
}
}
if(fisNonHFEsystematics){
//Fill additional containers for electron source distinction
- elecSource = fMCQA->GetElecSource(mctrack->Particle());
+ elecSource = fMCQA->GetElecSource(mctrack->Particle(), kTRUE);
const Char_t *sourceName[kElecBgSpecies]={"Pion","Eta","Omega","Phi","EtaPrime","Rho"};
const Char_t *levelName[kBgLevels]={"Best","Lower","Upper"};
Int_t iName = 0;
}
if(fisNonHFEsystematics){
//Fill additional containers for electron source distinction
- elecSource = fMCQA->GetElecSource(mctrack->Particle());
+ elecSource = fMCQA->GetElecSource(mctrack->Particle(), kTRUE);
const Char_t *sourceName[kElecBgSpecies]={"Pion","Eta","Omega","Phi","EtaPrime","Rho"};
const Char_t *levelName[kBgLevels]={"Best","Lower","Upper"};
Int_t iName = 0;
if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
fQACollection->Fill("Kinkafter", track->Pt(), kinkstatus);
+ // production radius
+ Double_t pradius[3] = {fCentralityF,track->Pt(),-1.};
+ Bool_t fill = kFALSE;
+ if(HasMCData()){
+ Int_t labelr = track->GetLabel();
+ if(labelr>=0) {
+ AliAODMCParticle *mctrackk = dynamic_cast<AliAODMCParticle *>(fAODArrayMCInfo->At(labelr));
+ if(mctrackk && (TMath::Abs(mctrackk->GetPdgCode()) == 11)) {
+ Int_t motherlabel = mctrackk->GetMother();
+ if((motherlabel>=0) && (motherlabel < fAODArrayMCInfo->GetEntriesFast())) {
+ AliAODMCParticle *mcmothertrack = dynamic_cast<AliAODMCParticle *>(fAODArrayMCInfo->At(motherlabel));
+ if(mcmothertrack && (TMath::Abs(mcmothertrack->GetPdgCode()) == 22)) {
+ pradius[2] = TMath::Sqrt(mctrackk->Xv()*mctrackk->Xv()+mctrackk->Yv()*mctrackk->Yv());
+ fill = kTRUE;
+ }
+ }
+ }
+ }
+ if(fill) fQACollection->Fill("RadiusBefore", pradius);
+ }
+
// HFEcuts: ITS layers cuts
if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
+
+ // production radius
+ if(fill) fQACollection->Fill("RadiusAfter", pradius);
// HFE cuts: TOF PID and mismatch flag
if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTOF, track)) continue;
mcsource = fBackgroundSubtraction->FindMother(TMath::Abs(track->GetLabel()),indexmother);
if(fBackgroundSubtraction->GetLevelBack()>=0) {
if(fMCQA) {
- mcQAsource = fMCQA->GetElecSource(mctrack);
+ mcQAsource = fMCQA->GetElecSource(mctrack, kTRUE);
weightNonPhotonicFactor = TMath::Abs(fMCQA->GetWeightFactor(mctrack, fBackgroundSubtraction->GetLevelBack())); // positive:conversion e, negative: nonHFE
+ //weightNonPhotonicFactor = TMath::Abs(fMCQA->GetWeightFactorForPrimaries(mctrack, fBackgroundSubtraction->GetLevelBack())); // positive:conversion e, negative: nonHFE
}
}
}
mcsource = fBackgroundSubtraction->FindMother(TMath::Abs(track->GetLabel()),indexmother);
if(fBackgroundSubtraction->GetLevelBack()>=0) {
if(fMCQA) {
- mcQAsource = fMCQA->GetElecSource(mctrack);
+ mcQAsource = fMCQA->GetElecSource(mctrack, kTRUE);
weightNonPhotonicFactor = TMath::Abs(fMCQA->GetWeightFactor(mctrack, fBackgroundSubtraction->GetLevelBack())); // positive:conversion e, negative: nonHFE
}
}
}
}
+}
+//____________________________________________________________
+void AliAnalysisTaskHFE::InitHistoRadius(){
+ //
+
+ // Before
+ const Int_t kNDim = 3;
+ const Int_t kNBins[kNDim] = {11, 35, 100};
+ const Double_t kMin[kNDim] = {0,0.1,0.01};
+ const Double_t kMax[kNDim] = {11,20.,500.};
+ fQACollection->CreateTHnSparse("RadiusBefore", "RadiusBefore; centrality; p_{T} (GeV/c);radius [cm]", kNDim, kNBins, kMin, kMax);
+ fQACollection->BinLogAxis("RadiusBefore", 1);
+ fQACollection->BinLogAxis("RadiusBefore", 2);
+
+ // After
+ fQACollection->CreateTHnSparse("RadiusAfter", "RadiusAfter; centrality; p_{T} (GeV/c);radius [cm]", kNDim, kNBins, kMin, kMax);
+ fQACollection->BinLogAxis("RadiusAfter", 1);
+ fQACollection->BinLogAxis("RadiusAfter", 2);
+
+
}
//____________________________________________________________
// printf("TRIGGERS %s \n",ev->GetFiredTriggerClasses().Data());
- fTRDTriggerAnalysismb->CalcTriggers(ev);
+ if(fWhichTRDTrigger==4) fTRDTriggerAnalysistrg->CalcTriggers(ev);
+ else fTRDTriggerAnalysismb->CalcTriggers(ev);
+
// mb selection of WU events
if(fWhichTRDTrigger==1)
// trginput=ev->GetHeader()->GetL1TriggerInputs() & (1 << 10); // HSE
// if(trginput==1024)
// if(fTRDTriggerAnalysismb->CheckCondition(AliTRDTriggerAnalysis::kHSE))
-// if(fTRDTriggerAnalysismb->HasFired(AliTRDTriggerAnalysis::kHSE))
- if(fTRDTriggerAnalysismb->HasTriggered(AliTRDTriggerAnalysis::kHSE))
+ // if(fTRDTriggerAnalysismb->HasTriggered(AliTRDTriggerAnalysis::kHSE))
+
+// if(fTRDTriggerAnalysismb->HasFired(AliTRDTriggerAnalysis::kHSE)) // for mb analysis
+ if(fTRDTriggerAnalysistrg->HasFired(AliTRDTriggerAnalysis::kHSE)) // just to check clean-up effect
+ {
+ // check if pre-trigger fired
+ if((ev->IsTriggerClassFired("CINT7WU-B-NOPF-ALL"))||(ev->IsTriggerClassFired("CINT7WU-S-NOPF-ALL"))||(ev->IsTriggerClassFired("CINT8WU-S-NOPF-ALL")))
{
DrawTRDTrigger(ev);
DrawTRDTriggerAnalysis(ev);
return kTRUE;
} else return kFALSE;
+ }
}// else return kFALSE;
// }
if(fWhichTRDTrigger==5)
// printf("triggerinput %i \n",trginput);
// if(trginput==4096)
// if(fTRDTriggerAnalysismb->CheckCondition(AliTRDTriggerAnalysis::kHQU))
-// if(fTRDTriggerAnalysismb->HasFired(AliTRDTriggerAnalysis::kHQU))
- if(fTRDTriggerAnalysismb->HasTriggered(AliTRDTriggerAnalysis::kHQU))
+// if(fTRDTriggerAnalysismb->HasTriggered(AliTRDTriggerAnalysis::kHQU))
+ if(fTRDTriggerAnalysismb->HasFired(AliTRDTriggerAnalysis::kHQU)) // for mb analysis
{
- DrawTRDTrigger(ev);
- DrawTRDTriggerAnalysis(ev);
- return kTRUE;
- } else return kFALSE;
+ // check if pre-trigger fired
+ if((ev->IsTriggerClassFired("CINT7WU-B-NOPF-ALL"))||(ev->IsTriggerClassFired("CINT7WU-S-NOPF-ALL"))||(ev->IsTriggerClassFired("CINT8WU-S-NOPF-ALL")))
+ {
+ DrawTRDTrigger(ev);
+ DrawTRDTriggerAnalysis(ev);
+ return kTRUE;
+ } else return kFALSE;
+ }
} //else return kFALSE;
// }
-
+
+
+
+
+
return trdtrgevent;
// Check TRD trigger; pPb settings
//
- fTRDTriggerAnalysistrg->CalcTriggers(ev);
+ if(fWhichTRDTrigger<10) fTRDTriggerAnalysistrg->CalcTriggers(ev);
+ else fTRDTriggerAnalysismb->CalcTriggers(ev);
// HSE cleanup
if(fWhichTRDTrigger==6)
{
- if(!fTRDTriggerAnalysistrg->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHSE))
- {
- return kFALSE;
- }
- else
+ if(fTRDTriggerAnalysistrg->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHSE)) // for rare period physics analysis
{
// DrawTRDTrigger(ev);
DrawTRDTriggerAnalysis(ev);
return kTRUE;
- }
+ } else return kFALSE;
}
if(fWhichTRDTrigger==7)
{
- if(!fTRDTriggerAnalysistrg->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHQU))
- {
- return kFALSE;
- }
- else
+ if(fTRDTriggerAnalysistrg->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHQU)) // for rare period physics analysis
{
// DrawTRDTrigger(ev);
DrawTRDTriggerAnalysis(ev);
return kTRUE;
- }
+ } else return kFALSE;
}
// HSE or HQU cleanup
}
}
+ // HEE cleanup
+ if(fWhichTRDTrigger==9)
+ {
+
+ if(fTRDTriggerAnalysistrg->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHEE)) // for rare period physics analysis
+ {
+ // DrawTRDTrigger(ev);
+ DrawTRDTriggerAnalysis(ev);
+ return kTRUE;
+ } else return kFALSE;
+ }
+
+
+ if(fWhichTRDTrigger==11)
+ {
+ if(fTRDTriggerAnalysismb->HasTriggered(AliTRDTriggerAnalysis::kHSE))
+ {
+ // DrawTRDTrigger(ev);
+ DrawTRDTriggerAnalysis(ev);
+ return kTRUE;
+ } else return kFALSE;
+ }
+ if(fWhichTRDTrigger==12)
+ {
+ if(fTRDTriggerAnalysismb->HasTriggered(AliTRDTriggerAnalysis::kHQU))
+ {
+ // DrawTRDTrigger(ev);
+ DrawTRDTriggerAnalysis(ev);
+ return kTRUE;
+ } else return kFALSE;
+ }
+ if(fWhichTRDTrigger==13)
+ {
+ if(fTRDTriggerAnalysismb->HasTriggered(AliTRDTriggerAnalysis::kHEE))
+ {
+ // DrawTRDTrigger(ev);
+ DrawTRDTriggerAnalysis(ev);
+ return kTRUE;
+ } else return kFALSE;
+ }
+
return kFALSE;
}
void RejectionPileUpVertexRangeEventCut();
void SelectSpecialTrigger(const Char_t *trgclust, Int_t runMin = 0, Int_t runMax = 999999999);
void SetDebugStreaming() {SetBit(kTreeStream);};
+ void SetWeightHist() {SetBit(kWeightHist);};
Bool_t CheckTRDTriggerESD(AliESDEvent *ev);
Bool_t CheckTRDTrigger(AliVEvent *ev);
void DrawTRDTrigger(AliESDEvent *ev);
kHasMCdata = BIT(19),
kAODanalysis = BIT(20),
kBackgroundInitialized = BIT(21),
- kTreeStream = BIT(22)
+ kTreeStream = BIT(22),
+ kWeightHist = BIT(23)
};
Bool_t FillProductionVertex(const AliVParticle * const track) const;
void MakeParticleContainer();
void MakeEventContainer();
void InitHistoITScluster();
+ void InitHistoRadius();
void InitContaminationQA();
const Char_t *GetSpecialTrigger(Int_t run);
void ProcessMC();
,fIncRecoMaxE(0)
,fPhoRecoMaxE(0)
,fSamRecoMaxE(0)
- ,fPhoVertexReco_HFE(0)
+ ,fPhoVertexReco_TPC(0)
+ ,fPhoVertexReco_TPC_Invmass(0)
,fPhoVertexReco_EMCal(0)
,fPhoVertexReco_Invmass(0)
,fPhoVertexReco_step0(0)
,fFakeRejection0(0)
,fFakeRejection1(0)
,fFakeRejection2(0)
+ ,EopFake(0)
+ ,EopTrue(0)
+ ,MatchFake(0)
+ ,MatchTrue(0)
//,fnSigEtaCorr(NULL)
{
//Named constructor
,fIncRecoMaxE(0)
,fPhoRecoMaxE(0)
,fSamRecoMaxE(0)
- ,fPhoVertexReco_HFE(0)
+ ,fPhoVertexReco_TPC(0)
+ ,fPhoVertexReco_TPC_Invmass(0)
,fPhoVertexReco_EMCal(0)
,fPhoVertexReco_Invmass(0)
,fPhoVertexReco_step0(0)
,fFakeRejection0(0)
,fFakeRejection1(0)
,fFakeRejection2(0)
+ ,EopFake(0)
+ ,EopTrue(0)
+ ,MatchFake(0)
+ ,MatchTrue(0)
//,fnSigEtaCorr(NULL)
{
//Default constructor
{
Int_t label = TMath::Abs(track->GetLabel());
//mcLabel = track->GetLabel();
- mcLabel = fabs(track->GetLabel()); // check for conv. issue
+ mcLabel = abs(track->GetLabel()); // check for conv. issue
if(mcLabel>-1)
{
if(nITS<2.5)continue;
if(nTPCcl<100)continue;
- if(mcPho)fPhoVertexReco_HFE->Fill(track->Pt(),conv_proR,mcWeight); // check MC vertex
CheckNclust->Fill(nTPCcl);
CheckNits->Fill(nITS);
fIncpTMCpho_pi0e_TPC->Fill(phoval,mcWeight);
if(fFlagPhotonicTPC) fPhoElecPtMC_pi0e_TPC->Fill(phoval,mcWeight);
if(fFlagConvinatTPC) fSameElecPtMC_pi0e_TPC->Fill(phoval,mcWeight);
+ fPhoVertexReco_TPC->Fill(track->Pt(),conv_proR,mcWeight); // check MC vertex
+ if(fFlagPhotonicTPC)fPhoVertexReco_TPC_Invmass->Fill(track->Pt(),conv_proR,mcWeight); // check MC vertex
}
if(mcOrgEta)
{
// check fake rejection
if(mcOrgPi0 || mcOrgEta)
{
+ double phiacc0 = 80.0/180.0*acos(-1);
+ double phiacc1 = 180.0/180.0*acos(-1);
int TrStat = 0;
- if(track->GetLabel()>0)TrStat = 1;
- fFakeRejection0->Fill(TrStat,pt,mcWeight);
- if(eop>-1.0)fFakeRejection1->Fill(TrStat,pt,mcWeight); // have match
- if(eop>0.9 && eop<1.3)fFakeRejection2->Fill(TrStat,pt,mcWeight); // have PID
+ if(phi>phiacc0 && phi<phiacc1)
+ {
+ if(track->GetLabel()>0)TrStat = 1;
+ fFakeRejection0->Fill(TrStat,pt,mcWeight);
+ if(eop>-1.0)fFakeRejection1->Fill(TrStat,pt,mcWeight); // have match
+ if(eop>0.9 && eop<1.3)fFakeRejection2->Fill(TrStat,pt,mcWeight); // have PID
+
+ if(TrStat==0)
+ {
+ EopFake->Fill(pt,eop);
+ MatchFake->Fill(pt,rmatch);
+ }
+ else
+ {
+ EopTrue->Fill(pt,eop);
+ MatchTrue->Fill(pt,rmatch);
+ }
+
+ }
}
//+++++++ E/p cut ++++++++++++++++
fSamRecoMaxE = new TH2D("fSamRecoMaxE","Same",10,0,100,100,0,500);
fOutputList->Add(fSamRecoMaxE);
- fPhoVertexReco_HFE = new TH2D("fPhoVertexReco_HFE","photon production Vertex mass selection",40,0,20,250,0,50);
- fPhoVertexReco_HFE->Sumw2();
- fOutputList->Add(fPhoVertexReco_HFE);
+ fPhoVertexReco_TPC = new TH2D("fPhoVertexReco_TPC","photon production Vertex mass selection TPC",40,0,20,250,0,50);
+ fPhoVertexReco_TPC->Sumw2();
+ fOutputList->Add(fPhoVertexReco_TPC);
+
+ fPhoVertexReco_TPC_Invmass = new TH2D("fPhoVertexReco_TPC_Invmass","photon production Vertex mass selection TPC Invmass",40,0,20,250,0,50);
+ fPhoVertexReco_TPC_Invmass->Sumw2();
+ fOutputList->Add(fPhoVertexReco_TPC_Invmass);
fPhoVertexReco_EMCal = new TH2D("fPhoVertexReco_EMCal","photon production Vertex mass selection",40,0,20,250,0,50);
fPhoVertexReco_EMCal->Sumw2();
fOutputList->Add(fpair);
fFakeRejection0 = new TH2D("fFakeRejection0","TPC PID",2,-0.5,1.5,100,0,20);
+ fFakeRejection0->Sumw2();
fOutputList->Add(fFakeRejection0);
fFakeRejection1 = new TH2D("fFakeRejection1","TPC PID + Tr match",2,-0.5,1.5,100,0,20);
+ fFakeRejection1->Sumw2();
fOutputList->Add(fFakeRejection1);
fFakeRejection2 = new TH2D("fFakeRejection2","TPC PID + Tr match + E/p",2,-0.5,1.5,100,0,20);
+ fFakeRejection2->Sumw2();
fOutputList->Add(fFakeRejection2);
+ EopFake = new TH2D("EopFake","negative track Eop",200,0,20,200,0,2);
+ EopFake->Sumw2();
+ fOutputList->Add(EopFake);
+
+ EopTrue = new TH2D("EopTrue","true track Eop",200,0,20,200,0,2);
+ EopTrue->Sumw2();
+ fOutputList->Add(EopTrue);
+
+ MatchFake = new TH2D("MatchFake","negative track Match",200,0,20,100,0,0.05);
+ MatchFake->Sumw2();
+ fOutputList->Add(MatchFake);
+
+ MatchTrue = new TH2D("MatchTrue","true track Match",200,0,20,100,0,05);
+ MatchTrue->Sumw2();
+ fOutputList->Add(MatchTrue);
+
PostData(1,fOutputList);
}
TH2D *fIncRecoMaxE;
TH2D *fPhoRecoMaxE;
TH2D *fSamRecoMaxE;
- TH2D *fPhoVertexReco_HFE;
+ TH2D *fPhoVertexReco_TPC;
+ TH2D *fPhoVertexReco_TPC_Invmass;
TH2D *fPhoVertexReco_EMCal;
TH2D *fPhoVertexReco_Invmass;
TH2D *fPhoVertexReco_step0;
TH2D *fFakeRejection0;
TH2D *fFakeRejection1;
TH2D *fFakeRejection2;
+ TH2D *EopFake;
+ TH2D *EopTrue;
+ TH2D *MatchFake;
+ TH2D *MatchTrue;
//<----- correction
TGraphErrors *fnSigEtaCorr[7];
,fSelectCategory1tracks(kTRUE)
,fSelectCategory2tracks(kFALSE)
,fITSmeanShift(0.)
+ ,fITSnSigmaHigh(3.)
+ ,fITSnSigmaLow(-3.)
+ ,fminPt(0.1)
,fArraytrack (NULL)
,fCounterPoolBackground (0)
,fnumberfound (0)
,fSelectCategory1tracks(kTRUE)
,fSelectCategory2tracks(kFALSE)
,fITSmeanShift(0.)
+ ,fITSnSigmaHigh(3.)
+ ,fITSnSigmaLow(-3.)
+ ,fminPt(0.1)
,fArraytrack (NULL)
,fCounterPoolBackground (0)
,fnumberfound (0)
,fSelectCategory1tracks(ref.fSelectCategory1tracks)
,fSelectCategory2tracks(ref.fSelectCategory2tracks)
,fITSmeanShift(ref.fITSmeanShift)
+ ,fITSnSigmaHigh(ref.fITSnSigmaHigh)
+ ,fITSnSigmaLow(ref.fITSnSigmaLow)
+ ,fminPt(ref.fminPt)
,fArraytrack (NULL)
,fCounterPoolBackground (0)
,fnumberfound (0)
Double_t maxradius = 100.0;
Double_t binLimradius[nBinsradius+1];
for(Int_t i=0; i<=nBinsradius; i++) binLimradius[i]=(Double_t)minradius + (maxradius-minradius)/nBinsradius*(Double_t)i ;
- const Int_t nDimIncElectronRadius = 3; // centrality, pt_inc, radius
- const Int_t nBinsIncElectronRadius[nDimIncElectronRadius] = {nBinsC, fPtBinning.GetSize()-1, nBinsradius};
+ const Int_t nDimIncElectronRadius = 4; // centrality, pt_inc, radius
+ const Int_t nBinsIncElectronRadius[nDimIncElectronRadius] = {nBinsC, fPtBinning.GetSize()-1, nBinsradius, nBinsSource};
fIncElectronRadius = new THnSparseF("fIncElectronRadius", "fIncElectronRadius", nDimIncElectronRadius, nBinsIncElectronRadius);
fIncElectronRadius->SetBinEdges(0,binLimC);
fIncElectronRadius->SetBinEdges(1,fPtBinning.GetArray());
fIncElectronRadius->SetBinEdges(2,binLimradius);
+ fIncElectronRadius->SetBinEdges(3,binLimSource);
fRecElectronRadius = new THnSparseF("fRecElectronRadius", "fRecElectronRadius", nDimIncElectronRadius, nBinsIncElectronRadius);
fRecElectronRadius->SetBinEdges(0,binLimC);
fRecElectronRadius->SetBinEdges(1,fPtBinning.GetArray());
fRecElectronRadius->SetBinEdges(2,binLimradius);
+ fRecElectronRadius->SetBinEdges(2,binLimSource);
/*
// ee angle Unlike Sign
if(fnumberfound > 0) //!count only events with an inclusive electron
{
- Double_t valueAssElectron[4] = { static_cast<Double_t>(binct), -1, -1}; //Centrality Pt Source
+ Double_t valueAssElectron[4] = { binct, -1, -1}; //Centrality Pt Source
Int_t iTrack2 = 0;
Int_t indexmother2 = -1;
AliVTrack *track2 = 0x0;
fkPIDRespons = fPIDBackground->GetPIDResponse();
//Set Fill-Arrays for THnSparse
- Double_t valueIncElectron[4] = { static_cast<Double_t>(binct), track1->Pt(), static_cast<Double_t>(source), track1->Eta()}; //Centrality Pt Source P
- Double_t valueSign[9] = { deltaphi, static_cast<Double_t>(binct), track1->Pt(), -1, static_cast<Double_t>(source), -1, -1, track1->Eta(), -1}; //DeltaPhi Centrality Pt InvariantMass Source Angle Pt
+ Double_t valueIncElectron[4] = { binct, track1->Pt(), source, track1->Eta()}; //Centrality Pt Source P
+ Double_t valueSign[9] = { deltaphi, binct, track1->Pt(), -1, source, -1, -1, track1->Eta(), -1}; //DeltaPhi Centrality Pt InvariantMass Source Angle Pt
//Double_t valueAngle[3] = { -1, binct, source};
- Double_t valueradius[3] = { static_cast<Double_t>(binct), track1->Pt(), 0.}; //Angle Centrality Source
+ Double_t valueradius[4] = { binct, track1->Pt(), 0.,source};
+
Int_t pdg1 = CheckPdg(TMath::Abs(track1->GetLabel()));
Double_t radius = Radius(TMath::Abs(track1->GetLabel()));
fWeightsSource->Fill(source,mcQAsource);
fIncElectron->Fill(valueIncElectron,weight);
fnumberfound++;
- if(source == kElectronfromconversion) {
- fIncElectronRadius->Fill(valueradius,weight);
- //printf("radius %f\n",radius);
- }
+ fIncElectronRadius->Fill(valueradius,weight);
+
//printf(Form("Inclusive Pool: TrackNr. %d, fnumberfound %d \n", iTrack1, fnumberfound));
for(Int_t idex = 0; idex < fCounterPoolBackground; idex++){
switch(source){
case kElectronfromconversion:
valueSign[4] = kElectronfromconversionboth;
+ valueradius[3] = kElectronfromconversionboth;
break;
case kElectronfrompi0:
valueSign[4] = kElectronfrompi0both;
+ valueradius[3] = kElectronfrompi0both;
break;
case kElectronfrometa:
valueSign[4] = kElectronfrometaboth;
+ valueradius[3] = kElectronfrometaboth;
break;
};
}
// count unlike-sign matched pairs per inclusive based on mass cut
if(invmass < 0.14) {
countsMatchUnlikesign++;
- if(source == kElectronfromconversionboth) fRecElectronRadius->Fill(valueradius,weight);
+ fRecElectronRadius->Fill(valueradius,weight);
}
AliDebug(1, "Selected Unike sign");
}
}
// Fill counted
- Double_t valCountsLS[3] = { static_cast<Double_t>(binct), track1->Pt(), static_cast<Double_t>(countsMatchLikesign)},
- valCountsUS[3] = { static_cast<Double_t>(binct), track1->Pt(), static_cast<Double_t>(countsMatchUnlikesign)};
+ Double_t valCountsLS[3] = {binct, track1->Pt(), countsMatchLikesign},
+ valCountsUS[3] = {binct, track1->Pt(), countsMatchUnlikesign};
fUSmatches->Fill(valCountsUS);
fLSmatches->Fill(valCountsLS);
// electron candidates by the ITS
//
if(TMath::Abs(track->Pt()) > 0.3) return kFALSE;
- if(TMath::Abs(track->Pt()) < 0.1) return kFALSE;
+ if(TMath::Abs(track->Pt()) < fminPt) return kFALSE;
Int_t nclustersITS(0), nclustersOuter(0);
if(isAOD){
const AliAODTrack *aodtrack = static_cast<const AliAODTrack *>(track);
// Do ITS PID
Double_t nsigmaITS = fPIDBackground->GetPIDResponse()->NumberOfSigmasITS(track, AliPID::kElectron);
fHnsigmaITS->Fill(track->Pt(), nsigmaITS);
- if(TMath::Abs(nsigmaITS - fITSmeanShift) > 3.) return kFALSE;
+ if((nsigmaITS - fITSmeanShift) > fITSnSigmaHigh ) return kFALSE;
+ if((nsigmaITS - fITSmeanShift) < fITSnSigmaLow ) return kFALSE;
// if global track, we apply also TPC PID
return kTRUE;
}
// void SetMaxOpeningPhi (Double_t MaxOpeningPhi) { fMaxOpeningPhi = MaxOpeningPhi; };
void SetAlgorithmMA (Bool_t algorithmMA) { fAlgorithmMA = algorithmMA; };
void SetMassConstraint (Bool_t MassConstraint) { fSetMassConstraint = MassConstraint; };
- void SetITSMeanShift(Double_t meanshift) { fITSmeanShift = meanshift; }
+ void SetITSMeanShift (Double_t meanshift) { fITSmeanShift = meanshift; }
+ void SetITSnSigmaHigh (Double_t nSigmaHigh) { fITSnSigmaHigh = nSigmaHigh; }
+ void SetITSnSigmaLow (Double_t nSigmaLow) { fITSnSigmaLow = nSigmaLow; }
+ void SetminPt (Double_t minpt) { fminPt = minpt; }
void SelectCategory1Tracks(Bool_t doSelect = kTRUE) { fSelectCategory1tracks = doSelect; }
void SelectCategory2Tracks(Bool_t doSelect = kTRUE) { fSelectCategory2tracks = doSelect; }
Bool_t fSelectCategory1tracks; // Category 1 tracks: Standard track cuts
Bool_t fSelectCategory2tracks; // Category 2 tracks: tracks below 300 MeV/c
Double_t fITSmeanShift; // Shift of the mean in the ITS
+ Double_t fITSnSigmaHigh; // ITS n Sigma electron cut high (>0)
+ Double_t fITSnSigmaLow; // ITS n Sigma electron cut low (<0)
+ Double_t fminPt; // min pT cut for the associated leg
TArrayI *fArraytrack; //! list of associated tracks
Int_t fCounterPoolBackground; // number of associated electrons
Int_t fnumberfound; // number of inclusive electrons
#include "AliHFEsignalCuts.h"
#include "AliAODMCParticle.h"
#include "AliVTrack.h"
+#include "AliVCluster.h"
#include "AliAODVertex.h"
#include "AliHFEdebugTreeTaskAOD.h"
<< "eta=" << etamc
<< "phi=" << phimc
<< "pdg=" << pdg
- << "px=" << vx
- << "py=" << vy
- << "pz=" << vz
+ << "px=" << vx
+ << "py=" << vy
+ << "pz=" << vz
<< "ProductionVertex=" << eR
<< "motherPdg=" << motherPdg
<< "source=" << source
// Loop on reconstructed tracks
//
- TArrayI *arraytrack = new TArrayI(fInputEvent->GetNumberOfTracks());
+ TArrayI arraytrack(fInputEvent->GetNumberOfTracks());
Int_t counterdc=0;
AliAODTrack *track = 0x0;
Int_t nslicetemp=0;
Int_t trdlayer[6];
for(Int_t iplane = 0; iplane < 6; iplane++){
- trdlayer[iplane]=0;
+ trdlayer[iplane]=0;
}
for(Int_t iplane = 0; iplane < 6; iplane++){
- nslicetemp=0;
- for(Int_t b=(iplane*8);b<((iplane*8)+8);b++)
- {
- if(ntrackletsTRDPID>0)
- {
- if(arraytrdsignals[b]>0.001) nslicetemp++;
+ nslicetemp=0;
+ for(Int_t b=(iplane*8);b<((iplane*8)+8);b++){
+ if(ntrackletsTRDPID>0){
+ if(arraytrdsignals[b]>0.001) nslicetemp++;
+ }
}
- }
- if(nslicetemp > 0) trdlayer[iplane]=1;
+ if(nslicetemp > 0) trdlayer[iplane]=1;
}
// ITS and TRD acceptance maps
// Double counted
Int_t doublec = 0;
for(Int_t l=0; l < counterdc; l++){
- Int_t iTrack2 = arraytrack->At(l);
+ Int_t iTrack2 = arraytrack.At(l);
if(iTrack2==id) doublec=1;
}
//printf("Doublec %d\n",doublec);
// Add the id at this place
- arraytrack->AddAt(id,counterdc);
+ arraytrack.AddAt(id,counterdc);
counterdc++;
// Filter
filter[k]=0;
Int_t u = 1<<k;
if((track->TestFilterBit(u))) {
- filter[k] = 1;
+ filter[k] = 1;
}
}
Int_t filter0 = filter[0];
Int_t filter18 = filter[18];
Int_t filter19 = filter[19];
+ // EMCAL cluster
+ Double_t emcalEnergyOverP = -1.,
+ emcalNSigma = -1.,
+ showershape[4] = {0.,0.,0.,0.};
+ if(track->IsEMCAL()){
+ emcalNSigma = pid->NumberOfSigmasEMCAL(track, AliPID::kElectron, emcalEnergyOverP, &showershape[0]);
+ }
+
Int_t eventnb = fEventNumber;
//printf("track\n");
<< "CentralTrigger=" << isCentralTrigger
<< "SemicentralTrigger=" << isSemicentralTrigger
<< "EMCALtrigger=" << isEMCALTrigger
- << "run=" << run
- << "eventnb=" << eventnb
- << "vx=" << vtx[0]
+ << "run=" << run
+ << "eventnb=" << eventnb
+ << "vx=" << vtx[0]
<< "vy=" << vtx[1]
<< "vz=" << vtx[2]
- << "ncontrib=" << ncontrib
- << "id=" << id
- << "dc=" << doublec
+ << "ncontrib=" << ncontrib
+ << "id=" << id
+ << "dc=" << doublec
<< "p=" << momentum
- << "ptpc=" << momentumTPC
- << "pt=" << transversemomentum
- << "eta=" << eta
+ << "ptpc=" << momentumTPC
+ << "pt=" << transversemomentum
+ << "eta=" << eta
<< "phi=" << phi
- << "itsrefit=" << itsrefit
- << "tpcrefit=" << tpcrefit
- << "tofpid=" << tofpid
- << "nclustersTPC=" << nclustersTPCfit
- << "nclustersTPCall=" << nclustersTPCall
+ << "itsrefit=" << itsrefit
+ << "tpcrefit=" << tpcrefit
+ << "tofpid=" << tofpid
+ << "nclustersTPC=" << nclustersTPCfit
+ << "nclustersTPCall=" << nclustersTPCall
<< "nclustersTPCPID=" << nclustersTPCPID
<< "nclustersTPCshared=" << nclustersTPCshared
<< "ncrossedRowsTPC=" << ncrossedRowsTPC
<< "clusterRatioTPC=" << clusterRatioTPCfit
- << "clusterRatioTPCall=" << clusterRatioTPCall
+ << "clusterRatioTPCall=" << clusterRatioTPCall
<< "nclustersITS=" << nclustersITS
- << "nclustersTRD=" << nclustersTRD
+ << "nclustersTRD=" << nclustersTRD
<< "ntrackletsTRD=" << ntrackletsTRDPID
- << "nslicesTRD=" << nslicesTRD
+ << "nslicesTRD=" << nslicesTRD
<< "trd0=" << trdlayer[0]
<< "trd1=" << trdlayer[1]
<< "trd2=" << trdlayer[2]
<< "trd4=" << trdlayer[4]
<< "trd5=" << trdlayer[5]
<< "chi2TRD=" << chi2TRD
- << "statusITS0=" << statusL0
+ << "statusITS0=" << statusL0
<< "statusITS1=" << statusL1
- << "TOFsigmaEl=" << nSigmaTOF
+ << "TOFsigmaEl=" << nSigmaTOF
<< "TPCsigmaEl=" << nSigmaTPC
- << "TPCsigmaElcorr=" << nSigmaTPCcorr
+ << "TPCsigmaElcorr=" << nSigmaTPCcorr
<< "TPCdEdx=" << tPCdEdx
<< "TPCdEdxcorr=" << tPCdEdxcorr
- << "dcaR=" << dcaxy
+ << "dcaR=" << dcaxy
+ << "EMCALEOP=" << emcalEnergyOverP
+ << "EMCALsigmaEl=" << emcalNSigma
+ << "showershape0=" << showershape[0]
+ << "showershape1=" << showershape[1]
+ << "showershape2=" << showershape[2]
+ << "showershape3=" << showershape[3]
<< "dcaZ=" << dcaz
- << "kinkdaughter=" << kink
- << "kinkmother=" << kinkmotherpass
- << "nbofmotherkink=" << numberofmotherkink
- << "filter0=" << filter0
- << "filter1=" << filter1
- << "filter2=" << filter2
- << "filter3=" << filter3
- << "filter4=" << filter4
- << "filter5=" << filter5
- << "filter6=" << filter6
- << "filter7=" << filter7
- << "filter8=" << filter8
- << "filter9=" << filter9
- << "filter10=" << filter10
- << "filter11=" << filter11
- << "filter12=" << filter12
- << "filter13=" << filter13
- << "filter14=" << filter14
- << "filter15=" << filter15
- << "filter16=" << filter16
- << "filter17=" << filter17
- << "filter18=" << filter18
- << "filter19=" << filter19
- << "mcp=" << momentummc
+ << "kinkdaughter=" << kink
+ << "kinkmother=" << kinkmotherpass
+ << "nbofmotherkink=" << numberofmotherkink
+ << "filter0=" << filter0
+ << "filter1=" << filter1
+ << "filter2=" << filter2
+ << "filter3=" << filter3
+ << "filter4=" << filter4
+ << "filter5=" << filter5
+ << "filter6=" << filter6
+ << "filter7=" << filter7
+ << "filter8=" << filter8
+ << "filter9=" << filter9
+ << "filter10=" << filter10
+ << "filter11=" << filter11
+ << "filter12=" << filter12
+ << "filter13=" << filter13
+ << "filter14=" << filter14
+ << "filter15=" << filter15
+ << "filter16=" << filter16
+ << "filter17=" << filter17
+ << "filter18=" << filter18
+ << "filter19=" << filter19
+ << "mcp=" << momentummc
<< "mcpt=" << transversemomentummc
- << "mceta=" << etamc
+ << "mceta=" << etamc
<< "mcphi=" << phimc
<< "mcpdg=" << pdg
- << "source=" << source
- << "px=" << vx
+ << "source=" << source
+ << "px=" << vx
<< "py=" << vy
<< "pz=" << vz
- << "eR=" << eR
- << "mccharge=" << chargemc
- << "signal=" << signal
- << "\n";
+ << "eR=" << eR
+ << "mccharge=" << chargemc
+ << "signal=" << signal
+ << "\n";
//printf("after\n");
}
- arraytrack->~TArrayI();
fEventNumber++;
,fHfeImpactR(-999)
,fHfeImpactnsigmaR(-999)
,fTreeStream(NULL)
+ ,fGetWeightHist(kFALSE)
{
// Default constructor
for(Int_t mom = 0; mom < 9; mom++){
,fHfeImpactR(0)
,fHfeImpactnsigmaR(0)
,fTreeStream(NULL)
+ ,fGetWeightHist(kFALSE)
{
// Copy constructor
for(Int_t mom = 0; mom < 9; mom++){
fMCQACollection->CreateTH1F(Form("kaonspectraLog_centrbin%i",centbin), "kaon yields: MC p_{t} ", iBin[0],kPtbound[0], kPtbound[1], 1);
fMCQACollection->CreateTH1F(Form("k0LspectraLog_centrbin%i",centbin), "k0L yields: MC p_{t} ", iBin[0],kPtbound[0], kPtbound[1], 1);
+ fMCQACollection->CreateTH2F(Form("pionspectraLog2D_centrbin%i",centbin), "pion yields: MC p_{t} ", 32, -1.5, 30.5, iBin[0],kPtbound[0], kPtbound[1], 1);
+ fMCQACollection->CreateTH2F(Form("etaspectraLog2D_centrbin%i",centbin), "eta yields: MC p_{t} ", 32, -1.5, 30.5, iBin[0],kPtbound[0], kPtbound[1], 1);
+ fMCQACollection->CreateTH2F(Form("omegaspectraLog2D_centrbin%i",centbin), "omega yields: MC p_{t} ", 32, -1.5, 30.5, iBin[0],kPtbound[0], kPtbound[1], 1);
+ fMCQACollection->CreateTH2F(Form("phispectraLog2D_centrbin%i",centbin), "phi yields: MC p_{t} ", 32, -1.5, 30.5, iBin[0],kPtbound[0], kPtbound[1], 1);
+ fMCQACollection->CreateTH2F(Form("etapspectraLog2D_centrbin%i",centbin), "etap yields: MC p_{t} ", 32, -1.5, 30.5, iBin[0],kPtbound[0], kPtbound[1], 1);
+ fMCQACollection->CreateTH2F(Form("rhospectraLog2D_centrbin%i",centbin), "rho yields: MC p_{t} ", 32, -1.5, 30.5, iBin[0],kPtbound[0], kPtbound[1], 1);
+
fMCQACollection->CreateTH1F(Form("piondaughters_centrbin%i",centbin), "pion yields: MC p_{t} ", iBin[0],kPtbound[0], kPtbound[1], 1);
fMCQACollection->CreateTH1F(Form("etadaughters_centrbin%i",centbin), "eta yields: MC p_{t} ", iBin[0],kPtbound[0], kPtbound[1], 1);
fMCQACollection->CreateTH1F(Form("omegadaughters_centrbin%i",centbin), "omega yields: MC p_{t} ", iBin[0],kPtbound[0], kPtbound[1], 1);
fMCQACollection->CreateTH1F(Form("phidaughters_centrbin%i",centbin), "phi yields: MC p_{t} ", iBin[0],kPtbound[0], kPtbound[1], 1);
fMCQACollection->CreateTH1F(Form("etapdaughters_centrbin%i",centbin), "etap yields: MC p_{t} ", iBin[0],kPtbound[0], kPtbound[1], 1);
fMCQACollection->CreateTH1F(Form("rhodaughters_centrbin%i",centbin), "rho yields: MC p_{t} ", iBin[0],kPtbound[0], kPtbound[1], 1);
+
+ fMCQACollection->CreateTH1F(Form("pionspectraPrimary_centrbin%i",centbin), "pion yields: MC p_{t} ", iBin[0],kPtbound[0], kPtbound[1], 1);
+ fMCQACollection->CreateTH1F(Form("etaspectraPrimary_centrbin%i",centbin), "eta yields: MC p_{t} ", iBin[0],kPtbound[0], kPtbound[1], 1);
}
fQAhistos->Add(fMCQACollection->GetList());
}
//__________________________________________
-void AliHFEmcQA::CreateHistograms(Int_t kquark)
+void AliHFEmcQA::CreateHistograms(const Int_t kquark)
{
// create histograms
if(!mctrack0) continue;
// if(!fIsPbPb&&!fIsppMultiBin) fCentrality=0;
+ Float_t mcsource = 1;
+ if(fGetWeightHist) mcsource = GetElecSource(mctrack0, kFALSE);
if(TMath::Abs(mctrack0->PdgCode()) == 111) // pi0
{
if(TMath::Abs(AliHFEtools::GetRapidity(mcpart0))<0.8) {
+ if(mcpart0->IsPrimary()){
+ fMCQACollection->Fill(Form("pionspectraPrimary_centrbin%i",fCentrality),mctrack0->Pt());
+ }
fMCQACollection->Fill(Form("pionspectra_centrbin%i",fCentrality),mctrack0->Pt());
fMCQACollection->Fill(Form("pionspectraLog_centrbin%i",fCentrality),mctrack0->Pt());
+ fMCQACollection->Fill(Form("pionspectraLog2D_centrbin%i",fCentrality),mcsource,mctrack0->Pt());
if(imc>fMCEvent->GetNumberOfPrimaries()) {
fMCQACollection->Fill(Form("pionspectrasec_centrbin%i",fCentrality),mctrack0->Pt());
fMCQACollection->Fill(Form("pionspectraLogsec_centrbin%i",fCentrality),mctrack0->Pt());
else if(TMath::Abs(mctrack0->PdgCode()) == 221) // eta
{
if(TMath::Abs(AliHFEtools::GetRapidity(mcpart0))<0.8) {
+ if(mcpart0->IsPrimary()){
+ fMCQACollection->Fill(Form("etaspectraPrimary_centrbin%i",fCentrality),mctrack0->Pt());
+ }
fMCQACollection->Fill(Form("etaspectra_centrbin%i",fCentrality),mctrack0->Pt());
fMCQACollection->Fill(Form("etaspectraLog_centrbin%i",fCentrality),mctrack0->Pt());
+ fMCQACollection->Fill(Form("etaspectraLog2D_centrbin%i",fCentrality),mcsource,mctrack0->Pt());
if(imc>fMCEvent->GetNumberOfPrimaries()) {
fMCQACollection->Fill(Form("etaspectrasec_centrbin%i",fCentrality),mctrack0->Pt());
fMCQACollection->Fill(Form("etaspectraLogsec_centrbin%i",fCentrality),mctrack0->Pt());
if(TMath::Abs(AliHFEtools::GetRapidity(mcpart0))<0.8) {
fMCQACollection->Fill(Form("omegaspectra_centrbin%i",fCentrality),mctrack0->Pt());
fMCQACollection->Fill(Form("omegaspectraLog_centrbin%i",fCentrality),mctrack0->Pt());
+ fMCQACollection->Fill(Form("omegaspectraLog2D_centrbin%i",fCentrality),mcsource,mctrack0->Pt());
}
id1=mctrack0->GetFirstDaughter();
id2=mctrack0->GetLastDaughter();
if(TMath::Abs(AliHFEtools::GetRapidity(mcpart0))<0.8) {
fMCQACollection->Fill(Form("phispectra_centrbin%i",fCentrality),mctrack0->Pt());
fMCQACollection->Fill(Form("phispectraLog_centrbin%i",fCentrality),mctrack0->Pt());
+ fMCQACollection->Fill(Form("phispectraLog2D_centrbin%i",fCentrality),mcsource,mctrack0->Pt());
}
id1=mctrack0->GetFirstDaughter();
id2=mctrack0->GetLastDaughter();
if(TMath::Abs(AliHFEtools::GetRapidity(mcpart0))<0.8) {
fMCQACollection->Fill(Form("etapspectra_centrbin%i",fCentrality),mctrack0->Pt());
fMCQACollection->Fill(Form("etapspectraLog_centrbin%i",fCentrality),mctrack0->Pt());
+ fMCQACollection->Fill(Form("etapspectraLog2D_centrbin%i",fCentrality),mcsource,mctrack0->Pt());
}
id1=mctrack0->GetFirstDaughter();
id2=mctrack0->GetLastDaughter();
if(TMath::Abs(AliHFEtools::GetRapidity(mcpart0))<0.8) {
fMCQACollection->Fill(Form("rhospectra_centrbin%i",fCentrality),mctrack0->Pt());
fMCQACollection->Fill(Form("rhospectraLog_centrbin%i",fCentrality),mctrack0->Pt());
+ fMCQACollection->Fill(Form("rhospectraLog2D_centrbin%i",fCentrality),mcsource,mctrack0->Pt());
}
id1=mctrack0->GetFirstDaughter();
id2=mctrack0->GetLastDaughter();
}
//__________________________________________
-void AliHFEmcQA::GetQuarkKine(TParticle *part, Int_t iTrack, Int_t kquark)
+void AliHFEmcQA::GetQuarkKine(TParticle *part, Int_t iTrack, const Int_t kquark)
{
// get heavy quark kinematics
}
//__________________________________________
-void AliHFEmcQA::EndOfEventAna(Int_t kquark)
+void AliHFEmcQA::EndOfEventAna(const Int_t kquark)
{
// end of event analysis
}
//__________________________________________
-void AliHFEmcQA::GetHadronKine(TParticle* mcpart, Int_t kquark)
+void AliHFEmcQA::GetHadronKine(TParticle* mcpart, const Int_t kquark)
{
// decay electron kinematics
}
//__________________________________________
-void AliHFEmcQA::GetDecayedKine(TParticle* mcpart, Int_t kquark, Int_t kdecayed)
+void AliHFEmcQA::GetDecayedKine(TParticle* mcpart, const Int_t kquark, Int_t kdecayed)
{
// decay electron kinematics
}
//____________________________________________________________________
-void AliHFEmcQA::GetDecayedKine(AliAODMCParticle *mcpart, Int_t kquark, Int_t kdecayed)
+void AliHFEmcQA::GetDecayedKine(AliAODMCParticle *mcpart, const Int_t kquark, Int_t kdecayed)
{
// decay electron kinematics
}
//__________________________________________
-void AliHFEmcQA::HardScattering(Int_t kquark, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel)
+void AliHFEmcQA::HardScattering(const Int_t kquark, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel)
{
// mothertype -1 means this heavy quark coming from hard vertex
}
//__________________________________________
-Int_t AliHFEmcQA::GetElecSource(TParticle * const mcpart) const
+Int_t AliHFEmcQA::GetElecSource(TParticle * const mcpart, Bool_t isElec) const
{
// decay particle's origin
return -1;
}
- if ( TMath::Abs(mcpart->GetPdgCode()) != AliHFEmcQA::kElectronPDG ) return kMisID;
+ if(isElec) if ( TMath::Abs(mcpart->GetPdgCode()) != AliHFEmcQA::kElectronPDG ) return kMisID;
Int_t origin = -1;
Bool_t isFinalOpenCharm = kFALSE;
TParticle *partMother = mctrack->Particle();
TParticle *partMotherCopy = mctrack->Particle();
Int_t maPdgcode = partMother->GetPdgCode();
- Int_t grmaPdgcode;
+ Int_t grmaPdgcode = 0;
Int_t ggrmaPdgcode;
// if the mother is charmed hadron
if ( (int(TMath::Abs(grmaPdgcode)/100.)%10) == kBeauty || (int(TMath::Abs(grmaPdgcode)/1000.)%10) == kBeauty ) return kGammaB2M;
if ( (int(TMath::Abs(grmaPdgcode)/100.)%10) == kCharm || (int(TMath::Abs(grmaPdgcode)/1000.)%10) == kCharm ) return kGammaD2M;
- if ( TMath::Abs(grmaPdgcode) == 221 ) return kGammaEta2Pi0; //mj to remove secondary pi0 decay electrons from eta decays, mainly to eta signal enhance samples
- //if ( TMath::Abs(grmaPdgcode) == 221 ) return kElse; //mj to remove secondary pi0 decay electrons from eta decays, mainly to eta signal enhance samples
tmpMomLabel = partMother->GetFirstMother();
if((mctrack = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(TMath::Abs(tmpMomLabel))))) {
}
if ( TMath::Abs(maPdgcode) == 111 ) {
+ if(grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kGammaM2M;
return kGammaPi0;
}
else if ( TMath::Abs(maPdgcode) == 221 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kGammaM2M;
return kGammaEta;
}
else if ( TMath::Abs(maPdgcode) == 223 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kGammaM2M;
return kGammaOmega;
}
else if ( TMath::Abs(maPdgcode) == 333 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 331 || grmaPdgcode == 113) return kGammaM2M;
return kGammaPhi;
}
else if ( TMath::Abs(maPdgcode) == 331 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 113) return kGammaM2M;
return kGammaEtaPrime;
}
else if ( TMath::Abs(maPdgcode) == 113 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331) return kGammaM2M;
return kGammaRho0;
}
else origin = kElse;
if ( (int(TMath::Abs(grmaPdgcode)/100.)%10) == kBeauty || (int(TMath::Abs(grmaPdgcode)/1000.)%10) == kBeauty ) return kB2M;
if ( (int(TMath::Abs(grmaPdgcode)/100.)%10) == kCharm || (int(TMath::Abs(grmaPdgcode)/1000.)%10) == kCharm ) return kD2M;
- if ( TMath::Abs(grmaPdgcode) == 221 ) return kEta2Pi0; //mj to remove secondary pi0 decay electrons from eta decays, mainly to eta signal enhance samples
tmpMomLabel = partMother->GetFirstMother();
if((mctrack = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(TMath::Abs(tmpMomLabel))))) {
}
if ( TMath::Abs(maPdgcode) == 111 ) {
+ if(grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kM2M;
return kPi0;
}
else if ( TMath::Abs(maPdgcode) == 221 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kM2M;
return kEta;
}
else if ( TMath::Abs(maPdgcode) == 223 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kM2M;
return kOmega;
}
else if ( TMath::Abs(maPdgcode) == 333 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 331 || grmaPdgcode == 113) return kM2M;
return kPhi;
}
else if ( TMath::Abs(maPdgcode) == 331 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 113) return kM2M;
return kEtaPrime;
}
else if ( TMath::Abs(maPdgcode) == 113 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331) return kM2M;
return kRho0;
}
else if ( TMath::Abs(maPdgcode) == 321 || TMath::Abs(maPdgcode) == 130 ) {
}
//__________________________________________
-Int_t AliHFEmcQA::GetElecSource(const AliVParticle * const mctrack) const
+Int_t AliHFEmcQA::GetElecSource(const AliVParticle * const mctrack, Bool_t isElec) const
{
//
// decay particle's origin
const AliMCParticle *esdmc = dynamic_cast<const AliMCParticle *>(mctrack);
if(esdmc){
TParticle *mcpart = esdmc->Particle();
- return GetElecSource(mcpart);
+ return GetElecSource(mcpart, isElec);
}
else return -1;
}
if(type == AliAODMCParticle::Class()) {
const AliAODMCParticle *aodmc = dynamic_cast<const AliAODMCParticle *>(mctrack);
if(aodmc){
- return GetElecSource(aodmc);
+ return GetElecSource(aodmc, isElec);
}
else return -1;
}
return -1;
}
//__________________________________________
-Int_t AliHFEmcQA::GetElecSource(const AliAODMCParticle * const mcpart) const
+Int_t AliHFEmcQA::GetElecSource(const AliAODMCParticle * const mcpart, Bool_t isElec) const
{
//
// Function for AliAODMCParticle
if (!mcpart) return -1;
if (!fMCArray) return -1;
- if ( TMath::Abs(mcpart->GetPdgCode()) != AliHFEmcQA::kElectronPDG ) return kMisID;
+ if(isElec) if ( TMath::Abs(mcpart->GetPdgCode()) != AliHFEmcQA::kElectronPDG ) return kMisID;
Int_t origin = -1;
Bool_t isFinalOpenCharm = kFALSE;
if ( (int(TMath::Abs(grmaPdgcode)/100.)%10) == kCharm || (int(TMath::Abs(grmaPdgcode)/1000.)%10) == kCharm ) {
return kGammaD2M;
}
- if ( TMath::Abs(grmaPdgcode) == 221 ) {
- return kGammaEta2Pi0; //mj to remove secondary pi0 decay electrons from eta decays, mainly to eta signal enhance samples
- //return kElse; //mj to remove secondary pi0 decay electrons from eta decays, mainly to eta signal enhance samples
- }
tmpMomLabel = partMother->GetMother();
if((tmpMomLabel>=0) && (tmpMomLabel<fMCArray->GetEntriesFast())) {
}
if ( TMath::Abs(maPdgcode) == 111 ) {
+ if(grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kGammaM2M;
return kGammaPi0;
}
else if ( TMath::Abs(maPdgcode) == 221 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kGammaM2M;
return kGammaEta;
}
else if ( TMath::Abs(maPdgcode) == 223 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kGammaM2M;
return kGammaOmega;
}
else if ( TMath::Abs(maPdgcode) == 333 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 331 || grmaPdgcode == 113) return kGammaM2M;
return kGammaPhi;
}
else if ( TMath::Abs(maPdgcode) == 331 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 113) return kGammaM2M;
return kGammaEtaPrime;
}
else if ( TMath::Abs(maPdgcode) == 113 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331) return kGammaM2M;
return kGammaRho0;
}
else origin = kElse;
if ( (int(TMath::Abs(grmaPdgcode)/100.)%10) == kCharm || (int(TMath::Abs(grmaPdgcode)/1000.)%10) == kCharm ) {
return kD2M;
}
- if ( TMath::Abs(grmaPdgcode) == 221 ) {
- return kEta2Pi0; //mj to remove secondary pi0 decay electrons from eta decays, mainly to eta signal enhance samples
- }
tmpMomLabel = partMother->GetMother();
if((tmpMomLabel>=0) && (tmpMomLabel<fMCArray->GetEntriesFast())) {
}
}
}
+
if ( TMath::Abs(maPdgcode) == 111 ) {
+ if(grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kM2M;
return kPi0;
}
else if ( TMath::Abs(maPdgcode) == 221 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kM2M;
return kEta;
}
else if ( TMath::Abs(maPdgcode) == 223 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 333 || grmaPdgcode == 331 || grmaPdgcode == 113) return kM2M;
return kOmega;
}
else if ( TMath::Abs(maPdgcode) == 333 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 331 || grmaPdgcode == 113) return kM2M;
return kPhi;
}
else if ( TMath::Abs(maPdgcode) == 331 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 113) return kM2M;
return kEtaPrime;
}
else if ( TMath::Abs(maPdgcode) == 113 ) {
+ if(grmaPdgcode == 111 || grmaPdgcode == 221 || grmaPdgcode == 223 || grmaPdgcode == 333 || grmaPdgcode == 331) return kM2M;
return kRho0;
}
else if ( TMath::Abs(maPdgcode) == 321 || TMath::Abs(maPdgcode) == 130 ) {
return origin;
}
//__________________________________________
-Double_t AliHFEmcQA::GetWeightFactor(AliMCParticle *mctrack, Int_t iBgLevel){
+Double_t AliHFEmcQA::GetWeightFactor(AliMCParticle *mctrack, const Int_t iBgLevel){
//
// Get weighting factor for the realistic background estimation, for three possible background yield levels, indicated by the argument "iLevel": the best estimate (0), the lower uncertainty level (1), and the upper uncertainty level (2)
//
Double_t mesonPt = 0.;
Double_t bgcategory = 0.;
Int_t mArr = -1;
- Int_t mesonID = GetElecSource(mctrack->Particle());
+ Int_t mesonID = GetElecSource(mctrack->Particle(), kTRUE);
if(mesonID==kGammaPi0 || mesonID==kPi0) mArr=0; //pion
else if(mesonID==kGammaEta || mesonID==kEta) mArr=1; //eta
else if(mesonID==kGammaOmega || mesonID==kOmega) mArr=2; //omega
}
Double_t returnval = bgcategory*weightElecBg;
- if(TMath::Abs(bgcategory)>1) returnval = bgcategory/2.;
return returnval;
}
//__________________________________________
-Double_t AliHFEmcQA::GetWeightFactor(const AliAODMCParticle * const mcpart, Int_t iBgLevel){
+Double_t AliHFEmcQA::GetWeightFactor(const AliAODMCParticle * const mcpart, const Int_t iBgLevel){
//
// Get weighting factor for the realistic background estimation, for three possible background yield levels, indicated by the argument "iLevel": the best estimate (0), the lower uncertainty level (1), and the upper uncertainty level (2)
//
Double_t mesonPt = 0.;
Double_t bgcategory = 0.;
Int_t mArr = -1;
- Int_t mesonID = GetElecSource(mcpart);
+ Int_t mesonID = GetElecSource(mcpart, kTRUE);
if(mesonID==kGammaPi0 || mesonID==kPi0) mArr=0; //pion
else if(mesonID==kGammaEta || mesonID==kEta) mArr=1; //eta
else if(mesonID==kGammaOmega || mesonID==kOmega) mArr=2; //omega
}
Double_t returnval = bgcategory*weightElecBg;
- if(TMath::Abs(bgcategory)>1) returnval = bgcategory/2.;
return returnval;
}
+//__________________________________________
+Double_t AliHFEmcQA::GetWeightFactorForPrimaries(const AliAODMCParticle * const mcpart, const Int_t iBgLevel){
+ //
+ // Get weighting factor for the realistic background estimation, for three possible background yield levels, indicated by the argument "iLevel": the best estimate (0), the lower uncertainty level (1), and the upper uncertainty level (2)
+ // weighting will only be non zero for electrons from primary pi0 and eta mesons (via Dalitz or gamma conversions)
+ //
+
+ if (!mcpart) return 0;
+ if (!fMCArray) return 0;
+
+ Int_t mArr = -1;
+ Double_t mesonPt = 0.;
+ AliAODMCParticle *mctrackmother = NULL; // temp pointer
+ Int_t mesonID = GetElecSource(mcpart, kTRUE); // get source of electron
+ if(mesonID==kGammaPi0 || mesonID==kPi0) mArr=0; //pion
+ else if(mesonID==kGammaEta || mesonID==kEta) mArr=1; //eta
+ else return 0;
+
+ Int_t iLabel = mcpart->GetMother(); //mother label
+ switch (mesonID) {
+ case kGammaPi0:
+ case kGammaEta:
+ if(!(mctrackmother = dynamic_cast<AliAODMCParticle *>(fMCArray->At(TMath::Abs(iLabel))))) return 0;
+ iLabel = mctrackmother->GetMother(); //reset label to mother of gamma
+ case kPi0:
+ case kEta:
+ if(!(mctrackmother = dynamic_cast<AliAODMCParticle *>(fMCArray->At(TMath::Abs(iLabel))))) return 0;
+ mesonPt = mctrackmother->Pt(); //pt of (grand)mother
+ //check mother is primary
+ if(!(mctrackmother->IsPrimary())) return 0;
+ break;
+ default:
+ return 0;
+ }
+ Double_t weightElecBg = fElecBackgroundFactor[iBgLevel][0][mArr][kBgPtBins-1]; //set weighting for pt > max pt
+ for(int ii=0; ii<kBgPtBins; ii++){
+ if((mesonPt >= fBinLimit[ii]) && (mesonPt < fBinLimit[ii+1])){
+ weightElecBg = fElecBackgroundFactor[iBgLevel][0][mArr][ii];
+ break;
+ }
+ }
+
+ return weightElecBg;
+}
+
+//__________________________________________
//__________________________________________
Int_t AliHFEmcQA::GetMother(const AliVParticle * const mcpart) const {
//
return label;
}
//__________________________________________
-Int_t AliHFEmcQA::GetWeightCentralityBin(Float_t percentile) const {
+Int_t AliHFEmcQA::GetWeightCentralityBin(const Float_t percentile) const {
//
//translate the centrality percentile into the centrality bin of the reference weighting histograms for electron background
//
public:
enum heavyType {kCharm=4, kBeauty=5, kOthers=6, kElectronPDG=11};
enum qType {kQuark, kantiQuark, kHadron, keHadron, kDeHadron, kElectron, kElectron2nd};
- enum SourceType {kDirectCharm=1, kDirectBeauty=2, kBeautyCharm=3, kGamma=4, kPi0=5, kElse=6, kMisID=7, kEta=8, kOmega=9, kPhi=10, kEtaPrime=11, kRho0=12, kGammaPi0=13, kGammaEta=14, kGammaOmega=15, kGammaPhi=16, kGammaEtaPrime=17, kGammaRho0=18, kJpsi=19, kB2Jpsi=20, kKe3=21, kGammaB2M=22, kGammaD2M=23, kGammaEta2Pi0=24, kB2M=25, kD2M=26, kEta2Pi0=27, kScdryM=28};
+ enum SourceType {
+ kDirectCharm=1, // electrons from primary charmed hadrons and primary resonance charmed hadrons(primary charmed hadrons, charmed hadrons decaying from the charmed hadron resonances(ex. D*): D->e )
+ kDirectBeauty=2, // electrons from primary beauty hadrons and primary resonance beauty hadrons (primary beauty hadrons, beauty hadrons decaying from the beauty hadron resonances: B->e)
+ kBeautyCharm=3, // electrons from charmed hadrons decaying from the beauty hadrons (B->D->e)
+ kGamma=4, // should be obsolete -> please let me know if you see something!
+ kPi0=5, // electrons from p0 Dalitz
+ kElse=6, // all the other sources which was not in this enumeration
+ kMisID=7, // not the electrons (hadrons)
+ kEta=8, // electrons from eta Dalitz
+ kOmega=9, // electrons from omega decay (Dalitz and di-electrons)
+ kPhi=10, // electrons from phi decay (di-electron)
+ kEtaPrime=11, // electrons from eta prime decay (Dalitz and 2charged-pions&di-electrons)
+ kRho0=12, // electrons from rho decay (di-electron)
+ kGammaPi0=13, // electrons from photon conversion where the photon originated from pi0
+ kGammaEta=14, // electrons from photon conversion where the photon originated from eta
+ kGammaOmega=15, // electrons from photon conversion where the photon originated from omega
+ kGammaPhi=16, // electrons from photon conversion where the photon originated from phi
+ kGammaEtaPrime=17, // electrons from photon conversion where the photon originated from eta prime
+ kGammaRho0=18, // electrons from photon conversion where the photon originated from rho
+ kJpsi=19, // electrons from primary J/psi decay
+ kB2Jpsi=20, // electrons from J/psi decay where the J/psi originated from the beauty hadrons
+ kKe3=21, // Ke3 electrons
+ kGammaB2M=22, // electrons from photon conversion from meson where the meson originated from the beauty hadrons
+ kGammaD2M=23, // electrons from photon conversion from meson where the meson originated from the charm hadrons
+ kGammaM2M=24, // electrons from photon conversion from the light meson decay where the light meson originated from other light meson
+ kB2M=25, // electrons from the meson where the meson originated from the beauty hadrons
+ kD2M=26, // electrons from the meson where the meson originated from the charm hadrons
+ kM2M=27, // electrons from the light meson decay where the light meson originated from other light meson
+ kScdryM=28 // secondary mesons (mainly pions but I didn't differentiate the mesons)
+ };
enum ProcessType {
kPairCreationFromq, kPairCreationFromg, kFlavourExitation, kGluonSplitting, kInitialPartonShower, kLightQuarkShower
};
TList *GetList() const { return fQAhistos; };
void PostAnalyze() const;
void CreatDefaultHistograms(TList * const qaList); // create default histograms
- void CreateHistograms(Int_t kquark); // create histograms for mc qa analysis
+ void CreateHistograms(const Int_t kquark); // create histograms for mc qa analysis
void SetMCEvent(AliMCEvent* const mcEvent){fMCEvent = mcEvent;}
void SetGenEventHeader(AliGenEventHeader* const mcHeader){fMCHeader=mcHeader;} // set stack pointer
void SetMCArray(TClonesArray* const mcarry){fMCArray=mcarry;} // set mcarray pointer
void Init();
- void GetQuarkKine(TParticle *part, Int_t iTrack, Int_t kquark); // get heavy quark kinematics distribution
- void GetHadronKine(TParticle *part, Int_t kquark); // get heavy hadron kinematics distribution
- void GetDecayedKine(TParticle *part, Int_t kquark, Int_t kdecayed); // get decay electron kinematics distribution
- void GetDecayedKine(AliAODMCParticle *mcpart, Int_t kquark, Int_t kdecayed); // get decay electron kinematics for AOD
+ void GetQuarkKine(TParticle *part, Int_t iTrack, const Int_t kquark); // get heavy quark kinematics distribution
+ void GetHadronKine(TParticle *part, const Int_t kquark); // get heavy hadron kinematics distribution
+ void GetDecayedKine(TParticle *part, const Int_t kquark, const Int_t kdecayed); // get decay electron kinematics distribution
+ void GetDecayedKine(AliAODMCParticle *mcpart, const Int_t kquark, Int_t kdecayed); // get decay electron kinematics for AOD
void GetMesonKine(); // get meson and its decay electron pt spectra
- void EndOfEventAna(Int_t kquark); // run analysis which should be done at the end of the event loop
+ void EndOfEventAna(const Int_t kquark); // run analysis which should be done at the end of the event loop
Int_t GetSource(const TParticle * const mcpart) const; // return source id
- Int_t GetElecSource(const AliVParticle * const mctrack) const;
- Int_t GetElecSource(TParticle * const mcpart) const; // return electron source id
- Int_t GetElecSource(const AliAODMCParticle * const mcpart) const;
+ Int_t GetElecSource(const AliVParticle * const mctrack, Bool_t isElec) const;
+ Int_t GetElecSource(TParticle * const mcpart, Bool_t isElec) const; // return electron source id
+ Int_t GetElecSource(const AliAODMCParticle * const mcpart, Bool_t isElec) const;
Int_t GetSource(const AliVParticle * const mcpart) const; // return electron source id for AOD
- Double_t GetWeightFactor(AliMCParticle *mctrack, Int_t iBgLevel); // return best/lower/upper weighting factor for electron's mother meson
- Double_t GetWeightFactor(const AliAODMCParticle * const mcpart, Int_t iBgLevel);
- Int_t GetWeightCentralityBin(Float_t percentile) const; //translate the centrality percentile into the centrality bin of the reference weighting histograms for electron background
+ Double_t GetWeightFactor(AliMCParticle *mctrack, const Int_t iBgLevel); // return best/lower/upper weighting factor for electron's mother meson
+ Double_t GetWeightFactor(const AliAODMCParticle * const mcpart, const Int_t iBgLevel);
+ Double_t GetWeightFactorForPrimaries(const AliAODMCParticle * const mcpart, const Int_t iBgLevel);
+ Int_t GetWeightCentralityBin(const Float_t percentile) const; //translate the centrality percentile into the centrality bin of the reference weighting histograms for electron background
void EnableDebugStreamer() { fIsDebugStreamerON = kTRUE;};
+ void EnableGetWeightHist() { fGetWeightHist = kTRUE;};
void SetBackgroundWeightFactor(Double_t *elecBackgroundFactor, Double_t *binLimit);
void SetContainerStep(Int_t containerStep) { fContainerStep = containerStep;};
protected:
Int_t GetMother(const AliVParticle * const track) const;
void IdentifyMother(Int_t motherlabel, Int_t &motherpdg, Int_t &grandmotherlabel); //
- void HardScattering(Int_t kquark, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel); // check if the quark is produced from hard scattering
+ void HardScattering(const Int_t kquark, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel); // check if the quark is produced from hard scattering
void ReportStrangeness(Int_t &motherID, Int_t &mothertype, Int_t &motherlabel); // report if the quark production process is unknown
Bool_t IsFromInitialShower(Int_t inputmotherlabel, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel); // check if the quark is produced from initial parton shower
Bool_t IsFromFinalParton(Int_t inputmotherlabel, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel); // check if the quark is produced from final parton shower
Int_t fIsHeavy[2]; // count of heavy flavour
Int_t fNparents; // number of heavy hadrons to be considered
Int_t fParentSelect[2][7]; // heavy hadron species
+
+ /*
+ -------------------------------------------------------------------------------------
+ fParentSelect[0][0] = 411; //D+
+ fParentSelect[0][1] = 421; //D0
+ fParentSelect[0][2] = 431; //Ds+
+ fParentSelect[0][3] = 4122; //Lambdac+
+ fParentSelect[0][4] = 4132; //Ksic0
+ fParentSelect[0][5] = 4232; //Ksic+
+ fParentSelect[0][6] = 4332; //OmegaC0
+
+ -------------------------------------------------------------------------------------
+ fParentSelect[1][0] = 511; //B0
+ fParentSelect[1][1] = 521; //B+
+ fParentSelect[1][2] = 531; //Bs0
+ fParentSelect[1][3] = 5122; //Lambdab0
+ fParentSelect[1][4] = 5132; //Ksib-
+ fParentSelect[1][5] = 5232; //Ksib0
+ fParentSelect[1][6] = 5332; //Omegab-
+ */
+
Double_t fElecBackgroundFactor[kBgLevels][kCentBins][kElecBgSpecies][kBgPtBins]; // Electron background factors
Double_t fBinLimit[kBgPtBins+1]; // Electron background bins
Double_t fHfeImpactnsigmaR; //absolute impact parameter sigma R
TTreeSRedirector *fTreeStream; //! TreeStream
+ Bool_t fGetWeightHist; // Write histogram to calculate weights
ClassDef(AliHFEmcQA,1);
};
else return kTRUE;
-
}
//______________________________________________________
//
//
- if(fTRDOldPIDMethod) return IsSelected1D(track, pidqa);
- else return IsSelectedTRDPID(track, pidqa);
-
-
+ if(fTRDOldPIDMethod) return IsSelected1D(track, pidqa);
+ else return IsSelectedTRDPID(track, pidqa);
}
//______________________________________________________
AliHFEpidObject::AnalysisType_t anatype = track->IsESDanalysis() ? AliHFEpidObject::kESDanalysis: AliHFEpidObject::kAODanalysis;
Double_t p = GetP(track->GetRecTrack(), anatype);
if(p < fMinP){
- AliDebug(2, Form("Track momentum %f below %f", p, fMinP));
+ AliDebug(2, Form("Track momentum below %f", fMinP));
return 0;
}
- AliDebug(2, Form("Track momentum %f above %f", p, fMinP));
-
- if(pidqa) pidqa->ProcessTrack(track, AliHFEpid::kTRDpid, AliHFEdetPIDqa::kBeforePID);
- AliDebug(1,"PID qa done for step before\n");
- Int_t ntracklets = track->GetRecTrack() ? track->GetRecTrack()->GetTRDntrackletsPID() : 0;
-
+ if(pidqa) pidqa->ProcessTrack(track, AliHFEpid::kTRDpid, AliHFEdetPIDqa::kBeforePID);
+
if(fCutNTracklets > 0){
AliDebug(1, Form("Number of tracklets cut applied: %d\n", fCutNTracklets));
+ Int_t ntracklets = track->GetRecTrack() ? track->GetRecTrack()->GetTRDntrackletsPID() : 0;
if(TestBit(kExactTrackletCut)){
AliDebug(1, Form("Exact cut applied: %d tracklets found\n", ntracklets));
if(ntracklets != fCutNTracklets) return 0;
Float_t fCentralityLimitsdefault[12]= {0.,5.,10., 20., 30., 40., 50., 60.,70.,80., 90., 100.};
Float_t centrality=-1;
if(centralitybin>=0) centrality=fCentralityLimitsdefault[centralitybin]+1;
- AliDebug(2, Form("Just before cutting Electron effi: %f %i %i %f\n", fElectronEfficiency,track->GetCentrality(),centralitybin,centrality));
AliTRDPIDResponse::ETRDPIDMethod fTRDPIDMethod = AliTRDPIDResponse::kLQ1D;
if(fTRD2DPID) fTRDPIDMethod = AliTRDPIDResponse::kLQ2D;
- // if(fkPIDResponse->IdentifiedAsElectronTRD(track->GetRecTrack(),fElectronEfficiency,centrality,fTRDPIDMethod)){
+// printf("TRD PID Method in use: %i \n",fTRDPIDMethod);
+ // if(fkPIDResponse->IdentifiedAsElectronTRD(track->GetRecTrack(),fElectronEfficiency,centrality,fTRDPIDMethod)){
Int_t ntrackletsPID=0;
Bool_t iselectron=kFALSE;
iselectron=fkPIDResponse->IdentifiedAsElectronTRD(track->GetRecTrack(),ntrackletsPID,fElectronEfficiency,centrality,fTRDPIDMethod);
if((ntrackletsPID==fCutNTracklets) && iselectron){
AliDebug(2, Form("Electron effi: %f %i %i %f %i\n", fElectronEfficiency,track->GetCentrality(),centralitybin,centrality,fTRDPIDMethod));
if(pidqa) pidqa->ProcessTrack(track, AliHFEpid::kTRDpid, AliHFEdetPIDqa::kAfterPID);
- AliDebug(1,"PID qa done for step after\n");
return 11;
} else return 211;
//
// Get TRD likelihoods for ESD respectively AOD tracks
//
- AliDebug(1, "Starting getting TRD likelihood\n");
Double_t pidProbs[AliPID::kSPECIES]; memset(pidProbs, 0, sizeof(Double_t) * AliPID::kSPECIES);
if(anaType == AliHFEpidObject::kESDanalysis){
const AliESDtrack *esdtrack = dynamic_cast<const AliESDtrack *>(track);
if(esdtrack) esdtrack->GetTRDpid(pidProbs);
} else {
- if(fTRD2DPID) fkPIDResponse->ComputeTRDProbability(track, AliPID::kSPECIES, pidProbs,AliTRDPIDResponse::kLQ2D);
+ if(fTRD2DPID) fkPIDResponse->ComputeTRDProbability(track, AliPID::kSPECIES, pidProbs,AliTRDPIDResponse::kLQ2D);
else fkPIDResponse->ComputeTRDProbability(track, AliPID::kSPECIES, pidProbs,AliTRDPIDResponse::kLQ1D);
}
- for(Int_t k=0; k < AliPID::kSPECIES; k++) {
- AliDebug(2, Form("proba: %f for %d\n", pidProbs[k],k));
- }
if(!IsRenormalizeElPi()) return pidProbs[AliPID::kElectron];
Double_t probsNew[AliPID::kSPECIES];
RenormalizeElPi(pidProbs, probsNew);
hfemcpart.SetSource(source);
*/
hfemcpart.SetSource(static_cast<Int_t>(fSignalCuts->GetSignalSource(mctrack)));
- hfemcpart.SetElectronSource(fSignalCuts->GetMCQAObject()->GetElecSource(mctrack));
+ hfemcpart.SetElectronSource(fSignalCuts->GetMCQAObject()->GetElecSource(mctrack,kTRUE));
fHFEevent->AddMCParticle(&hfemcpart);
}
hfetrack.SetMCSource(source);
*/
hfetrack.SetMCSource(static_cast<Int_t>(fSignalCuts->GetSignalSource(track)));
- hfetrack.SetMCElectronSource(fSignalCuts->GetMCQAObject()->GetElecSource(mctrack));
+ hfetrack.SetMCElectronSource(fSignalCuts->GetMCQAObject()->GetElecSource(mctrack,kTRUE));
} else {
AliDebug(2, "Associated MC particle not found\n");
}
hfemcpart.SetSource(source);
*/
hfemcpart.SetSource(static_cast<Int_t>(fSignalCuts->GetSignalSource(mctrack)));
- hfemcpart.SetElectronSource(fSignalCuts->GetMCQAObject()->GetElecSource(mctrack));
+ hfemcpart.SetElectronSource(fSignalCuts->GetMCQAObject()->GetElecSource(mctrack,kTRUE));
fHFEevent->AddMCParticle(&hfemcpart);
}
}
hfetrack.SetMCSource(source);
*/
hfetrack.SetMCSource(static_cast<Int_t>(fSignalCuts->GetSignalSource(track)));
- hfetrack.SetMCElectronSource(fSignalCuts->GetMCQAObject()->GetElecSource(mctrack));
+ hfetrack.SetMCElectronSource(fSignalCuts->GetMCQAObject()->GetElecSource(mctrack,kTRUE));
} else {
AliDebug(2, "Associated MC particle not found");
}
if(!(mctrack = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(TMath::Abs(track->GetLabel()))))) return;
mcpart = mctrack->Particle();
- Int_t esource=fMCQA->GetElecSource(mcpart);
+ Int_t esource=fMCQA->GetElecSource(mcpart,kTRUE);
if(esource==1) {
//if(!(dynamic_cast<TH1F *>(fSecVtxList->At(step+1)))) return;
(static_cast<TH1F *>(fSecVtxList->At(step+1)))->Fill(mcpart->Pt()); //charm
const AliMCParticle *esdmc = dynamic_cast<const AliMCParticle *>(mctrack);
if(esdmc){
mcpart = esdmc->Particle();
- eSource=fMCQA->GetElecSource(mcpart);
+ eSource=fMCQA->GetElecSource(mcpart,kTRUE);
// considering secondary pions
if(type == AliESDtrack::Class()){
if(eSource>=AliHFEmcQA::kGammaPi0 && eSource<=AliHFEmcQA::kGammaRho0) { // conversion electron, be careful with the enum odering
}
}
} else {
- eSource=fMCQA->GetElecSource(mctrack);
+ eSource=fMCQA->GetElecSource(mctrack,kTRUE);
}
return eSource;
}
fStepAfterCutsV0(-1),
fStepGuessedUnfolding(-1),
fNumberOfIterations(5),
+ fNRandomIter(0),
fChargeChoosen(kAllCharge),
fNCentralityBinAtTheEnd(0),
fTestCentralityLow(-1),
dataGridAfterFirstSteps = dataspectrumaftersubstraction;
}
+ printf("cloning spectrum\n");
+ AliCFDataGrid *rawsave(NULL);
+ if(dataspectrumaftersubstraction){
+ rawsave = (AliCFDataGrid *)dataspectrumaftersubstraction->Clone("rawdata");
+ } else {
+ AliCFContainer *dataContainer = GetContainer(kDataContainer);
+ if(!dataContainer){
+ AliError("Data Container not available");
+ }
+ rawsave = new AliCFDataGrid("rawsave", "raw spectrum after subtraction",*dataContainer, fStepData);
+ }
+ printf("cloned: %p\n", rawsave);
+
////////////////////////////////////////////////
// Correct for TPC efficiency from V0
///////////////////////////////////////////////
correctedspectrum->Write();
alltogetherCorrection->SetName("AlltogetherCorrectedNotNormalizedSpectrum");
alltogetherCorrection->Write();
+ rawsave->Write();
for(Int_t binc = 0; binc < fNCentralityBinAtTheEnd; binc++){
unfoldingspectrac[binc].Write();
unfoldingspectracn[binc].Write();
AliCFUnfolding unfolding("unfolding","",fNbDimensions,fCorrelation,efficiencyD->GetGrid(),dataGrid->GetGrid(),guessedTHnSparse);
if(fUnSetCorrelatedErrors) unfolding.UnsetCorrelatedErrors();
unfolding.SetMaxNumberOfIterations(fNumberOfIterations);
+ if(fNRandomIter > 0) unfolding.SetNRandomIterations(fNRandomIter);
if(fSetSmoothing) unfolding.UseSmoothing();
unfolding.Unfold();
for(Int_t ibin = input->GetXaxis()->GetFirst(); ibin <= input->GetXaxis()->GetLast(); ibin++){
point = ibin - input->GetXaxis()->GetFirst();
p = input->GetXaxis()->GetBinCenter(ibin);
- //dp = input->GetXaxis()->GetBinWidth(ibin)/2.;
+ dp = input->GetXaxis()->GetBinWidth(ibin)/2.;
n = input->GetBinContent(ibin);
dN = input->GetBinError(ibin);
// New point
void SetStepGuessedUnfolding(Int_t stepGuessedUnfolding) { fStepGuessedUnfolding = stepGuessedUnfolding; };
void SetNumberOfIteration(Int_t numberOfIteration) { fNumberOfIterations = numberOfIteration; };
+ void SetUnfoldingRandomIterations(Int_t niter) { fNRandomIter = niter; }
void SetDumpToFile(Bool_t dumpToFile) { fDumpToFile=dumpToFile; };
Int_t fStepAfterCutsV0; // After cuts V0
Int_t fStepGuessedUnfolding; // Step for first guessed unfolding
Int_t fNumberOfIterations; // Number of iterations
+ Int_t fNRandomIter; // Number of random iterations
Chargetype_t fChargeChoosen; // Select positive or negative electrons
Double_t fEtaRange[2]; // Eta range
target.fContentMC = new Double_t[sizeof(fContentMC)/sizeof(Double_t)];
target.fWeightFactor = fWeightFactor;
target.fSignalTrack = fSignalTrack;
- target.fWeighting = fWeighting;
+ target.fWeighting = fWeighting;
target.fSignal = fSignal;
- target.fWeightFactors = fWeightFactors;
+ target.fWeightFactors = fWeightFactors;
target.fWeightFactorsFunction = fWeightFactorsFunction;
target.SetOwner(kFALSE);
}
}
case kSource:{
if(fSignal){
- if(fSignal->IsCharmElectron(track)) value = 0;
- else if(fSignal->IsBeautyElectron(track)) value = 1;
- else if(fSignal->IsGammaElectron(track)) value = 2;
+ value = static_cast<Int_t>(fSignal->GetSignalSource(track));
+ /*
+ if(fSignal->IsCharmElectron(track)) value = 0;
+ else if(fSignal->IsBeautyElectron(track)) value = 1;
+ else if(fSignal->IsGammaElectron(track)) value = 2;
else if(fSignal->IsNonHFElectron(track)) value = 3;
else if(fSignal->IsJpsiElectron(track)) value = 4;
else if(fSignal->IsB2JpsiElectron(track)) value = 5;
else if(fSignal->IsKe3Electron(track)) value = 6;
- else value = 7;
+ else value = 7;
+ */
}
AliDebug(2, Form("source: %f", value));
break;
//_______________________________________________
Double_t* AliHFEvarManager::AliHFEvariable::GetBinning() {
- //
- // Get the binning
- //
-
if(fUserDefinedBinning) return fBinning.GetArray();
// No User defined Binning - create one and store in fBinning
Int_t triggerIndex = 0,
Int_t configIndex = 0,
Int_t centralityIndex = 0,
- Bool_t isAOD = kFALSE,
- Bool_t isEMCal = kFALSE,
- char * period = "b",
+ Bool_t isAOD = kFALSE,
+ Bool_t isEMCal = kFALSE,
+ Bool_t isTrigger = kFALSE,
+ char * period = "b",
Int_t EMCalThreshould = 0
)
{
//Config Task
//gROOT->LoadMacro("ConfigEMCalHFEpA.C");
gROOT->LoadMacro("$ALICE_ROOT/PWGHF/hfe/macros/configs/pPb/ConfigEMCalHFEpA.C");
- AliAnalysisTaskEMCalHFEpA *task = ConfigEMCalHFEpA(isMC,triggerIndex,configIndex,centralityIndex,isAOD,isEMCal, EMCalThreshould);
+ AliAnalysisTaskEMCalHFEpA *task = ConfigEMCalHFEpA(isMC,triggerIndex,configIndex,centralityIndex,isAOD,isEMCal,isTrigger, EMCalThreshould);
//_______________________
//Trigger
AliAnalysisTask *AddTaskHFEnpepPb(Bool_t MCthere,
Bool_t isAOD,
Bool_t kNPERef = kTRUE,
- Bool_t kNPERefTPConly = kTRUE,
+ Bool_t kNPERefTPConly = kFALSE,
Bool_t kNPEkAny = kFALSE,
Bool_t kNPEsystematics = kFALSE,
- Bool_t kNPEpidsys = kFALSE
+ Bool_t kNPEpidsys = kFALSE,
+ Bool_t kNPEw = kFALSE,
+ Bool_t kBeauty = kFALSE
){
// Default settings (TOF-TPC pPb)
- const int kDefTPCcl = 110;
+ const int kDefTPCcl = 100;
const int kDefTPCclPID = 80;
const int kDefITScl = 4;
const double kDefDCAr = 1.;
const double kDefDCAz = 2.;
const double kDefTOFs = 3.;
- const double kDefEtaIncMin = -0.8;
- const double kDefEtaIncMax = 0.8;
-
+ const double kDefEtaIncMin = -0.8;
+ const double kDefEtaIncMax = 0.8;
+ const double kDefPhiMin = -1.; // by default no phi cut, otherwise units of 2.*TMath::Pi()/18.
+ const double kDefPhiMax = -1.; // by default no phi cut
+
// TPC PID Cuts Inclusive leg:
// General, if mean=0 and sigma=1:
// AODs: mean 0.09, sigma 1 --> -0.91, -0.66, -0.41, -0.16, -0.039 ,0.09, 0.212, 0.34, 0.59
// AODs: mean 0.09, sigma 1.03 --> -0.94, -0.68, -0.425, -0.17, -0.043 ,0.09, 0.216, 0.35, 0.60
-
// On ESD:
// mean is actually 0.06 (abs(eta)<0.6)
Double_t dEdxhm[12] = {3.06,3.06,3.06,3.06,3.06,3.06,3.06,3.06,3.06,3.06,3.06,3.06}; // Above 3 sigma we neglect 0.13%
Double_t tpcl7[12] = {0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56}; // 30.7%
// AOD 139 with TPC multi cor; w/o TOF PID
- Double_t dEdxhmAOD[12] = {3.13,3.13,3.13,3.13,3.13,3.13,3.13,3.13,3.13,3.13,3.13,3.13}; // upper cut
- Double_t tpcl0AOD[12] = {-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94}; // 84%
+ Double_t dEdxhmAOD[12] = {3.18,3.18,3.18,3.18,3.18,3.18,3.18,3.18,3.18,3.18,3.18,3.18}; // upper cut
+ Double_t tpcl0AOD[12] = {-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94,-0.94}; // 84% <-- hadron contamination
Double_t tpcl1AOD[12] = {-0.68,-0.68,-0.68,-0.68,-0.68,-0.68,-0.68,-0.68,-0.68,-0.68,-0.68,-0.68}; // 77.2%
- Double_t tpcl2AOD[12] = {-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425}; // 69%
- Double_t tpcl3AOD[12] = {-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17}; // 59.7%
+ Double_t tpcl2AOD[12] = {-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425,-0.425}; // 69% <-- had cont
+ Double_t tpcl3AOD[12] = {-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17,-0.17}; // 59.7% <-- had cont
Double_t tpcl4AOD[12] = {-0.043,-0.043,-0.043,-0.043,-0.043,-0.043,-0.043,-0.043,-0.043,-0.043,-0.043,-0.043}; // 55%
- Double_t tpcl5AOD[12] = {0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09}; // 49.9%
+ Double_t tpcl5AOD[12] = {0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09}; // 49.9% <-- had cont
Double_t tpcl6AOD[12] = {0.216,0.216,0.216,0.216,0.216,0.216,0.216,0.216,0.216,0.216,0.216,0.216}; // 45%
Double_t tpcl7AOD[12] = {0.35,0.35,0.35,0.35,0.35,0.35,0.35,0.35,0.35,0.35,0.35,0.35}; // 40%
Double_t tpcl8AOD[12] = {0.60,0.60,0.60,0.60,0.60,0.60,0.60,0.60,0.60,0.60,0.60,0.60}; // 30.7%
// Default setting for the associated electron for the NonPhotonic Analysis
- const double kassETAm = -0.8;
- const double kassETAp = 0.8;
- const int kassITS = 2;
- const int kassTPCcl = 60;
- const int kassTPCPIDcl = 60;
- const double kassDCAr = 1.0;
- const double kassDCAz = 2.0;
- const double kassTPCSminus = -3.0;
- const double kassTPCSplus = 3.0;
+ const double kassETAm = -0.8;
+ const double kassETAp = 0.8;
+ const double kassMinPt = 0.1;
+ const int kassITS = 2;
+ const int kassTPCcl = 60;
+ const int kassTPCPIDcl = 60;
+ const double kassDCAr = 1.0;
+ const double kassDCAz = 2.0;
+ const double kassTPCSminus = -3.0;
+ const double kassTPCSplus = 3.0;
+ const double kassITSpid = 3.0;
+ const double kassTOFpid = 0.0;
enum{
kHFEV0A = 1,
kHFEZNA = 4
};
+ const Bool_t isBeauty = kFALSE;
+
//get the current analysis manager
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
if (!mgr) {
dEdxachm2[icent] = 4;
}
+ Int_t kWei = -1;
+ if (MCthere) kWei = 0;
+ enum {
+ // updated after changes by Jan on 17.04, commit 21648
+ kb2weiData = 3, // DPMJET weights
+ kd3weiData = 4, // HIJING weights
+ kd3weib2 = 5, // HIJING weights for DPMJET
+ };
+
+
+
if(kNPERef){
// **************************************************************
//
// Reference task
//
// **************************************************************
- if(isAOD==1){
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD, dEdxhmAOD, kDefTOFs,
- AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
- kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
+ if(isAOD==1){
+ // Reference
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ /*
+ if (MCthere){ // run without weights
+ // this is an exceptional case, so I handle it by hand for the moment
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weib2);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE);
}
- else{
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs,
- AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
- kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
+ // no ITS SA
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kFALSE, kWei, kd3weiData);
+ */
+ }
+ else {
+ // Reference
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
}
- /*RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs,
- * AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
- * kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kFALSE);
- */
}
-
+
if(kNPERefTPConly){
// **************************************************************
//
// Reference task for TPC-only on the inclusive leg
//
- // **************************************************************
- if(isAOD==1){
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD, dEdxhmAOD, 0,
- AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
- kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- }
- else{
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, 0,
- AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
- kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
+ // **************************************************************
+ if(isAOD==1){
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl5AOD,
+ dEdxhmAOD, 0., AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE);
+ }
+ else
+ {
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, 0., AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE);
}
- /*RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs,
- * AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
- * kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kFALSE);
- */
}
-
+
if(kNPEkAny){
// **************************************************************
//
// task for kAny instead of kBoth
//
// **************************************************************
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs,
- AliHFEextraCuts::kAny, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
- kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- /*RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs,
- * AliHFEextraCuts::kAny, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
- * kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kFALSE);
- */
+
+ // coming soon
+ }
+
+ if (kNPEpidsys){
+ if(isAOD==1){
+ // Inclusive: TPC pid cuts
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl0AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl3AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl5AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei);
+ // Inclusive: TOF PID cuts
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, 2.0, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, 2.5, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, 4.0, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei);
+ }
+ else
+ {
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl5,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE);
+ }
+
}
if(kNPEsystematics){
// **************************************************************
//
- // Cut systematics on the associated track
+ // Cut systematics
//
// **************************************************************
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- 0.0, kassETAp, kassITS, kassTPCcl, kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, 0.0, kassITS, kassTPCcl, kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, 3, kassTPCcl, kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, 80, kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, 100, kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, 40, kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, kassTPCcl, 40, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, kassTPCcl, 80, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, kassTPCcl, 100, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, kassTPCcl, kassTPCPIDcl, 0.5, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, kassTPCcl, kassTPCPIDcl, 2, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, kassTPCcl, kassTPCPIDcl, kassDCAr, 1, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, kassTPCcl, kassTPCPIDcl, kassDCAr, 4, dEdxaclm, dEdxachm, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, kassTPCcl, kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm1, dEdxachm1, kTRUE, kTRUE);
- RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax,
- kassETAm, kassETAp, kassITS, kassTPCcl, kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm2, dEdxachm2, kTRUE, kTRUE);
-
+ if(isAOD==1){
+
+ // TPC clusters for tracking
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, 80, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, 90, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty,100, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty,120, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty,130, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ // TPC clusters for PID
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, 60, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl,100, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl,110, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+
+ /* SYST 2
+ // Cat1 + cat2 tracks: vary ITS PID
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, 2.0, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, 4.0, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ // Cat1 + cat2 tracks: vary TPC PID
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm1, dEdxachm1, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm2, dEdxachm2, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kd3weiData);
+ // no ITS SA: add TOF PID
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, 2.0, kTRUE, kFALSE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, 3.0, kTRUE, kFALSE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, 4.0, kTRUE, kFALSE, kWei, kd3weiData);
+ // no ITS SA: add TOF PID, vary TPC PID
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm1, dEdxachm1, kassITSpid, kassTOFpid, kTRUE, kFALSE, kWei, kd3weiData);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm2, dEdxachm2, kassITSpid, kassTOFpid, kTRUE, kFALSE, kWei, kd3weiData);
+ */
+ /* SYST 1
+ // Inclusive DCA cuts
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, 0.5, 1.0, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, 2.0, 5.0, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei);
+ // Associated DCA cuts
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ 0.5, 1.0, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei);
+ RegisterTaskNPEpPb( MCthere, isAOD, isBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD,
+ dEdxhmAOD, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ 2.0, 5.0, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei);
+ */
+ }
}
- // PID systematics
- if(kNPEpidsys){
- const int kPIDvars = 4;
- const double pidvars[kPIDvars] = {2, 2.5, 3.5, 4};
- double dEdxtestlow[12], dEdxtesthigh[12];
- for(int itest = 0; itest < kPIDvars; itest++){
- for(int icent = 0; icent < 12; icent++){
- dEdxtestlow[icent] = -1. * pidvars[itest];
- dEdxtesthigh[icent] = pidvars[itest];
- }
-// RegisterTaskNPEpPb( MCthere, isAOD, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpc1, dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl, kassTPCPIDcl, kassDCAr, kassDCAz, dEdxtestlow, dEdxtesthigh);
- }
+ if(kBeauty){
+ // **************************************************************
+ //
+ // Beauty task
+ //
+ // **************************************************************
+ if(isAOD==1){
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD, dEdxhmAOD, kDefTOFs,
+ AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
+ kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE, -1, kTRUE);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD, dEdxhmAOD, kDefTOFs,
+ AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
+ kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE,-1, kTRUE, kTRUE, kFALSE);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2AOD, dEdxhmAOD, kDefTOFs,
+ AliHFEextraCuts::kBoth, kHFEV0A, kDefEtaIncMin, kDefEtaIncMax, kassETAm, kassETAp, kassITS, kassTPCcl,
+ kassTPCPIDcl, kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kTRUE, kTRUE,-1, kTRUE, kTRUE, kTRUE);
+ }
+ else{
+ // reference
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+ // nonphotonic bg
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiDataSys, kTRUE);
+ //ip sys
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE, kFALSE, kFALSE, 1);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE, kFALSE, kFALSE, 2);
+
+ // tpc cluster
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, 100, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, 120, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+
+ // tpc pid cluster
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, 60, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, 100, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+
+ // dca xy
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, 2, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, 0.5, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, 0.1, 0.5, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+
+ // dca z
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, 4, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, 1, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+
+ // ITS cluster
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, 2, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, 3, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+
+ // TOF PID
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, 2, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl1,
+ dEdxhm, 4, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+
+ // TPC PID
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl0, //84%
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+ RegisterTaskNPEpPb( MCthere, isAOD, kBeauty, kDefTPCcl, kDefTPCclPID, kDefITScl, kDefDCAr, kDefDCAz, tpcl2, //50%
+ dEdxhm, kDefTOFs, AliHFEextraCuts::kBoth, kHFEV0A, kassITS, kassTPCcl, kassTPCPIDcl,
+ kassDCAr, kassDCAz, dEdxaclm, dEdxachm, kassITSpid, kassTOFpid, kTRUE, kTRUE, kWei, kb2weiData, kTRUE);
+ }
}
-
+
return NULL;
}
//===============================================================================
-AliAnalysisTask *RegisterTaskNPEpPb(Bool_t useMC, Bool_t isAOD,
+AliAnalysisTask *RegisterTaskNPEpPb(Bool_t useMC, Bool_t isAOD, Bool_t beauty,
Int_t tpcCls=120, Int_t tpcClsPID=80,
Int_t itsCls=4, Double_t dcaxy=1.0, Double_t dcaz=2.0,
Double_t *tpcdEdxcutlow=NULL, Double_t *tpcdEdxcuthigh=NULL,
- Double_t tofs=3., Int_t itshitpixel =AliHFEextraCuts::kBoth, Int_t icent=1,
- Double_t etaIncMin = -0.8, Double_t etaIncMax = 0.8,
- Double_t assETAm=-0.8, Double_t assETAp=0.8, Int_t assITS=2, Int_t assTPCcl=100,
+ Double_t tofs=3., Int_t itshitpixel =AliHFEextraCuts::kBoth,
+ //Double_t phimi=-1., Double_t phima=-1.,
+ Int_t icent=1,
+ Int_t assITS=2, Int_t assTPCcl=100,
Int_t assTPCPIDcl=80, Double_t assDCAr=1.0, Double_t assDCAz=2.0,
Double_t *assTPCSminus = NULL, Double_t *assTPCSplus=NULL,
- Bool_t useCat1Tracks = kTRUE, Bool_t useCat2Tracks = kTRUE)
+ Double_t assITSpid = 3.0, Double_t assTOFpid = 0.0,
+ Bool_t useCat1Tracks = kTRUE, Bool_t useCat2Tracks = kTRUE,
+ Int_t weightlevelback = -1, Int_t WhichWei = 0,
+ Bool_t npeBeauty = kFALSE, Bool_t ipCharge = kFALSE, Bool_t isOpp = kFALSE, Int_t ipSys = 0)
{
+ // Fixed values
+ Double_t etaIncMin = -0.8; Double_t etaIncMax = 0.8;
+ Double_t phimi = -1.; Double_t phima = -1.;
+ Double_t assETAm=-0.8; Double_t assETAp=0.8;
+ Double_t assMinPt = 0.1;
+
//
// Cuts on the inclusive leg
//
if(tpcdEdxcutlow) tpclow = (Int_t) (tpcdEdxcutlow[0]*1000.);
Int_t itofs = (Int_t)(tofs*10.);
Int_t ipixelany = itshitpixel;
+ TString phirange("");
+ if (phimi >= 0. && phima >= 0.){
+ phirange += "Phi";
+ phirange += phimi;
+ phirange += "-";
+ phirange += phima;
+ }
//
// Cuts on the associated leg
Int_t iassDCAr = (Int_t)(assDCAr*10);
Int_t iassDCAz = (Int_t)(assDCAz*10);
Int_t iassTPCSminus = assTPCSplus ? (Int_t)(assTPCSplus[0]*1000.) : 0;
+ Int_t iassTOF = (Int_t)(assTOFpid*10);
+ Int_t iassITS = (Int_t)(assITSpid * 10.);
+ Int_t phoTrack = 0;
+ if (useCat1Tracks) phoTrack = 1;
+ if (useCat2Tracks) phoTrack = 2;
- printf("Argument passed to function to determine the centrality estimator %i\n", icent);
+ //printf("Argument passed to function to determine the centrality estimator %i\n", icent);
if (icent == 2) TString cesti("V0M");
else if (icent == 3) TString cesti("CL1");
else if (icent == 4) TString cesti("ZNA");
else TString cesti("V0A");
- printf("Centrality estimator %s\n", cesti.Data());
+ //printf("Centrality estimator %s\n", cesti.Data());
+
+ TString cweightsback("");
+ if(weightlevelback>=0) {
+ cweightsback += "Wa";
+ if (WhichWei>0){
+ cweightsback += WhichWei;
+ //cweightsback += weightlevelback;
+ }
+ }
+
+ if(beauty) {
+ if(ipCharge && isOpp) TString cbeauty("BeautyIPopp");
+ else if(ipCharge) TString cbeauty("BeautyIPcrg");
+ else if(!ipCharge) TString cbeauty("Beauty");
+ else TString cbeauty("BeautyWrong");
+ cbeauty = cbeauty+Form("ip%dwei%d",ipSys,WhichWei);
+ }
+ else TString cbeauty("");
+
+ TString appendix(TString::Format("incTPCc%dp%dITS%dSPD%dDCAr%dz%dTPCs%dTOFs%d_photTPCc%dp%dITS%dDCAr%dz%dTPCs%dITSs%dTOFs%dtr%dce%s%s%s",
+ tpcCls,tpcClsPID,itsCls,ipixelany,idcaxy,idcaz,tpclow,itofs,assTPCcl,assTPCPIDcl,assITS,iassDCAr,
+ iassDCAz,iassTPCSminus,iassITS,iassTOF,phoTrack,cesti.Data(),cweightsback.Data(),cbeauty.Data()));
- TString appendix(TString::Format("SPD%d_incTPCc%dTPCp%dITS%dDCAr%dz%dTPCs%dTOFs%d_photTPCc%dTPCp%dITS%dDCAr%dDCAz%dTPCs%dce%s",ipixelany,tpcCls,tpcClsPID,itsCls,idcaxy,idcaz,tpclow,itofs,assTPCcl,assTPCPIDcl,assITS,iassDCAr,iassDCAz,iassTPCSminus,cesti.Data()));
printf("Add macro appendix %s\n", appendix.Data());
- if(!gROOT->GetListOfGlobalFunctions()->FindObject("ConfigHFEnpepPb")) gROOT->LoadMacro("$ALICE_ROOT/PWGHF/hfe/macros/configs/pPb/ConfigHFEnpepPb.C");
+ if(!gROOT->GetListOfGlobalFunctions()->FindObject("ConfigWeightFactors"))
+ gROOT->LoadMacro("$ALICE_ROOT/PWGHF/hfe/macros/configs/pPb/ConfigWeightFactors.C");
+ if(!gROOT->GetListOfGlobalFunctions()->FindObject("ConfigHFEnpepPb"))
+ gROOT->LoadMacro("$ALICE_ROOT/PWGHF/hfe/macros/configs/pPb/ConfigHFEnpepPb.C");
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
- AliAnalysisTaskHFE *task = ConfigHFEnpepPb(useMC, isAOD, appendix, tpcCls, tpcClsPID, itsCls, dcaxy, dcaz, tpcdEdxcutlow, tpcdEdxcuthigh, tofs, 0, itshitpixel, icent, etaIncMin, etaIncMax,
- assETAm, assETAp, assITS, assTPCcl, assTPCPIDcl, assDCAr, assDCAz, assTPCSminus, assTPCSplus, useCat1Tracks, useCat2Tracks);
+ AliAnalysisTaskHFE *task = ConfigHFEnpepPb(useMC, isAOD, beauty, appendix, tpcCls, tpcClsPID, itsCls, dcaxy, dcaz,
+ tpcdEdxcutlow, tpcdEdxcuthigh, tofs, 0, itshitpixel, icent, etaIncMin, etaIncMax,
+ phimi*TMath::Pi()/9., phima*TMath::Pi()/9.,
+ assETAm, assETAp, assMinPt, assITS, assTPCcl, assTPCPIDcl, assDCAr, assDCAz, assTPCSminus,
+ assTPCSplus,assITSpid,assTOFpid,
+ useCat1Tracks, useCat2Tracks, weightlevelback, npeBeauty, ipCharge, isOpp, ipSys);
+
if(isAOD)
task->SetAODAnalysis();
else
task->SelectCollisionCandidates(AliVEvent::kINT7);
+ if(useMC&&(beauty || (weightlevelback>=0))) {
+ ConfigWeightFactors(task,kFALSE,WhichWei);
+ if(WhichWei==8) {
+ ConfigWeightFactors(task,kTRUE,3);
+ task->SetNonHFEsystematics(kTRUE);
+ }
+ }
TString containerName = mgr->GetCommonFileName();
containerName += ":HFEtask";
containerName += appendix.Data();
Int_t centralityIndex=0,
Bool_t isAOD = kFALSE,
Bool_t isEMCal = kFALSE,
+Bool_t isTrigger = kFALSE,
Int_t EMCalThreshould = 0 //0 == EG1, 1 == EG2
)
//Additional Cuts
hfecuts->SetPtRange(2, 1e6); //Transversal momentum range in GeV/c
- //hfecuts->SetMaxImpactParam(1,2); //DCA to vertex
+ //DCA cut included in the analysis 12 March 2014
+ hfecuts->SetMaxImpactParam(1,2); //DCA to vertex
//Event Selection
hfecuts->SetVertexRange(10.); //
if(EMCalThreshould==1 && triggerIndex==2) task->SetEMCalTriggerEG2();
if(isEMCal) task->SetUseEMCal();
+ //Bool_t isTrigger = kFALSE;
+ if(isTrigger) task->SetUseTrigger();
+
if(configIndex==100){
task->SetUseShowerShapeCut(kTRUE);
//task->SetM02Cut(0.0,0.3);
//eta cuts
- if(configIndex==37) task->SetEtaCut(-0.6,0);
- else if (configIndex==38) task->SetEtaCut(0,0.6);
- else if (configIndex==39) task->SetEtaCut(-0.5,0.5);
- else if (configIndex==40) task->SetEtaCut(-0.6,-0.2);
- else if (configIndex==41) task->SetEtaCut(-0.5,-0.1);
- else if (configIndex==42) task->SetEtaCut(-0.4,0);
- else if (configIndex==43) task->SetEtaCut(-0.3,0.1);
- else if (configIndex==44) task->SetEtaCut(-0.2,0.2);
- else if (configIndex==45) task->SetEtaCut(-0.1,0.3);
- else if (configIndex==46) task->SetEtaCut(0,0.4);
- else if (configIndex==47) task->SetEtaCut(-0.4,0.4);
- else if (configIndex==48) task->SetEtaCut(-0.3,0.3);
+ if(configIndex==40) task->SetEtaCut(-0.6,0);
+ else if (configIndex==41) task->SetEtaCut(-0.5,0.1);
+ else if (configIndex==42) task->SetEtaCut(0,0.6);
+ else if (configIndex==43) task->SetEtaCut(-0.1,0.5);
+ else if (configIndex==44) task->SetEtaCut(-0.5,0.5);
+ else if (configIndex==45) task->SetEtaCut(-0.4,0.4);
+ else if (configIndex==46) task->SetEtaCut(-0.3,0.3);
+ //else if (configIndex==47) task->SetEtaCut(-0.4,0.4);
+ //else if (configIndex==48) task->SetEtaCut(-0.3,0.3);
else task->SetEtaCut(-0.6,0.6);
//track matching cuts
if(configIndex==70) params[0] = -1.5;
else if (configIndex==71) params[0] = -0.5;
- else if (configIndex==72) params[0] = -1.25;
- else if (configIndex==73) params[0] = -0.75;
+ else if (configIndex==72) params[0] = 0;
+ else if (configIndex==73) params[0] = 0.25;
else if (configIndex==74) params[0] = -1.75;
else params[0] = -1;
+Bool_t ReadContaminationFunctionsBeauty(TString filename, TF1 **functions, double sigma){
+ TFile *in = TFile::Open(Form("$ALICE_ROOT/PWGHF/hfe/macros/configs/pPb/%s", filename.Data()));
+ gROOT->cd();
+ int isig = static_cast<int>(sigma * 100.);
+ if (isig == -44) isig = -42;
+ if (isig == 6) isig = 9;
+ printf("Getting hadron background for the sigma cut: %d\n", isig);
+ bool status = kTRUE;
+ for(int icent = 0; icent < 12; icent++){
+ functions[icent] = dynamic_cast<TF1 *>(in->Get(Form("hback_%d_%d", isig, icent)));
+ if(functions[icent]) printf("Config for centrality class %d found\n", icent);
+ else{
+ printf("Config for the centrality class %d not found\n", icent);
+ status = kFALSE;
+ }
+ }
+ delete in;
+ return status;
+}
+
Bool_t ReadContaminationFunctions(TString filename, TF1 **functions, double sigma){
TFile *in = TFile::Open(Form("$ALICE_ROOT/PWGHF/hfe/macros/configs/pPb/%s", filename.Data()));
gROOT->cd();
return status;
}
-AliAnalysisTaskHFE* ConfigHFEnpepPb(Bool_t useMC, Bool_t isAOD, TString appendix,
+
+AliAnalysisTaskHFE* ConfigHFEnpepPb(Bool_t useMC, Bool_t isAOD, Bool_t isBeauty, TString appendix,
UChar_t TPCcl=70, UChar_t TPCclPID = 80,
UChar_t ITScl=3, Double_t DCAxy=1000., Double_t DCAz=1000.,
Double_t* tpcdEdxcutlow=NULL, Double_t* tpcdEdxcuthigh=NULL,
Double_t TOFs=3., Int_t TOFmis=0,
Int_t itshitpixel = 0, Int_t icent,
Double_t etami=-0.8, Double_t etama=0.8,
- Double_t assETAm=-0.8, Double_t assETAp=0.8,
- Int_t assITS=2,
+ Double_t phimi=-1., Double_t phima=-1.,
+ Double_t assETAm=-0.8, Double_t assETAp=0.8,
+ Double_t assMinPt=0.2, Int_t assITS=2,
Int_t assTPCcl=100, Int_t assTPCPIDcl=80,
Double_t assDCAr=1.0, Double_t assDCAz=2.0,
Double_t *assTPCSminus=NULL, Double_t *assTPCSplus=NULL,
- Bool_t useCat1Tracks = kTRUE, Bool_t useCat2Tracks = kTRUE)
+ Double_t assITSpid=-3.,
+ Double_t assTOFs=3.,
+ Bool_t useCat1Tracks = kTRUE, Bool_t useCat2Tracks = kTRUE, Int_t weightlevelback = -1,
+ Bool_t nonPhotonicElectronBeauty = kFALSE, Bool_t ipCharge = kFALSE, Bool_t ipOpp = kFALSE, Int_t ipsys = 0)
{
- Bool_t kAnalyseTaggedTracks = kFALSE;
+ Bool_t kAnalyseTaggedTracks = kTRUE;
Bool_t kApplyPreselection = kFALSE;
//***************************************//
hfecuts->SetCutITSpixel(itshitpixel);
hfecuts->SetCheckITSLayerStatus(kFALSE);
hfecuts->SetEtaRange(etami,etama);
+ if(phimi >= 0. && phima >= 0) hfecuts->SetPhiRange(phimi,phima);
hfecuts->SetRejectKinkDaughters();
hfecuts->SetAcceptKinkMothers();
if(isAOD) hfecuts->SetAODFilterBit(4);
//if((iPixelAny==AliHFEextraCuts::kAny) || (iPixelAny==AliHFEextraCuts::kSecond))
- //hfecuts->SetProductionVertex(0,7,0,7);
hfecuts->SetMaxImpactParam(DCAxy,DCAz);
hfecuts->SetUseMixedVertex(kTRUE);
hfecuts->SetSPDVtxResolutionCut();
hfecuts->SetpApileupCut();
+ Bool_t ipSig = kFALSE;
+
+ hfecuts->SetIPcutParam(0.0054,0.078,-0.56,0,ipSig,ipCharge,ipOpp);
+ if(ipsys==1) hfecuts->SetIPcutParam(0.0054,0.057,-0.66,0,ipSig,ipCharge,ipOpp);
+ if(ipsys==2) hfecuts->SetIPcutParam(0.012,0.088,-0.65,0,ipSig,ipCharge,ipOpp);
+
+ if(isBeauty) hfecuts->SetProductionVertex(0,100,0,100);
+
// TOF settings:
Int_t usetof=0;
Bool_t kTOFmis=kFALSE;
AliHFEvarManager *vm = task->GetVarManager();
vm->AddVariable("pt", sizept, ptbinning);
vm->AddVariable("eta", sizeeta, -0.8,0.8);
- vm->AddVariable("phi",21, -0, 2*TMath::Pi());
+ vm->AddVariable("phi",18, -0, 2*TMath::Pi());
vm->AddVariable("charge");
vm->AddVariable("source");
vm->AddVariable("centrality");
Double_t paramsTPCdEdxcuthigh[12] ={3.0, 3.0, 3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0};
if(tpcdEdxcuthigh) memcpy(paramsTPCdEdxcuthigh,tpcdEdxcuthigh,sizeof(paramsTPCdEdxcuthigh));
- char *cutmodel;
- cutmodel="min(pol1(0),pol0(2))";
- Double_t params[3];
- //params[0]=-0.12; params[1]=0.14; params[2]=0.09;
- params[0]=-0.21 + paramsTPCdEdxcutlow[0];
- params[1]=0.14;
- params[2]=paramsTPCdEdxcutlow[0];
- pid->ConfigureTPCdefaultCut(cutmodel, params,tpcdEdxcuthigh[0]);
+ char *cutmodel;
+ if(useMC){ // constant (default) cut for MC
+ cutmodel="pol0(0)";
+ Double_t params[1];
+ params[0]=paramsTPCdEdxcutlow[0];
+ pid->ConfigureTPCdefaultCut(cutmodel, params,tpcdEdxcuthigh[0]);
+ } else { // correct for mean shift in data
+ cutmodel="min(pol1(0),pol0(2))";
+ Double_t params[3];
+ //params[0]=-0.12; params[1]=0.14; params[2]=0.09;
+ params[0]=-0.21 + paramsTPCdEdxcutlow[0];
+ params[1]=0.14;
+ params[2]=paramsTPCdEdxcutlow[0];
+ pid->ConfigureTPCdefaultCut(cutmodel, params,tpcdEdxcuthigh[0]);
+ }
/*
char *cutmodel;
cutmodel="pol0";
if (usetof) status = ReadContaminationFunctions("hadroncontamination_AOD139_TOFPID_pPb_eta06.root", hBackground, tpcdEdxcutlow[0]);
else status = ReadContaminationFunctions("hadroncontamination_AOD139_noTOFPID_pPb_eta06.root", hBackground, tpcdEdxcutlow[0]);
}
+ else if (isBeauty==1) {
+ status = ReadContaminationFunctionsBeauty("hadroncontamination_ESD_Beauty_TOFPID_pPb_eta06.root", hBackground, tpcdEdxcutlow[0]);
+ }
else status = ReadContaminationFunctions("hadroncontamination_TOFTPC_pPb_eta06_newsplines_try3.root", hBackground, tpcdEdxcutlow[0]);
for(Int_t a=0;a<12;a++) {
//printf("back %f \n",hBackground[a]);
AliHFEcuts *hfeBackgroundCuts = new AliHFEcuts(Form("HFEBackSub%s",appendix.Data()),"Background sub Cuts");
// hfeBackgroundCuts->SetEtaRange(assETA);
hfeBackgroundCuts->SetEtaRange(assETAm,assETAp);
- hfeBackgroundCuts->SetPtRange(0.1,1e10);
+ hfeBackgroundCuts->SetPtRange(assMinPt,20.);
hfeBackgroundCuts->SetMaxChi2perClusterTPC(4);
hfeBackgroundCuts->SetMinNClustersITS(assITS);
AliHFEpid *pidbackground = backe->GetPIDBackground();
if(useMC) pidbackground->SetHasMCData(kTRUE);
- pidbackground->AddDetector("TPC", 0);
+
+ if (assTOFs>0.){
+ pidbackground->AddDetector("TOF", 0);
+ pidbackground->AddDetector("TPC", 1);
+ } else {
+ pidbackground->AddDetector("TPC", 0);
+ }
+
Double_t paramsTPCdEdxcutlowAssoc[12] ={-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0};
if(assTPCSminus) memcpy(paramsTPCdEdxcutlowAssoc,assTPCSminus,sizeof(paramsTPCdEdxcutlowAssoc));
}
pidbackground->ConfigureTPCdefaultCut(cutmodelAssoc,paramsTPCdEdxcutlowAssoc,paramsTPCdEdxcuthighAssoc[0]); // After introducing the pPb flag, pPb is merged with pp and this line defines the cut
//backe->GetPIDBackgroundQAManager()->SetHighResolutionHistos();
+
+ if (assTOFs>0.){
+ pidbackground->ConfigureTOF(TOFs);
+ }
+
backe->SetHFEBackgroundCuts(hfeBackgroundCuts);
// Selection of associated tracks for the pool
if(useCat1Tracks) backe->SelectCategory1Tracks(kTRUE);
if(useCat2Tracks){
backe->SelectCategory2Tracks(kTRUE);
- backe-> SetITSMeanShift(-0.5);
+ backe->SetITSMeanShift(-0.5);
+ backe->SetITSnSigmaHigh(assITSpid);
+ Double_t assITSminus = -1.0 * assITSpid;
+ backe->SetITSnSigmaLow(assITSminus);
+ //backe->SetminPt(assMinPt);
}
// apply opening angle cut to reduce file size
backe->SetMaxInvMass(0.3);
backe->SetPtBinning(sizept, ptbinning);
backe->SetEtaBinning(sizeeta, etabinning);
-
+ // MC weight
+ if(useMC) {
+ //printf("test put weight %d\n",weightlevelback);
+ if((weightlevelback >=0) && (weightlevelback < 3)) backe->SetWithWeights(weightlevelback);
+ }
task->SetHFEBackgroundSubtraction(backe);
+ //task->SetWeightHist();
+
//***************************************//
// V0 tagged tracks //
//***************************************//
printf("task %p\n", task);
task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
task->SetQAOn(AliAnalysisTaskHFE::kMCqa);
- task->SwitchOnPlugin(AliAnalysisTaskHFE::kNonPhotonicElectron);
task->SwitchOnPlugin(AliAnalysisTaskHFE::kDEstep);
+ if(nonPhotonicElectronBeauty) task->SwitchOnPlugin(AliAnalysisTaskHFE::kNonPhotonicElectronBeauty);
+ else task->SwitchOnPlugin(AliAnalysisTaskHFE::kNonPhotonicElectron);
printf("*************************************\n");
printf("Configuring standard Task:\n");
--- /dev/null
+void ConfigWeightFactors(AliAnalysisTaskHFE *task, Bool_t syst = kFALSE, Int_t collType = 1, TString filename = "nonHFEcorrect.root"){
+ //
+ // Set weighting factors for nonHFE backgrounds
+ // Option "collType": 0 for pp 2.76 TeV; 1 for pp 7 TeV; 2 for PbPb; 3 for DPMJET pPb; 4 for HIJING pPb; 5 for DPMJET/HIJING pPb
+ //
+ //Get the correction factors for Non-HF electron yields from a root-file
+ Double_t elecBackGroundWeight[11][6][44][3];//centrality, species, momentum, background level
+ for(Int_t iCent = 0; iCent < 11; iCent++){
+ for(Int_t iSpecies = 0; iSpecies < 6; iSpecies++){
+ for(Int_t iBin = 0; iBin < 44; iBin++){
+ for(Int_t iError = 0; iError < 3; iError++){
+ elecBackGroundWeight[iCent][iSpecies][iBin][iError] = 0;
+ }
+ }
+ }
+ }
+ const Char_t *backNameMC[6] = {"pion","eta","omega","phi","etap","rho"};
+ printf("Take the weights from %s\n",Form("$ALICE_ROOT/PWGHF/hfe/macros/configs/pPb/%s", filename.Data()));
+ TFile *weightFile = TFile::Open(Form("$ALICE_ROOT/PWGHF/hfe/macros/configs/pPb/%s", filename.Data()));
+ if(weightFile){
+ if(syst){
+ TH1F *hRelErr[2][2];//errors for pion yields, which form the correlated component of the relative error for all other decaying mesons, except for eta, which are parameterized independently
+ if(collType == 1){
+ hRelErr[0][0] = (TH1F*)weightFile->Get("hErrorspionLower");
+ hRelErr[0][1] = (TH1F*)weightFile->Get("hErrorspionUpper");
+ hRelErr[1][0] = (TH1F*)weightFile->Get("hErrorsetaLower");
+ hRelErr[1][1] = (TH1F*)weightFile->Get("hErrorsetaUpper");
+ }
+ else if(collType == 0){
+ hRelErr[0][0] = (TH1F*)weightFile->Get("hErrors_2.76TeV_pionLower");
+ hRelErr[0][1] = (TH1F*)weightFile->Get("hErrors_2.76TeV_pionUpper");
+ //hRelErr[1][0] = (TH1F*)weightFile->Get("hErrors_2.76TeV_etaLower");
+ //hRelErr[1][1] = (TH1F*)weightFile->Get("hErrors_2.76TeV_etaUpper");
+ }
+ else if(collType == 3 || collType == 4 || collType == 5){
+ hRelErr[0][0] = (TH1F*)weightFile->Get("hErrors_pPb_5.023TeV_pionLower");
+ hRelErr[0][1] = (TH1F*)weightFile->Get("hErrors_pPb_5.023TeV_pionUpper");
+ for(int i=0; i<hRelErr[0][0]->GetNbinsX(); i++){ //assign 7% systematic uncertainties for pPb
+ hRelErr[0][0]->SetBinContent(i+1, -0.07);
+ hRelErr[0][1]->SetBinContent(i+1, 0.07);
+ }
+ }
+ }
+ for(Int_t iCent = 0; iCent < 11; iCent++){//centrality bins
+ for(Int_t iSpecies = 0; iSpecies < 6; iSpecies++){//species of decaying mesons
+ TH1F *hRatio = 0x0;
+ if(collType == 1){
+ hRatio = (TH1F*)weightFile->Get(Form("hRatio%s",backNameMC[iSpecies]));
+ }
+ else if(collType == 0){
+ hRatio = (TH1F*)weightFile->Get(Form("hRatio_2.76TeV_%s",backNameMC[iSpecies]));
+ }
+ else if(collType == 3){
+ hRatio = (TH1F*)weightFile->Get(Form("hRatio_pPb_5.023TeV_DPMJET_%s",backNameMC[iSpecies]));
+ }
+ else if(collType == 4){
+ hRatio = (TH1F*)weightFile->Get(Form("hRatio_pPb_5.023TeV_HIJING_%s",backNameMC[iSpecies]));
+ }
+ else if(collType == 5){
+ hRatio = (TH1F*)weightFile->Get(Form("hRatio_pPb_5.023TeV_DvsH_%s",backNameMC[iSpecies]));
+ }
+ else{
+ if((iCent == 1)||(iCent == 4)){
+ hRatio = (TH1F*)weightFile->Get(Form("hRatio%s%d",backNameMC[iSpecies],iCent-1));
+ }
+ else if(iCent > 7){
+ hRatio = (TH1F*)weightFile->Get(Form("hRatio%s7",backNameMC[iSpecies]));
+ }
+ else{
+ hRatio = (TH1F*)weightFile->Get(Form("hRatio%s%d",backNameMC[iSpecies],iCent));
+ }
+ }
+ for(Int_t iBin = 1; iBin < 45; iBin++){//momentum bin of mother meson
+ if(iCent == 0){
+ elecBackGroundWeight[iCent][iSpecies][iBin-1][0] = hRatio->GetBinContent(iBin);
+ if(syst && (collType != 2)){
+ for(Int_t iError = 0; iError < 2; iError++){//0: best estimate, 1,2: lower, upper uncertainty level
+ if((iSpecies == 1) && (collType == 1))
+ elecBackGroundWeight[iCent][iSpecies][iBin-1][iError+1]=elecBackGroundWeight[iCent][iSpecies][iBin-1][0]*(1+hRelErr[1][iError]->GetBinContent(iBin));
+ else
+ elecBackGroundWeight[iCent][iSpecies][iBin-1][iError+1]=elecBackGroundWeight[iCent][iSpecies][iBin-1][0]*(1+hRelErr[0][iError]->GetBinContent(iBin));//Addition of relative errors from histograms with "+", because lower errors are defined as negative numbers in the reference histograms!
+ }
+ }
+ }
+ else{
+ if(collType == 2){
+ elecBackGroundWeight[iCent][iSpecies][iBin-1][0] = hRatio->GetBinContent(iBin);
+ }
+ }
+ }
+ }
+ }
+ weightFile->Close();
+ }
+ else{
+ printf("No reference file for background electron weighting found!\n");
+ }
+
+ const Double_t binLimit[45] = {0.1,0.112797,0.127231,0.143512,0.161877,0.182592,0.205957,0.232313,0.262041,0.295573,0.333397,0.37606,0.424183,0.478465,0.539692,0.608754,0.686654,0.774523,0.873636,0.985432,1.11153,1.25377,1.41421,1.59519,1.79932,2.02957,2.28928,2.58223,2.91267,3.2854,3.70582,4.18004,4.71494,5.3183,5.99886,6.76651,7.6324,8.60909,9.71076,10.9534,12.3551,13.9361,15.7195,17.731,20};//bin limits from the measured pi0 spectrum
+
+ for(Int_t iCent = 0; iCent < 11; iCent++){//centrality bins
+ for(Int_t iBin = 1; iBin < 45; iBin++){//for all centralities, pt bins and all meson decays, set weighting factors for daughter electrons
+ task->SetBinLimits(iBin-1,binLimit[iBin-1]);
+ for(Int_t iSpecies = 0; iSpecies < 6; iSpecies++){
+ for(Int_t iError = 0; iError < 3; iError++)
+ task->SetElecBackGroundFactors(iBin-1, iSpecies, iCent, iError, elecBackGroundWeight[iCent][iSpecies][iBin-1][iError]);
+ }
+ }
+ }
+}
#include "AliInputEventHandler.h"
#include "AliPID.h"
#include "AliNormalizationCounter.h"
-
+#include "AliVertexingHFUtils.h"
ClassImp(AliAnalysisTaskSELambdac)
//________________________________________________________________________
- AliAnalysisTaskSELambdac::AliAnalysisTaskSELambdac():
- AliAnalysisTaskSE(),
- fOutput(0),
- fHistNEvents(0),
- fhChi2(0),
- fhMassPtGreater3(0),
- fhMassPtGreater3TC(0),
- fhMassPtGreater3Kp(0),
- fhMassPtGreater3KpTC(0),
- fhMassPtGreater3Lpi(0),
- fhMassPtGreater3LpiTC(0),
- fhMassPtGreater3Dk(0),
- fhMassPtGreater3DkTC(0),
- fhMassPtGreater33Pr(0),
- fhMassPtGreater33PrTC(0),
- fhMassPtGreater2(0),
- fhMassPtGreater2TC(0),
- fhMassPtGreater2Kp(0),
- fhMassPtGreater2KpTC(0),
- fhMassPtGreater2Lpi(0),
- fhMassPtGreater2LpiTC(0),
- fhMassPtGreater2Dk(0),
- fhMassPtGreater2DkTC(0),
- fhMassPtGreater23Pr(0),
- fhMassPtGreater23PrTC(0),
- fNtupleLambdac(0),
- fUpmasslimit(2.486),
- fLowmasslimit(2.086),
- fNPtBins(0),
- fRDCutsAnalysis(0),
- fRDCutsProduction(0),
- fListCuts(0),
- fFillNtuple(kFALSE),
- fReadMC(kFALSE),
- fMCPid(kFALSE),
- fRealPid(kFALSE),
- fResPid(kTRUE),
- fUseKF(kFALSE),
- fAnalysis(kFALSE),
- fVHF(0),
- fFillVarHists(kFALSE),
- fMultiplicityHists(kFALSE),
- fPriorsHists(kFALSE),
- fNentries(0),
- fOutputMC(0),
- fAPriori(0),
- fMultiplicity(0),
- //fUtilPid(0),
- fPIDResponse(0),
- fCounter(0)
+AliAnalysisTaskSELambdac::AliAnalysisTaskSELambdac():
+AliAnalysisTaskSE(),
+ fOutput(0),
+ fHistNEvents(0),
+ fhChi2(0),
+ fhMassPtGreater3(0),
+ fhMassPtGreater3TC(0),
+ fhMassPtGreater3Kp(0),
+ fhMassPtGreater3KpTC(0),
+ fhMassPtGreater3Lpi(0),
+ fhMassPtGreater3LpiTC(0),
+ fhMassPtGreater3Dk(0),
+ fhMassPtGreater3DkTC(0),
+ fhMassPtGreater33Pr(0),
+ fhMassPtGreater33PrTC(0),
+ fhMassPtGreater2(0),
+ fhMassPtGreater2TC(0),
+ fhMassPtGreater2Kp(0),
+ fhMassPtGreater2KpTC(0),
+ fhMassPtGreater2Lpi(0),
+ fhMassPtGreater2LpiTC(0),
+ fhMassPtGreater2Dk(0),
+ fhMassPtGreater2DkTC(0),
+ fhMassPtGreater23Pr(0),
+ fhMassPtGreater23PrTC(0),
+ fhEta3Prong(0),
+ fhEta3ProngAcc(0),
+ fhEta3ProngProd(0),
+ fhEta3ProngAn(0),
+ fhRap3Prong(0),
+ fhRap3ProngAcc(0),
+ fhRap3ProngProd(0),
+ fhRap3ProngAn(0),
+ fhSelectBit(0),
+ fhProtonPtProngLcPt(0),
+ fhBProtonPtProngLcPt(0),
+ fhProtond0ProngLcPt(0),
+ fhBProtond0ProngLcPt(0),
+ fhKaonPtProngLcPt(0),
+ fhBKaonPtProngLcPt(0),
+ fhKaond0ProngLcPt(0),
+ fhBKaond0ProngLcPt(0),
+ fhPionPtProngLcPt(0),
+ fhBPionPtProngLcPt(0),
+ fhPiond0ProngLcPt(0),
+ fhBPiond0ProngLcPt(0),
+ fhDist12PrimLcPt(0),
+ fhBDist12PrimLcPt(0),
+ fhSigmaVertLcPt(0),
+ fhBSigmaVertLcPt(0),
+ fhdcasLcPt(0),
+ fhBdcasLcPt(0),
+ fhCosPointingAngleLcPt(0),
+ fhBCosPointingAngleLcPt(0),
+ fhDecayLengthLcPt(0),
+ fhBDecayLengthLcPt(0),
+ fhSum2LcPt(0),
+ fhBSum2LcPt(0),
+ fhPtMaxLcPt(0),
+ fhBPtMaxLcPt(0),
+ fNtupleLambdac(0),
+ fUpmasslimit(2.486),
+ fLowmasslimit(2.086),
+ fNPtBins(0),
+ fRDCutsAnalysis(0),
+ fRDCutsProduction(0),
+ fListCuts(0),
+ fFillNtuple(kFALSE),
+ fReadMC(kFALSE),
+ fMCPid(kFALSE),
+ fRealPid(kFALSE),
+ fResPid(kTRUE),
+ fUseKF(kFALSE),
+ fAnalysis(kFALSE),
+ fVHF(0),
+ fFillVarHists(kFALSE),
+ fMultiplicityHists(kFALSE),
+ fPriorsHists(kFALSE),
+ fLcCut(kFALSE),
+ fLcPIDCut(kFALSE),
+ fNentries(0),
+ fOutputMC(0),
+ fAPriori(0),
+ fMultiplicity(0),
+//fUtilPid(0),
+ fPIDResponse(0),
+ fCounter(0)
{
// Default constructor
Float_t ptlims[7]={0.,2.,4.,6.,8.,12.,24.};
fhMassPtGreater2DkTC(0),
fhMassPtGreater23Pr(0),
fhMassPtGreater23PrTC(0),
+ fhEta3Prong(0),
+ fhEta3ProngAcc(0),
+ fhEta3ProngProd(0),
+ fhEta3ProngAn(0),
+ fhRap3Prong(0),
+ fhRap3ProngAcc(0),
+ fhRap3ProngProd(0),
+ fhRap3ProngAn(0),
+ fhSelectBit(0),
+ fhProtonPtProngLcPt(0),
+ fhBProtonPtProngLcPt(0),
+ fhProtond0ProngLcPt(0),
+ fhBProtond0ProngLcPt(0),
+ fhKaonPtProngLcPt(0),
+ fhBKaonPtProngLcPt(0),
+ fhKaond0ProngLcPt(0),
+ fhBKaond0ProngLcPt(0),
+ fhPionPtProngLcPt(0),
+ fhBPionPtProngLcPt(0),
+ fhPiond0ProngLcPt(0),
+ fhBPiond0ProngLcPt(0),
+ fhDist12PrimLcPt(0),
+ fhBDist12PrimLcPt(0),
+ fhSigmaVertLcPt(0),
+ fhBSigmaVertLcPt(0),
+ fhdcasLcPt(0),
+ fhBdcasLcPt(0),
+ fhCosPointingAngleLcPt(0),
+ fhBCosPointingAngleLcPt(0),
+ fhDecayLengthLcPt(0),
+ fhBDecayLengthLcPt(0),
+ fhSum2LcPt(0),
+ fhBSum2LcPt(0),
+ fhPtMaxLcPt(0),
+ fhBPtMaxLcPt(0),
fNtupleLambdac(0),
fUpmasslimit(2.486),
fLowmasslimit(2.086),
fFillVarHists(kFALSE),
fMultiplicityHists(kFALSE),
fPriorsHists(kFALSE),
+ fLcCut(kFALSE),
+ fLcPIDCut(kFALSE),
fNentries(0),
fOutputMC(0),
fAPriori(0),
fOutput->Add(fMassHist3Pr[i]);
fOutput->Add(fMassHist3PrTC[i]);
}
-
+ fhEta3Prong = new TH2F("hEta3Prong","hEta3Prong;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
+ fhEta3ProngAcc = new TH2F("hEta3ProngAcc","hEta3ProngAcc;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
+ fhEta3ProngProd = new TH2F("hEta3ProngProd","hEta3ProngProd;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
+ fhEta3ProngAn = new TH2F("hEta3ProngAn","hEta3ProngAn;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
+ fhRap3Prong = new TH2F("hRap3Prong","hRap3Prong;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
+ fhRap3ProngAcc = new TH2F("hRap3ProngAcc","hRap3ProngAcc;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
+ fhRap3ProngProd = new TH2F("hRap3ProngProd","hRap3ProngProd;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
+ fhRap3ProngAn = new TH2F("hRap3ProngAn","hRap3ProngAn;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
+
+ fhSelectBit = new TH1F("hSelectBit","hSelectBit",5,-0.5,5.5);
+ fhSelectBit->GetXaxis()->SetBinLabel(2,"All");
+ fhSelectBit->GetXaxis()->SetBinLabel(3,"SelectionMap");
+ fhSelectBit->GetXaxis()->SetBinLabel(4,"!LcCut");
+ fhSelectBit->GetXaxis()->SetBinLabel(5,"!LcPID");
+
+ fOutput->Add(fhEta3Prong);
+ fOutput->Add(fhEta3ProngAcc);
+ fOutput->Add(fhEta3ProngProd);
+ fOutput->Add(fhEta3ProngAn);
+ fOutput->Add(fhRap3Prong);
+ fOutput->Add(fhRap3ProngAcc);
+ fOutput->Add(fhRap3ProngProd);
+ fOutput->Add(fhRap3ProngAn);
+ fOutput->Add(fhSelectBit);
+
fHistNEvents = new TH1F("fHistNEvents", "Number of processed events; ; Events",3,-1.5,1.5);
fHistNEvents->Sumw2();
fHistNEvents->SetMinimum(0);
TH2F *hBpiSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
fOutputMC->Add(hBpiSigmaVspTPC);
+ //Jaime Lc specific
+ hisname.Form("hLcRealTot");
+ TH1F *hLambdaRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
+ fOutputMC->Add(hLambdaRealTot);
+ hisname.Form("hbLcRealTot");
+ TH1F *hbLambdaRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
+ fOutputMC->Add(hbLambdaRealTot);
+ hisname.Form("hLcIDTot");
+ TH1F *hLambdaIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
+ fOutputMC->Add(hLambdaIDTot);
+ hisname.Form("hbLcIDTot");
+ TH1F *hbLambdaIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
+ fOutputMC->Add(hbLambdaIDTot);
+ hisname.Form("hLcIDGood");
+ TH1F *hLambdaIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
+ fOutputMC->Add(hLambdaIDGood);
+ hisname.Form("hbLcIDGood");
+ TH1F *hbLambdaIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
+ fOutputMC->Add(hbLambdaIDGood);
+ hisname.Form("hLcnoID");
+ TH1F *hLambdanoID=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
+ fOutputMC->Add(hLambdanoID);
+ hisname.Form("hbLcnoID");
+ TH1F *hbLambdanoID=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
+ fOutputMC->Add(hbLambdanoID);
+
// other generic
hisname.Form("hLcpt");
TH1F *hLcPt=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
TH1F *hBPtMax=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
fOutputMC->Add(hBPtMax);
-
+//2D Var x Lc Pt
+ hisname.Form("hpptProngLcPt");
+ fhProtonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
+ fOutputMC->Add(fhProtonPtProngLcPt);
+ hisname.Form("hbpptProngLcPt");
+ fhBProtonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
+ fOutputMC->Add(fhBProtonPtProngLcPt);
+
+ hisname.Form("hpd0ProngLcPt");
+ fhProtond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
+ fOutputMC->Add(fhProtond0ProngLcPt);
+ hisname.Form("hbpd0ProngLcPt");
+ fhBProtond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
+ fOutputMC->Add(fhBProtond0ProngLcPt);
+
+ hisname.Form("hKptProngLcPt");
+ fhKaonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
+ fOutputMC->Add(fhKaonPtProngLcPt);
+ hisname.Form("hbKptProngLcPt");
+ fhBKaonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
+ fOutputMC->Add(fhBKaonPtProngLcPt);
+
+ hisname.Form("hKd0ProngLcPt");
+ fhKaond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
+ fOutputMC->Add(fhKaond0ProngLcPt);
+ hisname.Form("hbKd0ProngLcPt");
+ fhBKaond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
+ fOutputMC->Add(fhBKaond0ProngLcPt);
+
+ hisname.Form("hpiptProngLcPt");
+ fhPionPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
+ fOutputMC->Add(fhPionPtProngLcPt);
+ hisname.Form("hbpiptProngLcPt");
+ fhBPionPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
+ fOutputMC->Add(fhBPionPtProngLcPt);
+
+ hisname.Form("hpid0ProngLcPt");
+ fhPiond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,-0.1);
+ fOutputMC->Add(fhPiond0ProngLcPt);
+ hisname.Form("hbpid0ProngLcPt");
+ fhBPiond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
+ fOutputMC->Add(fhBPiond0ProngLcPt);
+
+ hisname.Form("hDist12toPrimLcPt");
+ fhDist12PrimLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,1.0);
+ fOutputMC->Add(fhDist12PrimLcPt);
+ hisname.Form("hbDist12toPrimLcPt");
+ fhBDist12PrimLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,1.0);
+ fOutputMC->Add(fhBDist12PrimLcPt);
+
+ hisname.Form("hSigmaVertLcPt");
+ fhSigmaVertLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,60,0.,0.06);
+ fOutputMC->Add(fhSigmaVertLcPt);
+ hisname.Form("hbSigmaVertLcPt");
+ fhBSigmaVertLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,60,0.,0.06);
+ fOutputMC->Add(fhBSigmaVertLcPt);
+
+ hisname.Form("hDCAsLcPt");
+ fhdcasLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,200,0.,0.1);
+ fOutputMC->Add(fhdcasLcPt);
+ hisname.Form("hbDCAsLcPt");
+ fhBdcasLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,200,0.,0.1);
+ fOutputMC->Add(fhBdcasLcPt);
+
+ hisname.Form("hCosPointingAngleLcPt");
+ fhCosPointingAngleLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,40,0.,1.);
+ fOutputMC->Add(fhCosPointingAngleLcPt);
+ hisname.Form("hbCosPointingAngleLcPt");
+ fhBCosPointingAngleLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,40,0.,1.);
+ fOutputMC->Add(fhBCosPointingAngleLcPt);
+
+ hisname.Form("hDecayLengthLcPt");
+ fhDecayLengthLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
+ fOutputMC->Add(fhDecayLengthLcPt);
+ hisname.Form("hbDecayLengthLcPt");
+ fhBDecayLengthLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
+ fOutputMC->Add(fhBDecayLengthLcPt);
+
+ hisname.Form("hSum2LcPt");
+ fhSum2LcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
+ fOutputMC->Add(fhSum2LcPt);
+ hisname.Form("hbSum2LcPt");
+ fhBSum2LcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
+ fOutputMC->Add(fhBSum2LcPt);
+
+ hisname.Form("hptmaxLcPt");
+ fhPtMaxLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.);
+ fOutputMC->Add(fhPtMaxLcPt);
+ hisname.Form("hbptmaxLcPt");
+ fhBPtMaxLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.);
+ fOutputMC->Add(fhBPtMaxLcPt);
fAPriori = new TList(); // AdC
fAPriori->SetOwner(); // AdC
unsetvtx=kTRUE;
}
- //if(d->GetSelectionMap()) {if(!d->HasSelectionBit(AliRDHFCuts::kLcCuts)) continue;}
- //if(d->GetSelectionMap()) {if(!d->HasSelectionBit(AliRDHFCuts::kLcPID)) continue;}
+ //Filter bit selection and QA:
+ fhSelectBit->Fill(1);
+ if(d->GetSelectionMap()){
+ fhSelectBit->Fill(2);
+ if(!d->HasSelectionBit(AliRDHFCuts::kLcCuts)) fhSelectBit->Fill(3);
+ if(!d->HasSelectionBit(AliRDHFCuts::kLcPID)) fhSelectBit->Fill(4);
+ if(fLcCut&&!d->HasSelectionBit(AliRDHFCuts::kLcCuts)) continue;
+ if(fLcPIDCut&&!d->HasSelectionBit(AliRDHFCuts::kLcPID)) continue;
+ }
Int_t isSelectedTracks = fRDCutsProduction->IsSelected(d,AliRDHFCuts::kTracks,aod);
if(!isSelectedTracks) continue;
-
+ fhEta3Prong->Fill(d->Pt(),d->Eta());
+ fhRap3Prong->Fill(d->Pt(),d->Y(4122));
+
isThereA3prongWithGoodTracks=kTRUE;
if (fRDCutsProduction->IsInFiducialAcceptance(d->Pt(),d->Y(4122))) {fNentries->Fill(6);}else{continue;}
-
+ fhEta3ProngAcc->Fill(d->Pt(),d->Eta());
+ fhRap3ProngAcc->Fill(d->Pt(),d->Y(4122));
+
Int_t ptbin=fRDCutsProduction->PtBin(d->Pt());
if(ptbin==-1) {fNentries->Fill(4); continue;} //out of bounds
{
//if MC PID or no PID, unset PID
- if(!fRealPid) cuts->SetUsePID(kFALSE);
+ //if(!fRealPid) cuts->SetUsePID(kFALSE);
Int_t selection=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
if(selection>0){
nSelectedloose[0]=nSelectedloose[0]+1;
Float_t xDecay=0.;
Float_t yDecay=0.;
Float_t zDecay=0.;
+ Bool_t IsInjected = -1;
+ Bool_t IsLc = -1;
+ Bool_t IsLcfromLb = 0;
if(fReadMC){
+ AliAODMCHeader *mcHeader2 = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
+ AliVertexingHFUtils *util = new AliVertexingHFUtils();
+ IsInjected = util->IsCandidateInjected(part,mcHeader2,arrayMC)?1:0;
+ delete util;
labDp = MatchToMCLambdac(part,arrayMC);
if(labDp>0){
+ IsLc = 1;
AliAODMCParticle *partDp = (AliAODMCParticle*)arrayMC->At(labDp);
AliAODMCParticle *dg0 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(0));
AliAODMCParticle *dg1 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(1));
pdgCode=TMath::Abs(partDp->GetPdgCode());
pdgCode1=TMath::Abs(dg0->GetPdgCode());
pdgCode2=TMath::Abs(dg1->GetPdgCode());
-
+ Int_t imother = partDp->GetMother();
+ if(imother>0){
+ AliAODMCParticle *partMom = (AliAODMCParticle*)arrayMC->At(imother);
+ if(TMath::Abs(partMom->GetPdgCode())==5122) IsLcfromLb =1;
+ else IsLcfromLb=-1;
+ }
}else{
pdgCode=-1;
}
Int_t passTightCuts=0;
if(fAnalysis) {
- passTightCuts=fRDCutsAnalysis->IsSelected(part,AliRDHFCuts::kCandidate,aod);
- if(fUseKF){
- Int_t pdgs[3]={0,0,0};
- if(invMasspKpi>0.){
- pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211;
- if(!VertexingKF(part,pdgs,field)) {
- invMasspKpi=-1.;
- invMasspKpi3Pr=-1.;
- invMasspKpiDk=-1.;
- invMasspKpiLpi=-1.;
- invMasspKpiKp=-1.;
- }
+ passTightCuts=fRDCutsAnalysis->IsSelected(part,AliRDHFCuts::kCandidate,aod);
+ if(fUseKF){
+ Int_t pdgs[3]={0,0,0};
+ if(invMasspKpi>0.){
+ pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211;
+ if(!VertexingKF(part,pdgs,field)) {
+ invMasspKpi=-1.;
+ invMasspKpi3Pr=-1.;
+ invMasspKpiDk=-1.;
+ invMasspKpiLpi=-1.;
+ invMasspKpiKp=-1.;
+ }
+ }
+ if(invMasspiKp>0.){
+ pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212;
+ if(!VertexingKF(part,pdgs,field)) {
+ invMasspiKp=-1.;
+ invMasspiKp3Pr=-1.;
+ invMasspiKpDk=-1.;
+ invMasspiKpLpi=-1.;
+ invMasspiKpKp=-1.;
+ }
+ }
}
- if(invMasspiKp>0.){
- pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212;
- if(!VertexingKF(part,pdgs,field)) {
- invMasspiKp=-1.;
- invMasspiKp3Pr=-1.;
- invMasspiKpDk=-1.;
- invMasspiKpLpi=-1.;
- invMasspiKpKp=-1.;
- }
- }
- }
- if(passTightCuts>0) nSelectedtight[0]=nSelectedtight[0]+1;
- }
-
+ if(passTightCuts>0) nSelectedtight[0]=nSelectedtight[0]+1;
+ }
+ // Eta and y plots:
+ fhEta3ProngProd->Fill(part->Pt(),part->Eta());
+ fhRap3ProngProd->Fill(part->Pt(),part->Y(4122));
+ if(passTightCuts>0){
+ fhEta3ProngAn->Fill(part->Pt(),part->Eta());
+ fhRap3ProngAn->Fill(part->Pt(),part->Y(4122));
+ }
Float_t tmp[24];
if (fFillNtuple) {
tmp[0]=pdgCode;
if(fReadMC)
lab=part->MatchToMC(4122,arrMC,3,pdgDgLctopKpi); //return MC particle label if the array corresponds to a Lc, -1 if not (cf. AliAODRecoDecay.cxx)
- Int_t isSelectedPID=cuts->IsSelectedPID(part); // 0 rejected, 1 Lc -> p K- pi+ (K at center because different sign is there),
+ // Int_t isSelectedPID=cuts->IsSelectedPID(part); // 0 rejected, 1 Lc -> p K- pi+ (K at center because different sign is there),
+ // 2 Lc -> pi+ K- p (K at center because different sign is there),
+ // 3 both (it should never happen...)
+ Int_t isSelectedPID=cuts->IsSelected(part,AliRDHFCuts::kPID,aod); // 0 rejected, 1 Lc -> p K- pi+ (K at center because different sign is there),
// 2 Lc -> pi+ K- p (K at center because different sign is there),
// 3 both (it should never happen...)
}
//fill hRealTot ---> PID efficiency denominators
- cuts->SetUsePID(kFALSE); //PAOLA
- Int_t selectionCandidate=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);//PAOLA
- if(fReadMC && selectionCandidate>0) { // 3prongs candidate x Lc (no PID)
+ //cuts->SetUsePID(kFALSE); //PAOLA
+ Int_t selectionTrack = cuts->IsSelected(part,AliRDHFCuts::kTracks,aod);
+
+ //IsInjected check
+ Bool_t IsInjected = 0;
+ if(fReadMC){
+ AliAODMCHeader *mcHeader2 = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
+ AliVertexingHFUtils *util = new AliVertexingHFUtils();
+ IsInjected = util->IsCandidateInjected(part,mcHeader2,arrMC)?1:0;
+ delete util;
+ }
+ if(fReadMC && selectionTrack>0) { // 3prongs candidate x Lc (only track selection) Jaime
+ Int_t isReal=0;
if(lab>0){ // Signal
for (Int_t iprong=0; iprong<3; iprong++) {
switch (pdgProngMC[iprong]) {
case 2212:
fillthis="hpRealTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isReal++;
break;
case 321:
fillthis="hKRealTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isReal++;
break;
case 211:
fillthis="hpiRealTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isReal++;
break;
default:
break;
}
}
- } else { // bkg
+ fillthis="hLcRealTot";
+ if(isReal==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
+ //Marcel: Should we zero isReal
+ } else if(!IsInjected) { // bkg // bkg
for (Int_t iprong=0; iprong<3; iprong++) {
switch (pdgProngMC[iprong]) {
case 2212:
fillthis="hbpRealTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isReal++;
break;
case 321:
fillthis="hbKRealTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isReal++;
break;
case 211:
fillthis="hbpiRealTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isReal++;
break;
default:
break;
}
}
+ fillthis="hbLcRealTot";
+ if(isReal==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
}
}
- cuts->SetUsePID(kTRUE); //PAOLA
+ //cuts->SetUsePID(kTRUE); //PAOLA
Int_t selection=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
if ( (lab>0 && fReadMC) || // signal X MC
if (selection>0) { // 3prongs candidate x Lc (yes PID)
Double_t ptmax=0.;
-
+ Int_t isID=0;
+ Int_t isCorrect=0;
for (Int_t iprong=0; iprong<3; iprong++) {
if (part->PtProng(iprong)>ptmax) ptmax=part->PtProng(iprong);
// hIDGood, hnoID ---> PID numerators
fillthis="hpIDTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isID++;
if(pdgProngMC[iprong]==2212) { // id protons
fillthis="hpIDGood";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isCorrect++;
}
else { // misidentified electrons, muons, pions and kaons
fillthis="hnopIDp";
// hIDGood, hnoID ---> PID numerators
fillthis="hKIDTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isID++;
if(pdgProngMC[iprong]==321) { // id kaons
fillthis="hKIDGood";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isCorrect++;
}
else { // misidentified electrons, muons, pions and protons
fillthis="hnokIDk";
// hIDGood, hnoID ---> PID numerators
fillthis="hpiIDTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isID++;
if(pdgProngMC[iprong]==211) { // id pions
fillthis="hpiIDGood";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isCorrect++;
}
else { // misidentified electrons, muons, kaons and protons
fillthis="hnopiIDpi";
} //end loop on prongs
+ //Jaime Lc checks
+ fillthis="hLcIDTot";
+ if(isID==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
+ fillthis="hLcIDGood";
+ if(isCorrect==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
+ fillthis="hLcnoID";
+ if(isCorrect<3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
+
//now histograms where we don't need to check identity
+ fillthis="hLcpt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
fillthis = "hDist12toPrim";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist12toPrim());
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist23toPrim());
+ fillthis = "hDist12toPrimLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist12toPrim());
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist23toPrim());
fillthis = "hSigmaVert";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetSigmaVert());
+ fillthis = "hSigmaVertLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetSigmaVert());
fillthis = "hDCAs";
Double_t dcas[3];
part->GetDCAs(dcas);
for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dcas[idca]);
+ fillthis = "hDCAsLcPt";
+ for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),dcas[idca]);
fillthis = "hCosPointingAngle";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->CosPointingAngle());
+ fillthis = "hCosPointingAngleLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->CosPointingAngle());
fillthis = "hDecayLength";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->DecayLength());
+ fillthis = "hDecayLengthLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->DecayLength());
Double_t sum2=part->Getd0Prong(0)*part->Getd0Prong(0)+
part->Getd0Prong(1)*part->Getd0Prong(1)+
part->Getd0Prong(2)*part->Getd0Prong(2);
fillthis = "hSum2";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(sum2);
+ fillthis = "hSum2LcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),sum2);
fillthis = "hptmax";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(ptmax);
- fillthis="hLcpt";
- ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
+ fillthis = "hptmaxLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),ptmax);
+
} // end if (selection)
- } else if( lab<=0 && fReadMC) { // bkg x MC
+ }else if( lab<=0 && fReadMC && !IsInjected ) { // bkg x MC
fillthis="hbMass";
if (selection>0) { // 3prongs candidate x Lc (yes PID)
Double_t ptmax=0.;
+ Int_t isID=0;
+ Int_t isCorrect=0;
for (Int_t iprong=0; iprong<3; iprong++) {
if(part->PtProng(iprong)>ptmax)ptmax=part->PtProng(iprong);
// hbIDGood, hbnoID ---> PID numerators
fillthis="hbpIDTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isID++;
if(pdgProngMC[iprong]==2212) { // id protons
fillthis="hbpIDGood";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isCorrect++;
}
else { // misidentified electrons, muons, pions and kaons
fillthis="hbnopIDp";
// hIDGood, hnoID ---> PID numerators
fillthis="hbKIDTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isID++;
if(pdgProngMC[iprong]==321) { // id kaons
fillthis="hbKIDGood";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isCorrect++;
}
else { // misidentified electrons, muons, pions and protons
fillthis="hbnokIDk";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
fillthis="hbpiptProng";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ fillthis="hbpiptProngLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
fillthis="hbpid0Prong";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
fillthis="hbpiSignalVspTPC";
// hIDGood, hnonIDTot ---> PID numerators
fillthis="hbpiIDTot";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isID++;
if(pdgProngMC[iprong]==211) { // id pions
fillthis="hbpiIDGood";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
+ isCorrect++;
}
else { // misidentified electrons, muons, kaons and protons
fillthis="hbnopiIDpi";
}
} //end loop on prongs
+
+ fillthis="hbLcIDTot";
+ if(isID==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
+ fillthis="hbLcIDGood";
+ if(isCorrect==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
+ fillthis="hbLcnoID";
+ if(isCorrect<3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
//now histograms where we don't need to check identity
fillthis="hbLcpt";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
-
+
fillthis = "hbDist12toPrim";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist12toPrim());
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist23toPrim());
+ fillthis = "hbDist12toPrimLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist12toPrim());
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist23toPrim());
fillthis = "hbSigmaVert";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetSigmaVert());
+ fillthis = "hbSigmaVertLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetSigmaVert());
fillthis = "hbDCAs";
Double_t dcas[3];
part->GetDCAs(dcas);
- for (Int_t idca=0;idca<3;idca++)
- ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dcas[idca]);
+ for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dcas[idca]);
+ fillthis = "hbDCAsLcPt";
+ for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),dcas[idca]);
fillthis = "hbCosPointingAngle";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->CosPointingAngle());
+ fillthis = "hbCosPointingAngleLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->CosPointingAngle());
fillthis = "hbDecayLength";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->DecayLength());
+ fillthis = "hbDecayLengthLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->DecayLength());
Double_t sum2=part->Getd0Prong(0)*part->Getd0Prong(0)+
- part->Getd0Prong(1)*part->Getd0Prong(1)+
- part->Getd0Prong(2)*part->Getd0Prong(2);
+ part->Getd0Prong(1)*part->Getd0Prong(1)+
+ part->Getd0Prong(2)*part->Getd0Prong(2);
fillthis = "hbSum2";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(sum2);
+ fillthis = "hbSum2LcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),sum2);
fillthis = "hbptmax";
((TH1F*)fOutputMC->FindObject(fillthis))->Fill(ptmax);
+ fillthis = "hbptmaxLcPt";
+ ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),ptmax);
} // end if (selection)
{
// FillAPrioriConcentrations
- cuts->SetUsePID(kFALSE); //Annalisa
+ //cuts->SetUsePID(kFALSE); //Annalisa
Int_t isSelected3ProngByLc=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
TString fillthis="";
}
}
- cuts->SetUsePID(kTRUE); //Annalisa
+ //cuts->SetUsePID(kTRUE); //Annalisa
}
if(fReadMC)
lab=part->MatchToMC(4122,arrMC,3,pdgDgLctopKpi); //return MC particle label if the array corresponds to a Lc, -1 if not (cf. AliAODRecoDecay.cxx)
- cuts->SetUsePID(kFALSE); //Annalisa
+ //cuts->SetUsePID(kFALSE); //Annalisa
Int_t isSelected3ProngByLc=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
if(isSelected3ProngByLc>0 && fReadMC) {
Double_t minvLcpKpi = part->InvMassLcpKpi();
Double_t minvLcpiKp = part->InvMassLcpiKp();
- cuts->SetUsePID(kTRUE); //Annalisa
+ //cuts->SetUsePID(kTRUE); //Annalisa
Int_t isSelected3ProngByLcPID=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
if (isSelected3ProngByLcPID>0) {
if (TMath::Abs(minvLcpKpi-mPDG)<invmasscut || TMath::Abs(minvLcpiKp-mPDG)<invmasscut) {
void SetFillVarHists(Bool_t setter) {fFillVarHists=setter;return;}
void SetMultiplicityHists(Bool_t setter) {fMultiplicityHists=setter;return;}
void SetPriorsHists(Bool_t setter) {fPriorsHists=setter;return;}
-
+ void SetUseFilterBitCut(Bool_t setter) { fLcCut = setter; return; }
+ void SetUseFilterBitPID(Bool_t setter) { fLcPIDCut = setter; return; }
+
Float_t GetUpperMassLimit() const {return fUpmasslimit;}
Float_t GetLowerMassLimit() const {return fLowmasslimit;}
Int_t GetNBinsPt() const {return fNPtBins;}
TH1F *fMassHistDkTC[3*kMaxPtBins]; //!hist. for inv mass (TC)
TH1F *fMassHist3Pr[3*kMaxPtBins]; //!hist. for inv mass (LC)
TH1F *fMassHist3PrTC[3*kMaxPtBins]; //!hist. for inv mass (TC)
+ TH2F *fhEta3Prong; //!hist. for 3-prong Eta
+ TH2F *fhEta3ProngAcc; //!hist. for 3-prong Eta fiducial acc
+ TH2F *fhEta3ProngProd; //!hist. for 3-prong Eta fiducial Prod Cuts
+ TH2F *fhEta3ProngAn; //!hist. for 3-prong Eta fiducial An Cuts
+ TH2F *fhRap3Prong; //!hist. for 3-prong y
+ TH2F *fhRap3ProngAcc; //!hist. for 3-prong Eta fiducial acc
+ TH2F *fhRap3ProngProd; //!hist. for 3-prong Eta fiducial Prod cuts
+ TH2F *fhRap3ProngAn; //!hist. for 3-prong Eta fiducial An cuts
+ TH1F *fhSelectBit; //! hist for Filter Bit
+ TH2F *fhProtonPtProngLcPt; //!hist for var_LcPt
+ TH2F *fhBProtonPtProngLcPt;//!hist for var_LcPt
+ TH2F *fhProtond0ProngLcPt;//!hist for var_LcPt
+ TH2F *fhBProtond0ProngLcPt;//!hist for var_LcPt
+ TH2F *fhKaonPtProngLcPt;//!hist for var_LcPt
+ TH2F *fhBKaonPtProngLcPt;//!hist for var_LcPt
+ TH2F *fhKaond0ProngLcPt;//!hist for var_LcPt
+ TH2F *fhBKaond0ProngLcPt;//!hist for var_LcPt
+ TH2F *fhPionPtProngLcPt;//!hist for var_LcPt
+ TH2F *fhBPionPtProngLcPt;//!hist for var_LcPt
+ TH2F *fhPiond0ProngLcPt;//!hist for var_LcPt
+ TH2F *fhBPiond0ProngLcPt;//!hist for var_LcPt
+ TH2F *fhDist12PrimLcPt;//!hist for var_LcPt
+ TH2F *fhBDist12PrimLcPt;//!hist for var_LcPt
+ TH2F *fhSigmaVertLcPt;//!hist for var_LcPt
+ TH2F *fhBSigmaVertLcPt;//!hist for var_LcPt
+ TH2F *fhdcasLcPt;//!hist for var_LcPt
+ TH2F *fhBdcasLcPt;//!hist for var_LcPt
+ TH2F *fhCosPointingAngleLcPt;//!hist for var_LcPt
+ TH2F *fhBCosPointingAngleLcPt;//!hist for var_LcPt
+ TH2F *fhDecayLengthLcPt;//!hist for var_LcPt
+ TH2F *fhBDecayLengthLcPt;//!hist for var_LcPt
+ TH2F *fhSum2LcPt;//!hist for var_LcPt
+ TH2F *fhBSum2LcPt;//!hist for var_LcPt
+ TH2F *fhPtMaxLcPt;//!hist for var_LcPt
+ TH2F *fhBPtMaxLcPt;//!hist for var_LcPt
TNtuple *fNtupleLambdac; //! output ntuple
Float_t fUpmasslimit; //upper inv mass limit for histos
Float_t fLowmasslimit; //lower inv mass limit for histos
Bool_t fFillVarHists; // flag for creation and fill of histograms with vars
Bool_t fMultiplicityHists; // flag for activation of multiplcity histos
Bool_t fPriorsHists; // flag for histos with priors
+ Bool_t fLcCut; // flag for Lc filter bit cut
+ Bool_t fLcPIDCut; // flag for Lc filter bit PID
TH1F *fNentries; // histo with number of entries
TList *fOutputMC; // output1
TList *fAPriori; // output2
AliPIDResponse *fPIDResponse; //! PID response object
AliNormalizationCounter *fCounter;//!AliNormalizationCounter on output slot 7
- ClassDef(AliAnalysisTaskSELambdac,6); // AliAnalysisTaskSE for the invariant mass analysis of heavy-flavour decay candidates (Lambdac)
+ ClassDef(AliAnalysisTaskSELambdac,7); // AliAnalysisTaskSE for the invariant mass analysis of heavy-flavour decay candidates (Lambdac)
};
#endif
AliAODTrack * v0Pos = dynamic_cast<AliAODTrack*>(lcK0Spr->Getv0PositiveTrack());
AliAODTrack * v0Neg = dynamic_cast<AliAODTrack*>(lcK0Spr->Getv0NegativeTrack());
- if (!v0Neg || !v0Neg) {
+ if (!v0Neg || !v0Pos) {
AliDebug(2,Form("V0 by cascade %d has no V0positive of V0negative object",iLctopK0S)); // it will be done in AliRDHFCutsLctoV0::IsSelected
continue;
}
}
delete [] labelMother;
+ if(pdgDg) delete [] pdgDg;
return pdgToBeReturned;
AliAODTrack * v0Pos = dynamic_cast<AliAODTrack*>(lcK0spr->Getv0PositiveTrack());
AliAODTrack * v0Neg = dynamic_cast<AliAODTrack*>(lcK0spr->Getv0NegativeTrack());
- if (!v0Neg || !v0Neg) {
+ if (!v0Neg || !v0Pos) {
AliDebug(2,Form("V0 by cascade %d has no V0positive of V0negative object",iLctopK0s));
continue;
}
Double_t probTPCTOF[AliPID::kSPECIES]={-1.};
UInt_t detUsed = fPIDCombined->ComputeProbabilities(bachelor, fPIDResponse, probTPCTOF);
- Printf("detUsed (TPCTOF case) = %d", detUsed);
+ AliDebug(2, Form("detUsed (TPCTOF case) = %d", detUsed));
Double_t probProton = -1.;
Double_t probPion = -1.;
Double_t probKaon = -1.;
if (detUsed == (UInt_t)fPIDCombined->GetDetectorMask() ) {
- Printf("We have found the detector mask for TOF + TPC: probProton will be set to %f", probTPCTOF[AliPID::kProton]);
+ AliDebug(2, Form("We have found the detector mask for TOF + TPC: probProton will be set to %f", probTPCTOF[AliPID::kProton]));
probProton = probTPCTOF[AliPID::kProton];
probPion = probTPCTOF[AliPID::kPion];
probKaon = probTPCTOF[AliPID::kKaon];
}
else { // if you don't have both TOF and TPC, try only TPC
fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
- Printf("We did not find the detector mask for TOF + TPC, let's see only TPC");
+ AliDebug(2, "We did not find the detector mask for TOF + TPC, let's see only TPC");
detUsed = fPIDCombined->ComputeProbabilities(bachelor, fPIDResponse, probTPCTOF);
- Printf("detUsed (TPC case) = %d", detUsed);
+ AliDebug(2,Form(" detUsed (TPC case) = %d", detUsed));
if (detUsed == (UInt_t)fPIDCombined->GetDetectorMask()) {
probProton = probTPCTOF[AliPID::kProton];
probPion = probTPCTOF[AliPID::kPion];
probKaon = probTPCTOF[AliPID::kKaon];
- Printf("TPC only worked: probProton will be set to %f", probTPCTOF[AliPID::kProton]);
+ AliDebug(2, Form("TPC only worked: probProton will be set to %f", probTPCTOF[AliPID::kProton]));
}
else {
- Printf("Only TPC did not work...");
+ AliDebug(2, "Only TPC did not work...");
}
// resetting mask to ask for both TPC+TOF
fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF);
}
- Printf("probProton = %f", probProton);
+ AliDebug(2, Form("probProton = %f", probProton));
// now we get the TPC and TOF single PID probabilities (only for Proton, or the tree will explode :) )
Double_t probProtonTPC = -1.;
if (!tmpdaughv02 && labelsv0daugh[1] > 0){
AliDebug(2, "Could not access MC info for second daughter of V0, continuing");
}
- Double_t xPionMC = tmpdaughv01->Xv(); //Production vertex of Pion --> Where K0S decays
- Double_t yPionMC = tmpdaughv01->Yv();
- Double_t zPionMC = tmpdaughv01->Zv();
- //Printf("Got MC vtx for Pion");
- Printf("Vertices: MC: x = %f, y = %f, z = %f", xPionMC, yPionMC, zPionMC);
+ if(tmpdaughv01){
+ Double_t xPionMC = tmpdaughv01->Xv(); //Production vertex of Pion --> Where K0S decays
+ Double_t yPionMC = tmpdaughv01->Yv();
+ Double_t zPionMC = tmpdaughv01->Zv();
+ //Printf("Got MC vtx for Pion");
+ Printf("Vertices: MC: x = %f, y = %f, z = %f", xPionMC, yPionMC, zPionMC);
+ }
}
else {
Printf("Not a true V0");
Bool_t signAssociation = cfVtxHF->SetRecoCandidateParam((AliAODRecoDecayHF*)charmCandidate);
if (!signAssociation){
- charmCandidate = 0x0;
+ if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
continue;
}
Int_t isPartOrAntipart = cfVtxHF->CheckReflexion(fSign);
if (isPartOrAntipart == 0){
AliDebug(2, Form("The candidate pdg code doesn't match the requirement set in the task (fSign = %d)",fSign));
+ if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
continue;
}
AliDebug(2, Form("pt = %f, weight = %f",containerInput[0], fWeight));
}
- if (!fCuts->IsInFiducialAcceptance(containerInput[0],containerInput[1])) continue;
-
+ if (!fCuts->IsInFiducialAcceptance(containerInput[0],containerInput[1])){
+ if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
+ continue;
+ }
//Reco Step
Bool_t recoStep = cfVtxHF->RecoStep();
Bool_t vtxCheck = fCuts->IsEventSelected(aodEvent);
}else if(fDecayChannel==33){
if(fUseSelectionBit && !charmCandidate->HasSelectionBit(AliRDHFCuts::kDsCuts)) isBitSelected = kFALSE;
}
- if(!isBitSelected) continue;
-
+ if(!isBitSelected){
+ if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
+ continue;
+ }
if (recoStep && recoContFilled && vtxCheck){
}
else {
AliDebug(3, "Analysis Cuts step not passed \n");
+ if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
continue;
}
}
else {
AliDebug(3, "PID selection not passed \n");
+ if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
continue;
}
}
else{
AliDebug(3, "Number of ITS cluster step not passed\n");
+ if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
continue;
}
}
else{
AliDebug(3, "Reco acceptance step not passed\n");
+ if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
continue;
}
}
else {
AliDebug(3, "Reco step not passed\n");
+ if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
continue;
}
}
//_________________________________________________________________________
void AliCFTaskVertexingHF::SetPtWeightsFromFONLL5overLHC13d3(){
- // weight function from the ratio of the LHC12a17b MC
+ // weight function from the ratio of the LHC13d3 MC
// and FONLL calculations for pp data
if(fFuncWeight) delete fFuncWeight;
fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",0.15,30.);
//_________________________________________________________________________
void AliCFTaskVertexingHF::SetPtWeightsFromFONLL7overLHC10f6a(){
- // weight function from the ratio of the LHC12a17b MC
+ // weight function from the ratio of the LHC10f6a MC
// and FONLL calculations for pp data
if(fFuncWeight) delete fFuncWeight;
fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",0.15,40.);
fUseWeight=kTRUE;
}
+//_________________________________________________________________________
+void AliCFTaskVertexingHF::SetPtWeightsFromFONLL7overLHC12a12(){
+ // weight function from the ratio of the LHC12a12 MC
+ // and FONLL calculations for pp data
+ if(fFuncWeight) delete fFuncWeight;
+ fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x+[9])",0.15,50.);
+ fFuncWeight->SetParameters(1.31497e+01,3.30503e+00,3.45594e+00,2.5,2.28642e-02,1.42372e+00,2.32892e-04,5.21986e-02,-2.14236e-01,3.86200e+00);
+ fUseWeight=kTRUE;
+}
+
+//_________________________________________________________________________
+void AliCFTaskVertexingHF::SetPtWeightsFromFONLL7overLHC12a12bis(){
+ // weight function from the ratio of the LHC12a12bis MC
+ // and FONLL calculations for pp data
+ if(fFuncWeight) delete fFuncWeight;
+ fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x+[9])",0.15,50.);
+ fFuncWeight->SetParameters(6.54519e+00,2.74007e+00,2.48325e+00,2.5,1.61113e-01,-5.32546e-01,-3.75916e-04,2.38189e-01,-2.17561e-01,2.35975e+00);
+ fUseWeight=kTRUE;
+}
+
+//_________________________________________________________________________
+void AliCFTaskVertexingHF::SetPtWeightsFromFONLL7overLHC13e2fix(){
+ // weight function from the ratio of the LHC13e2fix MC
+ // and FONLL calculations for pp data
+ if(fFuncWeight) delete fFuncWeight;
+ fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x+[9])",0.15,50.);
+ fFuncWeight->SetParameters(1.85862e+01,2.48171e+00,3.39356e+00,2.5,1.70426e-02,2.28453e+00,-4.57749e-02,5.84585e-02,-3.19719e-01,4.16789e+00);
+ fUseWeight=kTRUE;
+}
+
//________________________________________________________________
void AliCFTaskVertexingHF::SetPtWeightsFromFONLL5overLHC10f6a(){
- // weight function from the ratio of the LHC12a17b MC
+ // weight function from the ratio of the LHC10f6a MC
// and FONLL calculations for pp data
if(fFuncWeight) delete fFuncWeight;
fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",0.15,40.);
//________________________________________________________________
void AliCFTaskVertexingHF::SetPtWeightsFromFONLL276overLHC10f6a(){
- // weight function from the ratio of the LHC12a17b MC
+ // weight function from the ratio of the LHC10f6a MC
// and FONLL calculations for pp data
if(fFuncWeight) delete fFuncWeight;
fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x+[9])",0.15,40.);
void SetPtWeightsFromDataPbPb276overLHC12a17a();
void SetPtWeightsFromFONLL276overLHC12a17b();
void SetPtWeightsFromFONLL276andBAMPSoverLHC12a17b();
- void SetPtWeightsFromFONLL5overLHC13d3();
+ void SetPtWeightsFromFONLL276overLHC10f6a();
void SetPtWeightsFromFONLL7overLHC10f6a();
+ void SetPtWeightsFromFONLL7overLHC12a12();
+ void SetPtWeightsFromFONLL7overLHC12a12bis();
+ void SetPtWeightsFromFONLL7overLHC13e2fix();
void SetPtWeightsFromFONLL5overLHC10f6a();
- void SetPtWeightsFromFONLL276overLHC10f6a();
+ void SetPtWeightsFromFONLL5overLHC13d3();
void SetResonantDecay(UInt_t resonantDecay) {fResonantDecay = resonantDecay;}
UInt_t GetResonantDecay() const {return fResonantDecay;}
TFile *fileMult = TFile::Open(multFile.Data());
if(isPPbData) hMult = (TH1F*)fileMult->Get("hNtrUnCorrEvWithCandWeight");
else {
- TDirectoryFile *dir1 = (TDirectoryFile*)fileMult->Get("PWG3_D2H_DMult_DplusLoose");
- TList* list1=(TList*)dir1->Get("coutputDplusLoose");
- hMult=(TH1F*)list1->FindObject("hGenPrimaryParticlesInelGt0");
+ hMult=(TH1F*)fileMult->Get("hGenPrimaryParticlesInelGt0");
}
}
Bool_t isPPbData=kFALSE)
{
//
- // Test macro for the AliAnalysisTaskSE for D+ candidates
- //Invariant mass histogram and
- // association with MC truth (using MC info in AOD)
- // R. Bala, bala@to.infn.it
- // Get the pointer to the existing analysis manager via the static access method.
+ // Macro for the AliAnalysisTaskSE for D candidates vs Multiplicity
+ // Invariant mass histogram in pt and multiplicity bins in a 3D histogram
+ // different estimators implemented
//==============================================================================
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
AliAnalysisTaskSE *AddTaskLambdac(TString finname,Bool_t storeNtuple,Bool_t readMC,Bool_t MCPid,Bool_t realPid,Bool_t resPid,Bool_t useKF,
- Bool_t fillVarHists=kFALSE, Bool_t priorsHists=kFALSE, Bool_t multiplicityHists=kFALSE, Int_t syst=0, TString postname="")
+ Bool_t fillVarHists=kFALSE, Bool_t priorsHists=kFALSE, Bool_t multiplicityHists=kFALSE, Int_t syst=0, Int_t bit=0, TString postname="")
{
//==============================================================================
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
lambdacTask->SetMultiplicityHists(multiplicityHists);
lambdacTask->SetAnalysis(kTRUE);
+ //bit:0 nocut, 1:LcCut, 2:LcPID, 3: Both
+ lambdacTask->SetUseFilterBitCut(bit==1||bit==3?1:0);
+ lambdacTask->SetUseFilterBitPID(bit>1?1:0);
+
lambdacTask->SetDebugLevel(0);
if(useKF) {
lambdacTask->SetUseKF();
// gInterpreter->ExecuteMacro("$ALICE_ROOT/PWGHF/vertexingHF/macros/LoadLibraries.C");
gStyle->SetOptTitle(1);
- // for(int j=0; j<=nMultbins; j++) multlims[j] *= (68./8.8);
+ TString ntrkname="Ntracklets";
+ // for(int j=0; j<=nMultbins; j++) multlims[j] *= (68./8.8);
+ // ntrkname="Nvzero";
Int_t nFiles=0;
TObjArray* listFiles=new TObjArray();
Float_t val = multbinlow + (multbinhigh-multbinlow)/2.;
Int_t hnbin = hNormalization->FindBin(val);
Float_t nevents = 0.;
- if(counter) { nevents = counter->GetNEventsForNorm(multbinlow,multbinhigh); cout << endl<<endl<<" Nevents ("<<multbinlow<<","<<multbinhigh<<") ="<<nevents<<endl<<endl<<endl;}
+ if(counter) { nevents = counter->GetNEventsForNorm(multbinlow,multbinhigh); std::cout << std::endl<<std::endl<<" Nevents ("<<multbinlow<<","<<multbinhigh<<") ="<<nevents<<std::endl<<std::endl<<std::endl;}
hNormalization->SetBinContent(hnbin,nevents);
//
// Loop on pt bins
Int_t ptbinlow = hptaxis->FindBin(ptlims[iBin]);
Int_t ptbinhigh = hptaxis->FindBin(ptlims[iBin+1])-1;
hmass[massBin] = (TH1F*)hPtMassMult[0]->ProjectionY(Form("hmass_%d_%d",j,iBin),multbinlow,multbinhigh,ptbinlow,ptbinhigh);
+ hmass[massBin]->SetTitle( Form("%2.0f<p_{T}<%2.0f GeV/c, %s [%3.0f,%3.0f]",ptlims[iBin],ptlims[iBin+1],ntrkname.Data(),multlims[j],multlims[j+1]) );
+ // std::cout << std::endl<< Form("%2.0f<p_{T}<%2.0f GeV/c, %s [%3.0f,%3.0f]",ptlims[iBin],ptlims[iBin+1],ntrkname.Data(),multlims[j],multlims[j+1]) << std::endl<< std::endl;
if( hmass[massBin]->GetEntries() < 60 ) {
massBin++;
continue;
else if(j==5) arrchisquare5[iBin]=fitter[massBin]->GetReducedChiSquare();
TF1* fB1=fitter[massBin]->GetBackgroundFullRangeFunc();
TF1* fB2=fitter[massBin]->GetBackgroundRecalcFunc();
- TF1* fM=fitter[massBin]->GetMassFunc();
+ // TF1* fM=fitter[massBin]->GetMassFunc();
// if(iBin==0 && fB1) funBckStore1=new TF1(*fB1);
// if(iBin==0 && fB2) funBckStore2=new TF1(*fB2);
// if(iBin==0 && fM) funBckStore3=new TF1(*fM);
Float_t cntSig2=0.;
Float_t cntErr=0.;
massRangeForCounting = nSigmaRangeForCounting*sigmapt[iBin];
- // cout << " pt bin "<< iBin << " mass range = "<< massRangeForCounting<<endl;
+ // std::cout << " pt bin "<< iBin << " mass range = "<< massRangeForCounting<<std::endl;
Float_t minBinSum=hmassaxis->FindBin(massD-massRangeForCounting);
Float_t maxBinSum=hmassaxis->FindBin(massD+massRangeForCounting);
for(Int_t iMB=minBinSum; iMB<=maxBinSum; iMB++){
hNtrZvtxCorr[iFile] = (TH2F*)hlist[iFile]->FindObject("hNtrCorrVsZvtx");
}
- // cout<<" hPtMassMult:"<<hPtMassMult[0]<<endl;
+ // std::cout<<" hPtMassMult:"<<hPtMassMult[0]<<std::endl;
TString partname="Both";
if(optPartAntiPart==kParticleOnly) partname="D0";
aodtracketa = TMath::Abs(aodtrack->Eta());
if(aodtracketa>0.9) continue;
if(!aodtrack->TestFilterBit(fFilterBit)) continue; //track filter selection
- if(!aodtrack->IsPrimaryCandidate()) continue; // only primaries, maybe is redundant with the previous selection...
fEtaAOD->Fill(aodtrack->Eta(),aodtrack->Eta());
fPhiAOD->Fill(aodtrack->Phi(),aodtrack->Phi());
fPtAOD->Fill(aodtrack->Pt(),aodtrack->Pt());
// printf("Rejecting track from track refs due to wrong filterbit! \n");
continue; //track filter selection
}
- if(!aodtrack->IsPrimaryCandidate())
- {
- // printf("Rejecting track from track refs due to no primary candidate! \n");
- continue; // only primaries
- }
deltaPhiPt += DeltaPhiTrack(rjet, aodtrack)*aodtrack->Pt();
deltaEtaPt += DeltaEtaTrack(rjet, aodtrack)*aodtrack->Pt();
deltaPhiSqPt += DeltaPhiSqTrack(rjet, aodtrack)*aodtrack->Pt();
if(!aodtrack) continue;
if(!IsTrackInsideThisJet(aodtrack, rjet, jfr)) continue;
if(!aodtrack->TestFilterBit(fFilterBit)) continue; //track filter selection
- if(!aodtrack->IsPrimaryCandidate()) continue; // only primaries, perhaps redundant with the previous
if(aodtrack->Pt()<fMinpTVal) continue; //DATA: PT CUT
deltaPhiPt += DeltaPhiTrack(rjet, aodtrack)*aodtrack->Pt();
deltaEtaPt += DeltaEtaTrack(rjet, aodtrack)*aodtrack->Pt();
if(!aodtrackperprec) continue;
if(!IsTrackInsideThisJet(aodtrackperprec, fPerpCone, jfr)) continue;
if(!aodtrackperprec->TestFilterBit(fFilterBit)) continue; //track filter selection
- if(!aodtrackperprec->IsPrimaryCandidate()) continue; // only primaries, perhaps redundant with the previous
if(aodtrackperprec->Pt()<fMinpTVal) continue; //DATA: PT CUT
deltaPhiPtPerp += DeltaPhiTrack(fPerpCone, aodtrackperprec)*aodtrackperprec->Pt();
deltaEtaPtPerp += DeltaEtaTrack(fPerpCone, aodtrackperprec)*aodtrackperprec->Pt();
if(GetDeltaR(jeteta, jetphi, tracketa, trackphi)<=jr)
{
if(!aodtrack->TestFilterBit(fFilterBit)) continue; //track filter selection
- if(!aodtrack->IsPrimaryCandidate()) continue; // only primaries
if(aodtrack->Pt()<fMinpTVal) continue; // pT cut, not using track refs
currentNumber++;
fCurrentJetCharge=fCurrentJetCharge+aodtrack->Charge();
if(GetDeltaR(jeteta, jetphi, tracketa, trackphi)<=jr)
{
if(!aodtrack->TestFilterBit(fFilterBit)) continue; //track filter selection
- if(!aodtrack->IsPrimaryCandidate()) continue; // only primaries
if(aodtrack->Pt()<fCurrentJetMinPtNT90) continue;
currentNumber++;
} // end if inside jet
if(GetDeltaR(jeteta, jetphi, tracketa, trackphi)<=jr)
{
if(!aodtrack->TestFilterBit(fFilterBit)) continue; //track filter selection
- if(!aodtrack->IsPrimaryCandidate()) continue; // only primaries
if(aodtrack->Pt()<fMinpTVal) continue; // pT cut, not using track refs
currentNumber++;
fgContainer[currentNumber-1] = aodtrack->Pt(); // save the current pt in the container
if(GetDeltaR(jeteta, jetphi, tracketa, trackphi)<=jr)
{
if(!aodtrack->TestFilterBit(fFilterBit)) continue; //track filter selection
- if(!aodtrack->IsPrimaryCandidate()) continue; // only primaries
if(aodtrack->Pt()<fCurrentJetMinPtNT90Recalc) continue;
currentNumber++;
} // end if inside jet
aodtracketaC = TMath::Abs(aodtrackC->Eta());
if(aodtracketaC>0.9) continue;
if(!aodtrackC->TestFilterBit(fFilterBit)) continue; //track filter selection
- if(!aodtrackC->IsPrimaryCandidate()) continue; // only primaries, maybe is redundant with the previous selection...
if(fJetEvent) // if has an accepted jet, calculate the perpendicular cone
{
if(HasPerpendicularCone()) // If there is a perpendicular cone available
AliAODTrack *aodtrack = fAOD->GetTrack(iTrack);
if(!aodtrack)
continue;
- if( !aodtrack->TestFilterBit(fFilterMask) )
+ if((!aodtrack->TestFilterBit(fFilterMask)) ||
+ ((!fCFManagerPos->CheckParticleCuts(kStepReconstructed,aodtrack)) && (aodtrack->Charge()>0.)) ||
+ ((!fCFManagerNeg->CheckParticleCuts(kStepReconstructed,aodtrack)) && (aodtrack->Charge()<0)) )
continue;
else {
track = static_cast<AliVTrack*>(aodtrack);
//Container with primaries
if(particle->IsPhysicalPrimary()) {
- if(particle->Charge()>0. && fCFManagerPos->CheckParticleCuts(kStepReconstructedMC,particle)) fCFManagerPos->GetParticleContainer()->Fill(containerInputRecMC,kStepReconstructedMC);
- if(particle->Charge()<0. && fCFManagerNeg->CheckParticleCuts(kStepReconstructedMC,particle)) fCFManagerNeg->GetParticleContainer()->Fill(containerInputRecMC,kStepReconstructedMC);
+ if(particle->Charge()>0.) fCFManagerPos->GetParticleContainer()->Fill(containerInputRecMC,kStepReconstructedMC);
+ if(particle->Charge()<0.) fCFManagerNeg->GetParticleContainer()->Fill(containerInputRecMC,kStepReconstructedMC);
//Fill pT resolution plots for primaries
//fPtRelUncertainty1PtPrim->Fill(containerInputRec[0],containerInputRec[0]*TMath::Sqrt(track->GetSigma1Pt2())); //This has not been implemented in AOD analysis, since they are also produced by the AddTaskPWG4HighPtTrackQA.C macro
}
EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetHMEC.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetHadCorQA.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetHadEPpid.cxx
+ EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetHF.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetMass.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetMassBkg.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetMassResponse.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalTriggerInfoQA.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskHJetEmbed.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskJetMatching.cxx
- EMCALJetTasks/UserTasks/AliAnalysisTaskRhoVnModulation.cxx
+ EMCALJetTasks/UserTasks/AliAnalysisTaskJetV2.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskRhoMass.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskRhoMassBase.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskSAJF.cxx
set ( DHDR PWGJEEMCALJetTasksLinkDef.h)
-string ( REPLACE ".cxx" ".h" EXPORT "${SRCS}" )
-
string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" )
if(FASTJET_FOUND)
set ( EINCLUDE PWGJE/EMCALJetTasks PWG/EMCAL EMCAL OADB STEER/ESD STEER/STEERBase ANALYSIS)
endif(FASTJET_FOUND)
+SET ( EXPORT ${HDRS} )
histname = "fHistDeltaPtEmbvsEP_";
histname += i;
- fHistDeltaPtEmbvsEP[i] = new TH2F(histname.Data(), histname.Data(),
- 402, -TMath::Pi()*1.01, TMath::Pi()*3.01, fNbins * 2, -fMaxBinPt, fMaxBinPt);
+ fHistDeltaPtEmbvsEP[i] = new TH2F(histname.Data(), histname.Data(), 101, 0, TMath::Pi()*1.01, fNbins * 2, -fMaxBinPt, fMaxBinPt);
fHistDeltaPtEmbvsEP[i]->GetXaxis()->SetTitle("#phi_{jet} - #Psi_{EP}");
fHistDeltaPtEmbvsEP[i]->GetYaxis()->SetTitle("#delta#it{p}_{T}^{emb} (GeV/#it{c})");
fHistDeltaPtEmbvsEP[i]->GetZaxis()->SetTitle("counts");
fHistEmbBkgArea[fCentBin]->Fill(embJet->Area(), embJet->Pt() - embJet->MCPt());
fHistRhoVSEmbBkg[fCentBin]->Fill(fRhoVal * embJet->Area(), embJet->Pt() - embJet->MCPt());
fHistDeltaPtEmbArea[fCentBin]->Fill(embJet->Area(), embJet->Pt() - embJet->Area() * fRhoVal - embJet->MCPt());
- fHistDeltaPtEmbvsEP[fCentBin]->Fill(embJet->Phi() - fEPV0, embJet->Pt() - embJet->Area() * fRhoVal - embJet->MCPt());
+
+ Double_t ep = embJet->Phi() - fEPV0;
+ while (ep < 0) ep += TMath::Pi();
+ while (ep >= TMath::Pi()) ep -= TMath::Pi();
+
+ fHistDeltaPtEmbvsEP[fCentBin]->Fill(ep, embJet->Pt() - embJet->Area() * fRhoVal - embJet->MCPt());
embJet = NextEmbeddedJet();
}
--- /dev/null
+// $Id$
+//
+// Analysis task to estimate an event's local energy density
+//
+// This task is part of the emcal jet framework and should be run in the emcaljet train
+// The following extensions to an accepted AliVEvent are expected:
+// - (anti-kt) jets -> necessary if one wants to exclude leading jet contribution to the event plane
+// - background estimate of rho -> this task estimates modulation, not rho itself
+// - pico tracks -> a uniform track selection is necessary to estimate the contribution of v_n harmonics
+// aod's and esd's are handled transparently
+// The task will estimates a phi-dependent background density rho
+// which is added to the event as a AliLocalRhoParamter object
+//
+// Author: Redmer Alexander Bertens, Utrecht Univeristy, Utrecht, Netherlands
+// (rbertens@cern.ch, rbertens@nikhef.nl, r.a.bertens@uu.nl)
+
+// root includes
+#include <TStyle.h>
+#include <TRandom3.h>
+#include <TChain.h>
+#include <TMath.h>
+#include <TF1.h>
+#include <TF2.h>
+#include <TH1F.h>
+#include <TH2F.h>
+#include <TProfile.h>
+#include <TArrayI.h>
+// aliroot includes
+#include <AliAnalysisTask.h>
+#include <AliAnalysisManager.h>
+#include <AliCentrality.h>
+#include <AliVVertex.h>
+#include <AliESDEvent.h>
+#include <AliAODEvent.h>
+#include <AliAODTrack.h>
+// emcal jet framework includes
+#include <AliPicoTrack.h>
+#include <AliEmcalJet.h>
+#include <AliRhoParameter.h>
+#include <AliLocalRhoParameter.h>
+#include <AliAnalysisTaskLocalRhoDev.h>
+
+class AliAnalysisTaskLocalRhoDev;
+using namespace std;
+
+ClassImp(AliAnalysisTaskLocalRhoDev)
+
+//_____________________________________________________________________________
+AliAnalysisTaskLocalRhoDev::AliAnalysisTaskLocalRhoDev() :
+ AliAnalysisTaskEmcalJet("AliAnalysisTaskLocalRhoDev", kTRUE),
+ fDebug(0), fInitialized(0), fAttachToEvent(kTRUE), fFillHistograms(kFALSE), fNoEventWeightsForQC(kTRUE),
+ fUseScaledRho(0), fCentralityClasses(0), fUserSuppliedV2(0), fUserSuppliedV3(0), fUserSuppliedR2(0),
+ fUserSuppliedR3(0), fNAcceptedTracks(0), fNAcceptedTracksQCn(0), fInCentralitySelection(-1), fFitModulationType(kCombined),
+ fFitGoodnessTest(kChi2Poisson), fQCRecovery(kTryFit), fUsePtWeight(kTRUE), fUsePtWeightErrorPropagation(kFALSE), fDetectorType(kTPC),
+ fFitModulationOptions("WLQI"), fRunModeType(kGrid), fFitModulation(0), fFitControl(0x0), fMinPvalue(0.01), fMaxPvalue(1), fExpectedRuns(0x0),
+ fExpectedSemiGoodRuns(0x0), fRunNumber(-1), fCachedRho(0x0), fNameSmallRho(""), fLocalJetMinEta(-10), fLocalJetMaxEta(-10),
+ fLocalJetMinPhi(-10), fLocalJetMaxPhi(-10), fSoftTrackMinPt(0.15),
+ fSoftTrackMaxPt(5.), fSemiGoodJetMinPhi(0.), fSemiGoodJetMaxPhi(4.), fSemiGoodTrackMinPhi(0.), fSemiGoodTrackMaxPhi(4.),
+ fHistPvalueCDFROOT(0x0), fHistPvalueCDFROOTCent(0x0), fHistChi2ROOTCent(0x0), fHistPChi2Root(0x0), fHistPvalueCDF(0x0), fHistPvalueCDFCent(0x0),
+ fHistChi2Cent(0x0), fHistPChi2(0x0), fHistRhoStatusCent(0), fAbsVnHarmonics(kTRUE), fExcludeLeadingJetsFromFit(1.),
+ fRebinSwapHistoOnTheFly(kTRUE), fPercentageOfFits(10.), fUseV0EventPlaneFromHeader(kTRUE), fOutputList(0),
+ fOutputListGood(0), fOutputListBad(0), fHistSwap(0), fHistAnalysisSummary(0), fProfV2(0), fProfV2Cumulant(0),
+ fProfV3(0), fProfV3Cumulant(0)
+{
+ // Default constructor
+
+ for(Int_t i(0); i < 10; i++) {
+ fHistPsi2[i] = 0;
+ fHistPsi3[i] = 0;
+ }
+}
+
+//_____________________________________________________________________________
+AliAnalysisTaskLocalRhoDev::AliAnalysisTaskLocalRhoDev(const char* name, runModeType type) :
+ AliAnalysisTaskEmcalJet(name, kTRUE),
+ fDebug(0), fInitialized(0), fAttachToEvent(kTRUE), fFillHistograms(kFALSE), fNoEventWeightsForQC(kTRUE),
+ fUseScaledRho(0), fCentralityClasses(0), fUserSuppliedV2(0), fUserSuppliedV3(0), fUserSuppliedR2(0),
+ fUserSuppliedR3(0), fNAcceptedTracks(0), fNAcceptedTracksQCn(0), fInCentralitySelection(-1), fFitModulationType(kCombined),
+ fFitGoodnessTest(kChi2Poisson), fQCRecovery(kTryFit), fUsePtWeight(kTRUE), fUsePtWeightErrorPropagation(kFALSE), fDetectorType(kTPC),
+ fFitModulationOptions("WLQI"), fRunModeType(type), fFitModulation(0), fFitControl(0x0), fMinPvalue(0.01), fMaxPvalue(1), fExpectedRuns(0x0),
+ fExpectedSemiGoodRuns(0x0), fRunNumber(-1), fCachedRho(0x0), fNameSmallRho(""), fLocalJetMinEta(-10), fLocalJetMaxEta(-10),
+ fLocalJetMinPhi(-10), fLocalJetMaxPhi(-10), fSoftTrackMinPt(0.15),
+ fSoftTrackMaxPt(5.), fSemiGoodJetMinPhi(0.), fSemiGoodJetMaxPhi(4.), fSemiGoodTrackMinPhi(0.), fSemiGoodTrackMaxPhi(4.),
+ fHistPvalueCDFROOT(0x0), fHistPvalueCDFROOTCent(0x0), fHistChi2ROOTCent(0x0), fHistPChi2Root(0x0), fHistPvalueCDF(0x0), fHistPvalueCDFCent(0x0),
+ fHistChi2Cent(0x0), fHistPChi2(0x0), fHistRhoStatusCent(0), fAbsVnHarmonics(kTRUE), fExcludeLeadingJetsFromFit(1.),
+ fRebinSwapHistoOnTheFly(kTRUE), fPercentageOfFits(10.), fUseV0EventPlaneFromHeader(kTRUE), fOutputList(0),
+ fOutputListGood(0), fOutputListBad(0), fHistSwap(0), fHistAnalysisSummary(0), fProfV2(0), fProfV2Cumulant(0),
+ fProfV3(0), fProfV3Cumulant(0)
+{
+ // Constructor
+ for(Int_t i(0); i < 10; i++) {
+ fHistPsi2[i] = 0;
+ fHistPsi3[i] = 0;
+ }
+
+ DefineInput(0, TChain::Class());
+ DefineOutput(1, TList::Class());
+ switch (fRunModeType) {
+ case kLocal : {
+ gStyle->SetOptFit(1);
+ DefineOutput(2, TList::Class());
+ DefineOutput(3, TList::Class());
+ } break;
+ default: fDebug = -1; // suppress debug info explicitely when not running locally
+ }
+}
+
+//_____________________________________________________________________________
+AliAnalysisTaskLocalRhoDev::~AliAnalysisTaskLocalRhoDev()
+{
+ // destructor
+ if(fOutputList) delete fOutputList;
+ if(fOutputListGood) delete fOutputListGood;
+ if(fOutputListBad) delete fOutputListBad;
+ if(fFitModulation) delete fFitModulation;
+ if(fHistSwap) delete fHistSwap;
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskLocalRhoDev::ExecOnce()
+{
+ // Init the analysis
+ if(fLocalRhoName=="") fLocalRhoName = Form("LocalRhoFrom_%s", GetName());
+ fLocalRho = new AliLocalRhoParameter(fLocalRhoName.Data(), 0);
+ // add the local rho to the event if necessary
+ if(fAttachToEvent) {
+ if(!(InputEvent()->FindListObject(fLocalRho->GetName()))) {
+ InputEvent()->AddObject(fLocalRho);
+ } else {
+ AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fLocalRho->GetName()));
+ }
+ }
+ AliAnalysisTaskEmcalJet::ExecOnce(); // init the base clas
+ if(fUseScaledRho) {
+ // unscaled rho has been retrieved by the parent class, now we retrieve rho scaled
+ fRho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(Form("%s_Scaled", fRho->GetName())));
+ if(!fRho) {
+ AliFatal(Form("%s: Couldn't find container for scaled rho. Aborting !", GetName()));
+ }
+ }
+ if(!GetJetContainer()) AliFatal(Form("%s: Couldn't get jet container. Aborting !", GetName()));
+}
+
+//_____________________________________________________________________________
+Bool_t AliAnalysisTaskLocalRhoDev::InitializeAnalysis()
+{
+ // Initialize the anaysis
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ if(fLocalJetMinEta > -10 && fLocalJetMaxEta > -10) SetJetEtaLimits(fLocalJetMinEta, fLocalJetMaxEta);
+ if(fLocalJetMinPhi > -10 && fLocalJetMaxPhi > -10) SetJetPhiLimits(fLocalJetMinPhi, fLocalJetMaxPhi);
+ switch (fFitModulationType) {
+ case kNoFit : { SetModulationFit(new TF1("fit_kNoFit", "[0]", 0, TMath::TwoPi())); } break;
+ case kV2 : {
+ SetModulationFit(new TF1("fit_kV2", "[0]*([1]+[2]*[3]*TMath::Cos([2]*(x-[4])))", 0, TMath::TwoPi()));
+ fFitModulation->SetParameter(0, 0.); // normalization
+ fFitModulation->SetParameter(3, 0.2); // v2
+ fFitModulation->FixParameter(1, 1.); // constant
+ fFitModulation->FixParameter(2, 2.); // constant
+ } break;
+ case kV3: {
+ SetModulationFit(new TF1("fit_kV3", "[0]*([1]+[2]*[3]*TMath::Cos([2]*(x-[4])))", 0, TMath::TwoPi()));
+ fFitModulation->SetParameter(0, 0.); // normalization
+ fFitModulation->SetParameter(3, 0.2); // v3
+ fFitModulation->FixParameter(1, 1.); // constant
+ fFitModulation->FixParameter(2, 3.); // constant
+ } break;
+ default : { // for the combined fit, the 'direct fourier series' or the user supplied vn values we use v2 and v3
+ SetModulationFit(new TF1("fit_kCombined", "[0]*([1]+[2]*([3]*TMath::Cos([2]*(x-[4]))+[7]*TMath::Cos([5]*(x-[6]))))", 0, TMath::TwoPi()));
+ fFitModulation->SetParameter(0, 0.); // normalization
+ fFitModulation->SetParameter(3, 0.2); // v2
+ fFitModulation->FixParameter(1, 1.); // constant
+ fFitModulation->FixParameter(2, 2.); // constant
+ fFitModulation->FixParameter(5, 3.); // constant
+ fFitModulation->SetParameter(7, 0.2); // v3
+ } break;
+ }
+ switch (fRunModeType) {
+ case kGrid : { fFitModulationOptions += "N0"; } break;
+ default : break;
+ }
+ FillAnalysisSummaryHistogram();
+ return kTRUE;
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskLocalRhoDev::UserCreateOutputObjects()
+{
+ // create output objects
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ fHistSwap = new TH1F("fHistSwap", "fHistSwap", 20, 0, TMath::TwoPi());
+ if(!fCentralityClasses) { // classes must be defined at this point
+ Double_t c[] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
+ fCentralityClasses = new TArrayD(sizeof(c)/sizeof(c[0]), c);
+ }
+ if(!fExpectedRuns) { // expected runs must be defined at this point
+ Int_t r[] = {167813, 167988, 168066, 168068, 168069, 168076, 168104, 168212, 168311, 168322, 168325, 168341, 168361, 168362, 168458, 168460, 168461, 168992, 169091, 169094, 169138, 169143, 169167, 169417, 169835, 169837, 169838, 169846, 169855, 169858, 169859, 169923, 169956, 170027, 170036, 170081, /* up till here original good TPC list */169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 170270, 170306, 170308, 170309, /* original semi-good tpc list */169415, 169411, 169035, 168988, 168984, 168826, 168777, 168512, 168511, 168467, 168464, 168342, 168310, 168115, 168108, 168107, 167987, 167915, 167903, /*new runs, good according to RCT */ 169238, 169160, 169156, 169148, 169145, 169144 /* run swith missing OROC 8 but seem ok in QA */};
+ fExpectedRuns = new TArrayI(sizeof(r)/sizeof(r[0]), r);
+ }
+ if(!fExpectedSemiGoodRuns) {
+ Int_t r[] = {169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 170270, 170306, 170308, 170309};
+ fExpectedSemiGoodRuns = new TArrayI(sizeof(r)/sizeof(r[0]), r);
+ }
+ fOutputList = new TList();
+ fOutputList->SetOwner(kTRUE);
+ // the analysis summary histo which stores all the analysis flags is always written to file
+ fHistAnalysisSummary = BookTH1F("fHistAnalysisSummary", "flag", 54, -0.5, 54.5);
+ if(!fFillHistograms) {
+ PostData(1, fOutputList);
+ return;
+ }
+ for(Int_t i(0); i < fCentralityClasses->GetSize()-1; i++) {
+ fHistPsi2[i] = BookTH1F("fHistPsi2", "#Psi_{2}", 100, -.5*TMath::Pi(), .5*TMath::Pi(), i);
+ fHistPsi3[i] = BookTH1F("fHistPsi3", "#Psi_{3}", 100, -1.*TMath::Pi()/3., TMath::Pi()/3., i);
+ }
+ // cdf of chisquare distribution
+ fHistPvalueCDF = BookTH1F("fHistPvalueCDF", "CDF #chi^{2}", 500, 0, 1);
+ fHistRhoStatusCent = BookTH2F("fHistRhoStatusCent", "centrality", "status [0=ok, 1=failed]", 101, -1, 100, 2, -.5, 1.5);
+ // vn profiles
+ Float_t temp[fCentralityClasses->GetSize()];
+ for(Int_t i(0); i < fCentralityClasses->GetSize(); i++) temp[i] = fCentralityClasses->At(i);
+ fProfV2 = new TProfile("fProfV2", "fProfV2", fCentralityClasses->GetSize()-1, temp);
+ fProfV3 = new TProfile("fProfV3", "fProfV3", fCentralityClasses->GetSize()-1, temp);
+ fOutputList->Add(fProfV2);
+ fOutputList->Add(fProfV3);
+ switch (fFitModulationType) {
+ case kQC2 : {
+ fProfV2Cumulant = new TProfile("fProfV2Cumulant", "fProfV2Cumulant", fCentralityClasses->GetSize()-1, temp);
+ fProfV3Cumulant = new TProfile("fProfV3Cumulant", "fProfV3Cumulant", fCentralityClasses->GetSize()-1, temp);
+ fOutputList->Add(fProfV2Cumulant);
+ fOutputList->Add(fProfV3Cumulant);
+ } break;
+ case kQC4 : {
+ fProfV2Cumulant = new TProfile("fProfV2Cumulant", "fProfV2Cumulant", fCentralityClasses->GetSize()-1, temp);
+ fProfV3Cumulant = new TProfile("fProfV3Cumulant", "fProfV3Cumulant", fCentralityClasses->GetSize()-1, temp);
+ fOutputList->Add(fProfV2Cumulant);
+ fOutputList->Add(fProfV3Cumulant);
+ } break;
+ default : break;
+ }
+ if(fUsePtWeight) fHistSwap->Sumw2();
+ if(fUserSuppliedV2) fOutputList->Add(fUserSuppliedV2);
+ if(fUserSuppliedV3) fOutputList->Add(fUserSuppliedV3);
+ if(fUserSuppliedR2) fOutputList->Add(fUserSuppliedR2);
+ if(fUserSuppliedR3) fOutputList->Add(fUserSuppliedR3);
+
+ // increase readability of output list
+ fOutputList->Sort();
+
+ // cdf and pdf of chisquare distribution
+ fHistPvalueCDF = BookTH1F("fHistPvalueCDF", "CDF #chi^{2}", 50, 0, 1);
+ fHistPvalueCDFCent = BookTH2F("fHistPvalueCDFCent", "centrality", "p-value", 40, 0, 100, 40, 0, 1);
+ fHistChi2Cent = BookTH2F("fHistChi2Cent", "centrality", "#tilde{#chi^{2}}", 100, 0, 100, 100, 0, 5);
+ fHistPChi2 = BookTH2F("fHistPChi2", "p-value", "#tilde{#chi^{2}}", 1000, 0, 1, 100, 0, 5);
+ fHistPvalueCDFROOT = BookTH1F("fHistPvalueCDFROOT", "CDF #chi^{2} ROOT", 50, 0, 1);
+ fHistPvalueCDFROOTCent = BookTH2F("fHistPvalueCDFROOTCent", "centrality", "p-value ROOT", 40, 0, 100, 45, 0, 1);
+ fHistChi2ROOTCent = BookTH2F("fHistChi2ROOTCent", "centrality", "#tilde{#chi^{2}}", 40, 0, 100, 45, 0, 5);
+ fHistPChi2Root = BookTH2F("fHistPChi2Root", "p-value", "#tilde{#chi^{2}} ROOT", 1000, 0, 1, 100, 0, 5);
+ fHistRhoStatusCent = BookTH2F("fHistRhoStatusCent", "centrality", "status [-1=lin was better, 0=ok, 1 = failed]", 101, -1, 100, 3, -1.5, 1.5);
+
+ PostData(1, fOutputList);
+ switch (fRunModeType) {
+ case kLocal : {
+ fOutputListGood = new TList();
+ fOutputListGood->SetOwner(kTRUE);
+ fOutputListBad = new TList();
+ fOutputListBad->SetOwner(kTRUE);
+ PostData(2, fOutputListGood);
+ PostData(3, fOutputListBad);
+ } break;
+ default: break;
+ }
+}
+
+//_____________________________________________________________________________
+TH1F* AliAnalysisTaskLocalRhoDev::BookTH1F(const char* name, const char* x, Int_t bins, Double_t min, Double_t max, Int_t c, Bool_t append)
+{
+ // Book a TH1F and connect it to the output container
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ if(!fOutputList) return 0x0;
+ TString title(name);
+ if(c!=-1) { // format centrality dependent histograms accordingly
+ name = Form("%s_%i", name, c);
+ title += Form("_%i-%i", (int)fCentralityClasses->At(c), (int)fCentralityClasses->At(1+c));
+ }
+ title += Form(";%s;[counts]", x);
+ TH1F* histogram = new TH1F(name, title.Data(), bins, min, max);
+ histogram->Sumw2();
+ if(append) fOutputList->Add(histogram);
+ return histogram;
+}
+
+//_____________________________________________________________________________
+TH2F* AliAnalysisTaskLocalRhoDev::BookTH2F(const char* name, const char* x, const char*y, Int_t binsx, Double_t minx, Double_t maxx,
+ Int_t binsy, Double_t miny, Double_t maxy, Int_t c, Bool_t append)
+{
+ // Book a TH2F and connect it to the output container
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ if(!fOutputList) return 0x0;
+ TString title(name);
+ if(c!=-1) { // format centrality dependent histograms accordingly
+ name = Form("%s_%i", name, c);
+ title += Form("_%i-%i", (int)fCentralityClasses->At(c), (int)fCentralityClasses->At(1+c));
+ }
+ title += Form(";%s;%s", x, y);
+ TH2F* histogram = new TH2F(name, title.Data(), binsx, minx, maxx, binsy, miny, maxy);
+ histogram->Sumw2();
+ if(append) fOutputList->Add(histogram);
+ return histogram;
+}
+
+//_____________________________________________________________________________
+Bool_t AliAnalysisTaskLocalRhoDev::Run()
+{
+ // Execute once for each event
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ if(!(PassesCuts(InputEvent())||fTracks||fJets||fRho)) return kFALSE;
+ if(!fInitialized) fInitialized = InitializeAnalysis();
+ // get the centrality bin (necessary for some control histograms
+ fInCentralitySelection = -1;
+ Double_t cent(InputEvent()->GetCentrality()->GetCentralityPercentile("V0M"));
+ for(Int_t i(0); i < fCentralityClasses->GetSize()-1; i++) {
+ if(cent >= fCentralityClasses->At(i) && cent <= fCentralityClasses->At(1+i)) {
+ fInCentralitySelection = i;
+ break; }
+ }
+ if(fInCentralitySelection < 0) return kFALSE;
+ // set the rho value
+ fLocalRho->SetVal(fRho->GetVal());
+ // set the correct event plane accordign to the requested reference detector
+ Double_t psi2(-1), psi3(-1);
+ switch (fDetectorType) { // determine the detector type for the rho fit
+ case kTPC : {
+ // [0] psi2 [1] psi3
+ Double_t tpc[2];
+ CalculateEventPlaneTPC(tpc);
+ psi2 = tpc[0]; psi3 = tpc[1];
+ } break;
+ case kVZEROA : {
+ // [0][0] psi2a [1,0] psi2c
+ // [0][1] psi3a [1,1] psi3c
+ Double_t vzero[2][2];
+ CalculateEventPlaneVZERO(vzero);
+ psi2 = vzero[0][0]; psi3 = vzero[0][1];
+ } break;
+ case kVZEROC : {
+ // [0][0] psi2a [1,0] psi2c
+ // [0][1] psi3a [1,1] psi3c
+ Double_t vzero[2][2];
+ CalculateEventPlaneVZERO(vzero);
+ psi2 = vzero[1][0]; psi3 = vzero[1][1];
+ } break;
+ case kVZEROComb : {
+ /* for the combined vzero event plane
+ * [0] psi2 [1] psi3
+ * not fully implmemented yet, use with caution ! */
+ Double_t vzeroComb[2];
+ CalculateEventPlaneCombinedVZERO(vzeroComb);
+ psi2 = vzeroComb[0]; psi3 = vzeroComb[1];
+ } break;
+ default : break;
+ }
+ if(fFillHistograms) FillEventPlaneHistograms(psi2, psi3);
+ switch (fFitModulationType) { // do the fits
+ case kNoFit : { fFitModulation->FixParameter(0, fLocalRho->GetVal()); } break;
+ case kV2 : { // only v2
+ if(CorrectRho(psi2, psi3)) {
+ if(fFillHistograms) fProfV2->Fill(fCent, fFitModulation->GetParameter(3));
+ if(fUserSuppliedR2) {
+ Double_t r(fUserSuppliedR2->GetBinContent(fUserSuppliedR2->GetXaxis()->FindBin(fCent)));
+ if(r > 0) fFitModulation->SetParameter(3, fFitModulation->GetParameter(3)/r);
+ }
+ }
+ } break;
+ case kV3 : { // only v3
+ if(CorrectRho(psi2, psi3)) {
+ if(fUserSuppliedR3) {
+ Double_t r(fUserSuppliedR3->GetBinContent(fUserSuppliedR3->GetXaxis()->FindBin(fCent)));
+ if(r > 0) fFitModulation->SetParameter(3, fFitModulation->GetParameter(3)/r);
+ }
+ if(fFillHistograms) fProfV3->Fill(fCent, fFitModulation->GetParameter(3));
+ }
+ } break;
+ case kQC2 : { // qc2 analysis - NOTE: not a wise idea to use this !
+ if(CorrectRho(psi2, psi3)) {
+ if(fUserSuppliedR2 && fUserSuppliedR3) {
+ // note for the qc method, resolution is REVERSED to go back to v2obs
+ Double_t r2(fUserSuppliedR2->GetBinContent(fUserSuppliedR2->GetXaxis()->FindBin(fCent)));
+ Double_t r3(fUserSuppliedR3->GetBinContent(fUserSuppliedR3->GetXaxis()->FindBin(fCent)));
+ if(r2 > 0) fFitModulation->SetParameter(3, fFitModulation->GetParameter(3)*r2);
+ if(r3 > 0) fFitModulation->SetParameter(7, fFitModulation->GetParameter(7)*r3);
+ }
+ if (fUsePtWeight) { // use weighted weights
+ Double_t dQCnM11 = (fNoEventWeightsForQC) ? 1. : QCnM11();
+ if(fFillHistograms) {
+ fProfV2->Fill(fCent, fFitModulation->GetParameter(3), dQCnM11);
+ fProfV3->Fill(fCent, fFitModulation->GetParameter(7), dQCnM11);
+ }
+ } else {
+ Double_t dQCnM = (fNoEventWeightsForQC) ? 2. : QCnM();
+ if(fFillHistograms) {
+ fProfV2->Fill(fCent, fFitModulation->GetParameter(3), dQCnM*(dQCnM-1));
+ fProfV3->Fill(fCent, fFitModulation->GetParameter(7), dQCnM*(dQCnM-1));
+ }
+ }
+ }
+ } break;
+ case kQC4 : { // NOTE: see comment at kQC2
+ if(CorrectRho(psi2, psi3)) {
+ if(fUserSuppliedR2 && fUserSuppliedR3) {
+ // note for the qc method, resolution is REVERSED to go back to v2obs
+ Double_t r2(fUserSuppliedR2->GetBinContent(fUserSuppliedR2->GetXaxis()->FindBin(fCent)));
+ Double_t r3(fUserSuppliedR3->GetBinContent(fUserSuppliedR3->GetXaxis()->FindBin(fCent)));
+ if(r2 > 0) fFitModulation->SetParameter(3, fFitModulation->GetParameter(3)*r2);
+ if(r3 > 0) fFitModulation->SetParameter(7, fFitModulation->GetParameter(7)*r3);
+ }
+ if (fUsePtWeight) { // use weighted weights
+ if(fFillHistograms) {
+ fProfV2->Fill(fCent, TMath::Power(fFitModulation->GetParameter(3),0.5)/*, QCnM1111()*/);
+ fProfV3->Fill(fCent, TMath::Power(fFitModulation->GetParameter(7),0.5)/*, QCnM1111()*/);
+ }
+ } else {
+ if(fFillHistograms) {
+ fProfV2->Fill(fCent, TMath::Power(fFitModulation->GetParameter(3),0.5)/*, QCnM()*(QCnM()-1)*(QCnM()-2)*(QCnM()-3)*/);
+ fProfV3->Fill(fCent, TMath::Power(fFitModulation->GetParameter(7),0.5)/*, QCnM()*(QCnM()-1)*(QCnM()-2)*(QCnM()-3)*/);
+ }
+ }
+ }
+ } break;
+ default : {
+ if(CorrectRho(psi2, psi3)) {
+ if(fUserSuppliedR2 && fUserSuppliedR3) {
+ Double_t r2(fUserSuppliedR2->GetBinContent(fUserSuppliedR2->GetXaxis()->FindBin(fCent)));
+ Double_t r3(fUserSuppliedR3->GetBinContent(fUserSuppliedR3->GetXaxis()->FindBin(fCent)));
+ if(r2 > 0) fFitModulation->SetParameter(3, fFitModulation->GetParameter(3)/r2);
+ if(r3 > 0) fFitModulation->SetParameter(7, fFitModulation->GetParameter(7)/r3);
+ }
+ if(fFillHistograms) {
+ fProfV2->Fill(fCent, fFitModulation->GetParameter(3));
+ fProfV3->Fill(fCent, fFitModulation->GetParameter(7));
+ }
+ }
+ } break;
+ }
+ // if all went well, add local rho
+ fLocalRho->SetLocalRho(fFitModulation);
+ PostData(1, fOutputList);
+ return kTRUE;
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskLocalRhoDev::CalculateEventPlaneVZERO(Double_t vzero[2][2]) const
+{
+ // Get the vzero event plane
+ if(fUseV0EventPlaneFromHeader) {
+ // use the vzero event plane from the event header
+ // note: to use the calibrated vzero event plane, run
+ // $ALICE_ROOT/ANALYSIS/macros/AddTaskVZEROEPSelection.C
+ // prior to this task (make sure the calibration is available for the dataset
+ // you want to use)
+ Double_t a(0), b(0), c(0), d(0), e(0), f(0), g(0), h(0);
+ vzero[0][0] = InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 8, 2, a, b);
+ vzero[1][0] = InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 9, 2, c, d);
+ vzero[0][1] = InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 8, 3, e, f);
+ vzero[1][1] = InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 9, 3, g, h);
+ return;
+ }
+ // grab the vzero event plane without recentering
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ Double_t qxa2(0), qya2(0), qxc2(0), qyc2(0); // for psi2
+ Double_t qxa3(0), qya3(0), qxc3(0), qyc3(0); // for psi3
+ for(Int_t iVZERO(0); iVZERO < 64; iVZERO++) {
+ Double_t phi(TMath::PiOver4()*(.5+iVZERO%8)), /* eta(0), */ weight(InputEvent()->GetVZEROEqMultiplicity(iVZERO));
+ // (iVZERO<32) ? eta = -3.45+.5*(iVZERO/8) : eta = 4.8-.6*((iVZERO/8)-4);
+ if(iVZERO<32) {
+ qxa2 += weight*TMath::Cos(2.*phi);
+ qya2 += weight*TMath::Sin(2.*phi);
+ qxa3 += weight*TMath::Cos(3.*phi);
+ qya3 += weight*TMath::Sin(3.*phi);
+ }
+ else {
+ qxc2 += weight*TMath::Cos(2.*phi);
+ qyc2 += weight*TMath::Sin(2.*phi);
+ qxc3 += weight*TMath::Cos(3.*phi);
+ qyc3 += weight*TMath::Sin(3.*phi);
+ }
+ }
+ vzero[0][0] = .5*TMath::ATan2(qya2, qxa2);
+ vzero[1][0] = .5*TMath::ATan2(qyc2, qxc2);
+ vzero[0][1] = (1./3.)*TMath::ATan2(qya3, qxa3);
+ vzero[1][1] = (1./3.)*TMath::ATan2(qyc3, qxc3);
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskLocalRhoDev::CalculateEventPlaneTPC(Double_t* tpc)
+{
+ // Grab the TPC event plane. if parameter fExcludeLeadingJetsFromFit is larger than 0,
+ // strip in eta of width fExcludeLeadingJetsFromFit * GetJetContainer()->GetJetRadius() around the leading jet (before
+ // subtraction of rho) will be exluded from the event plane estimate
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ fNAcceptedTracks = 0; // reset the track counter
+ Double_t qx2(0), qy2(0); // for psi2
+ Double_t qx3(0), qy3(0); // for psi3
+ if(fTracks) {
+ Float_t excludeInEta = -999;
+ if(fExcludeLeadingJetsFromFit > 0 ) { // remove the leading jet from ep estimate
+ AliEmcalJet* leadingJet(GetJetContainer()->GetLeadingJet());
+ if(leadingJet) excludeInEta = leadingJet->Eta();
+ }
+ Int_t iTracks(fTracks->GetEntriesFast());
+ for(Int_t iTPC(0); iTPC < iTracks; iTPC++) {
+ AliVTrack* track = static_cast<AliVTrack*>(fTracks->At(iTPC));
+ if(!PassesCuts(track) || track->Pt() < fSoftTrackMinPt || track->Pt() > fSoftTrackMaxPt) continue;
+ if(fExcludeLeadingJetsFromFit > 0 &&( (TMath::Abs(track->Eta() - excludeInEta) < GetJetContainer()->GetJetRadius()*fExcludeLeadingJetsFromFit ) || (TMath::Abs(track->Eta()) - GetJetContainer()->GetJetRadius() - GetJetContainer()->GetJetEtaMax() ) > 0 )) continue;
+ fNAcceptedTracks++;
+ qx2+= TMath::Cos(2.*track->Phi());
+ qy2+= TMath::Sin(2.*track->Phi());
+ qx3+= TMath::Cos(3.*track->Phi());
+ qy3+= TMath::Sin(3.*track->Phi());
+ }
+ }
+ tpc[0] = .5*TMath::ATan2(qy2, qx2);
+ tpc[1] = (1./3.)*TMath::ATan2(qy3, qx3);
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskLocalRhoDev::CalculateEventPlaneCombinedVZERO(Double_t* comb) const
+{
+ // Grab the combined vzero event plane
+
+ // if(fUseV0EventPlaneFromHeader) { // use the vzero from the header
+ Double_t a(0), b(0), c(0), d(0);
+ comb[0] = InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 10, 2, a, b);
+ comb[1] = InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 10, 3, c, d);
+ // FIXME the rest of this function isn't impelmented yet (as of 01-07-2013)
+ // this means a default the combined vzero event plane from the header is used
+ // to get this value 'by hand', vzeroa and vzeroc event planes have to be combined
+ // according to their resolution - this will be added ...
+ //
+ // } else {
+ // Double_t qx2a(0), qy2a(0), qx2c(0), qy2c(0), qx3a(0), qy3a(0), qx3c(0), qy3c(0);
+ // InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 8, 2, qx2a, qy2a);
+ // InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 9, 2, qx2c, qy2c);
+ // InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 8, 3, qx3a, qy3a);
+ // InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 9, 3, qx3c, qy3c);
+ // Double_t chi2A(-1), chi2C(-1), chi3A(-1), chi3C(-1); // get chi from the resolution
+ // Double_t qx2(chi2A*chi2A*qx2a+chi2C*chi2C*qx2c);
+ // Double_t qy2(chi2A*chi2A*qy2a+chi2C*chi2C*qy2c);
+ // Double_t qx3(chi3A*chi3A*qx3a+chi3C*chi3C*qx3c);
+ // Double_t qy3(chi3A*chi3A*qy3a+chi3C*chi3C*qy3c);
+ // comb[0] = .5*TMath::ATan2(qy2, qx2);
+ // comb[1] = (1./3.)*TMath::ATan2(qy3, qx3);
+ // }
+}
+
+//_____________________________________________________________________________
+Double_t AliAnalysisTaskLocalRhoDev::CalculateQC2(Int_t harm)
+{
+ // Get the second order q-cumulant, a -999 return will be caught in the qa routine of CorrectRho
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ Double_t reQ(0), imQ(0), modQ(0), M11(0), M(0);
+ if(fUsePtWeight) { // for the weighted 2-nd order q-cumulant
+ QCnQnk(harm, 1, reQ, imQ); // get the weighted 2-nd order q-vectors
+ modQ = reQ*reQ+imQ*imQ; // get abs Q-squared
+ M11 = QCnM11(); // equals S2,1 - S1,2
+ return (M11 > 0) ? ((modQ - QCnS(1,2))/M11) : -999;
+ } // else return the non-weighted 2-nd order q-cumulant
+ QCnQnk(harm, 0, reQ, imQ); // get the non-weighted 2-nd order q-vectors
+ modQ = reQ*reQ+imQ*imQ; // get abs Q-squared
+ M = QCnM();
+ return (M > 1) ? (modQ - M)/(M*(M-1)) : -999;
+}
+
+//_____________________________________________________________________________
+Double_t AliAnalysisTaskLocalRhoDev::CalculateQC4(Int_t harm)
+{
+ // Get the fourth order q-cumulant, a -999 return will be caught in the qa routine of CorrectRho
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ Double_t reQn1(0), imQn1(0), reQ2n2(0), imQ2n2(0), reQn3(0), imQn3(0), M1111(0), M(0);
+ Double_t a(0), b(0), c(0), d(0), e(0), f(0), g(0); // terms of the calculation
+ if(fUsePtWeight) { // for the weighted 4-th order q-cumulant
+ QCnQnk(harm, 1, reQn1, imQn1);
+ QCnQnk(harm*2, 2, reQ2n2, imQ2n2);
+ QCnQnk(harm, 3, reQn3, imQn3);
+ // fill in the terms ...
+ a = (reQn1*reQn1+imQn1*imQn1)*(reQn1*reQn1+imQn1*imQn1);
+ b = reQ2n2*reQ2n2 + imQ2n2*imQ2n2;
+ c = -2.*(reQ2n2*reQn1*reQn1-reQ2n2*imQn1*imQn1+2.*imQ2n2*reQn1*imQn1);
+ d = 8.*(reQn3*reQn1+imQn3*imQn1);
+ e = -4.*QCnS(1,2)*(reQn1*reQn1+imQn1*imQn1);
+ f = -6.*QCnS(1,4);
+ g = 2.*QCnS(2,2);
+ M1111 = QCnM1111();
+ return (M1111 > 0) ? (a+b+c+d+e+f+g)/M1111 : -999;
+ } // else return the unweighted case
+ Double_t reQn(0), imQn(0), reQ2n(0), imQ2n(0);
+ QCnQnk(harm, 0, reQn, imQn);
+ QCnQnk(harm*2, 0, reQ2n, imQ2n);
+ // fill in the terms ...
+ M = QCnM();
+ if(M < 4) return -999;
+ a = (reQn*reQn+imQn*imQn)*(reQn*reQn+imQn*imQn);
+ b = reQ2n*reQ2n + imQ2n*imQ2n;
+ c = -2.*(reQ2n*reQn*reQn-reQ2n*imQn*imQn+2.*imQ2n*reQn*imQn);
+ e = -4.*(M-2)*(reQn*reQn+imQn*imQn);
+ f = 2.*M*(M-3);
+ return (a+b+c+e+f)/(M*(M-1)*(M-2)*(M-3));
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskLocalRhoDev::QCnQnk(Int_t n, Int_t k, Double_t &reQ, Double_t &imQ)
+{
+ // Get the weighted n-th order q-vector, pass real and imaginary part as reference
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ if(!fTracks) return;
+ fNAcceptedTracksQCn = 0;
+ Int_t iTracks(fTracks->GetEntriesFast());
+ for(Int_t iTPC(0); iTPC < iTracks; iTPC++) {
+ AliVTrack* track = static_cast<AliVTrack*>(fTracks->At(iTPC));
+ if(!PassesCuts(track) || track->Pt() < fSoftTrackMinPt || track->Pt() > fSoftTrackMaxPt) continue;
+ fNAcceptedTracksQCn++;
+ // for the unweighted case, k equals zero and the weight doesn't contribute to the equation below
+ reQ += TMath::Power(track->Pt(), k) * TMath::Cos(((double)n)*track->Phi());
+ imQ += TMath::Power(track->Pt(), k) * TMath::Sin(((double)n)*track->Phi());
+ }
+}
+
+//_____________________________________________________________________________
+Double_t AliAnalysisTaskLocalRhoDev::QCnS(Int_t i, Int_t j)
+{
+ // Get the weighted ij-th order autocorrelation correction
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ if(!fTracks || i <= 0 || j <= 0) return -999;
+ Int_t iTracks(fTracks->GetEntriesFast());
+ Double_t Sij(0);
+ for(Int_t iTPC(0); iTPC < iTracks; iTPC++) {
+ AliVTrack* track = static_cast<AliVTrack*>(fTracks->At(iTPC));
+ if(!PassesCuts(track) || track->Pt() < fSoftTrackMinPt || track->Pt() > fSoftTrackMaxPt) continue;
+ Sij+=TMath::Power(track->Pt(), j);
+ }
+ return TMath::Power(Sij, i);
+}
+
+//_____________________________________________________________________________
+Double_t AliAnalysisTaskLocalRhoDev::QCnM()
+{
+ // Get multiplicity for unweighted q-cumulants. function QCnQnk should be called first
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ return (Double_t) fNAcceptedTracksQCn;
+}
+
+//_____________________________________________________________________________
+Double_t AliAnalysisTaskLocalRhoDev::QCnM11()
+{
+ // Get multiplicity weights for the weighted two particle cumulant
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ return (QCnS(2,1) - QCnS(1,2));
+}
+
+//_____________________________________________________________________________
+Double_t AliAnalysisTaskLocalRhoDev::QCnM1111()
+{
+ // Get multiplicity weights for the weighted four particle cumulant
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ return (QCnS(4,1)-6*QCnS(1,2)*QCnS(2,1)+8*QCnS(1,3)*QCnS(1,1)+3*QCnS(2,2)-6*QCnS(1,4));
+}
+
+//_____________________________________________________________________________
+Bool_t AliAnalysisTaskLocalRhoDev::QCnRecovery(Double_t psi2, Double_t psi3)
+{
+ // Decides how to deal with the situation where c2 or c3 is negative
+ // Returns kTRUE depending on whether or not a modulated rho is used for the jet background
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ if(TMath::AreEqualAbs(fFitModulation->GetParameter(3), .0, 1e-10) && TMath::AreEqualAbs(fFitModulation->GetParameter(7), .0,1e-10)) {
+ fFitModulation->SetParameter(7, 0);
+ fFitModulation->SetParameter(3, 0);
+ fFitModulation->SetParameter(0, fLocalRho->GetVal());
+ return kTRUE; // v2 and v3 have physical null values
+ }
+ switch (fQCRecovery) {
+ case kFixedRho : { // roll back to the original rho
+ fFitModulation->SetParameter(7, 0);
+ fFitModulation->SetParameter(3, 0);
+ fFitModulation->SetParameter(0, fLocalRho->GetVal());
+ return kFALSE; // rho is forced to be fixed
+ }
+ case kNegativeVn : {
+ Double_t c2(fFitModulation->GetParameter(3));
+ Double_t c3(fFitModulation->GetParameter(7));
+ if( c2 < 0 ) c2 = -1.*TMath::Sqrt(-1.*c2);
+ if( c3 < 0 ) c3 = -1.*TMath::Sqrt(-1.*c3);
+ fFitModulation->SetParameter(3, c2);
+ fFitModulation->SetParameter(7, c3);
+ return kTRUE; // is this a physical quantity ?
+ }
+ case kTryFit : {
+ fitModulationType tempType(fFitModulationType); // store temporarily
+ fFitModulationType = kCombined;
+ fFitModulation->SetParameter(7, 0);
+ fFitModulation->SetParameter(3, 0);
+ Bool_t pass(CorrectRho(psi2, psi3)); // do the fit and all quality checks
+ fFitModulationType = tempType; // roll back for next event
+ return pass;
+ }
+ default : return kFALSE;
+ }
+ return kFALSE;
+}
+
+//_____________________________________________________________________________
+Bool_t AliAnalysisTaskLocalRhoDev::CorrectRho(Double_t psi2, Double_t psi3)
+{
+ // Get rho' -> rho(phi)
+ // three routines are available, 1 and 2 can be used with or without pt weights
+ // [1] get vn from q-cumulants
+ // in case of cumulants, both cumulants and vn values are stored. in both cases, v2 and v3
+ // are expected. a check is performed to see if rho has no negative local minimum
+ // for full description, see Phys. Rev. C 83, 044913
+ // since the cn distribution has negative values, vn = sqrt(cn) can be imaginary sometimes
+ // in this case one can either roll back to the 'original' fixed rho, do a fit for vn or take use
+ // vn = - sqrt(|cn|) note that because of this, use of q-cumulants is not safe !
+ // [2] fitting a fourier expansion to the de/dphi distribution
+ // the fit can be done with either v2, v3 or a combination.
+ // in all cases, a cut can be made on the p-value of the chi-squared value of the fit
+ // and a check can be performed to see if rho has no negative local minimum
+ // [3] get v2 and v3 from user supplied histograms
+ // in this way, a fixed value of v2 and v3 is subtracted w.r.t. whichever event plane is requested
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ Int_t freeParams(2); // free parameters of the fit (for NDF)
+ switch (fFitModulationType) { // for approaches where no fitting is required
+ case kQC2 : {
+ fFitModulation->FixParameter(4, psi2);
+ fFitModulation->FixParameter(6, psi3);
+ fFitModulation->FixParameter(3, CalculateQC2(2)); // set here with cn, vn = sqrt(cn)
+ fFitModulation->FixParameter(7, CalculateQC2(3));
+ // first fill the histos of the raw cumulant distribution
+ if (fUsePtWeight) { // use weighted weights
+ Double_t dQCnM11 = (fNoEventWeightsForQC) ? 1. : QCnM11();
+ fProfV2Cumulant->Fill(fCent, fFitModulation->GetParameter(3), dQCnM11);
+ fProfV3Cumulant->Fill(fCent, fFitModulation->GetParameter(7), dQCnM11);
+ } else {
+ Double_t dQCnM = (fNoEventWeightsForQC) ? 2. : QCnM();
+ fProfV2Cumulant->Fill(fCent, fFitModulation->GetParameter(3), dQCnM*(dQCnM-1));
+ fProfV3Cumulant->Fill(fCent, fFitModulation->GetParameter(7), dQCnM*(dQCnM-1));
+ }
+ // then see if one of the cn value is larger than zero and vn is readily available
+ if(fFitModulation->GetParameter(3) > 0 && fFitModulation->GetParameter(7) > 0) {
+ fFitModulation->FixParameter(3, TMath::Sqrt(fFitModulation->GetParameter(3)));
+ fFitModulation->FixParameter(7, TMath::Sqrt(fFitModulation->GetParameter(7)));
+ } else if (!QCnRecovery(psi2, psi3)) return kFALSE; // try to recover the cumulant, this will set v2 and v3
+ if(fAbsVnHarmonics && fFitModulation->GetMinimum(0, TMath::TwoPi()) < 0) { // general check
+ fFitModulation->SetParameter(7, 0);
+ fFitModulation->SetParameter(3, 0);
+ fFitModulation->SetParameter(0, fLocalRho->GetVal());
+ return kFALSE;
+ }
+ return kTRUE;
+ } break;
+ case kQC4 : {
+ fFitModulation->FixParameter(4, psi2);
+ fFitModulation->FixParameter(6, psi3);
+ fFitModulation->FixParameter(3, CalculateQC4(2)); // set here with cn, vn = sqrt(cn)
+ fFitModulation->FixParameter(7, CalculateQC4(3));
+ // first fill the histos of the raw cumulant distribution
+ if (fUsePtWeight) { // use weighted weights
+ fProfV2Cumulant->Fill(fCent, fFitModulation->GetParameter(3)/*, QCnM1111()*/);
+ fProfV3Cumulant->Fill(fCent, fFitModulation->GetParameter(7)/*, QCnM1111()*/);
+ } else {
+ fProfV2Cumulant->Fill(fCent, fFitModulation->GetParameter(3)/*, QCnM1111()*/);
+ fProfV3Cumulant->Fill(fCent, fFitModulation->GetParameter(7)/*, QCnM1111()*/);
+ }
+ // then see if one of the cn value is larger than zero and vn is readily available
+ if(fFitModulation->GetParameter(3) > 0 && fFitModulation->GetParameter(7) > 0) {
+ fFitModulation->FixParameter(3, TMath::Sqrt(fFitModulation->GetParameter(3)));
+ fFitModulation->FixParameter(7, TMath::Sqrt(fFitModulation->GetParameter(7)));
+ } else if (!QCnRecovery(psi2, psi3)) return kFALSE; // try to recover the cumulant, this will set v2 and v3
+ if(fAbsVnHarmonics && fFitModulation->GetMinimum(0, TMath::TwoPi()) < 0) { // general check
+ fFitModulation->SetParameter(7, 0);
+ fFitModulation->SetParameter(3, 0);
+ fFitModulation->SetParameter(0, fLocalRho->GetVal());
+ return kFALSE;
+ }
+ } break;
+ case kIntegratedFlow : {
+ // use v2 and v3 values from an earlier iteration over the data
+ fFitModulation->FixParameter(3, fUserSuppliedV2->GetBinContent(fUserSuppliedV2->GetXaxis()->FindBin(fCent)));
+ fFitModulation->FixParameter(4, psi2);
+ fFitModulation->FixParameter(6, psi3);
+ fFitModulation->FixParameter(7, fUserSuppliedV3->GetBinContent(fUserSuppliedV3->GetXaxis()->FindBin(fCent)));
+ if(fAbsVnHarmonics && fFitModulation->GetMinimum(0, TMath::TwoPi()) < 0) {
+ fFitModulation->SetParameter(7, 0);
+ fFitModulation->SetParameter(3, 0);
+ fFitModulation->SetParameter(0, fLocalRho->GetVal());
+ return kFALSE;
+ }
+ return kTRUE;
+ }
+ default : break;
+ }
+ TString detector("");
+ switch (fDetectorType) {
+ case kTPC : detector+="TPC";
+ break;
+ case kVZEROA : detector+="VZEROA";
+ break;
+ case kVZEROC : detector+="VZEROC";
+ break;
+ case kVZEROComb : detector+="VZEROComb";
+ break;
+ default: break;
+ }
+ Int_t iTracks(fTracks->GetEntriesFast());
+ Double_t excludeInEta = -999;
+ Double_t excludeInPhi = -999;
+ Double_t excludeInPt = -999;
+ if(iTracks <= 0 || fLocalRho->GetVal() <= 0 ) return kFALSE; // no use fitting an empty event ...
+ if(fExcludeLeadingJetsFromFit > 0 ) {
+ AliEmcalJet* leadingJet(GetJetContainer()->GetLeadingJet());
+ if(PassesCuts(leadingJet)) {
+ excludeInEta = leadingJet->Eta();
+ excludeInPhi = leadingJet->Phi();
+ excludeInPt = leadingJet->Pt();
+ }
+ }
+ // check the acceptance of the track selection that will be used
+ // if one uses e.g. semi-good tpc tracks, accepance in phi is reduced to 0 < phi < 4
+ // the defaults (-10 < phi < 10) which accept all, are then overwritten
+ Double_t lowBound(0.), upBound(TMath::TwoPi()); // bounds for fit
+ if(GetParticleContainer()->GetParticlePhiMin() > lowBound) lowBound = GetParticleContainer()->GetParticlePhiMin();
+ if(GetParticleContainer()->GetParticlePhiMax() < upBound) upBound = GetParticleContainer()->GetParticlePhiMax();
+
+ fHistSwap->Reset(); // clear the histogram
+ TH1F _tempSwap; // on stack for quick access
+ TH1F _tempSwapN; // on stack for quick access, bookkeeping histogram
+ if(fRebinSwapHistoOnTheFly) {
+ if(fNAcceptedTracks < 49) fNAcceptedTracks = 49; // avoid aliasing effects
+ _tempSwap = TH1F("_tempSwap", "_tempSwap", TMath::CeilNint(TMath::Sqrt(fNAcceptedTracks)), lowBound, upBound);
+ if(fUsePtWeightErrorPropagation) _tempSwapN = TH1F("_tempSwapN", "_tempSwapN", TMath::CeilNint(TMath::Sqrt(fNAcceptedTracks)), lowBound, upBound);
+ if(fUsePtWeight) _tempSwap.Sumw2();
+ }
+ else _tempSwap = *fHistSwap; // now _tempSwap holds the desired histo
+ // non poissonian error when using pt weights
+ Double_t totalpts(0.), totalptsquares(0.), totalns(0.);
+ for(Int_t i(0); i < iTracks; i++) {
+ AliVTrack* track = static_cast<AliVTrack*>(fTracks->At(i));
+ if(fExcludeLeadingJetsFromFit > 0 &&( (TMath::Abs(track->Eta() - excludeInEta) < GetJetContainer()->GetJetRadius()*fExcludeLeadingJetsFromFit ) || (TMath::Abs(track->Eta()) - GetJetContainer()->GetJetRadius() - GetJetContainer()->GetJetEtaMax() ) > 0 )) continue;
+ if(!PassesCuts(track) || track->Pt() > fSoftTrackMaxPt || track->Pt() < fSoftTrackMinPt) continue;
+ if(fUsePtWeight) {
+ _tempSwap.Fill(track->Phi(), track->Pt());
+ if(fUsePtWeightErrorPropagation) {
+ totalpts += track->Pt();
+ totalptsquares += track->Pt()*track->Pt();
+ totalns += 1;
+ _tempSwapN.Fill(track->Phi());
+ }
+ }
+ else _tempSwap.Fill(track->Phi());
+ }
+ if(fUsePtWeight && fUsePtWeightErrorPropagation) {
+ // in the case of pt weights overwrite the poissonian error estimate which is assigned by root by a more sophisticated appraoch
+ // the assumption here is that the bin error will be dominated by the uncertainty in the mean pt in a bin and in the uncertainty
+ // of the number of tracks in a bin, the first of which will be estimated from the sample standard deviation of all tracks in the
+ // event, for the latter use a poissonian estimate. the two contrubitions are assumed to be uncorrelated
+ if(totalns < 1) return kFALSE; // not one track passes the cuts
+ for(Int_t l = 0; l < _tempSwap.GetNbinsX(); l++) {
+ if(_tempSwapN.GetBinContent(l+1) == 0) {
+ _tempSwap.SetBinContent(l+1,0);
+ _tempSwap.SetBinError(l+1,0);
+ }
+ else {
+ Double_t vartimesnsq = totalptsquares*totalns - totalpts*totalpts;
+ Double_t variance = vartimesnsq/(totalns*(totalns-1.));
+ Double_t SDOMSq = variance / _tempSwapN.GetBinContent(l+1);
+ Double_t SDOMSqOverMeanSq = SDOMSq * _tempSwapN.GetBinContent(l+1) * _tempSwapN.GetBinContent(l+1) / (_tempSwapN.GetBinContent(l+1) * _tempSwapN.GetBinContent(l+1));
+ Double_t poissonfrac = 1./_tempSwapN.GetBinContent(l+1);
+ Double_t vartotalfrac = SDOMSqOverMeanSq + poissonfrac;
+ Double_t vartotal = vartotalfrac * _tempSwap.GetBinContent(l+1) * _tempSwap.GetBinContent(l+1);
+ if(vartotal > 0.0001) _tempSwap.SetBinError(l+1,TMath::Sqrt(vartotal));
+ else {
+ _tempSwap.SetBinContent(l+1,0);
+ _tempSwap.SetBinError(l+1,0);
+ }
+ }
+ }
+ }
+
+ fFitModulation->SetParameter(0, fLocalRho->GetVal());
+ switch (fFitModulationType) {
+ case kNoFit : {
+ fFitModulation->FixParameter(0, fLocalRho->GetVal() );
+ freeParams = 0;
+ } break;
+ case kV2 : {
+ fFitModulation->FixParameter(4, psi2);
+ freeParams = 1;
+ } break;
+ case kV3 : {
+ fFitModulation->FixParameter(4, psi3);
+ freeParams = 1;
+ } break;
+ case kCombined : {
+ fFitModulation->FixParameter(4, psi2);
+ fFitModulation->FixParameter(6, psi3);
+ freeParams = 2;
+ } break;
+ case kFourierSeries : {
+ // in this approach, an explicit calculation will be made of vn = sqrt(xn^2+yn^2)
+ // where x[y] = Integrate[r(phi)cos[sin](n phi)dphi, 0, 2pi]
+ Double_t cos2(0), sin2(0), cos3(0), sin3(0), sumPt(0);
+ for(Int_t i(0); i < iTracks; i++) {
+ AliVTrack* track = static_cast<AliVTrack*>(fTracks->At(i));
+ if(!PassesCuts(track) || track->Pt() > fSoftTrackMaxPt || track->Pt() < fSoftTrackMinPt) continue;
+ sumPt += track->Pt();
+ cos2 += track->Pt()*TMath::Cos(2*PhaseShift(track->Phi()-psi2));
+ sin2 += track->Pt()*TMath::Sin(2*PhaseShift(track->Phi()-psi2));
+ cos3 += track->Pt()*TMath::Cos(3*PhaseShift(track->Phi()-psi3));
+ sin3 += track->Pt()*TMath::Sin(3*PhaseShift(track->Phi()-psi3));
+ }
+ fFitModulation->SetParameter(3, TMath::Sqrt(cos2*cos2+sin2*sin2)/fLocalRho->GetVal());
+ fFitModulation->SetParameter(4, psi2);
+ fFitModulation->SetParameter(6, psi3);
+ fFitModulation->SetParameter(7, TMath::Sqrt(cos3*cos3+sin3*sin3)/fLocalRho->GetVal());
+ } break;
+ default : break;
+ }
+ _tempSwap.Fit(fFitModulation, fFitModulationOptions.Data(), "", lowBound, upBound);
+ // the quality of the fit is evaluated from 1 - the cdf of the chi square distribution
+ // three methods are available, all with their drawbacks. all are stored, one is selected to do the cut
+ Int_t NDF(_tempSwap.GetXaxis()->GetNbins()-freeParams);
+ if(NDF == 0) return kFALSE;
+ Double_t CDF(1.-ChiSquareCDF(NDF, ChiSquare(_tempSwap, fFitModulation)));
+ Double_t CDFROOT(1.-ChiSquareCDF(NDF, fFitModulation->GetChisquare()));
+ // fill the values and centrality correlation (redundant but easy on the eyes)
+ fHistPvalueCDF->Fill(CDF);
+ fHistPvalueCDFCent->Fill(fCent, CDF);
+ fHistPvalueCDFROOT->Fill(CDFROOT);
+ fHistPvalueCDFROOTCent->Fill(fCent, CDFROOT);
+ fHistChi2ROOTCent->Fill(fCent, fFitModulation->GetChisquare()/((float)NDF));
+ fHistChi2Cent->Fill(fCent, ChiSquare(_tempSwap, fFitModulation)/((float)NDF));
+ fHistPChi2Root->Fill(CDFROOT, fFitModulation->GetChisquare()/((float)NDF));
+ fHistPChi2->Fill(CDF, ChiSquare(_tempSwap, fFitModulation)/((float)NDF));
+
+ // variable CDF is used for making cuts, so we fill it with the selected p-value
+ switch (fFitGoodnessTest) {
+ case kChi2ROOT : {
+ CDF = CDFROOT;
+ } break;
+ case kChi2Poisson : break; // CDF is already CDF
+ default: break;
+ }
+
+ if(fFitControl) {
+ // as an additional quality check, see if fitting a control fit has a higher significance
+ _tempSwap.Fit(fFitControl, fFitModulationOptions.Data(), "", lowBound, upBound);
+ Double_t CDFControl(-1.);
+ switch (fFitGoodnessTest) {
+ case kChi2ROOT : {
+ CDFControl = 1.-ChiSquareCDF(fFitControl->GetNDF(), fFitModulation->GetChisquare());
+ } break;
+ case kChi2Poisson : {
+ CDFControl = 1.-ChiSquareCDF(fFitControl->GetNDF(), ChiSquare(_tempSwap, fFitModulation));
+ } break;
+ default: break;
+ }
+ if(CDFControl > CDF) {
+ CDF = -1.; // control fit is more significant, so throw out the 'old' fit
+ fHistRhoStatusCent->Fill(fCent, -1);
+ }
+ }
+ if(CDF >= fMinPvalue && CDF <= fMaxPvalue && ( fAbsVnHarmonics && fFitModulation->GetMinimum(0, TMath::TwoPi()) > 0)) { // fit quality. not that although with limited acceptance the fit is performed on just
+ // part of phase space, the requirement that energy desntiy is larger than zero is applied
+ // to the FULL spectrum
+ fHistRhoStatusCent->Fill(fCent, 0.);
+ // for LOCAL didactic purposes, save the best and the worst fits
+ // this routine can produce a lot of output histograms (it's not memory 'safe') and will not work on GRID
+ // since the output will become unmergeable (i.e. different nodes may produce conflicting output)
+ switch (fRunModeType) {
+ case kLocal : {
+ if(gRandom->Uniform(0, 100) > fPercentageOfFits) break;
+ static Int_t didacticCounterBest(0);
+ TProfile* didacticProfile = (TProfile*)_tempSwap.Clone(Form("Fit_%i_1-CDF_%.3f_cen_%i_%s", didacticCounterBest, CDF, fInCentralitySelection, detector.Data()));
+ TF1* didacticFit = (TF1*)fFitModulation->Clone(Form("fit_%i_CDF_%.3f_cen_%i_%s", didacticCounterBest, CDF, fInCentralitySelection, detector.Data()));
+ switch(fFitModulationType) {
+ case kCombined : {
+ // to make a nice picture also plot the separate components (v2 and v3) of the fit
+ // only done for cobined fit where there are actually components to split ...
+ TF1* v0(new TF1("dfit_kV2", "[0]", 0, TMath::TwoPi()));
+ v0->SetParameter(0, didacticFit->GetParameter(0)); // normalization
+ v0->SetLineColor(kMagenta);
+ v0->SetLineStyle(7);
+ didacticProfile->GetListOfFunctions()->Add(v0);
+ TF1* v2(new TF1("dfit_kV2", "[0]*([1]+[2]*[3]*TMath::Cos([2]*(x-[4])))", 0, TMath::TwoPi()));
+ v2->SetParameter(0, didacticFit->GetParameter(0)); // normalization
+ v2->SetParameter(3, didacticFit->GetParameter(3)); // v2
+ v2->FixParameter(1, 1.); // constant
+ v2->FixParameter(2, 2.); // constant
+ v2->FixParameter(4, didacticFit->GetParameter(4)); // psi2
+ v2->SetLineColor(kGreen);
+ didacticProfile->GetListOfFunctions()->Add(v2);
+ TF1* v3(new TF1("dfit_kV3", "[0]*([1]+[2]*[3]*TMath::Cos([5]*(x-[4])))", 0, TMath::TwoPi()));
+ v3->SetParameter(0, didacticFit->GetParameter(0)); // normalization
+ v3->SetParameter(3, didacticFit->GetParameter(7)); // v3
+ v3->FixParameter(1, 1.); // constant
+ v3->FixParameter(2, 2.); // constant
+ v3->FixParameter(4, didacticFit->GetParameter(6)); // psi3
+ v3->FixParameter(5, 3.); // constant
+ v3->SetLineColor(kCyan);
+ didacticProfile->GetListOfFunctions()->Add(v3);
+ }
+ default : break;
+ }
+ didacticProfile->GetListOfFunctions()->Add(didacticFit);
+ didacticProfile->GetYaxis()->SetTitle("#frac{d #sum #it{p}_{T}}{d #varphi} [GeV/#it{c}]");
+ didacticProfile->GetXaxis()->SetTitle("#varphi");
+ fOutputListGood->Add(didacticProfile);
+ didacticCounterBest++;
+ TH2F* didacticSurface = BookTH2F(Form("surface_%s", didacticProfile->GetName()), "#phi", "#eta", 50, 0, TMath::TwoPi(), 50, -1, 1, -1, kFALSE);
+ for(Int_t i(0); i < iTracks; i++) {
+ AliVTrack* track = static_cast<AliVTrack*>(fTracks->At(i));
+ if(PassesCuts(track)) {
+ if(fUsePtWeight) didacticSurface->Fill(track->Phi(), track->Eta(), track->Pt());
+ else didacticSurface->Fill(track->Phi(), track->Eta());
+ }
+ }
+ if(fExcludeLeadingJetsFromFit) { // visualize the excluded region
+ TF2 *f2 = new TF2(Form("%s_LJ", didacticSurface->GetName()),"[0]*TMath::Gaus(x,[1],[2])*TMath::Gaus(y,[3],[4])", 0, TMath::TwoPi(), -1, 1);
+ f2->SetParameters(excludeInPt/3.,excludeInPhi,.1,excludeInEta,.1);
+ didacticSurface->GetListOfFunctions()->Add(f2);
+ }
+ fOutputListGood->Add(didacticSurface);
+ } break;
+ default : break;
+ }
+ } else { // if the fit is of poor quality revert to the original rho estimate
+ switch (fRunModeType) { // again see if we want to save the fit
+ case kLocal : {
+ static Int_t didacticCounterWorst(0);
+ if(gRandom->Uniform(0, 100) > fPercentageOfFits) break;
+ TProfile* didacticProfile = (TProfile*)_tempSwap.Clone(Form("Fit_%i_1-CDF_%.3f_cen_%i_%s", didacticCounterWorst, CDF, fInCentralitySelection, detector.Data() ));
+ TF1* didacticFit = (TF1*)fFitModulation->Clone(Form("fit_%i_p_%.3f_cen_%i_%s", didacticCounterWorst, CDF, fInCentralitySelection, detector.Data()));
+ didacticProfile->GetListOfFunctions()->Add(didacticFit);
+ fOutputListBad->Add(didacticProfile);
+ didacticCounterWorst++;
+ } break;
+ default : break;
+ }
+ switch (fFitModulationType) {
+ case kNoFit : break; // nothing to do
+ case kCombined : fFitModulation->SetParameter(7, 0); // no break
+ case kFourierSeries : fFitModulation->SetParameter(7, 0); // no break
+ default : { // needs to be done if there was a poor fit
+ fFitModulation->SetParameter(3, 0);
+ fFitModulation->SetParameter(0, fLocalRho->GetVal());
+ } break;
+ }
+ if(CDF > -.5) fHistRhoStatusCent->Fill(fCent, 1.);
+ return kFALSE; // return false if the fit is rejected
+ }
+ return kTRUE;
+}
+//_____________________________________________________________________________
+void AliAnalysisTaskLocalRhoDev::FillAnalysisSummaryHistogram() const
+{
+ // Fill the analysis summary histrogram, saves all relevant analysis settigns
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(2, "fJetRadius");
+ fHistAnalysisSummary->SetBinContent(2, GetJetContainer()->GetJetRadius());
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(3, "fJetEtaMin");
+ fHistAnalysisSummary->SetBinContent(3, GetJetContainer()->GetJetEtaMin());
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(4, "fJetEtaMax");
+ fHistAnalysisSummary->SetBinContent(4, GetJetContainer()->GetJetEtaMax());
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(5, "fJetPhiMin");
+ fHistAnalysisSummary->SetBinContent(5, GetJetContainer()->GetJetPhiMin());
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(6, "fJetPhiMax");
+ fHistAnalysisSummary->SetBinContent(6, GetJetContainer()->GetJetPhiMin());
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(34, "fitModulationType");
+ fHistAnalysisSummary->SetBinContent(34, (int)fFitModulationType);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(35, "runModeType");
+ fHistAnalysisSummary->SetBinContent(35, (int)fRunModeType);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(37, "iterator");
+ fHistAnalysisSummary->SetBinContent(37, 1.);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(38, "fMinPvalue");
+ fHistAnalysisSummary->SetBinContent(38, fMinPvalue);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(39, "fMaxPvalue");
+ fHistAnalysisSummary->SetBinContent(39, fMaxPvalue);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(40, "fExcludeLeadingJetsFromFit");
+ fHistAnalysisSummary->SetBinContent(40, fExcludeLeadingJetsFromFit);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(41, "fRebinSwapHistoOnTheFly");
+ fHistAnalysisSummary->SetBinContent(41, (int)fRebinSwapHistoOnTheFly);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(42, "fUsePtWeight");
+ fHistAnalysisSummary->SetBinContent(42, (int)fUsePtWeight);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(45, "fLocalJetMinEta");
+ fHistAnalysisSummary->SetBinContent(45,fLocalJetMinEta );
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(46, "fLocalJetMaxEta");
+ fHistAnalysisSummary->SetBinContent(46, fLocalJetMaxEta);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(47, "fLocalJetMinPhi");
+ fHistAnalysisSummary->SetBinContent(47, fLocalJetMinPhi);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(48, "fLocalJetMaxPhi");
+ fHistAnalysisSummary->SetBinContent(48, fLocalJetMaxPhi);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(49, "fSoftTrackMinPt");
+ fHistAnalysisSummary->SetBinContent(49, fSoftTrackMinPt);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(50, "fSoftTrackMaxPt");
+ fHistAnalysisSummary->SetBinContent(50, fSoftTrackMaxPt);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(51, "fUseScaledRho");
+ fHistAnalysisSummary->SetBinContent(51, fUseScaledRho);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(53, "used rho");
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(54, "used small rho");
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskLocalRhoDev::FillEventPlaneHistograms(Double_t psi2, Double_t psi3) const
+{
+ // Fill event plane histograms
+
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ fHistPsi2[fInCentralitySelection]->Fill(psi2);
+ fHistPsi3[fInCentralitySelection]->Fill(psi3);
+}
+//_____________________________________________________________________________
+Bool_t AliAnalysisTaskLocalRhoDev::PassesCuts(AliVEvent* event)
+{
+ // event cuts
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ if(!event) return kFALSE;
+ // determine the run number to see if the track and jet cuts should be refreshed for semi-good TPC runs
+ // only done if the runnumber changes, could be moved to a call to AliAnalysisTaskSE::Notify()
+ if(fRunNumber != InputEvent()->GetRunNumber()) {
+ fRunNumber = InputEvent()->GetRunNumber(); // set the current run number
+ if(fDebug > 0) printf("__FUNC__ %s > NEW RUNNUMBER DETECTED \n ", __func__);
+ // reset the cuts. should be a pointless operation except for the case where the run number changes
+ // from semi-good back to good on one node, which is not a likely scenario
+ AliAnalysisTaskEmcal::SetTrackPhiLimits(-10., 10.);
+ AliAnalysisTaskEmcalJet::SetJetPhiLimits(-10., 10.);
+ if(fCachedRho) { // if there's a cached rho, it's the default, so switch back
+ if(fDebug > 0) printf("__FUNC__ %s > replacing rho with cached rho \n ", __func__);
+ fRho = fCachedRho; // reset rho back to cached value. again, should be pointless
+ }
+ Bool_t flaggedAsSemiGood(kFALSE); // not flagged as anything
+ for(Int_t i(0); i < fExpectedSemiGoodRuns->GetSize(); i++) {
+ if(fExpectedSemiGoodRuns->At(i) == fRunNumber) { // run is semi-good
+ if(fDebug > 0) printf("__FUNC__ %s > semi-good tpc run detected, adjusting acceptance \n ", __func__);
+ flaggedAsSemiGood = kTRUE;
+ AliAnalysisTaskEmcalJet::SetJetPhiLimits(fSemiGoodJetMinPhi, fSemiGoodJetMaxPhi); // just an acceptance cut, jets are obtained from full azimuth, so no edge effects
+ AliAnalysisTaskEmcal::SetTrackPhiLimits(fSemiGoodTrackMinPhi, fSemiGoodTrackMaxPhi); // only affects vn extraction, NOT jet finding
+ // for semi-good runs, also try to get the 'small rho' estimate, if it is available
+ AliRhoParameter* tempRho(dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fNameSmallRho.Data())));
+ if(tempRho) {
+ if(fDebug > 0) printf("__FUNC__ %s > switching to small rho, caching normal rho \n ", __func__);
+ fHistAnalysisSummary->SetBinContent(54, 1.); // bookkeep the fact that small rho is used
+ fCachedRho = fRho; // cache the original rho ...
+ fRho = tempRho; // ... and use the small rho
+ }
+ }
+ }
+ if(!flaggedAsSemiGood) fHistAnalysisSummary->SetBinContent(53, 1.); // bookkeep which rho estimate is used
+ }
+ return kTRUE;
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskLocalRhoDev::Terminate(Option_t *)
+{
+ // Terminate
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskLocalRhoDev::SetModulationFit(TF1* fit)
+{
+ // Set function to fit modulation
+
+ if (fFitModulation) delete fFitModulation;
+ fFitModulation = fit;
+}
--- /dev/null
+#ifndef AliAnalysisTaskLocalRhoDev_H
+#define AliAnalysisTaskLocalRhoDev_H
+
+// $Id$
+
+#include <AliAnalysisTaskEmcalJet.h>
+#include <AliEmcalJet.h>
+#include <AliVEvent.h>
+#include <AliVTrack.h>
+#include <AliVCluster.h>
+#include <TClonesArray.h>
+#include <TMath.h>
+#include <TRandom3.h>
+#include <AliLog.h>
+#include <AliJetContainer.h>
+#include <AliParticleContainer.h>
+#include <TF1.h>
+#include <TH1.h>
+
+class THF1;
+class THF2;
+class TProfile;
+class AliLocalRhoParameter;
+class TArrayI;
+
+class AliAnalysisTaskLocalRhoDev : public AliAnalysisTaskEmcalJet {
+ public:
+ // enumerators
+ enum fitModulationType { kNoFit, kV2, kV3, kCombined, kFourierSeries, kIntegratedFlow, kQC2, kQC4 }; // fit type
+ enum fitGoodnessTest { kChi2ROOT, kChi2Poisson, kLinearFit };
+ enum detectorType { kTPC, kVZEROA, kVZEROC, kVZEROComb}; // detector that was used
+ enum qcRecovery { kFixedRho, kNegativeVn, kTryFit }; // how to deal with negative cn value for qcn value
+ enum runModeType { kLocal, kGrid }; // run mode type
+ // constructors, destructor
+ AliAnalysisTaskLocalRhoDev();
+ AliAnalysisTaskLocalRhoDev(const char *name, runModeType type);
+ virtual ~AliAnalysisTaskLocalRhoDev();
+ // setting up the task and technical aspects
+ void ExecOnce();
+ Bool_t InitializeAnalysis();
+ virtual void UserCreateOutputObjects();
+ TH1F* BookTH1F(const char* name, const char* x, Int_t bins, Double_t min, Double_t max, Int_t c = -1, Bool_t append = kTRUE);
+ TH2F* BookTH2F(const char* name, const char* x, const char* y, Int_t binsx, Double_t minx, Double_t maxx,
+ Int_t binsy, Double_t miny, Double_t maxy, Int_t c = -1, Bool_t append = kTRUE);
+ virtual Bool_t Run();
+ /* inline */ Double_t PhaseShift(Double_t x) const {
+ while (x>=TMath::TwoPi())x-=TMath::TwoPi();
+ while (x<0.)x+=TMath::TwoPi();
+ return x; }
+ /* inline */ Double_t PhaseShift(Double_t x, Double_t n) const {
+ x = PhaseShift(x);
+ if(TMath::Nint(n)==2) while (x>TMath::Pi()) x-=TMath::Pi();
+ if(TMath::Nint(n)==3) {
+ if(x>2.*TMath::TwoPi()/n) x = TMath::TwoPi() - x;
+ if(x>TMath::TwoPi()/n) x = TMath::TwoPi()-(x+TMath::TwoPi()/n);
+ }
+ return x; }
+
+ /* inline */ Double_t ChiSquarePDF(Int_t ndf, Double_t x) const {
+ Double_t n(ndf/2.), denom(TMath::Power(2, n)*TMath::Gamma(n));
+ if (denom!=0) return ((1./denom)*TMath::Power(x, n-1)*TMath::Exp(-x/2.));
+ return -999; }
+ //note that the cdf of the chisquare distribution is the normalized lower incomplete gamma function
+ /*inline */ Double_t ChiSquareCDF(Int_t ndf, Double_t x) const { return TMath::Gamma(ndf/2., x/2.); }
+ /*inline */ Double_t ChiSquare(TH1& histo, TF1* func) const {
+ // evaluate the chi2 using a poissonian error estimate on bins
+ Double_t chi2(0.);
+ for(Int_t i(0); i < histo.GetXaxis()->GetNbins(); i++) {
+ if(histo.GetBinContent(i+1) <= 0.) continue;
+ chi2 += TMath::Power((histo.GetBinContent(i+1)-func->Eval(histo.GetXaxis()->GetBinCenter(1+i))), 2)/histo.GetBinContent(i+1);
+ }
+ return chi2;
+ }
+ /*inline*/ Double_t KolmogorovTest(TH1F& histo, TF1* func, Bool_t toy = kTRUE) const {
+ // return the probability from a Kolmogorov test
+ TH1F test(histo); // stack copy of test statistic
+ for(Int_t i(0); i < test.GetXaxis()->GetNbins(); i++) test.SetBinContent(i+1, func->Eval(test.GetXaxis()->GetBinCenter(1+i)));
+ if (toy) return histo.TH1::KolmogorovTest((&test), "X");
+ else return histo.TH1::KolmogorovTest((&test));
+ }
+
+ // setters - setup how to run
+ void SetDebugMode(Int_t d) {fDebug = d;}
+ void SetCentralityClasses(TArrayD* c) {fCentralityClasses = c;}
+ void SetAttachToEvent(Bool_t a) {fAttachToEvent = a;}
+ void SetUseScaledRho(Bool_t s) {fUseScaledRho = s;}
+ void SetFillHistograms(Bool_t b) {fFillHistograms = b;}
+ // setters - analysis details
+ void SetNoEventWeightsForQC(Bool_t e) {fNoEventWeightsForQC = e;}
+ void SetIntegratedFlow(TH1F* i, TH1F* j) {fUserSuppliedV2 = i; fUserSuppliedV3 = j; }
+ void SetOnTheFlyResCorrection(TH1F* r2, TH1F* r3) {fUserSuppliedR2 = r2; fUserSuppliedR3 = r3; }
+ void SetModulationFit(TF1* fit);
+ void SetModulationFitMinMaxP(Float_t m, Float_t n) {fMinPvalue = m; fMaxPvalue = n; }
+ void SetExpectedRuns(TArrayI* r) {fExpectedRuns = r; }
+ void SetExpectedSemiGoodRuns(TArrayI* r) {fExpectedSemiGoodRuns = r;}
+ void SetNameRhoSmall(TString s) {fNameSmallRho = s;}
+ void SetModulationFitType(fitModulationType type) {fFitModulationType = type; }
+ void SetControlFunction(TF1* func) {fFitControl = func; }
+ void SetFitGoodnessType(fitGoodnessTest test) {fFitGoodnessTest = test; }
+ void SetQCnRecoveryType(qcRecovery type) {fQCRecovery = type; }
+ void SetModulationFitOptions(TString opt) {fFitModulationOptions = opt; }
+ void SetReferenceDetector(detectorType type) {fDetectorType = type; }
+ void SetUsePtWeight(Bool_t w) {fUsePtWeight = w; }
+ void SetUsePtWeightErrorPropagation(Bool_t w) {fUsePtWeightErrorPropagation = w;}
+ void SetRunModeType(runModeType type) {fRunModeType = type; }
+ void SetForceAbsVnHarmonics(Bool_t f) {fAbsVnHarmonics = f; }
+ void SetExcludeLeadingJetsFromFit(Float_t n) {fExcludeLeadingJetsFromFit = n; }
+ void SetRebinSwapHistoOnTheFly(Bool_t r) {fRebinSwapHistoOnTheFly = r; }
+ void SetSaveThisPercentageOfFits(Float_t p) {fPercentageOfFits = p; }
+ void SetUseV0EventPlaneFromHeader(Bool_t h) {fUseV0EventPlaneFromHeader = h;}
+ void SetSoftTrackMinMaxPt(Float_t min, Float_t max) {fSoftTrackMinPt = min; fSoftTrackMaxPt = max;}
+ // getters
+ TString GetLocalRhoName() const {return fLocalRhoName; }
+ // numerical evaluations
+ void CalculateEventPlaneVZERO(Double_t vzero[2][2]) const;
+ void CalculateEventPlaneTPC(Double_t* tpc);
+ void CalculateEventPlaneCombinedVZERO(Double_t* comb) const;
+ Double_t CalculateQC2(Int_t harm);
+ Double_t CalculateQC4(Int_t harm);
+ // helper calculations for the q-cumulant analysis, also used by AliAnalyisTaskJetFlow
+ void QCnQnk(Int_t n, Int_t k, Double_t &reQ, Double_t &imQ);
+ Double_t QCnS(Int_t i, Int_t j);
+ Double_t QCnM();
+ Double_t QCnM11();
+ Double_t QCnM1111();
+ Bool_t QCnRecovery(Double_t psi2, Double_t psi3);
+ // analysis details
+ Bool_t CorrectRho(Double_t psi2, Double_t psi3);
+ void FillEventPlaneHistograms(Double_t psi2, Double_t psi3) const;
+ void FillAnalysisSummaryHistogram() const;
+ // track selection
+ /* inline */ Bool_t PassesCuts(AliVTrack* track) const { return AcceptTrack(track, 0);}
+ /* inline */ Bool_t PassesCuts(AliEmcalJet* jet) { return AcceptJet(jet, 0);}
+ /* inline*/ Bool_t PassesSimpleCuts(AliEmcalJet* jet) {
+ Float_t minPhi(GetJetContainer()->GetJetPhiMin()), maxPhi(GetJetContainer()->GetJetPhiMax());
+ return (jet && jet->Pt() > 1 && jet->Eta() < .9-GetJetRadius() && jet->Eta() > -.9+GetJetRadius() && jet->Phi() > minPhi && jet->Phi() < maxPhi && jet->Area() > .557*GetJetRadius()*GetJetRadius()*TMath::Pi());
+ }
+
+ /* inline */ AliEmcalJet* GetLeadingJet() {
+ Int_t iJets(fJets->GetEntriesFast());
+ Double_t pt(0);
+ AliEmcalJet* leadingJet(0x0);
+ for(Int_t i(0); i < iJets; i++) {
+ AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(i));
+ if(!PassesSimpleCuts(jet)) continue;
+ if(jet->Pt() > pt) {
+ leadingJet = jet;
+ pt = leadingJet->Pt();
+ }
+ }
+ return leadingJet;
+ }
+ Bool_t PassesCuts(AliVEvent* event);
+ virtual void Terminate(Option_t* option);
+
+ private:
+ Int_t fDebug; // debug level (0 none, 1 fcn calls, 2 verbose)
+ Bool_t fInitialized; //! is the analysis initialized?
+ Bool_t fAttachToEvent; // attach local rho to the event
+ Bool_t fFillHistograms; // fill qa histograms
+ Bool_t fNoEventWeightsForQC; // don't store event weights for qc analysis
+ Bool_t fUseScaledRho; // use scaled rho
+ TArrayD* fCentralityClasses; // centrality classes (maximum 10) used for QA
+ TH1F* fUserSuppliedV2; // histo with integrated v2
+ TH1F* fUserSuppliedV3; // histo with integrated v3
+ TH1F* fUserSuppliedR2; // correct the extracted v2 with this r
+ TH1F* fUserSuppliedR3; // correct the extracted v3 with this r
+ Int_t fNAcceptedTracks; //! number of accepted tracks
+ Int_t fNAcceptedTracksQCn; //! accepted tracks for QCn
+ Int_t fInCentralitySelection; //! centrality bin, only for QA plots
+ fitModulationType fFitModulationType; // fit modulation type
+ fitGoodnessTest fFitGoodnessTest; // goodness of fit test
+ qcRecovery fQCRecovery; // recovery type for e-by-e qc method
+ Bool_t fUsePtWeight; // use dptdphi instead of dndphi
+ Bool_t fUsePtWeightErrorPropagation; // recalculate the bin error on the dpt dphi histogram
+ detectorType fDetectorType; // type of detector used for modulation fit
+ TString fFitModulationOptions; // fit options for modulation fit
+ runModeType fRunModeType; // run mode type
+ TF1* fFitModulation; // modulation fit for rho
+ TF1* fFitControl; // control function
+ Float_t fMinPvalue; // minimum value of p
+ Float_t fMaxPvalue; // maximum value of p
+ TArrayI* fExpectedRuns; // list of known run numbers with default cuts
+ TArrayI* fExpectedSemiGoodRuns; // list of runs that are marked as semi-good in the rct
+ Int_t fRunNumber; //! current run number
+ AliRhoParameter* fCachedRho; //! cached rho object
+ TString fNameSmallRho; // name of rho object for semi-good tpc runs
+ // additional jet cuts (most are inherited)
+ Float_t fLocalJetMinEta; // local eta cut for jets
+ Float_t fLocalJetMaxEta; // local eta cut for jets
+ Float_t fLocalJetMinPhi; // local phi cut for jets
+ Float_t fLocalJetMaxPhi; // local phi cut for jets
+ Float_t fSoftTrackMinPt; // min pt for soft tracks
+ Float_t fSoftTrackMaxPt; // max pt for soft tracks
+ Double_t fSemiGoodJetMinPhi; // min phi for semi good tpc runs
+ Double_t fSemiGoodJetMaxPhi; // max phi for semi good tpc runs
+ Double_t fSemiGoodTrackMinPhi; // min phi for semi good tpc runs
+ Double_t fSemiGoodTrackMaxPhi; // max phi for semi good tpc runs
+
+ // general qa histograms
+ TH1F* fHistPvalueCDFROOT; //! pdf value of chisquare p
+ TH2F* fHistPvalueCDFROOTCent; //! p value versus centrlaity from root
+ TH2F* fHistChi2ROOTCent; //! reduced chi2 from ROOT, centrality correlation
+ TH2F* fHistPChi2Root; //! correlation p value and reduced chi2
+ TH1F* fHistPvalueCDF; //! cdf value of chisquare p
+ TH2F* fHistPvalueCDFCent; //! p value vs centrality
+ TH2F* fHistChi2Cent; //! reduced chi2, centrlaity correlation
+ TH2F* fHistPChi2; //! correlation p value and reduced chi2
+ TH2F* fHistRhoStatusCent; //! status of rho as function of centrality
+
+ // general settings
+ Bool_t fAbsVnHarmonics; // force postive local rho
+ Float_t fExcludeLeadingJetsFromFit; // exclude n leading jets from fit
+ Bool_t fRebinSwapHistoOnTheFly; // rebin swap histo on the fly
+ Float_t fPercentageOfFits; // save this percentage of fits
+ Bool_t fUseV0EventPlaneFromHeader; // use the vzero event plane from the header
+ // transient object pointers
+ TList* fOutputList; //! output list
+ TList* fOutputListGood; //! output list for local analysis
+ TList* fOutputListBad; //! output list for local analysis
+ TH1F* fHistSwap; //! swap histogram
+ TH1F* fHistAnalysisSummary; //! flags
+ TProfile* fProfV2; //! extracted v2
+ TProfile* fProfV2Cumulant; //! v2 cumulant
+ TProfile* fProfV3; //! extracted v3
+ TProfile* fProfV3Cumulant; //! v3 cumulant
+ TH1F* fHistPsi2[10]; //! psi 2
+ TH1F* fHistPsi3[10]; //! psi 3
+
+ AliAnalysisTaskLocalRhoDev(const AliAnalysisTaskLocalRhoDev&); // not implemented
+ AliAnalysisTaskLocalRhoDev& operator=(const AliAnalysisTaskLocalRhoDev&); // not implemented
+
+ ClassDef(AliAnalysisTaskLocalRhoDev, 6);
+};
+#endif
-// $Id$
//
// Emcal jet class.
//
std::sort(fTrackIDs.GetArray(), fTrackIDs.GetArray() + fTrackIDs.GetSize());
}
+//__________________________________________________________________________________________________
+Double_t AliEmcalJet::DeltaR (const AliVParticle* part) const
+{ // Helper function to calculate the distance between two jets or a jet and a particle
+ Double_t dPhi = this->Phi() - part->Phi();
+ Double_t dEta = this->Eta() - part->Eta();
+ dPhi = TVector2::Phi_mpi_pi ( dPhi );
+
+ return TMath::Sqrt ( dPhi * dPhi + dEta * dEta );
+}
+
+
+//__________________________________________________________________________________________________
+std::vector<int> AliEmcalJet::SortConstituentsPt( TClonesArray *tracks ) const
+{ //___________________________________________
+ // Sorting by p_T (decreasing) jet constituents
+ //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ typedef std::pair<Double_t, Int_t> ptidx_pair;
+
+ // Create vector for Pt sorting
+ std::vector<ptidx_pair> pair_list ;
+
+ for ( Int_t i_entry = 0; i_entry < GetNumberOfTracks(); i_entry++ )
+ {
+ AliVParticle *track = TrackAt(i_entry, tracks);
+ if (!track)
+ {
+ AliError(Form("Unable to find jet track %d in collection %s (pos in collection %d, max %d)", i_entry, tracks->GetName(), TrackAt(i_entry), tracks->GetEntriesFast()));
+ continue;
+ }
+
+ pair_list.push_back( std::make_pair ( track->Pt(), i_entry ) );
+ }
+
+ std::stable_sort( pair_list.begin() , pair_list.end() , sort_descend() );
+
+ // return an vector of indexes of constituents (sorted descending by pt)
+ std::vector <int> index_sorted_list;
+
+ for ( std::vector< std::pair<Double_t,Int_t> >::iterator it = pair_list.begin(); it != pair_list.end(); ++it)
+ { index_sorted_list.push_back( (*it).second ); } // populating the return object with indexes of sorted tracks
+
+ return index_sorted_list;
+}
+
//__________________________________________________________________________________________________
AliVParticle* AliEmcalJet::GetLeadingTrack(TClonesArray *tracks) const
{
#ifndef AliEmcalJet_H
#define AliEmcalJet_H
-// $Id$
-
+#include <vector>
+#include <algorithm>
+#include <utility>
#include <TArrayS.h>
#include <TLorentzVector.h>
#include <TMath.h>
#include <TClonesArray.h>
+#include <TVector2.h>
#include "AliVParticle.h"
#include "AliVCluster.h"
void AddTrackAt(Int_t track, Int_t idx) { fTrackIDs.AddAt(track, idx); }
void Clear(Option_t */*option*/="") { fClusterIDs.Set(0); fTrackIDs.Set(0); fClosestJets[0] = 0; fClosestJets[1] = 0;
fClosestJetsDist[0] = 0; fClosestJetsDist[1] = 0; fMatched = 0; fPtSub = 0; }
+ Double_t DeltaR(const AliVParticle* part) const;
void SetArea(Double_t a) { fArea = a; }
void SetAreaEta(Double_t a) { fAreaEta = a; }
void SetAreaPhi(Double_t a) { fAreaPhi = a; }
void SetNumberOfNeutrals(Int_t n) { fNn = n; }
void SetMCPt(Double_t p) { fMCPt = p; }
void SortConstituents();
+ std::vector<int> SortConstituentsPt(TClonesArray *tracks) const;
void SetNEmc(Int_t n) { fNEmc = n; }
void SetPtEmc(Double_t pt) { fPtEmc = pt; }
void SetPtSub(Double_t ps) { fPtSub = ps; }
Double_t fPtVectSub; //! background vector subtracted pt (not stored set from outside)
UInt_t fTriggers; //! triggers that the jet might have fired (AliVEvent::EOfflineTriggerTypes)
- ClassDef(AliEmcalJet,12) // Emcal jet class in cylindrical coordinates
+ private:
+ struct sort_descend
+ { // sort in decreasing order
+ // first value of the pair is Pt and the second is entry index
+ bool operator () (const std::pair<Double_t, Int_t>& p1, const std::pair<Double_t, Int_t>& p2) { return p1.first > p2.first ; }
+ };
+
+ ClassDef(AliEmcalJet,13) // Emcal jet class in cylindrical coordinates
};
#endif
-// $Id$
//
// Emcal jet finder task.
//
#ifndef ALIEMCALJETTASK_H
#define ALIEMCALJETTASK_H
-// $Id$
-
class TClonesArray;
class AliVEvent;
UInt_t GetJetType() { return fJetType; }
Bool_t GetLegacyMode() { return fLegacyMode; }
+ const char* GetJetsName() { return fJetsName.Data(); }
+ Double_t GetRadius() { return fRadius; }
+ const char* GetTracksName() { return fTracksName.Data(); }
+ const char* GetClusName() { return fCaloName.Data(); }
+ UInt_t GetMarkConstituents() { return fMarkConst; }
+ Double_t GetMinJetArea() { return fMinJetArea; }
+ Double_t GetMinJetClusPt() { return fMinJetClusPt; }
+ Double_t GetMinJetPt() { return fMinJetPt; }
+ Double_t GetMinJetTrackPt() { return fMinJetTrackPt; }
+ Double_t GetTrackEfficiency() { return fTrackEfficiency; }
+ Double_t GetGhostArea() { return fGhostArea; }
+ Int_t GetMinMCLabel() { return fMinMCLabel; }
+ Int_t GetRecombScheme() { return fRecombScheme; }
+ Double_t GetEtaMin() { return fEtaMin; }
+ Double_t GetEtaMax() { return fEtaMax; }
+ Double_t GetPhiMin() { return fPhiMin; }
+ Double_t GetPhiMax() { return fPhiMax; }
+ Double_t GetJetEtaMin() { return fJetEtaMin; }
+ Double_t GetJetEtaMax() { return fJetEtaMax; }
+ Double_t GetJetPhiMin() { return fJetPhiMin; }
+ Double_t GetJetPhiMax() { return fJetPhiMax; }
+
+ AliVEvent* GetEvent() { return fEvent;}
+ TClonesArray* GetClusters() { return fClus;}
+ TClonesArray* GetTracks() { return fTracks;}
+ TClonesArray* GetJets() { return fJets;}
+
protected:
void FindJets();
Bool_t DoInit();
AliEmcalJetTask(const AliEmcalJetTask&); // not implemented
AliEmcalJetTask &operator=(const AliEmcalJetTask&); // not implemented
- ClassDef(AliEmcalJetTask, 10) // Jet producing task
+ ClassDef(AliEmcalJetTask, 11) // Jet producing task
};
#endif
if(IsTrackInCone(tmpTrack, eta, phi, radius))
tmpConePt = tmpConePt + tmpTrack->Pt();
}
- Double_t realConeArea = (2.0*(fMaxEta-fMinEta)) * TMath::TwoPi() * MCGetOverlapCircleRectancle(eta, phi, radius, fMinEta, fMaxEta, 0., TMath::TwoPi());
+ Double_t realConeArea = (1.0*(fMaxEta-fMinEta)) * TMath::TwoPi() * MCGetOverlapCircleRectancle(eta, phi, radius, fMinEta, fMaxEta, 0., TMath::TwoPi());
tmpConePt -= background * realConeArea; // subtract background
return tmpConePt;
// Calculate the correct area where the tracks were taking from
- Double_t tmpFullTPCArea = (2.0*(fMaxEta-fMinEta)) * TMath::TwoPi();
+ Double_t tmpFullTPCArea = (1.0*(fMaxEta-fMinEta)) * TMath::TwoPi();
Double_t tmpAreaCone02 = tmpFullTPCArea;
Double_t tmpAreaCone04 = tmpFullTPCArea;
Double_t tmpAreaCone06 = tmpFullTPCArea;
if (trackCountAccepted > 0)
{
- Double_t tmpArea = 2.0*(fMaxEta-fMinEta)*TMath::TwoPi() - 2*(tmpRadius*tmpRadius * TMath::Pi()); //TPC area - excluding jet area
+ Double_t tmpArea = 1.0*(fMaxEta-fMinEta)*TMath::TwoPi() - 2*(tmpRadius*tmpRadius * TMath::Pi()); //TPC area - excluding jet area
rhoMean = summedTracksPt/tmpArea;
area = tmpArea;
}
--- /dev/null
+//
+// Author: A Castro
+
+#include "AliAnalysisTaskEmcalJetHF.h"
+
+// general ROOT includes
+#include <TCanvas.h>
+#include <TChain.h>
+#include <TClonesArray.h>
+#include <TH1F.h>
+#include <TH2F.h>
+#include <TH3F.h>
+#include <THnSparse.h>
+#include <TList.h>
+#include <TLorentzVector.h>
+#include <TParameter.h>
+#include <TParticle.h>
+#include <TTree.h>
+#include <TVector3.h>
+#include <TObjArray.h>
+
+// AliROOT includes
+#include "AliAODEvent.h"
+#include "AliESDEvent.h"
+#include "AliAnalysisManager.h"
+#include "AliAnalysisTask.h"
+#include "AliCentrality.h"
+#include "AliEmcalJet.h"
+#include "AliAODJet.h"
+#include "AliVCluster.h"
+#include "AliVTrack.h"
+#include <AliVEvent.h>
+#include <AliVParticle.h>
+#include "AliRhoParameter.h"
+#include "AliEmcalParticle.h"
+
+// event handler (and pico's) includes
+#include <AliInputEventHandler.h>
+#include <AliVEventHandler.h>
+#include "AliESDInputHandler.h"
+#include "AliPicoTrack.h"
+#include "AliEventPoolManager.h"
+
+// PID includes
+#include "AliPIDResponse.h"
+#include "AliTPCPIDResponse.h"
+#include "AliESDpid.h"
+
+#include <AliInputEventHandler.h>
+#include <AliVEventHandler.h>
+
+// magnetic field includes
+#include "TGeoGlobalMagField.h"
+#include "AliMagF.h"
+
+ClassImp(AliAnalysisTaskEmcalJetHF)
+
+//________________________________________________________________________
+AliAnalysisTaskEmcalJetHF::AliAnalysisTaskEmcalJetHF() :
+ AliAnalysisTaskEmcalJet("heavyF",kFALSE),
+ event(0),
+ fillHist(0),
+ //isESD(0),
+ fCuts(0),
+ fJetHIpt(50.0),
+ fTrackPtCut(2.0),
+ fTrackEta(0.9),
+ fTrkQAcut(0),
+ fPIDResponse(0x0), fTPCResponse(),
+ fEsdtrackCutsITSTPC(),
+ fEsdtrackCutsTPC(),
+ fEsdtrackCutsITS(),
+ fESD(0), fAOD(0),
+ fHistRhovsCent(0),
+ fHistJetPhi(0),
+ fHistCorJetPt(0), fHistJetPt(0),
+ fHistdEdx(0),
+ fHistdEdxvPt(0),
+ fHistClusE(0),
+ fHistEovPTracks(0),
+ fHistEovPvsPtTracks(0),
+ fHistPID(0), fHistPIDtpc(0), fHistPIDits(0), fHistPIDtof(0),
+ fHistnsigelectron(0),
+ fHistnSigElecPt(0),
+ fHistTrackPhivEta(0),
+ fHistClusterPhivEta(0),
+ fHistnJetTrackvnJetClusters(0),
+ fhnPIDHF(0x0), fhnQA(0x0), fhnJetQA(0x0), fhnClusQA(0x0), fhnTrackQA(0x0)
+{
+ // Default constructor.
+ for (Int_t i = 0;i<6;++i){
+ fHistJetPtvsTrackPt[i] = 0;
+ fHistTrackPt[i] = 0;
+ fHistEP0[i] = 0;
+ fHistEP0A[i] = 0;
+ fHistEP0C[i] = 0;
+ fHistEPAvsC[i] = 0;
+ }
+
+ SetMakeGeneralHistograms(kTRUE);
+
+}
+
+//________________________________________________________________________
+AliAnalysisTaskEmcalJetHF::AliAnalysisTaskEmcalJetHF(const char *name) :
+ AliAnalysisTaskEmcalJet(name,kTRUE),
+ event(0),
+ fillHist(0),
+ //isESD(0),
+ fCuts(0),
+ fJetHIpt(50.0),
+ fTrackPtCut(2.0),
+ fTrackEta(0.9),
+ fTrkQAcut(0),
+ fPIDResponse(0x0), fTPCResponse(),
+ fEsdtrackCutsITSTPC(),
+ fEsdtrackCutsTPC(),
+ fEsdtrackCutsITS(),
+ fESD(0), fAOD(0),
+ fHistRhovsCent(0),
+ fHistJetPhi(0),
+ fHistCorJetPt(0), fHistJetPt(0),
+ fHistdEdx(0),
+ fHistdEdxvPt(0),
+ fHistClusE(0),
+ fHistEovPTracks(0),
+ fHistEovPvsPtTracks(0),
+ fHistPID(0), fHistPIDtpc(0), fHistPIDits(0), fHistPIDtof(0),
+ fHistnsigelectron(0),
+ fHistnSigElecPt(0),
+ fHistTrackPhivEta(0),
+ fHistClusterPhivEta(0),
+ fHistnJetTrackvnJetClusters(0),
+ fhnPIDHF(0x0), fhnQA(0x0), fhnJetQA(0x0), fhnClusQA(0x0), fhnTrackQA(0x0)
+{
+ for (Int_t i = 0;i<6;++i){
+ fHistJetPtvsTrackPt[i] = 0;
+ fHistTrackPt[i] = 0;
+ fHistEP0[i] = 0;
+ fHistEP0A[i] = 0;
+ fHistEP0C[i] = 0;
+ fHistEPAvsC[i] = 0;
+ }
+ SetMakeGeneralHistograms(kTRUE);
+
+ DefineInput(0,TChain::Class());
+ DefineOutput(1, TList::Class());
+}
+
+//_______________________________________________________________________
+AliAnalysisTaskEmcalJetHF::~AliAnalysisTaskEmcalJetHF()
+{
+ // destructor
+ //
+ if (fOutput) {
+ delete fOutput;
+ fOutput = 0;
+ }
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskEmcalJetHF::UserCreateOutputObjects()
+{
+ if (! fCreateHisto)
+ return;
+ AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
+
+ fOutput = new TList();
+ fOutput->SetOwner(kTRUE);
+
+ fHistJetPhi = new TH1F("NjetvsPhi", "NjetvsPhi", 288,-2*TMath::Pi(),2*TMath::Pi());
+ fHistJetPt = new TH1F("NjetvsJetPt", "NjetvsJetPt", 300, 0, 300);
+ fOutput->Add(fHistJetPhi);
+ fOutput->Add(fHistJetPt);
+
+ fillHist = 1;
+
+ fHistClusE = new TH1F("NumberClustersvsEnergy","NumberClustersvsEnergy", 500, 0, 10);
+
+
+ if(fillHist>0){
+ fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 100, 0.0, 100.0, 400, 0, 400);
+ fHistCorJetPt = new TH1F("NjetvsCorrJetPt", "NjetvsCorrJetPt", 300, -100, 200);
+ fHistdEdx = new TH1F("dEdxSignal", "dEdxSignal", 500, 0, 500);
+ fHistdEdxvPt = new TH2F("dEdxvPt", "dEdxvPt", 200, 0, 100,500, 0 ,500);
+ fHistEovPTracks = new TH1F("EovPTracks","EovPTracks",200,0.0,2.0);
+ fHistEovPvsPtTracks = new TH2F("E/p_vs_Pt","E/p_vs_Pt",200, 0 ,100 ,50, 0, 2);
+ fHistPID = new TH1F("fHistPID", "Detector PID", 8, 0, 8);
+ fHistPIDtpc = new TH1F("fHistPIDtpc", "TPC pid", 4, 0, 4);
+ fHistPIDits = new TH1F("fHistPIDits", "ITS pid", 4, 0, 4);
+ fHistPIDtof = new TH1F("fHistPIDtof", "TOF pid", 4, 0, 4);
+ fHistnsigelectron = new TH1F("nsig_elec_TPC","nsig_elec_TPC",500,-10,10);
+ fHistnSigElecPt = new TH2F("nsig_v_pt(TPC)","nsig_v_pt(TPC)",200,0,100,100,-10,10);
+ fHistTrackPhivEta = new TH2F("TrackPhi_v_Eta","TrackPhiEta",64,-1.6,1.6,72,1,2*TMath::Pi());
+ fHistClusterPhivEta = new TH2F("ClusterPhi_v_Eta","ClusterPhiEta",64,-1.6,1.6,72,1,2*TMath::Pi());
+ fHistnJetTrackvnJetClusters = new TH2F("NumbJetTracksvJetClusters","NumbJetTracksvJetClusters",21,0,20,21,0,20);
+
+ // PT bins used to be (2000, -100, 300)
+ TString name;
+ TString title;
+
+ // creating centrality dependent histos that don't involve Global Rho
+ for (Int_t i = 0;i<6;++i){
+ name = TString(Form("JetPtvsTrackPt_%i",i));
+ title = TString(Form("Jet pT vs Leading Track pT cent bin %i",i));
+ fHistJetPtvsTrackPt[i] = new TH2F(name,title, 500, -100, 400, 100,0,100);
+ fOutput->Add(fHistJetPtvsTrackPt[i]);
+
+ name = TString(Form("TrackPt_%i",i));
+ title = TString(Form("Track pT cent bin %i",i));
+ fHistTrackPt[i] = new TH1F(name,title,400,0,200);
+ fOutput->Add(fHistTrackPt[i]);
+
+ name = TString(Form("EP0_%i",i));
+ title = TString(Form("EP VZero cent bin %i",i));
+ fHistEP0[i] = new TH1F(name,title,144,-TMath::Pi(),TMath::Pi());
+ fOutput->Add(fHistEP0[i]);
+
+ name = TString(Form("EP0A_%i",i));
+ title = TString(Form("EP VZero cent bin %i",i));
+ fHistEP0A[i] = new TH1F(name,title,144,-TMath::Pi(),TMath::Pi());
+ fOutput->Add(fHistEP0A[i]);
+
+ name = TString(Form("EP0C_%i",i));
+ title = TString(Form("EP VZero cent bin %i",i));
+ fHistEP0C[i] = new TH1F(name,title,144,-TMath::Pi(),TMath::Pi());
+ fOutput->Add(fHistEP0C[i]);
+
+ name = TString(Form("EPAvsC_%i",i));
+ title = TString(Form("EP VZero cent bin %i",i));
+ fHistEPAvsC[i] = new TH2F(name,title,144,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi());
+ fOutput->Add(fHistEPAvsC[i]);
+
+ }
+
+ fOutput->Add(fHistRhovsCent);
+ fOutput->Add(fHistCorJetPt);
+ fOutput->Add(fHistdEdx);
+ fOutput->Add(fHistdEdxvPt);
+ fOutput->Add(fHistEovPTracks);
+ fOutput->Add(fHistEovPvsPtTracks);
+ fOutput->Add(fHistPID);
+ fOutput->Add(fHistPIDtpc);
+ fOutput->Add(fHistPIDits);
+ fOutput->Add(fHistPIDtof);
+ fOutput->Add(fHistnsigelectron);
+ fOutput->Add(fHistnSigElecPt);
+ fOutput->Add(fHistTrackPhivEta);
+ fOutput->Add(fHistClusterPhivEta);
+ fOutput->Add(fHistnJetTrackvnJetClusters);
+
+ }//Fill Histograms
+
+ fOutput->Add(fHistClusE);
+
+
+ // ****************************** PID *****************************************************
+ // set up PID handler
+ AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
+ if(!inputHandler) {
+ AliFatal("Input handler needed");
+ }
+
+ // PID response object
+ //fPIDResponse = (AliPIDResponse*)inputHandler->GetPIDResponse();
+ // inputHandler->CreatePIDResponse(fIsMC); // needed to create object, why though?
+ fPIDResponse = inputHandler->GetPIDResponse();
+ if (!fPIDResponse) {
+ AliError("PIDResponse object was not created");
+ }
+ // ****************************************************************************************
+ UInt_t bitcoded = 0; // bit coded, see GetDimParamsPID() below
+ bitcoded = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 | 1<<10 | 1<<11;
+ fhnPIDHF = NewTHnSparseDHF("fhnPIDHF", bitcoded);
+
+ UInt_t bitcoded1 = 0; // bit coded, see GetDimParamsPID() below
+ bitcoded1 = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4;
+ fhnJetQA = NewTHnSparseDJetQA("fhnJetQA", bitcoded1);
+
+ UInt_t bitcoded2 = 0; // bit coded, see GetDimParamsPID() below
+ bitcoded2 = 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 | 1<<15;
+ fhnClusQA = NewTHnSparseDJetQA("fhnClusQA", bitcoded2);
+
+ UInt_t bitcoded3 = 0; // bit coded, see GetDimParamsPID() below
+ bitcoded3 = 1<<10 | 1<<11 | 1<<12 | 1<<13 | 1<<14;
+ fhnTrackQA = NewTHnSparseDJetQA("fhnTrackQA", bitcoded3);
+
+ cout << "_______________Created Sparse__________________" << endl;
+
+ fOutput->Add(fhnPIDHF);
+ fOutput->Add(fhnJetQA);
+ fOutput->Add(fhnClusQA);
+ fOutput->Add(fhnTrackQA);
+
+
+ PostData(1, fOutput);
+}
+
+//________________________________________________________
+void AliAnalysisTaskEmcalJetHF::ExecOnce()
+{
+ // Initialize the analysis
+ AliAnalysisTaskEmcalJet::ExecOnce();
+
+} // end of ExecOnce
+
+//________________________________________________________________________
+Bool_t AliAnalysisTaskEmcalJetHF::Run()
+{
+ // check to see if we have any tracks
+ if (!fTracks) return kTRUE;
+ if (!fJets) return kTRUE;
+/*
+ if(isESD){
+ fESD = dynamic_cast<AliESDEvent*>(InputEvent());
+ if (!fESD) {
+ AliError(Form("ERROR: fESD not available\n"));
+ return kTRUE;
+ }
+ }
+
+ // if we have AOD event, set up AOD object
+ if(!isESD){
+ fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
+ if(!fAOD) {
+ AliError(Form("ERROR: fAOD not available\n"));
+ return kTRUE;
+ }
+ }
+*/
+ // what kind of event do we have: AOD or ESD?
+ //Bool_t useAOD;
+ if (dynamic_cast<AliAODEvent*>(InputEvent())) useAOD = kTRUE;
+ else useAOD = kFALSE;
+
+ // if we have ESD event, set up ESD object
+ if(!useAOD){
+ fESD = dynamic_cast<AliESDEvent*>(InputEvent());
+ if (!fESD) {
+ AliError(Form("ERROR: fESD not available\n"));
+ return kTRUE;
+ }
+ }
+
+ // if we have AOD event, set up AOD object
+ if(useAOD){
+ fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
+ if(!fAOD) {
+ AliError(Form("ERROR: fAOD not available\n"));
+ return kTRUE;
+ }
+ }
+
+ // get magnetic field info for DCA
+ Double_t MagF = fESD->GetMagneticField();
+ Double_t MagSign = 1.0;
+ if(MagF<0)MagSign = -1.0;
+ // set magnetic field
+ if (!TGeoGlobalMagField::Instance()->GetField()) {
+ AliMagF* field = new AliMagF("Maps","Maps", MagSign, MagSign, AliMagF::k5kG);
+ TGeoGlobalMagField::Instance()->SetField(field);
+ }
+
+ // get centrality bin
+ Int_t centbin = GetCentBin(fCent);
+ //for pp analyses we will just use the first centrality bin
+ if (centbin == -1) centbin = 0;
+
+ // get vertex information
+ Double_t fvertex[3]={0,0,0};
+ InputEvent()->GetPrimaryVertex()->GetXYZ(fvertex);
+ //Double_t zVtx=fvertex[2];
+
+ // create pointer to list of input event
+ TList *list = InputEvent()->GetList();
+ if(!list) {
+ AliError(Form("ERROR: list not attached\n"));
+ return kTRUE;
+ }
+
+ // background density
+ fRhoVal = fRho->GetVal();
+
+ // initialize TClonesArray pointers to jets and tracks
+ TClonesArray *jets = 0;
+ TClonesArray *tracks = 0;
+ TClonesArray *clusters = 0;
+
+ // get Jets object
+ jets = dynamic_cast<TClonesArray*>(list->FindObject(fJets));
+ if(!jets){
+ AliError(Form("Pointer to jets %s == 0", fJets->GetName()));
+ return kTRUE;
+ } // verify existence of jets
+
+ // get Tracks object
+ tracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracks));
+ if (!tracks) {
+ AliError(Form("Pointer to tracks %s == 0", fTracks->GetName()));
+ return kTRUE;
+ } // verify existence of tracks (fTracksName.Data())
+
+ //get Clusters object
+ clusters = dynamic_cast<TClonesArray*>(list->FindObject(fCaloClusters));
+ if (!clusters){
+ AliError(Form("Pointer to tracks %s == 0",fCaloClusters->GetName()));
+ return kTRUE;
+ } //verify cluster existence
+
+
+ //const Int_t nclus = clusters->GetEntries();
+ /* Globalcluster
+ for(int icluster = 0; icluster < nclus; icluster++) {
+ AliVCluster* andyCluster = static_cast<AliVCluster*>(fCaloClusters->At(icluster));
+ if (!icluster) continue;
+ }
+ */
+ // get all emcal clusters
+ TRefArray* caloClusters = new TRefArray();
+ fESD->GetEMCALClusters( caloClusters );
+
+ //TObjArray* listcuts = fEsdtrackCutsTPC->GetAcceptedTracks(fESD);
+ //Int_t nGoodTracks = list->GetEntries();
+ Int_t nCluster = caloClusters->GetEntries();
+
+ // event plane histograms filled
+ if(fillHist>0) fHistEP0[centbin]->Fill(fEPV0);
+ if(fillHist>0) fHistEP0A[centbin]->Fill(fEPV0A);
+ if(fillHist>0) fHistEP0C[centbin]->Fill(fEPV0C);
+ if(fillHist>0) fHistEPAvsC[centbin]->Fill(fEPV0A,fEPV0C);
+
+ // get number of jets and tracks
+ const Int_t Njets = jets->GetEntries();
+ const Int_t Ntracks = tracks->GetEntries();
+ //const Int_t Nclusters = clusters->GetEntries();
+ if(Ntracks<1) return kTRUE;
+ if(Njets<1) return kTRUE;
+ //if(Nclusters<1) return kTRUE;
+ event++;
+
+ //cout<<"Event #: "<<event<<endl;
+
+/*
+ // loop over tracks in the event
+ for (int i = 0;i<Ntracks;i++){
+ //AliVParticle *track = static_cast<AliVParticle*>(fTracks->At(i));
+ AliVTrack *track = static_cast<AliVTrack*>(fTracks->At(i));
+ //AliESDtrack* track = fESD->GetTrack(i);
+ if (! track) {
+ AliError(Form("Couldn't get ESD track %d\n", i));
+ continue;
+ }
+
+
+ // apply track cuts
+ if(TMath::Abs(track->Eta())>fTrackEta) continue;
+ if (track->Pt()<0.15) continue;
+
+ // initialize track info
+ Double_t dEdx = -99;
+ Double_t trackphi = -99;
+ Double_t trackpt = 0;
+ Double_t p = track->P();
+ Double_t fClsE = -99;
+ Double_t EovP = -99;
+
+ // distance of closest approach
+ Float_t DCAxy = -999;
+ Float_t DCAz = -999;
+ Double_t DCAXY = -999;
+ Double_t DCAZ = -999;
+
+ // track info
+ track->GetTPCsignal();
+ track->GetImpactParameters(DCAxy, DCAz);
+ dEdx = track->GetTPCsignal();
+ trackpt = track->Pt();
+ trackphi = track->Phi();
+
+ // fill track histo's
+ if(fillHist>0) fHistdEdx->Fill(dEdx);
+ if(fillHist>0) fHistdEdxvPt->Fill(trackpt,dEdx);
+ if(fillHist>0) fHistTrackPt[centbin]->Fill(track->Pt());
+
+ // clusters
+ Int_t nMatchClus = -1;
+ AliESDCaloCluster *matchedClus = NULL;
+
+ //////////////////////////////////////////////////////////////////////////
+
+ // cut on 1.5 GeV for EMCal Cluster //if(track->GetEMCALcluster()<0 || pt<1.5) continue;
+ //////////////////////////////////////////////////////////////////////////
+ // particles in TOF
+ Double_t nSigmaPion_TOF, nSigmaProton_TOF, nSigmaKaon_TOF = -1.;
+
+ // misc quantities
+ Double_t TOFsig = -1.;
+ Double_t nClustersTPC = -1; // why is this type double? got from Irakli/Aronson
+ Int_t charge = 0;
+ Int_t trackCuts = 0; // set to 0 to get to run
+ Int_t myPID = 0; // set to 0 because myPID is to compare with MC unless I hard code in cuts
+ Double_t nSigmaElectron_TPC = -999;
+ Double_t nSigmaElectron_TOF = -999;
+ Double_t nSigmaElectron_EMCAL = -999;
+
+ // get clusters
+ Int_t clusi = track->GetEMCALcluster();
+ nClustersTPC = track->GetTPCclusters(0);
+
+ AliESDtrack *trackESD = fESD->GetTrack(Ntracks);
+
+ nSigmaElectron_TPC = fPIDResponse->NumberOfSigmasTPC(trackESD,AliPID::kElectron);
+ nSigmaElectron_TOF = fPIDResponse->NumberOfSigmasTOF(trackESD,AliPID::kElectron);
+
+ //for EMCAL
+ nMatchClus = track->GetEMCALcluster();
+ if(nMatchClus > 0){
+ matchedClus = (AliESDCaloCluster*)fESD->GetCaloCluster(nMatchClus);
+ //AliESDCaloCluster* matchedClus = fESD->GetCaloCluster(clusi);
+ double eop2 = -1;
+ double ss[4]={0.,0.,0.,0.};
+ //Double_t nSigmaEop = fPID->GetPIDResponse()-m >NumberOfSigmasEMCAL(track,AliPID::kElectron,eop2,ss);
+
+ fClsE = matchedClus->E();
+ EovP = fClsE/p;
+ nSigmaElectron_EMCAL = fPIDResponse->NumberOfSigmasEMCAL(trackESD,AliPID::kElectron,eop2,ss);
+ if(fillHist>0) fHistEovPTracks->Fill(EovP);
+ if(fillHist>0) fHistEovPvsPtTracks->Fill(trackpt,EovP);
+ }
+
+ if(fillHist>0) fHistnsigelectron->Fill(nSigmaElectron_TPC);
+ if(fillHist>0) fHistnSigElecPt->Fill(trackpt,nSigmaElectron_TPC);
+
+ // extra attempt
+ AliVEvent *event=InputEvent();
+ if (!event||!fPIDResponse) return kTRUE; // just return, maybe put at beginning
+ //////////////////////////////////////////////////////////////////////////
+ // cut on 1.5 GeV for EMCal Cluster
+ if(track->Pt() < fTrackPtCut) continue;
+
+ Double_t HF_tracks[12] = {fCent, track->Pt(), track->P() ,track->Eta(), track->Phi(), EovP, DCAxy, DCAz, dEdx, nSigmaElectron_TPC, nSigmaElectron_TOF, nSigmaElectron_EMCAL};
+ fhnPIDHF->Fill(HF_tracks); // fill Sparse Histo with trigger entries
+
+ } // Loop over tracks
+*/
+
+
+ // initialize jet parameters
+ Int_t ijethi=-1;
+ Double_t highestjetpt=0.0;
+
+ // loop over jets in an event - to find highest jet pT and apply some cuts && JetQA Sparse
+ for (Int_t ijet = 0; ijet < Njets; ijet++){
+ // get our jets
+ AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
+ if (!jet) continue;
+
+ // apply jet cuts
+ if (jet->Area()==0) // make sure jet has an area
+ continue;
+ if (jet->Pt()<0.1) // (should probably be higher..., but makes a cut on jet pT)
+ continue;
+ if (jet->MaxTrackPt()>100) // elminates fake tracks
+ continue;
+ if (! AcceptJet(jet)) // sees if jet is accepted
+ continue;
+
+ Double_t JetQA[5] = {0, jet->GetNumberOfTracks(), jet->GetNumberOfClusters(),jet->Eta(), jet->Phi()};
+ fhnJetQA->Fill(JetQA);
+
+
+ // Loop over clusters for JetQA
+ for(int iCluster = 0; iCluster < nCluster; iCluster++) {
+ AliVCluster* caloCluster = static_cast<AliVCluster*>(fCaloClusters->At(iCluster));
+ //AliVCluster* caloCluster = (AliVCluster* )caloClusters->At(jet->GetNumberOfClusters());
+ //AliESDCaloCluster* caloCluster = (AliESDCaloCluster* )caloClusters->At(iCluster);
+ //AliESDCaloCluster* clus = fESD->GetCaloCluster(iclus);
+ if (!caloCluster){
+ AliError(Form("ERROR: Could not get cluster %d", iCluster));
+ continue;
+ }
+ if(!IsJetCluster(jet,iCluster,kFALSE)) continue ;
+ Float_t pos[3];
+ caloCluster->GetPosition(pos); // Get cluster position
+ TVector3 cp(pos);
+ Double_t NtrMatched = -999.0;
+ NtrMatched = caloCluster->GetNTracksMatched();
+
+ //loop over tracks for Jet QA
+ for(int itrack = 0; itrack < NtrMatched; itrack++){
+ //AliVParticle *track = static_cast<AliVParticle*>(fTracks->At(i));
+ AliVTrack *trackcluster = static_cast<AliVTrack*>(fTracks->At(itrack));
+ //AliESDtrack* track = fESD->GetTrack(i);
+ if (! trackcluster) {
+ AliError(Form("Couldn't get ESD track %d\n", itrack));
+ continue;
+ }
+ if(!IsJetTrack(jet,itrack,kFALSE)) continue;
+ Double_t ClusQA[6] = {caloCluster->E(),cp.PseudoRapidity() ,cp.Phi(), caloCluster->IsEMCAL(), NtrMatched, trackcluster->Phi()};
+ fhnClusQA->Fill(ClusQA); //,1./Njets); // fill Sparse Histo with trigger entries
+ }//loop over tracks for JetQA
+
+ }//loop over clusters for JetQA
+
+ // loop over tracks in the event
+ for (int iTrack = 0; iTrack<jet->GetNumberOfTracks(); iTrack++){ //loop over tracks in jet for TrackQA
+ //AliVParticle *track = static_cast<AliVParticle*>(fTracks->At(i));
+ AliVTrack *jetTrack = static_cast<AliVTrack*>(fTracks->At(iTrack));
+ //AliESDtrack* track = fESD->GetTrack(i);
+ if (! jetTrack) {
+ AliError(Form("Couldn't get ESD track %d\n", iTrack));
+ continue;
+ }
+ if(!IsJetTrack(jet,iTrack,kFALSE)) continue;
+ Double_t trackQA[5] = {jetTrack->Pt(), jetTrack->Eta(), jetTrack->Phi(), jetTrack->IsEMCAL(), jetTrack->GetEMCALcluster()};
+ fhnTrackQA->Fill(trackQA); //,1./Njets);
+
+ }//track loop for TrackQA
+
+ if(highestjetpt<jet->Pt()){
+ ijethi=ijet;
+ highestjetpt=jet->Pt();
+ }
+ } // end of looping over jets
+
+ // loop over jets in the event and make appropriate cuts
+ for (Int_t iJets = 0; iJets < Njets; ++iJets) {
+ AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(iJets));
+ if (!jet) // see if we have a jet
+ continue;
+
+ // phi of jet, constrained to 1.6 < Phi < 2.94
+ float jetphi = jet->Phi(); // phi of jet
+
+ if (jet->Area()==0) // make sure jet has an area
+ continue;
+ if (jet->Pt()<0.1) // (should probably be higher..., but makes a cut on jet pT)
+ continue;
+ if (jet->MaxTrackPt()>100) // elminates fake tracks
+ continue;
+ if (! AcceptJet(jet)) // sees if jet is accepted
+ continue;
+
+ Int_t JetClusters = jet->GetNumberOfClusters();
+ Int_t JetTracks = jet -> GetNumberOfTracks();
+ fHistnJetTrackvnJetClusters->Fill(JetClusters,JetTracks);
+
+ // Initializations and Calculations
+ //Double_t jeteta = jet->Eta(); // ETA of jet
+ Double_t jetptraw = jet->Pt(); // raw pT of jet
+ Double_t jetPt = -500; // initialize corr jet pt LOCAL
+ Double_t jetarea = -500; // initialize jet area
+ jetarea = jet->Area(); // jet area
+ jetPt = jet->Pt() - jetarea*fRhoVal; // semi-corrected pT of jet from GLOBAL rho value
+
+ // make histo's
+ if(fillHist>0) fHistJetPtvsTrackPt[centbin]->Fill(jetPt,jet->MaxTrackPt());
+ fHistJetPhi->Fill(jetphi);
+ if(fillHist>0) fHistCorJetPt->Fill(jetPt);
+ fHistJetPt->Fill(jetptraw);
+
+ //if(iJets == ijethi) {
+
+ //loop over clusters
+ //for (int i = 0; i < njetclusters; i++){
+ for(int iCluster = 0; iCluster < nCluster; iCluster++) {
+ AliVCluster* caloCluster = static_cast<AliVCluster*>(fCaloClusters->At(iCluster));
+ //AliVCluster* caloCluster = (AliVCluster* )caloClusters->At(iCluster);
+ //AliESDCaloCluster* caloCluster = (AliESDCaloCluster* )caloClusters->At(iCluster);
+ //AliESDCaloCluster* clus = fESD->GetCaloCluster(iclus);
+ if (!caloCluster){
+ AliError(Form("ERROR: Could not get cluster %d", iCluster));
+ continue;
+ }
+
+ //if (!caloCluster -> IsEMCAL()) continue; //Check that Cluster is EMCal Cluster
+ if(! IsJetCluster(jet, iCluster, kFALSE)) continue;
+
+ AliESDtrack *track = 0;
+ ////////talk to joel
+ if (caloCluster->GetTrackMatchedIndex() > 0) // tender's matching
+ track = fESD->GetTrack(caloCluster->GetTrackMatchedIndex());
+ Double_t fclusE = -999;
+ fclusE = caloCluster->E();
+
+ if (fclusE<0.) continue; //Check that cluster has positive energy
+
+ fHistClusE->Fill(fclusE);
+ //Int_t cluslabel = caloCluster->GetID();
+ //Int_t nmatched = caloCluster->GetNTracksMatched();
+
+ Float_t pos[3];
+ caloCluster->GetPosition(pos); // Get cluster position
+ TVector3 cp(pos);
+ if(fillHist>0) fHistClusterPhivEta->Fill(cp.PseudoRapidity(),cp.Phi());
+
+ Int_t trackMatchedindex=caloCluster->GetTrackMatchedIndex();
+ if(trackMatchedindex<0)continue; // Make sure we don't have a bad index
+
+ if (caloCluster->GetTrackMatchedIndex() > 0) // tender's matching
+ track = fESD->GetTrack(caloCluster->GetTrackMatchedIndex());
+ Double_t NtrMatched = -999;
+ NtrMatched = caloCluster->GetNTracksMatched();
+ for(int itrack = 0; itrack < NtrMatched; itrack++){ // Loop over tracks matched to clusters from jets
+ //AliVParticle *trackCluster = static_cast<AliVParticle*>(fTracks->At(i));
+ AliVTrack *trackCluster = static_cast<AliVTrack*>(fTracks->At(itrack));
+ //AliESDtrack* trackCluster = fESD->GetTrack(itrack);
+ if (! trackCluster) {
+ AliError(Form("Couldn't get ESD track %d\n", itrack));
+ continue;
+ }
+ if(!IsJetTrack(jet,itrack,kFALSE)) continue; // Check that track is still part of ith jet
+
+ //if (trackCluster->Phi()>3.2 || trackCluster->Phi()<1.4)cout <<"Out of Range Track! Track Phi: " << trackCluster->Phi() << endl;
+
+ //if(track->Pt() < 4.0) continue;
+ // initialize track info
+ Double_t dEdx = -99;
+ //Double_t trackphi = -99;
+ Double_t trackpt = 0;
+ Double_t p = trackCluster->P();
+ Double_t EovP = -99;
+
+ // distance of closest approach
+ Float_t DCAxy = -999;
+ Float_t DCAz = -999;
+ //Double_t DCAXY = -999;
+ //Double_t DCAZ = -999;
+
+ // track info
+ //trackCluster->GetImpactParameters(DCAxy, DCAz);
+ trackpt = trackCluster->Pt();
+ //trackphi = track->Phi();
+
+ // fill track histo's
+ if(fillHist>0) fHistTrackPhivEta->Fill(trackCluster->Eta(),trackCluster->Phi());
+ if(fillHist>0) fHistdEdx->Fill(dEdx);
+ if(fillHist>0) fHistdEdxvPt->Fill(trackpt,dEdx);
+ if(fillHist>0) fHistTrackPt[centbin]->Fill(trackCluster->Pt());
+
+ Double_t nSigmaElectron_TPC = -999;
+ Double_t nSigmaElectron_TOF = -999;
+ Double_t nSigmaElectron_EMCAL = -999;
+
+ // if(!useAOD){
+
+ AliESDtrack *trackESD = fESD->GetTrack(Ntracks);
+
+ dEdx = trackESD->GetTPCsignal();
+ trackESD->GetImpactParameters(DCAxy, DCAz);
+ nSigmaElectron_TPC = fPIDResponse->NumberOfSigmasTPC(trackESD,AliPID::kElectron);
+ nSigmaElectron_TOF = fPIDResponse->NumberOfSigmasTOF(trackESD,AliPID::kElectron);
+ // }
+ /* if (!useAOD) {
+ AliAODTrack *trackAOD = fAOD->GetTrack(Ntracks);
+
+ // get detector signals
+ dEdx = trackAOD->GetTPCsignal();
+
+ nSigmaElectron_TPC = fPIDResponse->NumberOfSigmasTPC(trackAOD,AliPID::kElectron);
+ nSigmaElectron_TOF = fPIDResponse->NumberOfSigmasTOF(trackAOD,AliPID::kElectron);
+
+ } // end of AOD pid
+ */
+ //double eop2 = -1;
+ //double ss[4]={0.,0.,0.,0.};
+ EovP = fclusE/p;
+ //nSigmaElectron_EMCAL = fPIDResponse->NumberOfSigmasEMCAL(trackESD,AliPID::kElectron,eop2,ss);
+ if(fillHist>0) fHistEovPTracks->Fill(EovP);
+ if(fillHist>0) fHistEovPvsPtTracks->Fill(trackpt,EovP);
+ Double_t HF_tracks[12] = {fCent, trackCluster->Pt(), trackCluster->P() ,trackCluster->Eta(), trackCluster->Phi(), EovP, 0/*DCAxy*/, 0/*DCAz*/, dEdx, nSigmaElectron_TPC, nSigmaElectron_TOF, nSigmaElectron_EMCAL};
+ fhnPIDHF->Fill(HF_tracks); // fill Sparse Histo with trigger entries
+
+ //Int_t trackMatchedIndex = caloCluster->GetTrackMatchedIndex();//find the index of the matched track. This by default returns the best match
+ //AliESDtrack *track = event->GetTrack(trackMatchedIndex);
+ //if this is a good track, accept track will return true. The track matched is good, so not track matched is false
+ //Int_t matched = fESD->AcceptTrack(track);//If the track is bad, don't count it. By default even bad tracks are accepted
+
+ } //loop over tracks matched to clusters in jet
+
+ } // loop over jet clusters
+
+
+ //} // highest pt jet cut
+ } // LOOP over JETS in event
+
+ return kTRUE;
+
+}
+//________________________________________________________________________
+void AliAnalysisTaskEmcalJetHF::Terminate(Option_t *)
+{
+ cout<<"###########################"<<endl;
+ cout<<"#### Task Finished ####"<<endl;
+ cout<<"###########################"<<endl;
+ cout<<"###########################"<<endl;
+} // end of terminate
+
+//________________________________________________________________________
+Int_t AliAnalysisTaskEmcalJetHF::GetCentBin(Double_t cent) const
+{ // Get centrality bin.
+
+ Int_t centbin = -1;
+ if (cent>=0 && cent<10)
+ centbin = 0;
+ else if (cent>=10 && cent<20)
+ centbin = 1;
+ else if (cent>=20 && cent<30)
+ centbin = 2;
+ else if (cent>=30 && cent<40)
+ centbin = 3;
+ else if (cent>=40 && cent<50)
+ centbin = 4;
+ else if (cent>=50 && cent<90)
+ centbin = 5;
+ return centbin;
+}
+//____________________________________________________________________________________________
+THnSparse* AliAnalysisTaskEmcalJetHF::NewTHnSparseDHF(const char* name, UInt_t entries)
+{
+ // generate new THnSparseD PID, axes are defined in GetDimParams()
+ Int_t count = 0;
+ UInt_t tmp = entries;
+ while(tmp!=0){
+ count++;
+ tmp = tmp &~ -tmp; // clear lowest bit
+ }
+
+ TString hnTitle(name);
+ const Int_t dim = count;
+ Int_t nbins[dim];
+ Double_t xmin[dim];
+ Double_t xmax[dim];
+
+ Int_t i=0;
+ Int_t c=0;
+ while(c<dim && i<32){
+ if(entries&(1<<i)){
+
+ TString label("");
+ GetDimParamsHF(i, label, nbins[c], xmin[c], xmax[c]);
+ hnTitle += Form(";%s",label.Data());
+ c++;
+ }
+
+ i++;
+ }
+ hnTitle += ";";
+
+ return new THnSparseD(name, hnTitle.Data(), dim, nbins, xmin, xmax);
+} // end of NewTHnSparseF PID
+
+THnSparse* AliAnalysisTaskEmcalJetHF::NewTHnSparseDJetQA(const char* name, UInt_t entries)
+{
+ // generate new THnSparseD JetQA, axes are defined in GetDimParamsJetQA()
+ Int_t count = 0;
+ UInt_t tmp = entries;
+ while(tmp!=0){
+ count++;
+ tmp = tmp &~ -tmp; // clear lowest bit
+ }
+
+ TString hnTitle(name);
+ const Int_t dim = count;
+ Int_t nbins[dim];
+ Double_t xmin[dim];
+ Double_t xmax[dim];
+
+ Int_t i=0;
+ Int_t c=0;
+ while(c<dim && i<32){
+ if(entries&(1<<i)){
+
+ TString label("");
+ GetDimParamsJetQA(i, label, nbins[c], xmin[c], xmax[c]);
+ hnTitle += Form(";%s",label.Data());
+ c++;
+ }
+
+ i++;
+ }
+ hnTitle += ";";
+
+ return new THnSparseD(name, hnTitle.Data(), dim, nbins, xmin, xmax);
+} // end of NewTHnSparseF JetQA
+
+
+void AliAnalysisTaskEmcalJetHF::GetDimParamsHF(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
+{
+ // stores label and binning of axis for THnSparse
+ const Double_t pi = TMath::Pi();
+
+ switch(iEntry){
+
+ case 0:
+ label = "V0 centrality (%)";
+ nbins = 10;
+ xmin = 0.;
+ xmax = 100.;
+ break;
+
+ case 1:
+ label = "Track p_{T}";
+ nbins = 750;
+ xmin = 0.;
+ xmax = 75.;
+ break;
+
+ case 2:
+ label = "Track p";
+ nbins = 750;
+ xmin = 0.;
+ xmax = 75.;
+ break;
+
+ case 3:
+ label = "Track Eta";
+ nbins = 64;
+ xmin = -1.6;
+ xmax = 1.6;
+ break;
+
+ case 4:
+ label = "Track Phi";
+ nbins = 72;
+ xmin = 0;
+ xmax = 2*pi;
+ break;
+
+ case 5:
+ label = "E/p of track";
+ nbins = 400;
+ xmin = 0;
+ xmax = 4.0;
+ break;
+
+ case 6:
+ label = "DCA xy";
+ nbins = 20;
+ xmin = -10;
+ xmax = 10;
+ break;
+
+ case 7:
+ label = "DCA z";
+ nbins = 20;
+ xmin = -10;
+ xmax = 10;
+ break;
+
+ case 8:
+ label = "dEdX of track - TPC";
+ nbins = 300;
+ xmin = 0;
+ xmax = 300;
+ break;
+
+ case 9:
+ label = "nSigma electron TPC";
+ nbins = 50;
+ xmin = -5;
+ xmax = 5;
+ break;
+
+ case 10:
+ label = "nSigma electron TOF";
+ nbins = 50;
+ xmin = -5;
+ xmax = 5;
+ break;
+
+ case 11:
+ label = "nSigma electron Emcal";
+ nbins = 50;
+ xmin = -5;
+ xmax = 5;
+ break;
+
+
+ } // end of switch
+} // end of getting dim-params
+
+void AliAnalysisTaskEmcalJetHF::GetDimParamsJetQA(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
+{
+ // stores label and binning of axis for THnSparse
+ const Double_t pi = TMath::Pi();
+
+ switch(iEntry){
+
+ case 0:
+ label = "number of Jets in Event";
+ nbins = 2;
+ xmin = 0.;
+ xmax = 1.;
+ break;
+
+ case 1:
+ label = "number of Clusters in a Jet";
+ nbins = 100;
+ xmin = 0.;
+ xmax = 100.;
+ break;
+
+ case 2:
+ label = "number of Tracks in a Jet";
+ nbins = 100;
+ xmin = 0.;
+ xmax = 100.;
+ break;
+
+ case 3:
+ label = "Jet Eta";
+ nbins = 24;
+ xmin = -1.2;
+ xmax = 1.2;
+ break;
+
+ case 4:
+ label = "Jet Phi";
+ nbins = 72;
+ xmin = 0;
+ xmax = 2*pi;
+ break;
+
+ case 5:
+ label = "Cluster Energy";
+ nbins = 1000;
+ xmin = 0;
+ xmax = 10;
+ break;
+
+ case 6:
+ label = "Cluster Eta";
+ nbins = 24;
+ xmin = -1.2;
+ xmax = 1.2;
+ break;
+
+ case 7:
+ label = "Cluster Phi";
+ nbins = 72;
+ xmin = 0;
+ xmax = 2*pi;
+ break;
+
+ case 8:
+ label = "Is EMCalCluster";
+ nbins = 2;
+ xmin = 0;
+ xmax = 2;
+ break;
+
+ case 9:
+ label = "Number of Matched Tracks to Cluster";
+ nbins = 60;
+ xmin = 0;
+ xmax = 60;
+ break;
+
+ case 10:
+ label = "Track Pt";
+ nbins = 750;
+ xmin = 0;
+ xmax = 75;
+ break;
+
+ case 11:
+ label = "Track Eta";
+ nbins = 24;
+ xmin = -1.2;
+ xmax = 1.2;
+ break;
+
+ case 12:
+ label= "Track Phi";
+ nbins = 72;
+ xmin = 0;
+ xmax = 2*pi;
+ break;
+
+ case 13:
+ label="Is Track EMCal";
+ nbins = 2;
+ xmin = 0;
+ xmax = 2;
+ break;
+
+ case 14:
+ label = "Get Track EMCal Cluster";
+ nbins = 100;
+ xmin = 0;
+ xmax = 100;
+ break;
+
+ case 15:
+ label = "Track Matched Phi";
+ nbins = 72;
+ xmin = 0;
+ xmax = 2*pi;
+
+
+
+
+ } // end of switch
+} // end of getting dim-params
+
+
+
--- /dev/null
+#ifndef AliAnalysisTaskEmcalJetHF_h
+#define AliAnalysisTaskEmcalJetHF_h
+
+class TClonesArray;
+class TH1F;
+class TH2F;
+class TH3F;
+class THnSparse;
+class TLorentzVector;
+class TGraph;
+
+class AliEMCALTrack;
+class AliMagF;
+class AliESDEvent;
+class AliAODEvent;
+class AliEMCALGeometry;
+class AliEMCALRecoUtils;
+class AliESDtrack;
+class AliESDtrackCuts;
+class AliAnalysisEtCuts;
+
+
+// this whole section of includes added
+#include <AliEmcalJet.h>
+#include <AliVEvent.h>
+#include <AliVTrack.h>
+#include <AliVCluster.h>
+#include <TClonesArray.h>
+#include <TMath.h>
+#include <TRandom3.h>
+#include <AliLog.h>
+#include "AliAnalysisTaskEmcalJet.h"
+#include "AliEMCALPIDResponse.h"
+
+// PID stuff
+#include "AliPIDResponse.h"
+#include "AliTPCPIDResponse.h"
+#include "AliESDpid.h"
+#include "AliAnalysisFilter.h"
+
+class AliAnalysisTaskEmcalJetHF : public AliAnalysisTaskEmcalJet {
+ public:
+ AliAnalysisTaskEmcalJetHF();
+ AliAnalysisTaskEmcalJetHF(const char *name);
+ virtual ~AliAnalysisTaskEmcalJetHF();
+
+ virtual void UserCreateOutputObjects();
+
+ /** Cuts info */
+ AliAnalysisEtCuts * GetCuts() const { return fCuts; }
+ virtual void SetCuts(const AliAnalysisEtCuts *cuts)
+ { fCuts = (AliAnalysisEtCuts *) cuts; }
+
+
+ void SetTPCITSTrackCuts(const AliESDtrackCuts *cuts){ fEsdtrackCutsITSTPC = (AliESDtrackCuts *) cuts;}
+ void SetTPCOnlyTrackCuts(const AliESDtrackCuts *cuts){ fEsdtrackCutsTPC = (AliESDtrackCuts *) cuts;}
+ void SetITSTrackCuts(const AliESDtrackCuts *cuts){ fEsdtrackCutsITS = (AliESDtrackCuts *) cuts;}
+
+ //PID Sparse
+ virtual THnSparse* NewTHnSparseDHF(const char* name, UInt_t entries);
+ virtual void GetDimParamsHF(Int_t iEntry,TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax);
+
+ //JetQA Sparse
+ virtual THnSparse* NewTHnSparseDJetQA(const char* name, UInt_t entries);
+ virtual void GetDimParamsJetQA(Int_t iEntry,TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax);
+
+
+ // setters
+ void SetJetPt(Double_t jpt) { fJetHIpt = jpt; } // jet threshold pt cut
+ void SetTrackPtCut(Double_t trpt) { fTrackPtCut = trpt; } // track pt threshold to do PID on
+ virtual void SetTrackEta(Double_t e) { fTrackEta = e; } //eta range of the associated tracks
+ virtual void SetTrackQACut(Double_t trkQAcut) { fTrkQAcut = trkQAcut;}
+
+ // event no.
+ Int_t event; // event number (processed)
+ Int_t fillHist;
+
+ protected:
+ Bool_t Run();
+ virtual void Terminate(Option_t *);
+ virtual Int_t GetCentBin(Double_t cent) const;
+ void ExecOnce();
+
+ // data type switch
+ Bool_t useAOD;
+
+ AliAnalysisEtCuts *fCuts; // keeper of basic cuts
+
+ // cuts
+ Double_t fJetHIpt; // high jet pt
+ Double_t fTrackPtCut; // track pt cut to do PID on
+ Double_t fTrackEta;
+ Double_t fTrkQAcut; //trkQA cut
+
+ // PID
+ AliPIDResponse *fPIDResponse; // PID response object
+ AliTPCPIDResponse *fTPCResponse; // TPC pid response object
+
+ AliESDtrackCuts* fEsdtrackCutsITSTPC;//esd track cuts for ITS+TPC tracks
+ AliESDtrackCuts* fEsdtrackCutsTPC;//esd track cuts for TPC tracks (which may also contain ITS hits)
+ AliESDtrackCuts* fEsdtrackCutsITS;//esd track cuts for ITS stand alone tracks
+
+
+ private:
+ AliESDEvent *fESD;//! // ESD object
+ AliAODEvent *fAOD;//! // AOD Object
+
+
+ TH2F *fHistRhovsCent; //!
+ TH1F *fHistJetPhi;//! // Njets vs Phi
+ TH1F *fHistCorJetPt;//! // (Njets) vs Corrected Jet Pt (local rho)
+ TH1F *fHistJetPt;//! // raw jet pt (uncorrected)
+ TH1F *fHistdEdx;//!
+ TH2F *fHistdEdxvPt;//!
+ TH1F *fHistClusE;//!
+ TH1F *fHistEovPTracks;//!
+ TH2F *fHistEovPvsPtTracks;//!
+
+ TH2F *fHistJetPtvsTrackPt[6];//!
+ TH1F *fHistTrackPt[6];//!
+ TH1F *fHistEP0[6];//!
+ TH1F *fHistEP0A[6];//!
+ TH1F *fHistEP0C[6];//!
+ TH2F *fHistEPAvsC[6];//!
+
+ // PID status histo's
+ TH1 *fHistPID;//!
+ TH1 *fHistPIDtpc;//!
+ TH1 *fHistPIDits;//!
+ TH1 *fHistPIDtof;//!
+ TH1F *fHistnsigelectron;//!
+ TH2F *fHistnSigElecPt;//!
+ TH2F *fHistTrackPhivEta;//!
+ TH2F *fHistClusterPhivEta;//!
+ TH2F *fHistnJetTrackvnJetClusters;//!
+
+ //HF_PID Sparse
+ THnSparse *fhnPIDHF;//! // PID sparse
+ //QA Sparse
+ //QA Sparse
+ THnSparse *fhnQA; // QA sparse
+ THnSparse *fhnJetQA; //Jet QA Sparse
+ THnSparse *fhnClusQA; // cluster QA sparse
+ THnSparse *fhnTrackQA; // track QA sparse
+ //Declare it private to avoid compilation warning
+
+ AliAnalysisTaskEmcalJetHF(const AliAnalysisTaskEmcalJetHF & g) ; // cpy ctor
+ AliAnalysisTaskEmcalJetHF& operator=(const AliAnalysisTaskEmcalJetHF&); // not implemented
+
+
+
+ ClassDef(AliAnalysisTaskEmcalJetHF, 4); // Emcal jet Heavy Flavor
+};
+#endif
//________________________________________________________________________
AliAnalysisTaskEmcalJetHMEC::AliAnalysisTaskEmcalJetHMEC() :
- AliAnalysisTaskSE(),
- fTracksName("tracks"),
- fJetsName("jets"),
+ AliAnalysisTaskEmcalJet("HMEC",kFALSE),
+ fTracksName(""),
+ fJetsName(""),
fPhimin(-10),
fPhimax(10),
fEtamin(-0.9),
fTrkEta(0.9),
fDoEventMixing(0),
fMixingTracks(50000),
- fESD(0),
+ fESD(0),
+ fAOD(0),
fPoolMgr(0x0),
- fOutputList(0),
fHistTrackPt(0),
fHistCentrality(0),
fHistJetEtaPhi(0),
fHistTrackEtaPhi[ipta]=0;
}
-
for(Int_t icent = 0; icent<6; ++icent){
fHistJetPt[icent]=0;
fHistJetPtBias[icent]=0;
fHistJetPtTT[icent]=0;
for(Int_t iptjet = 0; iptjet<5; ++iptjet){
for(Int_t ieta = 0; ieta<3; ++ieta){
- fHistJetH[icent][iptjet][ieta]=0;
- fHistJetHBias[icent][iptjet][ieta]=0;
- fHistJetHTT[icent][iptjet][ieta]=0;
-
+ fHistJetH[icent][iptjet][ieta]=0;
+ fHistJetHBias[icent][iptjet][ieta]=0;
+ fHistJetHTT[icent][iptjet][ieta]=0;
}
}
}
}
//________________________________________________________________________
AliAnalysisTaskEmcalJetHMEC::AliAnalysisTaskEmcalJetHMEC(const char *name) :
- AliAnalysisTaskSE(name),
- fTracksName("tracks"),
- fJetsName("jets"),
+ AliAnalysisTaskEmcalJet(name,kTRUE),
+ fTracksName(""),
+ fJetsName(""),
fPhimin(-10),
fPhimax(10),
fEtamin(-0.9),
fTrkEta(0.9),
fDoEventMixing(0),
fMixingTracks(50000),
- fESD(0),
+ fESD(0),
+ fAOD(0),
fPoolMgr(0x0),
- fOutputList(0),
fHistTrackPt(0),
fHistCentrality(0),
fHistJetEtaPhi(0),
fHistJetPtTT[icent]=0;
for(Int_t iptjet = 0; iptjet<5; ++iptjet){
for(Int_t ieta = 0; ieta<3; ++ieta){
- fHistJetH[icent][iptjet][ieta]=0;
- fHistJetHBias[icent][iptjet][ieta]=0;
- fHistJetHTT[icent][iptjet][ieta]=0;
+ fHistJetH[icent][iptjet][ieta]=0;
+ fHistJetHBias[icent][iptjet][ieta]=0;
+ fHistJetHTT[icent][iptjet][ieta]=0;
}
}
}
-
- DefineInput(0, TChain::Class());
- DefineOutput(1, TList::Class());
-
}
//________________________________________________________________________
-void AliAnalysisTaskEmcalJetHMEC::UserCreateOutputObjects()
-{
- // Called once
-
-
- AliVEventHandler* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
- if (!handler) {
- AliError("Input handler not available!");
- return;
- }
-
+void AliAnalysisTaskEmcalJetHMEC::UserCreateOutputObjects() {
+ // Called once
+ AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
OpenFile(1);
- fOutputList = new TList();
- fOutputList->SetOwner();
-
// Create histograms
fHistTrackPt = new TH1F("fHistTrackPt", "P_{T} distribution", 1000, 0.0, 100.0);
-
fHistCentrality = new TH1F("fHistCentrality","centrality",100,0,100);
-
fHistJetEtaPhi = new TH2F("fHistJetEtaPhi","Jet eta-phi",900,-1.8,1.8,720,-3.2,3.2);
fHistJetHEtaPhi = new TH2F("fHistJetHEtaPhi","Jet-Hadron deta-dphi",900,-1.8,1.8,720,-1.6,4.8);
for(Int_t ipta=0; ipta<7; ++ipta){
name = Form("fHistTrackEtaPhi_%i", ipta);
fHistTrackEtaPhi[ipta] = new TH2F(name,name,400,-1,1,720,0.0,2.0*TMath::Pi());
- fOutputList->Add(fHistTrackEtaPhi[ipta]);
-
+ fOutput->Add(fHistTrackEtaPhi[ipta]);
}
for(Int_t icent = 0; icent<6; ++icent){
name = Form("fHistJetPt_%i",icent);
fHistJetPt[icent] = new TH1F(name,name,200,0,200);
- fOutputList->Add(fHistJetPt[icent]);
+ fOutput->Add(fHistJetPt[icent]);
name = Form("fHistJetPtBias_%i",icent);
fHistJetPtBias[icent] = new TH1F(name,name,200,0,200);
- fOutputList->Add(fHistJetPtBias[icent]);
+ fOutput->Add(fHistJetPtBias[icent]);
name = Form("fHistLeadJetPt_%i",icent);
fHistLeadJetPt[icent] = new TH1F(name,name,200,0,200);
- fOutputList->Add(fHistLeadJetPt[icent]);
+ fOutput->Add(fHistLeadJetPt[icent]);
name = Form("fHistLeadJetPtBias_%i",icent);
fHistLeadJetPtBias[icent] = new TH1F(name,name,200,0,200);
- fOutputList->Add(fHistLeadJetPtBias[icent]);
+ fOutput->Add(fHistLeadJetPtBias[icent]);
name = Form("fHistJetPtTT_%i",icent);
fHistJetPtTT[icent] = new TH1F(name,name,200,0,200);
- fOutputList->Add(fHistJetPtTT[icent]);
+ fOutput->Add(fHistJetPtTT[icent]);
for(Int_t iptjet = 0; iptjet<5; ++iptjet){
for(Int_t ieta = 0; ieta<3; ++ieta){
- name = Form("fHistJetH_%i_%i_%i",icent,iptjet,ieta);
- fHistJetH[icent][iptjet][ieta]=new TH2F(name,name,72,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
- fOutputList->Add(fHistJetH[icent][iptjet][ieta]);
+ name = Form("fHistJetH_%i_%i_%i",icent,iptjet,ieta);
+ fHistJetH[icent][iptjet][ieta]=new TH2F(name,name,72,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
+ fOutput->Add(fHistJetH[icent][iptjet][ieta]);
- name = Form("fHistJetHBias_%i_%i_%i",icent,iptjet,ieta);
- fHistJetHBias[icent][iptjet][ieta]=new TH2F(name,name,72,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
- fOutputList->Add(fHistJetHBias[icent][iptjet][ieta]);
+ name = Form("fHistJetHBias_%i_%i_%i",icent,iptjet,ieta);
+ fHistJetHBias[icent][iptjet][ieta]=new TH2F(name,name,72,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
+ fOutput->Add(fHistJetHBias[icent][iptjet][ieta]);
- name = Form("fHistJetHTT_%i_%i_%i",icent,iptjet,ieta);
- fHistJetHTT[icent][iptjet][ieta]=new TH2F(name,name,72,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
- fOutputList->Add(fHistJetHTT[icent][iptjet][ieta]);
+ name = Form("fHistJetHTT_%i_%i_%i",icent,iptjet,ieta);
+ fHistJetHTT[icent][iptjet][ieta]=new TH2F(name,name,72,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
+ fOutput->Add(fHistJetHTT[icent][iptjet][ieta]);
}
}
}
-
-
UInt_t cifras = 0; // bit coded, see GetDimParams() below
cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<7 | 1<<8;
fhnJH = NewTHnSparseF("fhnJH", cifras);
-
fhnJH->Sumw2();
-
- fOutputList->Add(fhnJH);
-
+ fOutput->Add(fhnJH);
if(fDoEventMixing){
cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<7 | 1<<8;
fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);
-
fhnMixedEvents->Sumw2();
-
- fOutputList->Add(fhnMixedEvents);
-
+ fOutput->Add(fhnMixedEvents);
}
+ fOutput->Add(fHistTrackPt);
+ fOutput->Add(fHistCentrality);
+ fOutput->Add(fHistJetEtaPhi);
+ fOutput->Add(fHistJetHEtaPhi);
- fOutputList->Add(fHistTrackPt);
- fOutputList->Add(fHistCentrality);
- fOutputList->Add(fHistJetEtaPhi);
- fOutputList->Add(fHistJetHEtaPhi);
-
-
- PostData(1, fOutputList);
-
+ PostData(1, fOutput);
//Event Mixing
Int_t trackDepth = fMixingTracks;
fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centralityBins, nZvtxBins, zvtxbin);
-
-
}
//________________________________________________________________________
Double_t AliAnalysisTaskEmcalJetHMEC:: RelativePhi(Double_t mphi,Double_t vphi) {
-
if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
return dphi;//dphi in [-Pi, Pi]
}
-
//________________________________________________________________________
-Int_t AliAnalysisTaskEmcalJetHMEC::GetCentBin(Double_t cent) const
-{
+Int_t AliAnalysisTaskEmcalJetHMEC::GetCentBin(Double_t cent) const {
// Get centrality bin.
Int_t centbin = -1;
- if (cent>=0 && cent<10)
- centbin = 0;
- else if (cent>=10 && cent<20)
- centbin = 1;
- else if (cent>=20 && cent<30)
- centbin = 2;
- else if (cent>=30 && cent<40)
- centbin = 3;
- else if (cent>=40 && cent<50)
- centbin = 4;
- else if (cent>=50 && cent<90)
- centbin = 5;
+ if (cent>=0 && cent<10) centbin = 0;
+ else if (cent>=10 && cent<20) centbin = 1;
+ else if (cent>=20 && cent<30) centbin = 2;
+ else if (cent>=30 && cent<40) centbin = 3;
+ else if (cent>=40 && cent<50) centbin = 4;
+ else if (cent>=50 && cent<90) centbin = 5;
return centbin;
}
-
//________________________________________________________________________
-Int_t AliAnalysisTaskEmcalJetHMEC::GetEtaBin(Double_t eta) const
-{
+Int_t AliAnalysisTaskEmcalJetHMEC::GetEtaBin(Double_t eta) const {
// Get eta bin for histos.
Int_t etabin = -1;
- if (TMath::Abs(eta)<=0.4)
- etabin = 0;
- else if (TMath::Abs(eta)>0.4 && TMath::Abs(eta)<0.8)
- etabin = 1;
- else if (TMath::Abs(eta)>=0.8)
- etabin = 2;
+ if (TMath::Abs(eta)<=0.4) etabin = 0;
+ else if (TMath::Abs(eta)>0.4 && TMath::Abs(eta)<0.8) etabin = 1;
+ else if (TMath::Abs(eta)>=0.8) etabin = 2;
return etabin;
}
//________________________________________________________________________
// Get jet pt bin for histos.
Int_t ptbin = -1;
- if (pt>=15 && pt<20)
- ptbin = 0;
- else if (pt>=20 && pt<25)
- ptbin = 1;
- else if (pt>=25 && pt<30)
- ptbin = 2;
- else if (pt>=30 && pt<60)
- ptbin = 3;
- else if (pt>=60)
- ptbin = 4;
-
+ if (pt>=15 && pt<20) ptbin = 0;
+ else if (pt>=20 && pt<25) ptbin = 1;
+ else if (pt>=25 && pt<30) ptbin = 2;
+ else if (pt>=30 && pt<60) ptbin = 3;
+ else if (pt>=60) ptbin = 4;
return ptbin;
}
+//________________________________________________________________________
+void AliAnalysisTaskEmcalJetHMEC::ExecOnce() {
+ AliAnalysisTaskEmcalJet::ExecOnce();
+
+}
//________________________________________________________________________
-void AliAnalysisTaskEmcalJetHMEC::UserExec(Option_t *)
-{
+Bool_t AliAnalysisTaskEmcalJetHMEC::Run() {
+ // Main loop called for each event
+ if(!fTracks){
+ AliError(Form("No fTracks object!!\n"));
+ return kTRUE;
+ }
+ if(!fJets){
+ AliError(Form("No fJets object!!\n"));
+ return kTRUE;
+ }
+ // what kind of event do we have: AOD or ESD?
+ Bool_t esdMode = kTRUE;
+ if (dynamic_cast<AliAODEvent*>(InputEvent())) esdMode = kFALSE;
- // Main loop called for each event
- // esd or aod mode
- Bool_t esdMode = kTRUE;
- if (dynamic_cast<AliAODEvent*>(InputEvent()))
- esdMode = kFALSE;
+ // if we have ESD event, set up ESD object
+ if(esdMode){
+ fESD = dynamic_cast<AliESDEvent*>(InputEvent());
+ if (!fESD) {
+ AliError(Form("ERROR: fESD not available\n"));
+ return kTRUE;
+ }
+ }
+ // if we have AOD event, set up AOD object
+ if(!esdMode){
+ fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
+ if(!fAOD) {
+ AliError(Form("ERROR: fAOD not available\n"));
+ return kTRUE;
+ }
+ }
- if (esdMode) {
- // optimization in case autobranch loading is off
- AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
- if (fTracksName == "Tracks")
- am->LoadBranch("Tracks");
+ TList *list = InputEvent()->GetList();
+ if(!list) {
+ AliError(Form("ERROR: list not attached\n"));
+ return kTRUE;
}
-
- //get centrality
- TList *list = InputEvent()->GetList();
- AliCentrality *centrality = InputEvent()->GetCentrality() ;
- Double_t fcent=-1;
- if(centrality)
- fcent = centrality->GetCentralityPercentile("V0M");
- else
- fcent=99;//probably pp data
-
- if (fcent<0) {
- AliError(Form("Centrality negative: %f", fcent));
- return;
+ // get centrality
+ if (fCent<0) {
+ AliError(Form("Centrality negative: %f", fCent));
+ return kTRUE;
}
+ Int_t centbin = GetCentBin(fCent);
+ if(centbin<0) return kTRUE;
+
Double_t fvertex[3]={0,0,0};
InputEvent()->GetPrimaryVertex()->GetXYZ(fvertex);
Double_t zVtx=fvertex[2];
- if(fabs(zVtx)>10.0)
- return;
-
- fHistCentrality->Fill(fcent);
- Int_t centbin = GetCentBin(fcent);
+ if(fabs(zVtx)>10.0) return kTRUE;
- if(centbin<0)
- return;
+ fHistCentrality->Fill(fCent);
TClonesArray *jets = 0;
TClonesArray *tracks = 0;
- tracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracksName));
+ tracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracks));
if (!tracks) {
- AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
- return;
+ AliError(Form("Pointer to tracks %s == 0", fTracks->GetName() ));
+ return kTRUE;
}
const Int_t Ntracks=tracks->GetEntries();
- jets= dynamic_cast<TClonesArray*>(list->FindObject(fJetsName));
+ jets= dynamic_cast<TClonesArray*>(list->FindObject(fJets));
if (!jets) {
- AliError(Form("Pointer to tracks %s == 0", fJetsName.Data() ));
- return;
+ AliError(Form("Pointer to tracks %s == 0", fJets->GetName() ));
+ return kTRUE;
}
-
const Int_t Njets = jets->GetEntries();
//Leticia's loop to find hardest track
-
Int_t iTT=-1;
Double_t ptmax=-10;
- for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++)
- {
- AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
- if (!track) {
- printf("ERROR: Could not receive track %d\n", iTracks);
- continue;
- }
+ for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++) {
+ AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
+ if (!track) {
+ printf("ERROR: Could not receive track %d\n", iTracks);
+ continue;
+ }
- if(TMath::Abs(track->Eta())>0.9) continue;
- if(track->Pt()<0.15)continue;
- //iCount++;
- if(track->Pt()>ptmax){
- ptmax=track->Pt();
- iTT=iTracks;
- }
+ if(TMath::Abs(track->Eta())>0.9) continue;
+ if(track->Pt()<0.15) continue;
+ //iCount++;
+ if(track->Pt()>ptmax){
+ ptmax=track->Pt();
+ iTT=iTracks;
}
+ }
-
Int_t ijethi=-1;
-
Double_t highestjetpt=0.0;
-
Int_t passedTTcut=0;
- for (Int_t ijet = 0; ijet < Njets; ijet++)
- {
-
- AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
-
- if (!jet)
- continue;
-
- if(!AcceptJet(jet))
- continue;
+ for (Int_t ijets = 0; ijets < Njets; ijets++){
+ AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijets));
+ if (!jet) continue;
+ if(!AcceptthisJet(jet)) continue;
Double_t jetPt = jet->Pt();
if(highestjetpt<jetPt){
- ijethi=ijet;
- highestjetpt=jetPt;
+ ijethi=ijets;
+ highestjetpt=jetPt;
}
+ }
- }
-
-
-
- for (Int_t ijet = 0; ijet < Njets; ijet++){
-
+ for (Int_t ijet = 0; ijet < Njets; ijet++){
AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
+ if (!jet) continue;
+ if(!AcceptthisJet(jet)) continue;
- if(!AcceptJet(jet))
- continue;
-
-
Double_t jetphi = jet->Phi();
Double_t jetPt = jet->Pt();
Double_t jeteta=jet->Eta();
Double_t leadjet=0;
if (ijet==ijethi) leadjet=1;
-
fHistJetPt[centbin]->Fill(jet->Pt());
fHistLeadJetPt[centbin]->Fill(jet->Pt());
fHistLeadJetPtBias[centbin]->Fill(jet->Pt());
}
- fHistJetEtaPhi->Fill(jet->Eta(),jetphi);
+ fHistJetEtaPhi->Fill(jet->Eta(),jetphi);
+ if(iTT>0){
+ AliVTrack* TT = static_cast<AliVTrack*>(tracks->At(iTT));
+ if(TMath::Abs(jetphi-TT->Phi()-TMath::Pi())<0.6) passedTTcut=1;
+ else passedTTcut=0;
+ }
- if(iTT>0){
- AliVTrack* TT = static_cast<AliVTrack*>(tracks->At(iTT));
- if(TMath::Abs(jetphi-TT->Phi()-TMath::Pi())<0.6) passedTTcut=1;
- else passedTTcut=0;
- }
+ if(passedTTcut)
+ fHistJetPtTT[centbin]->Fill(jet->Pt());
- if(passedTTcut)
- fHistJetPtTT[centbin]->Fill(jet->Pt());
-
-
Int_t iptjet=-1;
iptjet=GetpTjetBin(jetPt);
if(iptjet<0) continue;
+ //if (highestjetpt>15) {
+ if (highestjetpt>8) {
- if (highestjetpt>15) {
-
-
- for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++)
- {
- AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
- if (!track) {
- printf("ERROR: Could not receive track %d\n", iTracks);
- continue;
- }
+ for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++) {
+ AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
+ if (!track) {
+ printf("ERROR: Could not receive track %d\n", iTracks);
+ continue;
+ }
- if(TMath::Abs(track->Eta())>fTrkEta) continue;
+ if(TMath::Abs(track->Eta())>fTrkEta) continue;
- fHistTrackPt->Fill(track->Pt());
+ fHistTrackPt->Fill(track->Pt());
- if (track->Pt()<0.15)
- continue;
+ if (track->Pt()<0.15) continue;
- Double_t trackphi = track->Phi();
- if (trackphi > TMath::Pi())
- trackphi = trackphi-2*TMath::Pi();
-
- Double_t tracketa=track->Eta();
- Double_t trackpt=track->Pt();
- Double_t deta=tracketa-jeteta;
- Int_t ieta=GetEtaBin(deta);
- if (ieta<0) {
- AliError(Form("Eta Bin negative: %f", deta));
- continue;
- }
+ Double_t trackphi = track->Phi();
+ if (trackphi > TMath::Pi())
+ trackphi = trackphi-2*TMath::Pi();
+
+ Double_t tracketa=track->Eta();
+ Double_t trackpt=track->Pt();
+ Double_t deta=tracketa-jeteta;
+ Int_t ieta=GetEtaBin(deta);
+ if (ieta<0) {
+ AliError(Form("Eta Bin negative: %f", deta));
+ continue;
+ }
+ //Jet pt, track pt, dPhi,deta,fCent
+ Double_t dphijh = RelativePhi(jetphi,trackphi);
+ if (dphijh < -0.5*TMath::Pi())
+ dphijh+= 2*TMath::Pi();
+ if (dphijh > 1.5*TMath::Pi())
+ dphijh-=2.*TMath::Pi();
- //Jet pt, track pt, dPhi,deta,fcent
- Double_t dphijh = RelativePhi(jetphi,trackphi);
- if (dphijh < -0.5*TMath::Pi())
- dphijh+= 2*TMath::Pi();
- if (dphijh > 1.5*TMath::Pi()) dphijh-=2.*TMath::Pi();
+ fHistJetH[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
+ fHistJetHEtaPhi->Fill(deta,dphijh);
+ Double_t dR=sqrt(deta*deta+dphijh*dphijh);
-
- fHistJetH[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
- fHistJetHEtaPhi->Fill(deta,dphijh);
+ if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
+ fHistJetHBias[centbin][iptjet][ieta]->Fill(dphijh,trackpt);
- Double_t dR=sqrt(deta*deta+dphijh*dphijh);
+ Double_t triggerEntries[8] = {fCent,jetPt,trackpt,dR,deta,dphijh,0.0,leadjet};
+ fhnJH->Fill(triggerEntries);
+ }
- if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
- fHistJetHBias[centbin][iptjet][ieta]->Fill(dphijh,trackpt);
-
-
- Double_t triggerEntries[8] = {fcent,jetPt,trackpt,dR,deta,dphijh,0.0,leadjet};
- fhnJH->Fill(triggerEntries);
- }
-
- if(passedTTcut)
- fHistJetHTT[centbin][iptjet][ieta]->Fill(dphijh,trackpt);
-
-
- } //track loop
- }//jet pt cut
+ if(passedTTcut)
+ fHistJetHTT[centbin][iptjet][ieta]->Fill(dphijh,trackpt);
+ } //track loop
+ }//jet pt cut
}//jet loop
-
//Prepare to do event mixing
// create a list of reduced objects. This speeds up processing and reduces memory consumption for the event pool
TObjArray* tracksClone = CloneAndReduceTrackList(tracks);
//delete tracks;
-
if(fDoEventMixing>0){
// event mixing
// FillCorrelations(). Also nMix should be passed in, so a weight
// of 1./nMix can be applied.
-
-
-
-
- AliEventPool* pool = fPoolMgr->GetEventPool(fcent, zVtx);
+ AliEventPool* pool = fPoolMgr->GetEventPool(fCent, zVtx);
if (!pool){
- AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fcent, zVtx));
- return;
+ AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCent, zVtx));
+ return kTRUE;
}
//check for a trigger jet
-
+ if (pool->IsReady() || pool->NTracksInPool() > fMixingTracks / 10 || pool->GetCurrentNEvents() >= 5) {
- if (pool->IsReady() || pool->NTracksInPool() > fMixingTracks / 10 || pool->GetCurrentNEvents() >= 5)
- {
-
for (Int_t ijet = 0; ijet < Njets; ijet++){
-
Double_t leadjet=0;
if (ijet==ijethi) leadjet=1;
AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
-
- if(!AcceptJet(jet))
- continue;
+ if(!AcceptthisJet(jet)) continue;
Double_t jetPt = jet->Pt();
Double_t jetphi = jet->Phi();
Double_t jeteta=jet->Eta();
-
Int_t nMix = pool->GetCurrentNEvents();
//Fill for biased jet triggers only
if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
// Fill mixed-event histos here
- for (Int_t jMix=0; jMix<nMix; jMix++)
- {
- TObjArray* bgTracks = pool->GetEvent(jMix);
- const Int_t Nbgtrks = bgTracks->GetEntries();
- for(Int_t ibg=0; ibg<Nbgtrks; ibg++){
- AliPicoTrack *part = static_cast<AliPicoTrack*>(bgTracks->At(ibg));
- if(!part) continue;
-
- Double_t DEta = part->Eta()-jeteta;
- Double_t DPhi = RelativePhi(jetphi,part->Phi());
-
- Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta);
- if(DPhi<-0.5*TMath::Pi()) DPhi+=2.*TMath::Pi();
- if(DPhi>3./2.*TMath::Pi()) DPhi-=2.*TMath::Pi();
- Double_t triggerEntries[8] = {fcent,jetPt,part->Pt(),DR,DEta,DPhi,0.0,leadjet};
- fhnMixedEvents->Fill(triggerEntries,1./nMix);
-
+ for (Int_t jMix=0; jMix<nMix; jMix++) {
+ TObjArray* bgTracks = pool->GetEvent(jMix);
+ const Int_t Nbgtrks = bgTracks->GetEntries();
- }
+ for(Int_t ibg=0; ibg<Nbgtrks; ibg++){
+ AliPicoTrack *part = static_cast<AliPicoTrack*>(bgTracks->At(ibg));
+ if(!part) continue;
+
+ Double_t DEta = part->Eta()-jeteta;
+ Double_t DPhi = RelativePhi(jetphi,part->Phi());
+
+ Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta);
+ if(DPhi<-0.5*TMath::Pi()) DPhi+=2.*TMath::Pi();
+ if(DPhi>3./2.*TMath::Pi()) DPhi-=2.*TMath::Pi();
+ Double_t triggerEntries[8] = {fCent,jetPt,part->Pt(),DR,DEta,DPhi,0.0,leadjet};
+ fhnMixedEvents->Fill(triggerEntries,1./nMix);
+ }
}
+ }
}
- }
}
//update pool if jet in event or not
pool->UpdatePool(tracksClone);
-
}
-
-
-
- PostData(1, fOutputList);
+ return kTRUE;
}
//________________________________________________________________________
void AliAnalysisTaskEmcalJetHMEC::Terminate(Option_t *)
{
//just terminate
-
}
//________________________________________________________________________
-Int_t AliAnalysisTaskEmcalJetHMEC::AcceptJet(AliEmcalJet *jet)
+Int_t AliAnalysisTaskEmcalJetHMEC::AcceptthisJet(AliEmcalJet *jet)
{
//applies all jet cuts except pt
float jetphi = jet->Phi();
if (jetphi>TMath::Pi())
jetphi = jetphi-2*TMath::Pi();
-
+
if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax))
return 0;
if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax))
return 0;
//prevents 0 area jets from sneaking by when area cut == 0
if (jet->Area()==0)
- return 0;
-
+ return 0;
//exclude jets with extremely high pt tracks which are likely misreconstructed
if(jet->MaxTrackPt()>100)
return 0;
//passed all above cuts
return 1;
-
}
//________________________________________________________________________
-THnSparse* AliAnalysisTaskEmcalJetHMEC::NewTHnSparseF(const char* name, UInt_t entries)
-{
+THnSparse* AliAnalysisTaskEmcalJetHMEC::NewTHnSparseF(const char* name, UInt_t entries){
// generate new THnSparseF, axes are defined in GetDimParams()
Int_t count = 0;
case 0:
label = "V0 centrality (%)";
-
nbins = 10;
xmin = 0.;
xmax = 100.;
break;
-
case 1:
label = "corrected jet pt";
- nbins = 20;
- xmin = 0.;
- xmax = 200.;
- break;
-
+ nbins = 20;
+ xmin = 0.;
+ xmax = 200.;
+ break;
case 2:
label = "track pT";
-
- nbins = 100;
- xmin = 0.;
- xmax = 10;
- break;
-
-
+ nbins = 100;
+ xmin = 0.;
+ xmax = 10;
+ break;
+
case 3:
label = "deltaR";
nbins = 10;
xmax = 5.0;
break;
-
-
case 4:
label = "deltaEta";
nbins = 24;
xmax = 1.2;
break;
-
case 5:
label = "deltaPhi";
nbins = 72;
xmin = -0.5*pi;
xmax = 1.5*pi;
- break;
-
-
+ break;
case 6:
label = "leading track";
xmax = 2.5;
break;
-
}
-
}
-
//_________________________________________________
// From CF event mixing code PhiCorrelations
TObjArray* AliAnalysisTaskEmcalJetHMEC::CloneAndReduceTrackList(TObjArray* tracks)
{
AliVParticle* particle = (AliVParticle*) tracks->At(i);
if(TMath::Abs(particle->Eta())>fTrkEta) continue;
- if(particle->Pt()<0.15)continue;
+ if(particle->Pt()<0.15) continue;
Double_t trackpt=particle->Pt();
if(hadbin>-1) fHistTrackEtaPhi[hadbin]->Fill(particle->Eta(),particle->Phi());
-
tracksClone->Add(new AliPicoTrack(particle->Pt(), particle->Eta(), particle->Phi(), particle->Charge(), 0, 0, 0, 0));
}
return tracksClone;
}
-
-
-
-
// $Id$
+class TClonesArray;
class TList;
class TH1;
class TH2;
class THnSparse;
class AliEmcalJet;
class AliESDEvent;
+class AliAODEvent;
class AliEventPoolManager;
-#include "AliAnalysisTaskSE.h"
+#include "AliAnalysisTaskEmcalJet.h"
-class AliAnalysisTaskEmcalJetHMEC : public AliAnalysisTaskSE {
+class AliAnalysisTaskEmcalJetHMEC : public AliAnalysisTaskEmcalJet {
public:
AliAnalysisTaskEmcalJetHMEC();
AliAnalysisTaskEmcalJetHMEC(const char *name);
virtual void UserCreateOutputObjects();
virtual Double_t RelativePhi(Double_t mphi, Double_t vphi);
- virtual void UserExec(Option_t *option);
+// virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *);
- virtual Int_t AcceptJet(AliEmcalJet *jet);
+ virtual Int_t AcceptthisJet(AliEmcalJet *jet);
virtual THnSparse* NewTHnSparseF(const char* name, UInt_t entries);
virtual void GetDimParams(Int_t iEntry,TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax);
virtual void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; }
-
-
-
protected:
+ void ExecOnce();
+ Bool_t Run();
virtual Int_t GetCentBin(Double_t cent) const;
virtual Int_t GetEtaBin(Double_t eta) const;
virtual Int_t GetpTjetBin(Double_t pt) const;
- TString fTracksName; //name of tracks collection
- TString fJetsName; //name of Jet collection
+ TString fTracksName; // name of tracks collection
+ TString fJetsName; // name of Jet collection
Double_t fPhimin; // phi min of jet
Double_t fPhimax; // phi max of jet
Double_t fEtamin; // eta min of jet
Double_t fClusBias;
Double_t fTrkEta; // eta min/max of tracks
Int_t fDoEventMixing; // flag to do evt mixing
- Int_t fMixingTracks; // size of track buffer for event mixing
+ Int_t fMixingTracks; // size of track buffer for event mixing
TObjArray* CloneAndReduceTrackList(TObjArray* tracks);
AliESDEvent *fESD; //! ESD object
+ AliAODEvent *fAOD; //! AOD object
AliEventPoolManager *fPoolMgr; //!
- TList *fOutputList; //! Output list
TH1 *fHistTrackPt; //! Pt spectrum
TH1 *fHistCentrality;//!
TH2 *fHistJetEtaPhi;//!
fDoEventMixing(0), fMixingTracks(50000),
doPlotGlobalRho(0), doVariableBinning(0), dovarbinTHnSparse(0),
makeQAhistos(0), makeBIAShistos(0), makeextraCORRhistos(0), makeoldJEThadhistos(0),
- useAOD(0), fcutType("EMCAL"), doPID(0), doPIDtrackBIAS(0),
- doComments(0),
+ allpidAXIS(0), fcutType("EMCAL"), doPID(0), doPIDtrackBIAS(0),
+ doComments(0), doIOon(0),
fLocalRhoVal(0),
fTracksName(""), fJetsName(""),
event(0),
fPoolMgr(0x0),
fPIDResponse(0x0), fTPCResponse(),
fESD(0), fAOD(0),
+ fHistEventQA(0),
fHistTPCdEdX(0), fHistITSsignal(0), //fHistTOFsignal(0),
fHistRhovsCent(0), fHistNjetvsCent(0), fHistCentrality(0),
fHistZvtx(0), fHistMult(0),
SetMakeGeneralHistograms(kTRUE);
// define input and output slots here
- DefineInput(0, TChain::Class());
- DefineOutput(1, TList::Class());
+ if(doIOon > 0 ) DefineInput(0, TChain::Class());
+ if(doIOon > 0 ) DefineOutput(1, TList::Class());
}
//________________________________________________________________________
fDoEventMixing(0), fMixingTracks(50000),
doPlotGlobalRho(0), doVariableBinning(0), dovarbinTHnSparse(0),
makeQAhistos(0), makeBIAShistos(0), makeextraCORRhistos(0), makeoldJEThadhistos(0),
- useAOD(0), fcutType("EMCAL"), doPID(0), doPIDtrackBIAS(0),
- doComments(0),
+ allpidAXIS(0), fcutType("EMCAL"), doPID(0), doPIDtrackBIAS(0),
+ doComments(0), doIOon(0),
fLocalRhoVal(0),
fTracksName(""), fJetsName(""),
event(0),
fPoolMgr(0x0),
fPIDResponse(0x0), fTPCResponse(),
fESD(0), fAOD(0),
+ fHistEventQA(0),
fHistTPCdEdX(0), fHistITSsignal(0), //fHistTOFsignal(0),
fHistRhovsCent(0), fHistNjetvsCent(0), fHistCentrality(0),
fHistZvtx(0), fHistMult(0),
SetMakeGeneralHistograms(kTRUE);
// define input and output slots here
- DefineInput(0, TChain::Class());
- DefineOutput(1, TList::Class());
+ if(doIOon > 0 ) DefineInput(0, TChain::Class());
+ if(doIOon > 0 ) DefineOutput(1, TList::Class());
}
//_______________________________________________________________________
fHistJetHaddPhiIN = new TH1F("fHistJetHaddPhiIN","Jet-Hadron #Delta#varphi IN PLANE", 128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
fHistJetHaddPhiOUT = new TH1F("fHistJetHaddPhiOUT","Jet-Hadron #Delta#varphi OUT PLANE",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
fHistJetHaddPhiMID = new TH1F("fHistJetHaddPhiMID","Jet-Hadron #Delta#varphi MIDDLE of PLANE",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
-
+
+ fHistEventQA = new TH1F("fHistEventQA", "Event Counter at checkpoints in code", 25, 0, 25);
+ SetfHistQAcounterLabels(fHistEventQA);
+ fOutput->Add(fHistEventQA);
+
// add to output lists
fOutput->Add(fHistNjetvsCent);
fOutput->Add(fHistJetHaddPHI);
if(fDoEventMixing) fhnJH = NewTHnSparseD("fhnJH", bitcoded);
if(fDoEventMixing) fOutput->Add(fhnJH);
- bitcodeCorr = 1<<0 | 1<<1 | 1<<2; //| 1<<3 | 1<<4 | 1<<5;
+ bitcodeCorr = 1<<0 | 1<<1 | 1<<2 | 1<<3; // | 1<<4 | 1<<5;
fhnCorr = NewTHnSparseDCorr("fhnCorr", bitcodeCorr);
fOutput->Add(fhnCorr);
} // end of do-eventmixing
// variable binned pt
- Double_t xlowjetPT[] = {-50,-45,-40,-35,-30,-25,-20,-18,-16,-14,-12,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,35,40,45,50,60,70,80,90,100,120,140,160,180,200,250,300,350,400};
+ //Double_t xlowjetPT[] = {-50,-45,-40,-35,-30,-25,-20,-18,-16,-14,-12,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,35,40,45,50,60,70,80,90,100,120,140,160,180,200,250,300,350,400};
Double_t xlowtrPT[] = {0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.25,2.50,2.75,3.0,3.25,3.5,3.75,4.0,4.25,4.50,4.75,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,22.0,24.0,26.0,28.0,30.0,35.0,40.0,45.0,50.0,60.0,70.0,80.0,90.0,100.0};
// number of bins you tell histogram should be (# in array - 1) because the last bin
// is the right-most edge of the histogram
// i.e. this is for PT and there are 57 numbers (bins) thus we have 56 bins in our histo
- Int_t nbinsjetPT = sizeof(xlowjetPT)/sizeof(Double_t) - 1;
+ //Int_t nbinsjetPT = sizeof(xlowjetPT)/sizeof(Double_t) - 1;
Int_t nbinstrPT = sizeof(xlowtrPT)/sizeof(Double_t) - 1;
// set up PID sparse
SetfHistPIDcounterLabels(fHistPID);
fOutput->Add(fHistPID);
- bitcode = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 |
+ if(allpidAXIS) {
+ bitcode = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 |
1<<10 | 1<<11 | 1<<12 | 1<<13 | 1<<14 | 1<<15 | 1<<16 | 1<<17 | 1<<18 | 1<<19 |
- 1<<20 | 1<<21 | 1<<22;
- fhnPID = NewTHnSparseDPID("fhnPID", bitcode);
+ 1<<20;
+ fhnPID = NewTHnSparseDPID("fhnPID", bitcode);
+ } else {
+ bitcode = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 |
+ 1<<10 | 1<<11 | 1<<12 | 1<<13;
+ fhnPID = NewTHnSparseDPID("fhnPID", bitcode);
+ }
if(dovarbinTHnSparse){
- fhnPID->GetAxis(1)->Set(nbinsjetPT, xlowjetPT);
- fhnPID->GetAxis(2)->Set(nbinstrPT, xlowtrPT);
+ //fhnPID->GetAxis(1)->Set(nbinsjetPT, xlowjetPT);
+ fhnPID->GetAxis(1)->Set(nbinstrPT, xlowtrPT);
}
fOutput->Add(fhnPID);
Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
{ // Main loop called for each event
// TEST TEST TEST TEST for OBJECTS!
+
+ fHistEventQA->Fill(1); // All Events that get entered
+
if(!fLocalRho){
AliError(Form("Couldn't get fLocalRho object, try to get it from Event based on name\n"));
fLocalRho = GetLocalRhoFromEvent(fLocalRhoName);
return kTRUE;
}
+ fHistEventQA->Fill(2); // events after object check
+
// what kind of event do we have: AOD or ESD?
+ Bool_t useAOD;
+ if (dynamic_cast<AliAODEvent*>(InputEvent())) useAOD = kTRUE;
+ else useAOD = kFALSE;
+
// if we have ESD event, set up ESD object
if(!useAOD){
fESD = dynamic_cast<AliESDEvent*>(InputEvent());
}
}
+ fHistEventQA->Fill(3); // events after Aod/esd check
+
// get centrality
Int_t centbin = GetCentBin(fCent);
if (makeQAhistos) fHistCentrality->Fill(fCent); // won't be filled in pp collision (Keep this in mind!)
// for pp analyses we will just use the first centrality bin
- if (centbin == -1) centbin = 0;
+ //if (centbin == -1) centbin = 0;
// apply cut to event on Centrality > 90%
if(fCent>90) return kTRUE;
+ fHistEventQA->Fill(4); // events after centrality check
+
// get vertex information
Double_t fvertex[3]={0,0,0};
InputEvent()->GetPrimaryVertex()->GetXYZ(fvertex);
// apply zVtx cut
if(fabs(zVtx)>10.0) return kTRUE;
+ fHistEventQA->Fill(5); // events after zvertex check
+
// create pointer to list of input event
TList *list = InputEvent()->GetList();
if(!list) {
return kTRUE;
}
+ fHistEventQA->Fill(6); // events after list check
+
// initialize TClonesArray pointers to jets and tracks
TClonesArray *jets = 0;
TClonesArray *tracks = 0;
return kTRUE;
} // verify existence of jets
+ fHistEventQA->Fill(7); // events after track/jet pointer check
+
// get number of jets and tracks
const Int_t Njets = jets->GetEntries();
const Int_t Ntracks = tracks->GetEntries();
if(Ntracks<1) return kTRUE;
if(Njets<1) return kTRUE;
+ fHistEventQA->Fill(8); // events after #track and jets < 1 check
+
if (makeQAhistos) fHistMult->Fill(Ntracks); // fill multiplicity distribution
// initialize track parameters
// accepted jets
fHistNjetvsCent->Fill(fCent,NjetAcc);
Int_t NJETAcc = 0;
+ fHistEventQA->Fill(9); // events after track/jet loop to get highest pt
+
// loop over jets in event and make appropriate cuts
for (Int_t ijet = 0; ijet < Njets; ++ijet) {
// do we accept jet? apply jet cuts
if (!AcceptMyJet(jet)) continue;
+ fHistEventQA->Fill(10); // accepted jets
+
// check on lead jet
Double_t leadjet=0;
if (ijet==ijethi) leadjet=1;
// check on leading hadron pt
- leadhadronPT = GetLeadingHadronPt(jet);
+ if (ijet==ijethi) leadhadronPT = GetLeadingHadronPt(jet);
// initialize and calculate various parameters: pt, eta, phi, rho, etc...
Double_t jetphi = jet->Phi(); // phi of jet
Double_t jeteta = jet->Eta(); // ETA of jet
Double_t jetPt = -500;
Double_t jetPtGlobal = -500;
- Double_t jetPtLocal = -500; // initialize corr jet pt
+ //Double_t jetPtLocal = -500; // initialize corr jet pt
jetPt = jet->Pt();
jetPtGlobal = jet->Pt()-jet->Area()*fRhoVal; // corrected pT of jet from rho value
- jetPtLocal = jet->Pt()-jet->Area()*fLocalRhoVal; // corrected pT of jet using Rho modulated for V2 and V3
+ //jetPtLocal = jet->Pt()-jet->Area()*fLocalRhoVal; // corrected pT of jet using Rho modulated for V2 and V3
Double_t dEP = -500; // initialize angle between jet and event plane
dEP = RelativeEPJET(jetphi,fEPV0); // angle betweeen jet and event plane
}
// cut on HIGHEST jet pt in event (15 GeV default)
- if (highestjetpt>fJetPtcut) {
+ //if (highestjetpt>fJetPtcut) {
+ if (jet->Pt() > fJetPtcut) {
+ fHistEventQA->Fill(11); // jets meeting pt threshold
// does our max track or cluster pass the bias?
if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
// set up and fill Jet-Hadron Correction THnSparse
- Double_t CorrEntries[3] = {fCent, jet->Pt(), dEP};
+ Double_t CorrEntries[4] = {fCent, jet->Pt(), dEP, zVtx};
fhnCorr->Fill(CorrEntries); // fill Sparse Histo with Correction entries
}
if(TMath::Abs(track->Eta())>fTrkEta) continue;
if (track->Pt()<0.15) continue;
+ fHistEventQA->Fill(12); // accepted tracks in events from trigger jets
+
// calculate and get some track parameters
Double_t trCharge = -99;
trCharge = track->Charge();
}
// some variables for PID
- Double_t eta = -999;
Double_t pt = -999;
Double_t dEdx = -999;
Double_t ITSsig = -999;
if(doPID){
// get parameters of track
charge = track->Charge(); // charge of track
- eta = track->Eta(); // ETA of track
pt = track->Pt(); // pT of track
// extra attempt
AliVEvent *vevent=InputEvent();
if (!vevent||!fPIDResponse) return kTRUE; // just return, maybe put at beginning
+ fHistEventQA->Fill(13); // check for AliVEvent and fPIDresponse objects
+
// get PID parameters, first check if AOD/ESD
if (!useAOD) {
AliESDtrack *trackESD = fESD->GetTrack(iTracks);
fHistPID->Fill(nPID);
// PID sparse getting filled
- Double_t pid_Entries[23] = {fCent,jetPtLocal,pt,charge,eta,deta,dphijh,leadjet,zVtx,dEP,jetPt,
- nSigmaPion_TPC, nSigmaProton_TPC, nSigmaKaon_TPC, //nSig in TPC
- nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS, //nSig in ITS
- nSigmaPion_TOF, nSigmaProton_TOF, nSigmaKaon_TOF, //nSig in TOF
- nPIDtpc, nPIDits, nPIDtof //PID label for each detector
+ if (allpidAXIS) { // FILL ALL axis
+ Double_t pid_EntriesALL[21] = {fCent,pt,charge,deta,dphijh,leadjet,zVtx,dEP,jetPt,
+ nSigmaPion_TPC, nSigmaPion_TOF, // pion nSig values in TPC/TOF
+ nPIDtpc, nPIDits, nPIDtof, // PID label for each detector
+ nSigmaProton_TPC, nSigmaKaon_TPC, // nSig in TPC
+ nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS, // nSig in ITS
+ nSigmaProton_TOF, nSigmaKaon_TOF, // nSig in TOF
+ }; //array for PID sparse
+ fhnPID->Fill(pid_EntriesALL);
+ } else {
+ // PID sparse getting filled
+ Double_t pid_Entries[14] = {fCent,pt,charge,deta,dphijh,leadjet,zVtx,dEP,jetPt,
+ nSigmaPion_TPC, nSigmaPion_TOF, // pion nSig values in TPC/TOF
+ nPIDtpc, nPIDits, nPIDtof // PID label for each detector
}; //array for PID sparse
- fhnPID->Fill(pid_Entries); // fill Sparse histo of PID tracks
+ fhnPID->Fill(pid_Entries); // fill Sparse histo of PID tracks
+ } // minimal pid sparse filling
+
} // end of doPID check
// get track pt bin
} // jet pt cut
} // jet loop
+ fHistEventQA->Fill(14); // events right before event mixing
+
// ***************************************************************************************************************
// ******************************** Event MIXING *****************************************************************
TObjArray* tracksClone = CloneAndReduceTrackList(tracks); // TEST
return kTRUE;
}
+ fHistEventQA->Fill(15); // mixed events cases that have pool
+
// use only jets from EMCal-triggered events (for lhc11a use AliVEvent::kEMC1)
/// if (trigger & AliVEvent::kEMC1) {
//T if (trigger & AliVEvent::kEMCEJE) { // TEST
if (jet->Pt()<0.1) continue;
if (!AcceptMyJet(jet)) continue;
+ fHistEventQA->Fill(16); // event mixing jets
+
Int_t nMix = pool->GetCurrentNEvents(); // how many particles in pool to mix
// Fill for biased jet triggers only
if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)) {
// Fill mixed-event histos here
for (Int_t jMix=0; jMix<nMix; jMix++) {
+ fHistEventQA->Fill(17); // event mixing nMix
+
TObjArray* bgTracks = pool->GetEvent(jMix);
const Int_t Nbgtrks = bgTracks->GetEntries();
for(Int_t ibg=0; ibg<Nbgtrks; ibg++) {
Double_t triggerEntries[10] = {fCent,jet->Pt(),part->Pt(),DEta,DPhi,dEP,zVtx, mixcharge, leadjet}; //array for ME sparse
fhnMixedEvents->Fill(triggerEntries,1./nMix); // fill Sparse histo of mixed events
+ fHistEventQA->Fill(18); // event mixing - nbgtracks
if(makeextraCORRhistos) fHistMEphieta->Fill(DPhi,DEta, 1./nMix);
} // end of background track loop
} // end of filling mixed-event histo's
// print some stats on the event
event++;
-
+ fHistEventQA->Fill(19); // events making it to end
+
if (doComments) {
cout<<"Event #: "<<event<<" Jet Radius: "<<fJetRad<<" Constituent Pt Cut: "<<fConstituentCut<<endl;
cout<<"# of jets: "<<Njets<<" Highest jet pt: "<<highestjetpt<<" leading hadron pt: "<<leadhadronPT<<endl;
case 2:
label = "Track p_{T}";
- nbins = 750;
+ nbins = 300; // 750 pid
xmin = 0.;
xmax = 75.;
break;
break;
case 1:
- label = "Corrected Jet p_{T}";
- nbins = 216;
- xmin = -50.;
- xmax = 166.;
- break;
-
- case 2:
label = "Track p_{T}";
nbins = 750;
xmin = 0.;
xmax = 75.;
break;
- case 3:
+ case 2:
label = "Charge of Track";
nbins = 3;
xmin = -1.5;
xmax = 1.5;
break;
- case 4:
- label = "Track Eta";
- nbins = 48;
- xmin = -1.2;
- xmax = 1.2;
- break;
-
- case 5:
+ case 3:
label = "Relative Eta of Track and Jet";
nbins = 48;
xmin = -1.6;
xmax = 1.6;
break;
- case 6:
+ case 4:
label = "Relative Phi of Track and Jet";
nbins = 72;
xmin = -0.5*pi;
xmax = 1.5*pi;
break;
- case 7:
+ case 5:
label = "leading jet";
nbins = 3;
xmin = -.5;
xmax = 2.5;
break;
- case 8:
+ case 6:
label = "Z-vertex";
nbins = 10;
xmin = -10.;
xmax = 10.;
break;
- case 9:
+ case 7:
label = "Relative angle: Jet and Reaction Plane";
nbins = 48;
xmin = 0.;
xmax = 0.5*pi;
break;
- case 10:
- label = "Jet Pt";
+ case 8:
+ label = "Jet p_{T}";
nbins = 216;
xmin = 0.;
xmax = 216.;
break;
- case 11:
+ case 9:
label = "N-Sigma of pions in TPC";
nbins = 200;
xmin = -10.0;
xmax = 10.0;
break;
+ case 10:
+ label = "N-Sigma of pions in TOF";
+ nbins = 200;
+ xmin = -10.;
+ xmax = 10.;
+ break;
+
+ case 11:
+ label = "TPC PID determination";
+ nbins = 5;
+ xmin = 0.;
+ xmax = 5.;
+ break;
+
case 12:
+ label = "ITS PID determination";
+ nbins = 5;
+ xmin = 0.;
+ xmax = 5.;
+ break;
+
+ case 13:
+ label = "TOF PID determination";
+ nbins = 5;
+ xmin = 0.;
+ xmax = 5.;
+ break;
+
+ case 14:
label = "N-Sigma of protons in TPC";
nbins = 200;
xmin = -10.;
xmax = 10.;
break;
- case 13:
+ case 15:
label = "N-Sigma of kaons in TPC";
nbins = 200;
xmin = -10.;
xmax = 10.;
break;
- case 14:
+ case 16:
label = "N-Sigma of pions in ITS";
nbins = 200;
xmin = -10.0;
xmax = 10.0;
break;
- case 15:
+ case 17:
label = "N-Sigma of protons in ITS";
nbins = 200;
xmin = -10.;
xmax = 10.;
break;
- case 16:
+ case 18:
label = "N-Sigma of kaons in ITS";
nbins = 200;
xmin = -10.;
xmax = 10.;
break;
- case 17:
- label = "N-Sigma of pions in TOF";
- nbins = 200;
- xmin = -10.;
- xmax = 10.;
- break;
-
- case 18:
+ case 19:
label = "N-Sigma of protons in TOF";
nbins = 200;
xmin = -10.;
xmax = 10.;
break;
- case 19:
+ case 20:
label = "N-Sigma of kaons in TOF";
nbins = 200;
xmin = -10.;
xmax = 10.;
break;
- case 20:
- label = "TPC PID determination";
- nbins = 5;
- xmin = 0.;
- xmax = 5.;
- break;
-
- case 21:
- label = "ITS PID determination";
- nbins = 5;
- xmin = 0.;
- xmax = 5.;
- break;
-
- case 22:
- label = "TOF PID determination";
- nbins = 5;
- xmin = 0.;
- xmax = 5.;
- break;
-
} // end of switch
} // end of get dimension parameters PID
}
+//void AliAnalysisTaskEmcalJetHadEPpid::FillAnalysisSummaryHistogram() const
+void AliAnalysisTaskEmcalJetHadEPpid::SetfHistQAcounterLabels(TH1* h) const
+{
+ // fill the analysis summary histrogram, saves all relevant analysis settigns
+ h->GetXaxis()->SetBinLabel(1, "All events started");
+ h->GetXaxis()->SetBinLabel(2, "object check");
+ h->GetXaxis()->SetBinLabel(3, "aod/esd check");
+ h->GetXaxis()->SetBinLabel(4, "centrality check");
+ h->GetXaxis()->SetBinLabel(5, "zvertex check");
+ h->GetXaxis()->SetBinLabel(6, "list check");
+ h->GetXaxis()->SetBinLabel(7, "track/jet pointer check");
+ h->GetXaxis()->SetBinLabel(8, "tracks & jets lets than 1 check");
+ h->GetXaxis()->SetBinLabel(9, "after track/jet loop to get highest pt");
+ h->GetXaxis()->SetBinLabel(10, "accepted jets");
+ h->GetXaxis()->SetBinLabel(11, "jets meeting pt threshold");
+ h->GetXaxis()->SetBinLabel(12, "accepted tracks in events from trigger jet");
+ h->GetXaxis()->SetBinLabel(13, "after AliVEvent and fPIDResponse");
+ h->GetXaxis()->SetBinLabel(14, "events before event mixing");
+ h->GetXaxis()->SetBinLabel(15, "mixed events having a pool");
+ h->GetXaxis()->SetBinLabel(16, "event mixing: jets");
+ h->GetXaxis()->SetBinLabel(17, "event mixing: nMix");
+ h->GetXaxis()->SetBinLabel(18, "event mixing: nbackground tracks");
+ h->GetXaxis()->SetBinLabel(19, "event mixing: THE END");
+}
+
//______________________________________________________________________
THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseDCorr(const char* name, UInt_t entries) {
// generate new THnSparseD, axes are defined in GetDimParamsD()
xmax = 0.5*pi;
break;
+ case 3:
+ label = "Z-vertex";
+ nbins = 10;
+ xmin = -10.;
+ xmax = 10.;
+ break;
+
+ case 4:
+ label = "Jet p_{T} corrected with Local Rho";
+ nbins = 250;
+ xmin = -50.;
+ xmax = 200.;
+ break;
+
+ case 5:
+ label = "Jet p_{T} corrected with Global Rho";
+ nbins = 250;
+ xmin = -50.;
+ xmax = 200.;
+ break;
+
}// end of switch
} // end of Correction (ME) sparse
void SetPlotGlobalRho(Bool_t g) { doPlotGlobalRho = g; } // plot global rho switch
void SetVariableBinning(Bool_t v) { doVariableBinning = v; } // do variable binning switch
void SetvarbinTHnSparse(Bool_t vb) { dovarbinTHnSparse = vb; } // variable THnSparse bin switch
+ void SetallpidAXIS(Bool_t allAXIS) { allpidAXIS = allAXIS; } // fill all PID sparse axis's
void SetmakeQAhistos(Bool_t QAhist) { makeQAhistos = QAhist; } // make QA histos
void SetmakeBIAShistos(Bool_t BIAShist) { makeBIAShistos = BIAShist; } // make bias histos
void SetmakeextraCORRhistos(Bool_t Xhist) { makeextraCORRhistos = Xhist; } // make extra correlations histos
void SetoldJEThadhistos(Bool_t oldJH) { makeoldJEThadhistos = oldJH; } // make older JH histos for comparison
// set data, detectors type, and PID and PID w bias switches
- void SetDataType(Bool_t data) { useAOD = data; } // data type switch
void SetcutType(TString cut) { fcutType = cut; } // EMCAL / TPC acceptance cut
void SetdoPID(Bool_t p) { doPID = p; } // do PID switch
void SetdoPIDtrackBIAS(Bool_t PIDbias) { doPIDtrackBIAS = PIDbias; } // do PID track bias switch
// give comments setter
void SetdoComments(Bool_t comm) { doComments = comm; } // give comment switch
+ // define I/O
+ void SetIOon(Bool_t IO) { doIOon = IO; } // set on IO in constructor (temp)
+
// getters
TString GetLocalRhoName() const {return fLocalRhoName; }
virtual Int_t GetpTtrackBin(Double_t pt) const; // track pt bins
virtual Int_t GetzVertexBin(Double_t zVtx) const; // zVertex bin
void SetfHistPIDcounterLabels(TH1* fHistPID) const; // PID counter
+ void SetfHistQAcounterLabels(TH1* h) const; // QA counter
// parameters of detector to cut on for event
Double_t fPhimin; // phi min
Bool_t makeBIAShistos;
Bool_t makeextraCORRhistos;
Bool_t makeoldJEThadhistos;
-
- // data type switch
- Bool_t useAOD;
+ Bool_t allpidAXIS;
// Cut type (EMCAL/TPC acceptance)
TString fcutType;
// do comment switch
Bool_t doComments;
+ // do I/O on switch
+ Bool_t doIOon;
+
// local rho value
Double_t fLocalRhoVal;
Bool_t isPItof, isKtof, isPtof;
// event pool
- TObjArray* CloneAndReduceTrackList(TObjArray* tracks);
- AliEventPoolManager *fPoolMgr; // event pool Manager object
+ TObjArray *CloneAndReduceTrackList(TObjArray* tracks);
+ AliEventPoolManager *fPoolMgr;//! // event pool Manager object
// PID
AliPIDResponse *fPIDResponse; // PID response object
private:
// needed for PID, track objects
- AliESDEvent *fESD; // ESD object
- AliAODEvent *fAOD; // AOD object
+ AliESDEvent *fESD;//! // ESD object
+ AliAODEvent *fAOD;//! // AOD object
+
+ TH1F *fHistEventQA;//!
- TH2F *fHistTPCdEdX;
- TH2F *fHistITSsignal;
-// TH2F *fHistTOFsignal;
+ TH2F *fHistTPCdEdX;//!
+ TH2F *fHistITSsignal;//!
+// TH2F *fHistTOFsignal;//!
- TH2F *fHistRhovsCent; //!
+ TH2F *fHistRhovsCent;//!
TH2F *fHistNjetvsCent;//! number of jets versus Centrality
TH2F *fHistJetPtvsTrackPt[6];//!
TH2F *fHistRawJetPtvsTrackPt[6];//!
TH1F *fHistJetPtcorrGlRho[6];//!
TH2F *fHistJetPtvsdEP[6];//!
TH2F *fHistJetPtvsdEPBias[6];//!
- TH2F *fHistRhovsdEP[6]; //!
+ TH2F *fHistRhovsdEP[6];//!
TH3F *fHistJetEtaPhiPt[6];//!
TH3F *fHistJetEtaPhiPtBias[6];//!
TH2F *fHistJetPtArea[6];//!
TH2F *fHistJetPtAreaBias[6];//!
- TH2F *fHistJetPtNcon[6]; //!
- TH2F *fHistJetPtNconBias[6]; //!
- TH2F *fHistJetPtNconCh[6]; //!
- TH2F *fHistJetPtNconBiasCh[6]; //!
- TH2F *fHistJetPtNconEm[6]; //!
- TH2F *fHistJetPtNconBiasEm[6]; //!
- TH1F *fHistJetHaddPhiINcent[6];
- TH1F *fHistJetHaddPhiOUTcent[6];
- TH1F *fHistJetHaddPhiMIDcent[6];
-
- TH1 *fHistCentrality;
- TH1 *fHistZvtx;
- TH1 *fHistMult;
- TH1 *fHistJetPhi;
- TH1 *fHistTrackPhi;
- TH1 *fHistJetHaddPhiIN;
- TH1 *fHistJetHaddPhiOUT;
- TH1 *fHistJetHaddPhiMID;
- TH1 *fHistJetHaddPhiBias;
- TH1 *fHistJetHaddPhiINBias;
- TH1 *fHistJetHaddPhiOUTBias;
- TH1 *fHistJetHaddPhiMIDBias;
-
- TH1 *fHistMEdPHI; // phi distrubtion of mixed events
- TH1 *fHistTrackPtallcent;
-
- TH2 *fHistJetEtaPhi;
- TH2 *fHistTrackEtaPhi[4][7];
- TH1 *fHistJetHadbindPhi[9];
- TH1 *fHistJetHadbindPhiIN[9];
- TH1 *fHistJetHadbindPhiMID[9];
- TH1 *fHistJetHadbindPhiOUT[9];
- TH2 *fHistJetHEtaPhi;
-
- TH1 *fHistJetPt[6];
- TH1 *fHistJetPtBias[6];
- TH1 *fHistJetPtTT[6];
- TH2 *fHistAreavsRawPt[6];
- TH2 *fHistJetH[6][5][3];
- TH2 *fHistJetHBias[6][5][3];
- TH2 *fHistJetHTT[6][5][3];
- TH1F *fHistJetHdPHI[11];
- TH2F *fHistJetHdETAdPHI[11];
- TH2F *fHistSEphieta; // single events phi-eta distributions
- TH2F *fHistMEphieta; // mixed events phi-eta distributions
- TH1F *fHistJetHaddPHI;
+ TH2F *fHistJetPtNcon[6];//!
+ TH2F *fHistJetPtNconBias[6];//!
+ TH2F *fHistJetPtNconCh[6];//!
+ TH2F *fHistJetPtNconBiasCh[6];//!
+ TH2F *fHistJetPtNconEm[6];//!
+ TH2F *fHistJetPtNconBiasEm[6];//!
+ TH1F *fHistJetHaddPhiINcent[6];//!
+ TH1F *fHistJetHaddPhiOUTcent[6];//!
+ TH1F *fHistJetHaddPhiMIDcent[6];//!
+
+ TH1 *fHistCentrality;//!
+ TH1 *fHistZvtx;//!
+ TH1 *fHistMult;//!
+ TH1 *fHistJetPhi;//!
+ TH1 *fHistTrackPhi;//!
+ TH1 *fHistJetHaddPhiIN;//!
+ TH1 *fHistJetHaddPhiOUT;//!
+ TH1 *fHistJetHaddPhiMID;//!
+ TH1 *fHistJetHaddPhiBias;//!
+ TH1 *fHistJetHaddPhiINBias;//!
+ TH1 *fHistJetHaddPhiOUTBias;//!
+ TH1 *fHistJetHaddPhiMIDBias;//!
+
+ TH1 *fHistMEdPHI;//! // phi distrubtion of mixed events
+ TH1 *fHistTrackPtallcent;//!
+
+ TH2 *fHistJetEtaPhi;//!
+ TH2 *fHistTrackEtaPhi[4][7];//!
+ TH1 *fHistJetHadbindPhi[9];//!
+ TH1 *fHistJetHadbindPhiIN[9];//!
+ TH1 *fHistJetHadbindPhiMID[9];//!
+ TH1 *fHistJetHadbindPhiOUT[9];//!
+ TH2 *fHistJetHEtaPhi;//!
+
+ TH1 *fHistJetPt[6];//!
+ TH1 *fHistJetPtBias[6];//!
+ TH1 *fHistJetPtTT[6];//!
+ TH2 *fHistAreavsRawPt[6];//!
+ TH2 *fHistJetH[6][5][3];//!
+ TH2 *fHistJetHBias[6][5][3];//!
+ TH2 *fHistJetHTT[6][5][3];//!
+ TH1F *fHistJetHdPHI[11];//!
+ TH2F *fHistJetHdETAdPHI[11];//!
+ TH2F *fHistSEphieta;//! // single events phi-eta distributions
+ TH2F *fHistMEphieta;//! // mixed events phi-eta distributions
+ TH1F *fHistJetHaddPHI;//!
// PID status histo's
- TH1 *fHistPID;
+ TH1 *fHistPID;//!
// THn Sparse's
- THnSparse *fhnPID; // PID sparse
- THnSparse *fhnMixedEvents; // mixed events matrix
- THnSparse *fhnJH; // jet hadron events matrix
- THnSparse *fhnCorr; // sparse to get # jet triggers
+ THnSparse *fhnPID;//! // PID sparse
+ THnSparse *fhnMixedEvents;//! // mixed events matrix
+ THnSparse *fhnJH;//! // jet hadron events matrix
+ THnSparse *fhnCorr;//! // sparse to get # jet triggers
// container objects
AliJetContainer *fJetsCont; //!Jets
//________________________________________________________________________
AliAnalysisTaskEmcalJetPatchTriggerQA::AliAnalysisTaskEmcalJetPatchTriggerQA() :
AliAnalysisTaskEmcalJet("ChristineQA",kFALSE),
+ fPhimin(-10), fPhimax(10),
+ fEtamin(-0.9), fEtamax(0.9),
+ fAreacut(0.0),
fLocalRhoVal(0),
fHistNjetvsCent(0),
fhnJetTriggerQA(0x0)
//________________________________________________________________________
AliAnalysisTaskEmcalJetPatchTriggerQA::AliAnalysisTaskEmcalJetPatchTriggerQA(const char *name) :
AliAnalysisTaskEmcalJet(name,kTRUE),
+ fPhimin(-10), fPhimax(10),
+ fEtamin(-0.9), fEtamax(0.9),
+ fAreacut(0.0),
fLocalRhoVal(0),
fHistNjetvsCent(0),
fhnJetTriggerQA(0x0)
fLocalRho = GetLocalRhoFromEvent(fLocalRhoName);
}
- // check to see if we have any tracks
-// if (!fJets) return kTRUE;
-
- // get centrality bin
-// Int_t centbin = GetCentBin(fCent);
-// //for pp analyses we will just use the first centrality bin
-// if (centbin == -1)
-// centbin = 0;
-
- // get event plane info from event
- AliEventplane *aliEP = InputEvent()->GetEventplane();
- if (aliEP) {
- fEPV0 = aliEP->GetEventplane("V0" ,InputEvent());
- fEPV0A = aliEP->GetEventplane("V0A",InputEvent());
- fEPV0C = aliEP->GetEventplane("V0C",InputEvent());
- }else {
- AliWarning(Form("%s: Could not retrieve event plane information!", GetName()));
- }
+ // check to see if we have jet object
+ if (!fJets) return kTRUE;
// find NUMBER of jets
- const Int_t Njets = fJets->GetEntriesFast();
+ const Int_t Njets = fJets->GetEntries();
Int_t NjetAcc = 0;
// loop over jets in the event and make appropriate cuts
AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(iJets));
if (!jet) // see if we have a jet
continue;
-
-/*
- if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax))
- continue;
- if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax))
- continue;
-*/
- //cout<<"jet pt "<<jet->Pt()<<" area "<<jet->Area()<<" maxtrackpt "<<jet->MaxTrackPt()<<endl;
-
- if (jet->Area()==0) // make sure jet has an area
- continue;
- if (jet->Pt()<0.1) // (should probably be higher..., but makes a cut on jet pT)
- continue;
- if (jet->MaxTrackPt()>100) // elminates fake tracks
+ if (!AcceptMyJet(jet))
continue;
+
+ //cout<<"jet pt "<<jet->Pt()<<" area "<<jet->Area()<<" maxtrackpt "<<jet->MaxTrackPt()<<endl;
//This somehow needs to be fixed but I'm not sure what it does yet. It seems the defaults are wacky.
- if (! AcceptJet(jet)) // sees if jet is accepted
- continue;
+// if (! AcceptJet(jet)) // sees if jet is accepted
+// continue;
// jets.push_back(jet);
NjetAcc++;
-
- //cout<<"just accepted a jet!! woot woot"<<endl;
// Initializations and Calculations
// Double_t jetphi = jet->Phi();
Double_t jetarea = -500; // initialize jet area
jetarea = jet->Area(); // jet area
- Float_t dEP = -500; // initialize angle between jet and event plane
+ Double_t dEP = -500; // initialize angle between jet and event plane
dEP = RelativeEPJET(jet->Phi(),fEPV0);
// get LOCAL rho from event and fill histo's
fHistNjetvsCent->Fill(fCent,NjetAcc);
-
} // LOOP over JETS in event
return kTRUE;
}
//_________________________________________________________________________
-Float_t AliAnalysisTaskEmcalJetPatchTriggerQA:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
+Double_t AliAnalysisTaskEmcalJetPatchTriggerQA:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
{ // function to calculate angle between jet and EP in the 1st quadrant (0,Pi/2)
Double_t dphi = (EPAng - jetAng);
} // end of switch
} // end of getting dim-params
+
+//________________________________________________________________________
+Int_t AliAnalysisTaskEmcalJetPatchTriggerQA::AcceptMyJet(AliEmcalJet *jet) {
+ //applies all jet cuts except pt
+ if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax)) return 0;
+ if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax)) return 0;
+ if (jet->Area()<fAreacut) return 0;
+ // prevents 0 area jets from sneaking by when area cut == 0
+ if (jet->Area()==0) return 0;
+ //exclude jets with extremely high pt tracks which are likely misreconstructed
+ if(jet->MaxTrackPt()>100) return 0;
+
+ //passed all above cuts
+ return 1;
+}
virtual void GetDimParams(Int_t iEntry,TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax);
virtual void SetLocalRhoName(const char *n) { fLocalRhoName = n; }
+ virtual void SetAreaCut(Double_t a) { fAreacut = a; }
+ virtual void SetJetEta(Double_t emin, Double_t emax) { fEtamin = emin; fEtamax = emax; }
+ virtual void SetJetPhi(Double_t pmin, Double_t pmax) { fPhimin = pmin; fPhimax = pmax; }
+
// getters
TString GetLocalRhoName() const {return fLocalRhoName; }
protected:
Bool_t Run();
virtual void Terminate(Option_t *);
+ virtual Int_t AcceptMyJet(AliEmcalJet *jet); // applies basic jet tests/cuts before accepting
virtual Int_t GetCentBin(Double_t cent) const;
- Float_t RelativeEPJET(Double_t jetAng, Double_t EPAng) const;
+ Double_t RelativeEPJET(Double_t jetAng, Double_t EPAng) const;
+
+ // parameters of detector to cut on for event
+ Double_t fPhimin; // phi min
+ Double_t fPhimax; // phi max
+ Double_t fEtamin; // eta min
+ Double_t fEtamax; // eta max
+ Double_t fAreacut; // area cut
void ExecOnce();
Double_t fLocalRhoVal;
const Double_t hiBinJetqa[dimJetqa] = {upJetPtBin, 360, 0.6, 1.2, 500, 10, 11};
// h-jet analysis
- const Int_t dimTT = 3;
- const Int_t nBinsTT[dimTT] = {nTrkPtBins, 10, 11};
- const Double_t lowBinTT[dimTT] = {lowTrkPtBin, 0, 0};
- const Double_t hiBinTT[dimTT] = {upTrkPtBin, 100, 11};
+ const Int_t dimTT = 4;
+ const Int_t nBinsTT[dimTT] = {nTrkPtBins, 10, 11, 10};
+ const Double_t lowBinTT[dimTT] = {lowTrkPtBin, 0, 0, 0};
+ const Double_t hiBinTT[dimTT] = {upTrkPtBin, 100, 11, 10};
const Int_t dimCor = 8;
const Int_t nBinsCor[dimCor] = {nTrkPtBins, nJetPtBins, 140, 6, 10, 40, 11, 10};
RunSingleInclHJetCorr(trigPt, trigPhi, trigEta, fJetArray, fRhoValue, fhTTPt[fTriggerType][0], fHJetPhiCorr[fTriggerType][0]);
if(fRunBkgFlow)
{
- RunSingleInclHJetCorr(trigPt, trigPhi, trigEta, fJetArray, fRhoValue+1, 0x0, fHJetPhiCorrUp[fTriggerType]);
- RunSingleInclHJetCorr(trigPt, trigPhi, trigEta, fJetArray, fRhoValue-1, 0x0, fHJetPhiCorrDown[fTriggerType]);
+ RunSingleInclHJetCorr(trigPt, trigPhi, trigEta, fJetArray, fRhoValue+1.8, 0x0, fHJetPhiCorrUp[fTriggerType]);
+ RunSingleInclHJetCorr(trigPt, trigPhi, trigEta, fJetArray, fRhoValue-1.8, 0x0, fHJetPhiCorrDown[fTriggerType]);
}
if(fIsEmbedding)
if(hTT)
{
- Double_t fillTT[] = {trigPt, fCentrality, (Double_t)fPtHardBin};
+ Double_t fillTT[] = {trigPt, fCentrality, (Double_t)fPtHardBin,static_cast<Double_t>(Entry()%10)};
hTT->Fill(fillTT);
}
#include <TH2F.h>
#include <TH1D.h>
#include <TH1I.h>
+#include <TArrayF.h>
#include <THnSparse.h>
#include <TCanvas.h>
#include <TList.h>
#include <time.h>
#include <TRandom3.h>
+#include "AliGenEventHeader.h"
#include "AliGenPythiaEventHeader.h"
+#include "AliGenHijingEventHeader.h"
#include "AliAODMCHeader.h"
#include "AliMCEvent.h"
#include "AliLog.h"
#include "AliAnalysisUtils.h"
#include "AliRhoParameter.h"
#include "TVector3.h"
+#include "AliVVertex.h"
#include <stdio.h>
#include <stdlib.h>
//________________________________________________________________________________________
AliAnalysisTaskHJetSpectra::AliAnalysisTaskHJetSpectra():
-AliAnalysisTaskSE(), fOutputList(0), fAnalyzePythia(0), fIsKinematics(0), fUseDefaultVertexCut(1), fUsePileUpCut(1),
+AliAnalysisTaskSE(), fOutputList(0), fAnalyzePythia(0), fAnalyzeHijing(0), fIsKinematics(0), fUseDefaultVertexCut(1), fUsePileUpCut(1),
fJetArray(0), fTrackArray(0), fBackgroundJetArray(0), fJetArrayName(0), fTrackArrayName(0), fBackgroundJetArrayName(0), fRhoTaskName(),
fRandConeRadius(0.4),fRandConeRadiusSquared(fRandConeRadius*fRandConeRadius), fSignalJetRadius(0.4), fBackgroundJetRadius(0.3), fBackgroundJetPtMin(15.0),
fSignalJetEtaWindow(0.5), fBackgroundJetEtaWindow(0.5), fTrackEtaWindow(0.9), fMinTrackPt(0.150), fMinJetArea(0.5), fNumberOfCentralityBins(20), fCentralityType("V0A"),
-fCrossSection(0.0), fTrials(0.0), fRandom(0), fHelperClass(0), fInitialized(0),
+fCrossSection(0.0), fTrials(0.0), fImpParam(-1.0), fRandom(0), fHelperClass(0), fInitialized(0),
fTTlow(8.0), fTThigh(9.0), fTTtype(0), fDphiCut(TMath::Pi()-0.6), fUseDoubleBinPrecision(0),
fHistEvtSelection(0x0), fh2Ntriggers(0x0), fHJetSpec(0x0), fHJetSpecSubUeMedian(0x0), fHJetSpecSubUeCone(0x0), fHJetSpecSubUeCMS(0x0),
fhRhoCellMedian(0x0), fhRhoCone(0x0), fhRhoCMS(0x0),
fARhoCellMedian(0x0), fARhoCone(0x0), fARhoCMS(0x0),
fhDeltaPtMedian(0x0), fhDeltaPtCone(0x0), fhDeltaPtCMS(0x0),
fhDeltaPtMedianIncl(0x0), fhDeltaPtConeIncl(0x0), fhDeltaPtCMSIncl(0x0),
+fhDeltaPtMedianNearSide(0x0), fhDeltaPtMedianAwaySide(0x0), fhDeltaPtCMSNearSide(0x0), fhDeltaPtCMSAwaySide(0x0),
+fhDeltaPtMedianExclTrigCone(0x0),fhDeltaPtCMSExclTrigCone(0x0), fhDeltaPtMedianExclAwayJet(0x0), fhDeltaPtCMSExclAwayJet(0x0),
fhJetPhi(0x0), fhTrackPhi(0x0), fhJetEta(0x0), fhTrackEta(0x0), fhTrackCentVsPt(0x0), fhVertexZ(0x0), fhVertexZAccept(0x0),
-fhDphiTriggerJet(0x0), fhDphiTriggerJetAccept(0x0),
+fhDphiTriggerJetMinBias(0x0),fhDphiTriggerJetCent20(0x0), fhDphiTriggerJetAccept(0x0),
fhCentrality(0x0), fhCentralityV0M(0x0), fhCentralityV0A(0x0), fhCentralityV0C(0x0), fhCentralityZNA(0x0),
fNofRndTrials(2000), fJetFreeAreaFrac(0.8), fnEta(2), fnPhi(11), fEtaSize(0.9), fPhiSize(2*TMath::Pi()/fnPhi), fCellArea(fPhiSize*fEtaSize),
-fh1Xsec(0x0), fh1Trials(0x0), fh1PtHard(0x0),
-fNofRandomCones(1)
+fh1Xsec(0x0), fh1Trials(0x0), fh1PtHard(0x0), fhImpactParameter(0x0), fhImpactParameterTT(0x0),
+fNofRandomCones(1),
+fRConesR(0.1),fRConesRSquared(fRConesR*fRConesR),fnRCones(16)
{
//default constructor
-
+ for(Int_t k=0; k<50; k++){
+ fRConePhi[k] = 0.0;
+ fRConeEta[k] = 0.0;
+ }
}
//________________________________________________________________________
AliAnalysisTaskHJetSpectra::AliAnalysisTaskHJetSpectra(const char *name, const char* trackArrayName, const char* jetArrayName, const char* backgroundJetArrayName) :
-AliAnalysisTaskSE(name), fOutputList(0), fAnalyzePythia(0), fIsKinematics(0), fUseDefaultVertexCut(1), fUsePileUpCut(1),
+AliAnalysisTaskSE(name), fOutputList(0), fAnalyzePythia(0), fAnalyzeHijing(0), fIsKinematics(0), fUseDefaultVertexCut(1), fUsePileUpCut(1),
fJetArray(0), fTrackArray(0), fBackgroundJetArray(0), fJetArrayName(0), fTrackArrayName(0), fBackgroundJetArrayName(0), fRhoTaskName(),
fRandConeRadius(0.4),fRandConeRadiusSquared(fRandConeRadius*fRandConeRadius), fSignalJetRadius(0.4), fBackgroundJetRadius(0.3), fBackgroundJetPtMin(15.0),
fSignalJetEtaWindow(0.5), fBackgroundJetEtaWindow(0.5), fTrackEtaWindow(0.9), fMinTrackPt(0.150), fMinJetArea(0.5), fNumberOfCentralityBins(20), fCentralityType("V0A"),
-fCrossSection(0.0), fTrials(0.0), fRandom(0), fHelperClass(0), fInitialized(0),
+fCrossSection(0.0), fTrials(0.0), fImpParam(-1.0), fRandom(0), fHelperClass(0), fInitialized(0),
fTTlow(8.0), fTThigh(9.0), fTTtype(0), fDphiCut(TMath::Pi()-0.6), fUseDoubleBinPrecision(0),
fHistEvtSelection(0x0), fh2Ntriggers(0x0), fHJetSpec(0x0), fHJetSpecSubUeMedian(0x0), fHJetSpecSubUeCone(0x0), fHJetSpecSubUeCMS(0x0),
fhRhoCellMedian(0x0), fhRhoCone(0x0), fhRhoCMS(0x0),
fARhoCellMedian(0x0), fARhoCone(0x0), fARhoCMS(0x0),
fhDeltaPtMedian(0x0), fhDeltaPtCone(0x0), fhDeltaPtCMS(0x0),
fhDeltaPtMedianIncl(0x0), fhDeltaPtConeIncl(0x0), fhDeltaPtCMSIncl(0x0),
+fhDeltaPtMedianNearSide(0x0), fhDeltaPtMedianAwaySide(0x0), fhDeltaPtCMSNearSide(0x0), fhDeltaPtCMSAwaySide(0x0),
+fhDeltaPtMedianExclTrigCone(0x0),fhDeltaPtCMSExclTrigCone(0x0), fhDeltaPtMedianExclAwayJet(0x0), fhDeltaPtCMSExclAwayJet(0x0),
fhJetPhi(0x0), fhTrackPhi(0x0), fhJetEta(0x0), fhTrackEta(0x0), fhTrackCentVsPt(0x0), fhVertexZ(0x0), fhVertexZAccept(0x0),
-fhDphiTriggerJet(0x0), fhDphiTriggerJetAccept(0x0),
+fhDphiTriggerJetMinBias(0x0), fhDphiTriggerJetCent20(0x0), fhDphiTriggerJetAccept(0x0),
fhCentrality(0x0), fhCentralityV0M(0x0), fhCentralityV0A(0x0), fhCentralityV0C(0x0), fhCentralityZNA(0x0),
fNofRndTrials(2000), fJetFreeAreaFrac(0.8), fnEta(2), fnPhi(11), fEtaSize(0.9), fPhiSize(2*TMath::Pi()/fnPhi), fCellArea(fPhiSize*fEtaSize),
-fh1Xsec(0x0), fh1Trials(0x0), fh1PtHard(0x0),
-fNofRandomCones(1)
+fh1Xsec(0x0), fh1Trials(0x0), fh1PtHard(0x0), fhImpactParameter(0x0), fhImpactParameterTT(0x0),
+fNofRandomCones(1),
+fRConesR(0.1),fRConesRSquared(fRConesR*fRConesR), fnRCones(16)
{
//constructor that is called
//LIST OF TRACKS
fTrackArrayName = new TString(trackArrayName);
- if(fTrackArrayName->Contains("MCParticles") || fTrackArrayName->Contains("mcparticles"))
+ if((fTrackArrayName->Contains("MC") && fTrackArrayName->Contains("Particles")) ||
+ (fTrackArrayName->Contains("mc") && fTrackArrayName->Contains("particles"))){
fIsKinematics = kTRUE;
+ }
//LIST of JETS
fJetArrayName = new TString(jetArrayName);
AliError(Form("%s: Bg Jet branch missing !", GetName()));
}
+ for(Int_t k=0; k<50; k++){
+ fRConePhi[k] = 0.0;
+ fRConeEta[k] = 0.0;
+ }
+
DefineOutput(1, TList::Class());
}
-
+
+//________________________________________________________________________
+void AliAnalysisTaskHJetSpectra::SetAnalyzeMC(Int_t val){
+ if(val==1){
+ fAnalyzePythia = kTRUE;
+ fAnalyzeHijing = kFALSE;
+ return;
+ }
+ if(val==2){
+ fAnalyzeHijing = kTRUE;
+ fAnalyzePythia = kFALSE;
+ return;
+ }
+
+ fAnalyzeHijing = kFALSE;
+ fAnalyzePythia = kFALSE;
+ return;
+}
//________________________________________________________________________
-inline Double_t AliAnalysisTaskHJetSpectra::GetConePt(Double_t eta, Double_t phi, Double_t radius){
+Double_t AliAnalysisTaskHJetSpectra::GetConePt(Double_t eta, Double_t phi, Double_t radius){
//sum up pt inside a cone
Double_t tmpConePt = 0.0;
Double_t dphi = 0.0;
//________________________________________________________________________
-/*inline Double_t AliAnalysisTaskHJetSpectra::GetPtHard()
-{
- #ifdef DEBUGMODE
- AliInfo("Starting GetPtHard.");
- #endif
- AliGenPythiaEventHeader* pythiaHeader = dynamic_cast<AliGenPythiaEventHeader*>(MCEvent()->GenEventHeader());
- if (MCEvent())
- if (!pythiaHeader)
- {
- // Check if AOD
- AliAODMCHeader* aodMCH = dynamic_cast<AliAODMCHeader*>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
+Double_t AliAnalysisTaskHJetSpectra::GetPtHard(){
+ //get pt hard from pythia
+ AliGenPythiaEventHeader* pythiaHeader = dynamic_cast<AliGenPythiaEventHeader*>(MCEvent()->GenEventHeader());
+ if(MCEvent()){
+ if(!pythiaHeader){
+ // Check if AOD
+ AliAODMCHeader* aodMCH = dynamic_cast<AliAODMCHeader*>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
+
+ if(aodMCH){
+ for(UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++){
+ pythiaHeader = dynamic_cast<AliGenPythiaEventHeader*>(aodMCH->GetCocktailHeader(i));
+ if(pythiaHeader) break;
+ }
+ }
+ }
+ }
+ if(pythiaHeader){
+ fCrossSection = pythiaHeader->GetXsection();
+ if(fCrossSection>0.){ //save cross-section and the number of trials
+ fTrials = pythiaHeader->Trials();
+ fh1Xsec->Fill("<#sigma>", fCrossSection);
+ fh1Trials->Fill("#sum{ntrials}",fTrials);
+ }
- if (aodMCH)
- {
- for(UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++)
- {
- pythiaHeader = dynamic_cast<AliGenPythiaEventHeader*>(aodMCH->GetCocktailHeader(i));
- if (pythiaHeader) break;
- }
+ return pythiaHeader->GetPtHard();
+ }
+ AliWarning(Form("In task %s: GetPtHard() failed!", GetName()));
+ return -1.0;
+}
+//________________________________________________________________________
+Double_t AliAnalysisTaskHJetSpectra::GetImpactParameter(){
+ //get impact parameter from hijing
+ AliGenHijingEventHeader* hijingHeader = dynamic_cast<AliGenHijingEventHeader*>(MCEvent()->GenEventHeader());
+ if(MCEvent()){
+ if(!hijingHeader){
+ // Check if AOD
+ AliAODMCHeader* aodMCH = dynamic_cast<AliAODMCHeader*>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
+
+ if(aodMCH){
+ for(UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++){
+ hijingHeader = dynamic_cast<AliGenHijingEventHeader*>(aodMCH->GetCocktailHeader(i));
+ if(hijingHeader) break;
+ }
+ }
+ }
+ }
+ if(hijingHeader){
+ return (Double_t) (hijingHeader->ImpactParameter());
+ }
+ AliWarning(Form("In task %s: GetImpactParameter() failed!", GetName()));
+ return -1.0;
+}
+//________________________________________________________________________
+Double_t AliAnalysisTaskHJetSpectra::GetSimPrimaryVertex(){
+ //get generator level primary vertex
+ AliGenEventHeader* mcHeader = NULL;
+ AliAODMCHeader* aodMCH = NULL;
+ if(MCEvent()){
+ if(fAnalyzePythia){
+ mcHeader = dynamic_cast<AliGenPythiaEventHeader*>(MCEvent()->GenEventHeader());
+ if(!mcHeader){
+ // Check if AOD
+ aodMCH = dynamic_cast<AliAODMCHeader*>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
+
+ if(aodMCH){
+ for(UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
+ mcHeader = dynamic_cast<AliGenPythiaEventHeader*>(aodMCH->GetCocktailHeader(i));
+ if(mcHeader) break;
+ }
+ }
+ }
}
- }
- #ifdef DEBUGMODE
- AliInfo("Ending GetPtHard.");
- #endif
- if (pythiaHeader)
- return pythiaHeader->GetPtHard();
+ if(fAnalyzeHijing){
+ mcHeader = dynamic_cast<AliGenHijingEventHeader*>(MCEvent()->GenEventHeader());
+ if(!mcHeader){
+ // Check if AOD
+ aodMCH = dynamic_cast<AliAODMCHeader*>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
- AliWarning(Form("In task %s: GetPtHard() failed!", GetName()));
- return -1.0;
+ if(aodMCH){
+ for(UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
+ mcHeader = dynamic_cast<AliGenHijingEventHeader*>(aodMCH->GetCocktailHeader(i));
+ if(mcHeader) break;
+ }
+ }
+ }
+ }
+ }
+ if(mcHeader){
+
+ TArrayF pyVtx(3);
+ mcHeader->PrimaryVertex(pyVtx);
+ return (Double_t) (pyVtx[2]);
+ }
+ AliWarning(Form("In task %s: Pythia Vertex failed!", GetName()));
+ return 9999.0;
}
-*/
+
+
//________________________________________________________________________
-/*inline Double_t AliAnalysisTaskHJetSpectra::GetPythiaTrials()
+/*Double_t AliAnalysisTaskHJetSpectra::GetPythiaTrials()
{
#ifdef DEBUGMODE
AliInfo("Starting GetPythiaTrials.");
}
//________________________________________________________________________
-inline Bool_t AliAnalysisTaskHJetSpectra::IsEventInAcceptance(AliVEvent* event){
+Bool_t AliAnalysisTaskHJetSpectra::IsEventInAcceptance(AliVEvent* event){
//EVENT SELECTION
if(!event) return kFALSE;
+
+ //___________________________________________________
+
+ if(fAnalyzePythia || fAnalyzeHijing){ //PURE MC
+ if(!MCEvent()) return kFALSE;
+
+ //BEFORE VERTEX CUT
+ Double_t vtxMC = GetSimPrimaryVertex();
+ fhVertexZ->Fill(vtxMC);
+
+ if(TMath::Abs(vtxMC) > 10.0){
+ fHistEvtSelection->Fill(3); //count events rejected by vertex cut
+ return kFALSE;
+ }
+ fhVertexZAccept->Fill(vtxMC);
+
+ return kTRUE;
+ }
//___________________________________________________
//TEST PILE UP
if(fUsePileUpCut){
}
//________________________________________________________________________
-inline Bool_t AliAnalysisTaskHJetSpectra::IsTrackInAcceptance(AliVParticle* track){
+Bool_t AliAnalysisTaskHJetSpectra::IsTrackInAcceptance(AliVParticle* track){
// Check if the track pt and eta range
if(track != 0){
if(fIsKinematics){
}
//________________________________________________________________________
-inline Bool_t AliAnalysisTaskHJetSpectra::IsBackgroundJetInAcceptance(AliEmcalJet *jet){
+Bool_t AliAnalysisTaskHJetSpectra::IsBackgroundJetInAcceptance(AliEmcalJet *jet){
//find jets to be removed from bg calculation
if(jet != 0){
if(TMath::Abs(jet->Eta()) <= fBackgroundJetEtaWindow){
}
//________________________________________________________________________
-inline Bool_t AliAnalysisTaskHJetSpectra::IsSignalJetInAcceptance(AliEmcalJet *jet){
+Bool_t AliAnalysisTaskHJetSpectra::IsSignalJetInAcceptance(AliEmcalJet *jet){
//select jets in acceptance
if(jet == 0) return kFALSE;
if(TMath::Abs(jet->Eta()) <= fSignalJetEtaWindow){
fInitialized = kTRUE; //change flag to skip this function next time when processing UserExec
+
+ fnRCones = TMath::Nint(fRandConeRadiusSquared/fRConesRSquared); //the number of small R=0.1 random cones
+
// Check for track array
if(strcmp(fTrackArrayName->Data(), "") != 0){
fTrackArray = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTrackArrayName->Data()));
//________________________________________________________________________
void AliAnalysisTaskHJetSpectra::GetDeltaPt(Double_t rho1, Double_t &dpt1, Double_t rho2, Double_t &dpt2,
- Double_t rho3, Double_t &dpt3, Double_t leadingJetExclusionProbability){
+ Double_t rho3, Double_t &dpt3,
+ Double_t &rcPhi, Double_t &rcEta,
+ Double_t leadingJetExclusionProbability){
//delta pt = random cone - rho
}
}
+ rcPhi = 9999.0;
+ rcEta = 9999.0;
// Get the cones' pt and calculate delta pt
if(coneValid){
+ rcPhi = tmpRandConePhi;
+ rcEta = tmpRandConeEta;
Double_t conePt = GetConePt(tmpRandConeEta,tmpRandConePhi,fRandConeRadius);
dpt1 = conePt - (rho1*fRandConeRadiusSquared*TMath::Pi());
dpt2 = conePt - (rho2*fRandConeRadiusSquared*TMath::Pi());
void AliAnalysisTaskHJetSpectra::Calculate(AliVEvent* event){
//Analyze the event and Fill histograms
+ if(fAnalyzePythia){
+ fh1PtHard->Fill(GetPtHard());
+ }
+
+ if(fAnalyzeHijing){
+ fImpParam = GetImpactParameter();
+ fhImpactParameter->Fill(fImpParam);
+ }
//_________________________________________________________________
// FILL EVENT STATISTICS
fHistEvtSelection->Fill(1); //Count input event
//LOOP OVER TRACKS SEARCH FOR TRIGGER
std::vector<Int_t> trigTracks; //list pf trigger particle indices
- Bool_t bContainesHighPtTrack = kFALSE;
+ //Bool_t bContainesHighPtTrack = kFALSE;
Int_t nTracks = fTrackArray->GetEntries();
trigTracks.push_back(i); //trigger candidates
}
- if(track->Pt()>=8.0) bContainesHighPtTrack = kTRUE;
+ //if(track->Pt()>=8.0) bContainesHighPtTrack = kTRUE;
}
}
Double_t rhoFromCellMedian = 0.0; //UE density cell median
Double_t rhoCone = 0.0; //UE density perp cone
Double_t rhoCMS = 0.0; //UE density ala CMS
+ Double_t deltaptCellMedian, deltaptCone, deltaptCMS, randConePhi, randConeEta;
+ Double_t distanceFromTrigger;
+
+ if(ntriggers>0){
+ if(fTTtype==0){ //select single inclusive trigger
+ indexSingleRndTrig = fRandom->Integer(ntriggers); //Integer 0 ... ntriggers-1
+ }
+ }
rhoFromCellMedian = EstimateBgRhoMedian();
rhoCone = EstimateBgCone();
rhoCMS = GetExternalRho();
- Double_t deltaptCellMedian, deltaptCone, deltaptCMS;
+ fhRhoCellMedianIncl->Fill((Float_t) rhoFromCellMedian,(Float_t) centralityPercentile);
+ fhRhoConeIncl->Fill( (Float_t) rhoCone, (Float_t) centralityPercentile);
+ fhRhoCMSIncl->Fill( (Float_t) rhoCMS, (Float_t) centralityPercentile);
+
for(Int_t irc=0; irc<fNofRandomCones; irc++){ //generate 4 random cones per event
- GetDeltaPt(rhoFromCellMedian, deltaptCellMedian,rhoCone, deltaptCone, rhoCMS, deltaptCMS);
+ GetDeltaPt(rhoFromCellMedian, deltaptCellMedian,rhoCone, deltaptCone, rhoCMS, deltaptCMS, randConePhi, randConeEta, 0);
fhDeltaPtMedianIncl->Fill(deltaptCellMedian, (Double_t) centralityPercentile);
fhDeltaPtConeIncl->Fill( deltaptCone, (Double_t) centralityPercentile);
fhDeltaPtCMSIncl->Fill( deltaptCMS, (Double_t) centralityPercentile);
-
- fhRhoCellMedianIncl->Fill((Float_t) rhoFromCellMedian,(Float_t) centralityPercentile);
- fhRhoConeIncl->Fill( (Float_t) rhoCone, (Float_t) centralityPercentile);
- fhRhoCMSIncl->Fill( (Float_t) rhoCMS, (Float_t) centralityPercentile);
-
-
- if(ntriggers>0 || bContainesHighPtTrack){
- //fill delta pt histograms
+
+ if(ntriggers>0){
+ //fill delta pt histograms near side + away side
fhDeltaPtMedian->Fill( deltaptCellMedian, (Double_t) centralityPercentile);
- fhDeltaPtCone->Fill( deltaptCone, (Double_t) centralityPercentile);
- fhDeltaPtCMS->Fill( deltaptCMS, (Double_t) centralityPercentile);
+ fhDeltaPtCone->Fill( deltaptCone, (Double_t) centralityPercentile);
+ fhDeltaPtCMS->Fill( deltaptCMS, (Double_t) centralityPercentile);
+
+ if(indexSingleRndTrig>-1){
+ AliVTrack* triggHad = static_cast<AliVTrack*>(fTrackArray->At(trigTracks[indexSingleRndTrig]));
+ Double_t dphiTrigRC = RelativePhi(triggHad->Phi(), randConePhi);
+ Double_t detaTrigRC = triggHad->Eta()- randConeEta;
+ if(TMath::Abs(dphiTrigRC)< TMath::Pi()/2){ //near side
+ fhDeltaPtMedianNearSide->Fill( deltaptCellMedian, (Double_t) centralityPercentile);
+ fhDeltaPtCMSNearSide->Fill( deltaptCMS, (Double_t) centralityPercentile);
+ }else{ //away side
+ fhDeltaPtMedianAwaySide->Fill( deltaptCellMedian, (Double_t) centralityPercentile);
+ fhDeltaPtCMSAwaySide->Fill( deltaptCMS, (Double_t) centralityPercentile);
+ }
+
+ distanceFromTrigger = sqrt(dphiTrigRC*dphiTrigRC+detaTrigRC*detaTrigRC);
+ while(distanceFromTrigger<0.5 + fRandConeRadius){
+ GetDeltaPt(rhoFromCellMedian, deltaptCellMedian,rhoCone, deltaptCone, rhoCMS, deltaptCMS, randConePhi, randConeEta, 0);
+ dphiTrigRC = RelativePhi(triggHad->Phi(), randConePhi);
+ detaTrigRC = triggHad->Eta()- randConeEta;
+ distanceFromTrigger = sqrt(dphiTrigRC*dphiTrigRC+detaTrigRC*detaTrigRC);
+ }
+ if(distanceFromTrigger>0.5 + fRandConeRadius){
+ fhDeltaPtMedianExclTrigCone->Fill( deltaptCellMedian, (Double_t) centralityPercentile);
+ fhDeltaPtCMSExclTrigCone->Fill( deltaptCMS, (Double_t) centralityPercentile);
+ }
+ }
}
}
+
+ //_______________________________________
+ Int_t idxLeadingJetAwaySide = -1;
+ Double_t ptLeadingJetAwaySide = -1.0;
+ Double_t phiTrigger = -1.0; //-pi,pi
if(ntriggers>0){
//Estimate UE density
fhRhoCMS->Fill( (Float_t) rhoCMS, (Float_t) centralityPercentile);
- if(fTTtype==0){ //select single inclusive trigger
- indexSingleRndTrig = fRandom->Integer(ntriggers); //Integer 0 ... ntriggers-1
- }
-
//TRIGGER PARTICLE LOOP
for(Int_t it=0; it<ntriggers; it++){ //loop over trigger configurations
+
if(fTTtype==0){
if(it != indexSingleRndTrig) continue;
}
fh2Ntriggers->Fill((Float_t) centralityPercentile, (Float_t) triggerHadron->Pt()); //trigger p
+ if(fAnalyzeHijing){ //impact parameter for triggered events
+ fhImpactParameterTT->Fill(fImpParam);
+ }
+
+ phiTrigger = RelativePhi(triggerHadron->Phi(),0.0); //-pi,pi
+
//JET LOOP
for(Int_t ij = 0; ij < fJetArray->GetEntries(); ij++){
AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJetArray->At(ij));
Double_t dfi = dphi; //-0.5*pi to 1.5*Pi
if(dfi<-0.5*TMath::Pi()) dfi += 2*TMath::Pi();
if(dfi> 1.5*TMath::Pi()) dfi -= 2*TMath::Pi();
- fhDphiTriggerJet->Fill((Float_t) jet->Pt(),(Float_t) dfi);
+ fhDphiTriggerJetMinBias->Fill((Float_t) jet->Pt(),(Float_t) dfi);
+ if(centralityPercentile<20.) fhDphiTriggerJetCent20->Fill((Float_t) jet->Pt(),(Float_t) dfi);
//-------------------------
if(TMath::Abs(dphi) < fDphiCut) continue; //Dphi cut between trigger and assoc
fhDphiTriggerJetAccept->Fill(dfi); //Accepted
+ if(pTJet > ptLeadingJetAwaySide){ //search for the leading away side jet
+ idxLeadingJetAwaySide = ij;
+ ptLeadingJetAwaySide = pTJet;
+ }
+
//Centrality, A, pTjet
tmpArray[0] = centralityPercentile;
tmpArray[1] = areaJet;
}
}
+ //_______________________________________
+ // Get delta phi from small R=0.1 cones
+ if(ntriggers>0 && indexSingleRndTrig>-1){
+
+ AliEmcalJet* jet = NULL;
+ Double_t phiExclJet =0., etaExclJet = 9999., rExclJet = 0.0;
+
+ if(idxLeadingJetAwaySide>-1){
+ jet = static_cast<AliEmcalJet*>(fJetArray->At(idxLeadingJetAwaySide));
+ if(!jet){
+ AliError(Form("%s: Could not receive leading jet %d", GetName(), idxLeadingJetAwaySide));
+ }else{
+ phiExclJet = jet->Phi();
+ etaExclJet = jet->Eta();
+ rExclJet = TMath::Sqrt(jet->Area()/TMath::Pi());
+ }
+ }
+
+ Int_t countPlacedRcones = 0;
+ Int_t inwhile=0;
+ Double_t dphiMaxFromPiForRcones = TMath::Pi() - fDphiCut + fRandConeRadius - fRConesR;
+ Double_t detaMaxForRcones = fTrackEtaWindow - fRConesR;
+ Double_t rcphi,rceta;
+ Bool_t goodrc;
+
+ while(countPlacedRcones < fnRCones){ //generate fnRCones cones of radius R=0.1
+ inwhile++;
+ if(inwhile>500){
+ AliError(Form("%s: Small space where to put another random cone %d", GetName(), idxLeadingJetAwaySide));
+ break;
+ }
+ rcphi = RelativePhi(phiTrigger + TMath::Pi() + dphiMaxFromPiForRcones*fRandom->Uniform(-1.0,1.0), 0.0); //-pi,pi
+ rceta = detaMaxForRcones*fRandom->Uniform(-1.0,1.0);
+ if(jet){//do not merge random cones with the leading jet
+ if(!DistantCones(rcphi,rceta,fRConesR, phiExclJet, etaExclJet, rExclJet)) continue;
+ }
+
+ goodrc = kTRUE; //generate disjoint random cones
+ for(int k=0; k<countPlacedRcones; k++){
+ if(!DistantCones(rcphi, rceta, fRConesR, (Double_t) fRConePhi[k], (Double_t) fRConeEta[k], fRConesR)){
+ goodrc = kFALSE;
+ break;
+ }
+ }//end loop over already placed cones
+
+ if(!goodrc) continue;
+ fRConePhi[countPlacedRcones] = rcphi;
+ fRConeEta[countPlacedRcones] = rceta;
+ countPlacedRcones++;
+ }//end of loop generating small R=0.1 random cones
+ //sum track pT in the random cones
+ Double_t sumPtofRandomCones = 0.0;
+
+ for(Int_t itrk = 0; itrk < nTracks; itrk++){
+ AliVTrack* track = static_cast<AliVTrack*>(fTrackArray->At(itrk));
+ if(!track) continue;
+
+ if(IsTrackInAcceptance(track)){
+ for(int k=0; k<countPlacedRcones; k++){
+
+ rcphi = RelativePhi(track->Phi(), fRConePhi[k]); // phi = -pi az pi
+ rceta = track->Eta() - fRConeEta[k];
+ if(rcphi*rcphi + rceta*rceta < fRConesRSquared){
+ sumPtofRandomCones += track->Pt(); //track is in the cone
+ break;
+ }
+ }//loop over cones
+ }
+ }//loop over tracks
+ Double_t totarea = countPlacedRcones*TMath::Pi()*fRConesRSquared;
+ fhDeltaPtMedianExclAwayJet->Fill( sumPtofRandomCones - rhoFromCellMedian*totarea, (Double_t) centralityPercentile );
+ fhDeltaPtCMSExclAwayJet->Fill( sumPtofRandomCones - rhoCMS*totarea , (Double_t) centralityPercentile );
+
+ }//end delta phi from small R=0.1 random cones
+
return;
}
Bool_t AliAnalysisTaskHJetSpectra::UserNotify(){
// Implemented Notify() to read the cross sections
// and number of trials from pyxsec.root
- //
- if(fAnalyzePythia)
- {
+ /*
+ if(fAnalyzePythia){
+
TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
TFile *currFile = tree->GetCurrentFile();
fxsec->Close();
}
+
fh1Xsec->Fill("<#sigma>", fCrossSection);
fh1Trials->Fill("#sum{ntrials}",fTrials);
+
}
-
+ */
return kTRUE;
}
delete fOutputList;
}
delete fRandom;
+ delete fTrackArrayName;
+ delete fJetArrayName;
+ delete fBackgroundJetArrayName;
+ delete fHelperClass;
+
}
//________________________________________________________________________
fhDeltaPtCMSIncl = (TH2D*) fhDeltaPtMedian->Clone("fhDeltaPtCMSIncl");
fOutputList->Add(fhDeltaPtCMSIncl);
-
+
+ fhDeltaPtMedianNearSide= (TH2D*) fhDeltaPtMedian->Clone("fhDeltaPtMedianNearSide");
+ fOutputList->Add(fhDeltaPtMedianNearSide);
+
+ fhDeltaPtMedianAwaySide= (TH2D*) fhDeltaPtMedian->Clone("fhDeltaPtMedianAwaySide");
+ fOutputList->Add(fhDeltaPtMedianAwaySide);
+
+ fhDeltaPtCMSNearSide= (TH2D*) fhDeltaPtMedian->Clone("fhDeltaPtCMSNearSide");
+ fOutputList->Add(fhDeltaPtCMSNearSide);
+
+ fhDeltaPtCMSAwaySide= (TH2D*) fhDeltaPtMedian->Clone("fhDeltaPtCMSAwaySide");
+ fOutputList->Add(fhDeltaPtCMSAwaySide);
+
+ fhDeltaPtMedianExclTrigCone= (TH2D*) fhDeltaPtMedian->Clone("fhDeltaPtMedianExclTrigCone");
+ fOutputList->Add(fhDeltaPtMedianExclTrigCone);
+
+ fhDeltaPtCMSExclTrigCone= (TH2D*) fhDeltaPtMedian->Clone("fhDeltaPtCMSExclTrigCone");
+ fOutputList->Add(fhDeltaPtCMSExclTrigCone);
+
+ fhDeltaPtMedianExclAwayJet = (TH2D*) fhDeltaPtMedian->Clone("fhDeltaPtMedianExclAwayJet");
+ fOutputList->Add(fhDeltaPtMedianExclAwayJet);
+
+ fhDeltaPtCMSExclAwayJet = (TH2D*) fhDeltaPtMedian->Clone("fhDeltaPtCMSExclAwayJet");
+ fOutputList->Add(fhDeltaPtCMSExclAwayJet);
+
//_______________________________________________________________________
//inclusive azimuthal and pseudorapidity histograms
fhJetPhi = new TH2F("fhJetPhi","Azim dist jets vs pTjet", 50, 0, 100, 50,-TMath::Pi(),TMath::Pi());
//fhContribVtxAccept = new TH1F("fhContribVtxAccept","contrib to vtx after cut",200,0,200);
//fOutputList->Add(fhContribVtxAccept);
//-------------------------
- fhDphiTriggerJet = new TH2F("fhDphiTriggerJet","Deltaphi trig-jet",50,0,100, 100, -0.5*TMath::Pi(),1.5*TMath::Pi());
- fOutputList->Add(fhDphiTriggerJet);
+ fhDphiTriggerJetMinBias = new TH2F("fhDphiTriggerJetMinBias","Deltaphi trig-jet",50,0,100, 100, -0.5*TMath::Pi(),1.5*TMath::Pi());
+ fOutputList->Add(fhDphiTriggerJetMinBias);
+
+ fhDphiTriggerJetCent20 = (TH2F*) fhDphiTriggerJetMinBias->Clone("fhDphiTriggerJetCent20");
+ fOutputList->Add(fhDphiTriggerJetCent20);
//-------------------------
+
fhDphiTriggerJetAccept = new TH1F("fhDphiTriggerJetAccept","Deltaphi trig-jet after cut",50, -0.5*TMath::Pi(),1.5*TMath::Pi());
fOutputList->Add(fhDphiTriggerJetAccept);
//-------------------------
fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",300,0,300);
fOutputList->Add(fh1PtHard);
+ fhImpactParameter = new TH1D("fhImpactParameter","impact parameter distribution from HIJING",50,0,10);
+ fOutputList->Add(fhImpactParameter);
+
+ fhImpactParameterTT = new TH1D("fhImpactParameterTT","b versus TT",50,0,10);
+ fOutputList->Add(fhImpactParameterTT);
// =========== Switch on Sumw2 for all histos ===========
for(Int_t i=0; i<fOutputList->GetEntries(); i++){
TH1 *h1 = dynamic_cast<TH1*>(fOutputList->At(i));
return rhoPerpCone;
}
+//________________________________________________________________________
+Bool_t AliAnalysisTaskHJetSpectra::DistantCones(Double_t phi1, Double_t eta1, Double_t r1, Double_t phi2, Double_t eta2, Double_t r2){
+ //checks if the two cones are farther away than the sum of their radii
+
+ Double_t dphi = RelativePhi(phi1,phi2);
+ Double_t deta = eta1-eta2;
+ Double_t d = r1+r2;
+ if( dphi*dphi + deta*deta < d*d ) return kFALSE;
+ return kTRUE;
+}
virtual void Terminate(Option_t *);
// ######### SETTERS/GETTERS
- void SetAnalyzePythia(Bool_t val) {fAnalyzePythia = val;}
+ void SetAnalyzePythia(Bool_t val) { if(val) fAnalyzePythia = kTRUE;}
+ void SetAnalyzeMC(Int_t val);
void SetUseDefaultVertexCut (Bool_t val) {fUseDefaultVertexCut = val;}
void SetUsePileUpCut (Bool_t val) {fUsePileUpCut = val;}
void SetNumberOfCentralityBins(Int_t val) {fNumberOfCentralityBins = val;}
// ######### MAIN CALCULATION FUNCTIONS
void GetDeltaPt(Double_t rho1, Double_t &dpt1,
Double_t rho2, Double_t &dpt2,
- Double_t rho3, Double_t &dpt3, Double_t leadingJetExclusionProbability = 0);
+ Double_t rho3, Double_t &dpt3,
+ Double_t &rcPhi, Double_t &rcEta,
+ Double_t leadingJetExclusionProbability = 0);
+
Double_t GetConePt(Double_t eta, Double_t phi, Double_t radius);
-//FK// Double_t GetPtHard();
+ Double_t GetPtHard();
+ Double_t GetImpactParameter();
+ Double_t GetSimPrimaryVertex();
//FK// Double_t GetPythiaTrials();
void GetPerpendicularCone(Double_t vecPhi, Double_t vecTheta, Double_t& conePt);
Double_t EstimateBgCone();
Double_t GetExternalRho();
+ Bool_t DistantCones(Double_t phi1, Double_t eta1, Double_t r1, Double_t phi2, Double_t eta2, Double_t r2);
+
// ######### STANDARD FUNCTIONS
void Calculate(AliVEvent* event);
void ExecOnce();
TList* fOutputList; //! Output list
// ########## USAGE TRIGGERS
Bool_t fAnalyzePythia; // trigger if pythia properties should be processed
+ Bool_t fAnalyzeHijing; // trigger if pythia properties should be processed
Bool_t fIsKinematics; // trigger if data is kinematics only (for naming reasons)
Bool_t fUseDefaultVertexCut; // trigger if automatic vertex cut from helper class should be done
Bool_t fUsePileUpCut; // trigger if pileup cut should be done
// ########## EVENT PROPERTIES
Double_t fCrossSection; //! value is filled, if pythia header is accessible
Double_t fTrials; //! value is filled, if pythia header is accessible
+ Double_t fImpParam; //! impact parameter from hijing
// ########## GENERAL ////VARS
TRandom3* fRandom; //! A random number
TH2D *fhDeltaPtConeIncl; //! delta pT from RndCone using rho from perp cone inclusive event
TH2D *fhDeltaPtCMSIncl; //! delta pT from RndCone using rho CMS inclusive event
+ TH2D *fhDeltaPtMedianNearSide; //! delta pt fluctuations from near side w.r.t. trigger
+ TH2D *fhDeltaPtMedianAwaySide;//! delta pt from away side
+ TH2D *fhDeltaPtCMSNearSide;//! delta pt fluctuations from near side w.r.t. trigger
+ TH2D *fhDeltaPtCMSAwaySide;//! delta pt from away side
+
+ TH2D *fhDeltaPtMedianExclTrigCone;//! delta pt exclude a cone around trigger
+ TH2D *fhDeltaPtCMSExclTrigCone;//! delta pt exclude a cone around trigger
+
+ TH2D *fhDeltaPtMedianExclAwayJet;//! delta pt exclude a cone around leading jet on away side
+ TH2D *fhDeltaPtCMSExclAwayJet;//! delta pt exclude a cone around leading jet on away side
+
+
TH2F *fhJetPhi; //! jet phi vs jet pT
TH2F *fhTrackPhi; //! track phi vs track pT
TH2F *fhTrackCentVsPt; //! X=centrality; Y= track pT
TH1F *fhVertexZ; //! vertexZ inclusive
TH1F *fhVertexZAccept; //! vertexZ accepted after vtx cut
- TH2F *fhDphiTriggerJet; //! Delta phi versus jet pT
+ TH2F *fhDphiTriggerJetMinBias; //! Delta phi versus jet pT
+ TH2F *fhDphiTriggerJetCent20; //! Delta phi versus jet pT
TH1F *fhDphiTriggerJetAccept; //!Dphi of accepted jets after dphi cut
TH1F *fhCentrality; //! centrality
TProfile* fh1Xsec; //! pythia cross section and trials
TH1F* fh1Trials; //! trials are added
TH1F* fh1PtHard; //! Pt har of the event...
+ TH1D* fhImpactParameter; //! impact parameter distribution hijing
+ TH1D* fhImpactParameterTT; //! impact parameter distribution hijing versus TT
Int_t fNofRandomCones; // the number of random cones per event
+
+ Double_t fRConesR; // small random cone of radius R=0.1
+ Double_t fRConesRSquared; // small random cone of radius R=0.1
+ Int_t fnRCones; // the number of small random cones R=0.1
+ Double_t fRConePhi[50]; //! phi of small R=0.1 random cone
+ Double_t fRConeEta[50]; //! eta of small R=0.1 random cone
+
//Bool_t fIsMC;
AliAnalysisTaskHJetSpectra(const AliAnalysisTaskHJetSpectra&);
AliAnalysisTaskHJetSpectra& operator=(const AliAnalysisTaskHJetSpectra&);
- ClassDef(AliAnalysisTaskHJetSpectra, 1); // Charged jet analysis for pA
+ ClassDef(AliAnalysisTaskHJetSpectra, 3); // Charged jet analysis for pA
};
#endif
**************************************************************************/
/*
- * analysis task for jet flow preparation
+ * Jet V2 task
*
* this task is part of the emcal jet framework and should be run in the emcaljet train
* the following extensions to an accepted AliVEvent are expected:
#include <AliAnalysisManager.h>
#include <AliCentrality.h>
#include <AliVVertex.h>
+#include <AliVTrack.h>
#include <AliESDEvent.h>
#include <AliAODEvent.h>
#include <AliAODTrack.h>
#include <AliEmcalJet.h>
#include <AliRhoParameter.h>
#include <AliLocalRhoParameter.h>
-#include <AliAnalysisTaskRhoVnModulation.h>
+#include <AliAnalysisTaskJetV2.h>
+#include <AliClusterContainer.h>
-class AliAnalysisTaskRhoVnModulation;
+class AliAnalysisTaskJetV2;
using namespace std;
-ClassImp(AliAnalysisTaskRhoVnModulation)
+ClassImp(AliAnalysisTaskJetV2)
-AliAnalysisTaskRhoVnModulation::AliAnalysisTaskRhoVnModulation() : AliAnalysisTaskEmcalJet("AliAnalysisTaskRhoVnModulation", kTRUE),
- fDebug(0), fRunToyMC(kFALSE), fLocalInit(0), fAttachToEvent(kTRUE), fSemiCentralInclusive(kFALSE), fFillHistograms(kTRUE), fFillQAHistograms(kTRUE), fReduceBinsXByFactor(-1.), fReduceBinsYByFactor(-1.), fNoEventWeightsForQC(kTRUE), fCentralityClasses(0), fPtBinsHybrids(0), fPtBinsJets(0), fExpectedRuns(0), fExpectedSemiGoodRuns(0), fUserSuppliedV2(0), fUserSuppliedV3(0), fUserSuppliedR2(0), fUserSuppliedR3(0), fTracksCont(0), fJetsCont(0), fLeadingJet(0), fUseScaledRho(0), fNAcceptedTracks(0), fNAcceptedTracksQCn(0), fFitModulationType(kNoFit), fFitGoodnessTest(kChi2Poisson), fQCRecovery(kTryFit), fUsePtWeight(kTRUE), fUsePtWeightErrorPropagation(kTRUE), fDetectorType(kTPC), fFitModulationOptions("QWLI"), fRunModeType(kGrid), fDataType(kESD), fCollisionType(kPbPb), fRandom(0), fRunNumber(-1), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fFitControl(0), fMinPvalue(0.01), fMaxPvalue(1), fNameJetClones(0), fNamePicoTrackClones(0), fNameRho(0), fNameSmallRho(""), fCachedRho(0), fLocalJetMinEta(-10), fLocalJetMaxEta(-10), fLocalJetMinPhi(-10), fLocalJetMaxPhi(-10), fSoftTrackMinPt(0.15), fSoftTrackMaxPt(5.), fSemiGoodJetMinPhi(0.), fSemiGoodJetMaxPhi(4.), fSemiGoodTrackMinPhi(0.), fSemiGoodTrackMaxPhi(4.), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fHistPvalueCDFROOT(0), fHistPvalueCDFROOTCent(0), fHistChi2ROOTCent(0), fHistPChi2Root(0), fHistPvalueCDF(0), fHistPvalueCDFCent(0), fHistChi2Cent(0), fHistPChi2(0), fHistKolmogorovTest(0), fHistKolmogorovTestCent(0), fHistPKolmogorov(0), fHistRhoStatusCent(0), fHistUndeterminedRunQA(0), fMinDisanceRCtoLJ(0), fRandomConeRadius(-1.), fMaxCones(-1), fAbsVnHarmonics(kTRUE), fExcludeLeadingJetsFromFit(1.), fRebinSwapHistoOnTheFly(kTRUE), fPercentageOfFits(10.), fUseV0EventPlaneFromHeader(kTRUE), fExplicitOutlierCut(-1), fMinLeadingHadronPt(0), fSubtractJetPt(kFALSE), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfV2(0), fProfV2Cumulant(0), fProfV3(0), fProfV3Cumulant(0), fHistPsiControl(0), fHistPsiSpread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiVZERO(0), fHistPsiTPC(0), fHistPsiVZEROAV0M(0), fHistPsiVZEROCV0M(0), fHistPsiVZEROVV0M(0), fHistPsiTPCiV0M(0), fHistPsiVZEROATRK(0), fHistPsiVZEROCTRK(0), fHistPsiVZEROTRK(0), fHistPsiTPCTRK(0), fHistRhoVsMult(0), fHistRhoVsCent(0), fHistRhoAVsMult(0), fHistRhoAVsCent(0) {
+AliAnalysisTaskJetV2::AliAnalysisTaskJetV2() : AliAnalysisTaskEmcalJet("AliAnalysisTaskJetV2", kTRUE),
+ fDebug(0), fRunToyMC(kFALSE), fLocalInit(0), fAttachToEvent(kTRUE), fFillHistograms(kTRUE), fFillQAHistograms(kTRUE), fReduceBinsXByFactor(-1.), fReduceBinsYByFactor(-1.), fNoEventWeightsForQC(kTRUE), fCentralityClasses(0), fExpectedRuns(0), fExpectedSemiGoodRuns(0), fUserSuppliedV2(0), fUserSuppliedV3(0), fUserSuppliedR2(0), fUserSuppliedR3(0), fTracksCont(0), fClusterCont(0), fJetsCont(0), fLeadingJet(0), fNAcceptedTracks(0), fNAcceptedTracksQCn(0), fFitModulationType(kNoFit), fFitGoodnessTest(kChi2Poisson), fQCRecovery(kTryFit), fUsePtWeight(kTRUE), fUsePtWeightErrorPropagation(kTRUE), fDetectorType(kTPC), fAnalysisType( kCharged), fFitModulationOptions("QWLI"), fRunModeType(kGrid), fDataType(kESD), fCollisionType(kPbPb), fRandom(0), fRunNumber(-1), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fFitControl(0), fMinPvalue(0.01), fMaxPvalue(1), fNameSmallRho(""), fCachedRho(0), fSoftTrackMinPt(0.15), fSoftTrackMaxPt(5.), fSemiGoodJetMinPhi(0.), fSemiGoodJetMaxPhi(4.), fSemiGoodTrackMinPhi(0.), fSemiGoodTrackMaxPhi(4.), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fHistPvalueCDFROOT(0), fHistPvalueCDFROOTCent(0), fHistChi2ROOTCent(0), fHistPChi2Root(0), fHistPvalueCDF(0), fHistPvalueCDFCent(0), fHistChi2Cent(0), fHistPChi2(0), fHistKolmogorovTest(0), fHistKolmogorovTestCent(0), fHistPKolmogorov(0), fHistRhoStatusCent(0), fHistUndeterminedRunQA(0), fMinDisanceRCtoLJ(0), fMaxCones(-1), fExcludeLeadingJetsFromFit(1.), fRebinSwapHistoOnTheFly(kTRUE), fPercentageOfFits(10.), fUseV0EventPlaneFromHeader(kTRUE), fExplicitOutlierCut(-1), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfV2(0), fProfV2Cumulant(0), fProfV3(0), fProfV3Cumulant(0), fHistPsiControl(0), fHistPsiSpread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiVZERO(0), fHistPsiTPC(0), fHistPsiVZEROAV0M(0), fHistPsiVZEROCV0M(0), fHistPsiVZEROVV0M(0), fHistPsiTPCiV0M(0), fHistPsiVZEROATRK(0), fHistPsiVZEROCTRK(0), fHistPsiVZEROTRK(0), fHistPsiTPCTRK(0), fHistRhoVsMult(0), fHistRhoVsCent(0), fHistRhoAVsMult(0), fHistRhoAVsCent(0) {
for(Int_t i(0); i < 10; i++) {
fProfV2Resolution[i] = 0;
fProfV3Resolution[i] = 0;
fHistPicoCat1[i] = 0;
fHistPicoCat2[i] = 0;
fHistPicoCat3[i] = 0;
- /* fHistClusterPt[i] = 0; */
- /* fHistClusterPhi[i] = 0; */
- /* fHistClusterEta[i] = 0; */
- /* fHistClusterCorrPt[i] = 0; */
- /* fHistClusterCorrPhi[i] = 0; */
- /* fHistClusterCorrEta[i] = 0; */
+ fHistClusterPt[i] = 0;
+ fHistClusterEtaPhi[i] = 0;
+ fHistClusterEtaPhiWeighted[i] = 0;
fHistRhoPackage[i] = 0;
fHistRho[i] = 0;
fHistRCPhiEta[i] = 0;
fHistRhoVsRCPt[i] = 0;
fHistRCPt[i] = 0;
fHistDeltaPtDeltaPhi2[i] = 0;
- fHistDeltaPtDeltaPhi3[i] = 0;
+ fHistDeltaPtDeltaPhi2Rho0[i] = 0;
fHistRCPhiEtaExLJ[i] = 0;
fHistRhoVsRCPtExLJ[i] = 0;
fHistRCPtExLJ[i] = 0;
fHistDeltaPtDeltaPhi2ExLJ[i] = 0;
- fHistDeltaPtDeltaPhi3ExLJ[i] = 0;
- /* fHistRCPhiEtaRand[i] = 0; */
- /* fHistRhoVsRCPtRand[i] = 0; */
- /* fHistRCPtRand[i] = 0; */
- /* fHistDeltaPtDeltaPhi2Rand[i] = 0; */
- /* fHistDeltaPtDeltaPhi3Rand[i] = 0; */
+ fHistDeltaPtDeltaPhi2ExLJRho0[i] = 0;
fHistJetPtRaw[i] = 0;
fHistJetPt[i] = 0;
fHistJetEtaPhi[i] = 0;
fHistJetPtConstituents[i] = 0;
fHistJetEtaRho[i] = 0;
fHistJetPsi2Pt[i] = 0;
- fHistJetPsi3Pt[i] = 0;
+ fHistJetPsi2PtRho0[i] = 0;
}
// default constructor
}
//_____________________________________________________________________________
-AliAnalysisTaskRhoVnModulation::AliAnalysisTaskRhoVnModulation(const char* name, runModeType type) : AliAnalysisTaskEmcalJet(name, kTRUE),
- fDebug(0), fRunToyMC(kFALSE), fLocalInit(0), fAttachToEvent(kTRUE), fSemiCentralInclusive(kFALSE), fFillHistograms(kTRUE), fFillQAHistograms(kTRUE), fReduceBinsXByFactor(-1.), fReduceBinsYByFactor(-1.), fNoEventWeightsForQC(kTRUE), fCentralityClasses(0), fPtBinsHybrids(0), fPtBinsJets(0), fExpectedRuns(0), fExpectedSemiGoodRuns(0), fUserSuppliedV2(0), fUserSuppliedV3(0), fUserSuppliedR2(0), fUserSuppliedR3(0), fTracksCont(0), fJetsCont(0), fLeadingJet(0), fUseScaledRho(0), fNAcceptedTracks(0), fNAcceptedTracksQCn(0), fFitModulationType(kNoFit), fFitGoodnessTest(kChi2Poisson), fQCRecovery(kTryFit), fUsePtWeight(kTRUE), fUsePtWeightErrorPropagation(kTRUE), fDetectorType(kTPC), fFitModulationOptions("QWLI"), fRunModeType(type), fDataType(kESD), fCollisionType(kPbPb), fRandom(0), fRunNumber(-1), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fFitControl(0), fMinPvalue(0.01), fMaxPvalue(1), fNameJetClones(0), fNamePicoTrackClones(0), fNameRho(0), fNameSmallRho(""), fCachedRho(0), fLocalJetMinEta(-10), fLocalJetMaxEta(-10), fLocalJetMinPhi(-10), fLocalJetMaxPhi(-10), fSoftTrackMinPt(0.15), fSoftTrackMaxPt(5.), fSemiGoodJetMinPhi(0.), fSemiGoodJetMaxPhi(4.), fSemiGoodTrackMinPhi(0.), fSemiGoodTrackMaxPhi(4.), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fHistPvalueCDFROOT(0), fHistPvalueCDFROOTCent(0), fHistChi2ROOTCent(0), fHistPChi2Root(0), fHistPvalueCDF(0), fHistPvalueCDFCent(0), fHistChi2Cent(0), fHistPChi2(0), fHistKolmogorovTest(0), fHistKolmogorovTestCent(0), fHistPKolmogorov(0), fHistRhoStatusCent(0), fHistUndeterminedRunQA(0), fMinDisanceRCtoLJ(0), fRandomConeRadius(-1.), fMaxCones(-1), fAbsVnHarmonics(kTRUE), fExcludeLeadingJetsFromFit(1.), fRebinSwapHistoOnTheFly(kTRUE), fPercentageOfFits(10.), fUseV0EventPlaneFromHeader(kTRUE), fExplicitOutlierCut(-1), fMinLeadingHadronPt(0), fSubtractJetPt(kFALSE), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfV2(0), fProfV2Cumulant(0), fProfV3(0), fProfV3Cumulant(0), fHistPsiControl(0), fHistPsiSpread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiVZERO(0), fHistPsiTPC(0), fHistPsiVZEROAV0M(0), fHistPsiVZEROCV0M(0), fHistPsiVZEROVV0M(0), fHistPsiTPCiV0M(0), fHistPsiVZEROATRK(0), fHistPsiVZEROCTRK(0), fHistPsiVZEROTRK(0), fHistPsiTPCTRK(0), fHistRhoVsMult(0), fHistRhoVsCent(0), fHistRhoAVsMult(0), fHistRhoAVsCent(0) {
+AliAnalysisTaskJetV2::AliAnalysisTaskJetV2(const char* name, runModeType type) : AliAnalysisTaskEmcalJet(name, kTRUE),
+ fDebug(0), fRunToyMC(kFALSE), fLocalInit(0), fAttachToEvent(kTRUE), fFillHistograms(kTRUE), fFillQAHistograms(kTRUE), fReduceBinsXByFactor(-1.), fReduceBinsYByFactor(-1.), fNoEventWeightsForQC(kTRUE), fCentralityClasses(0), fExpectedRuns(0), fExpectedSemiGoodRuns(0), fUserSuppliedV2(0), fUserSuppliedV3(0), fUserSuppliedR2(0), fUserSuppliedR3(0), fTracksCont(0), fClusterCont(0), fJetsCont(0), fLeadingJet(0), fNAcceptedTracks(0), fNAcceptedTracksQCn(0), fFitModulationType(kNoFit), fFitGoodnessTest(kChi2Poisson), fQCRecovery(kTryFit), fUsePtWeight(kTRUE), fUsePtWeightErrorPropagation(kTRUE), fDetectorType(kTPC), fAnalysisType(kCharged), fFitModulationOptions("QWLI"), fRunModeType(type), fDataType(kESD), fCollisionType(kPbPb), fRandom(0), fRunNumber(-1), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fFitControl(0), fMinPvalue(0.01), fMaxPvalue(1), fNameSmallRho(""), fCachedRho(0), fSoftTrackMinPt(0.15), fSoftTrackMaxPt(5.), fSemiGoodJetMinPhi(0.), fSemiGoodJetMaxPhi(4.), fSemiGoodTrackMinPhi(0.), fSemiGoodTrackMaxPhi(4.), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fHistPvalueCDFROOT(0), fHistPvalueCDFROOTCent(0), fHistChi2ROOTCent(0), fHistPChi2Root(0), fHistPvalueCDF(0), fHistPvalueCDFCent(0), fHistChi2Cent(0), fHistPChi2(0), fHistKolmogorovTest(0), fHistKolmogorovTestCent(0), fHistPKolmogorov(0), fHistRhoStatusCent(0), fHistUndeterminedRunQA(0), fMinDisanceRCtoLJ(0), fMaxCones(-1), fExcludeLeadingJetsFromFit(1.), fRebinSwapHistoOnTheFly(kTRUE), fPercentageOfFits(10.), fUseV0EventPlaneFromHeader(kTRUE), fExplicitOutlierCut(-1), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfV2(0), fProfV2Cumulant(0), fProfV3(0), fProfV3Cumulant(0), fHistPsiControl(0), fHistPsiSpread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiVZERO(0), fHistPsiTPC(0), fHistPsiVZEROAV0M(0), fHistPsiVZEROCV0M(0), fHistPsiVZEROVV0M(0), fHistPsiTPCiV0M(0), fHistPsiVZEROATRK(0), fHistPsiVZEROCTRK(0), fHistPsiVZEROTRK(0), fHistPsiTPCTRK(0), fHistRhoVsMult(0), fHistRhoVsCent(0), fHistRhoAVsMult(0), fHistRhoAVsCent(0) {
for(Int_t i(0); i < 10; i++) {
fProfV2Resolution[i] = 0;
fProfV3Resolution[i] = 0;
fHistPicoCat1[i] = 0;
fHistPicoCat2[i] = 0;
fHistPicoCat3[i] = 0;
- /* fHistClusterPt[i] = 0; */
- /* fHistClusterPhi[i] = 0; */
- /* fHistClusterEta[i] = 0; */
- /* fHistClusterCorrPt[i] = 0; */
- /* fHistClusterCorrPhi[i] = 0; */
- /* fHistClusterCorrEta[i] = 0; */
+ fHistClusterPt[i] = 0;
+ fHistClusterEtaPhi[i] = 0;
+ fHistClusterEtaPhiWeighted[i] = 0;
fHistRhoPackage[i] = 0;
fHistRho[i] = 0;
fHistRCPhiEta[i] = 0;
fHistRhoVsRCPt[i] = 0;
fHistRCPt[i] = 0;
fHistDeltaPtDeltaPhi2[i] = 0;
- fHistDeltaPtDeltaPhi3[i] = 0;
+ fHistDeltaPtDeltaPhi2Rho0[i] = 0;
fHistRCPhiEtaExLJ[i] = 0;
fHistRhoVsRCPtExLJ[i] = 0;
fHistRCPtExLJ[i] = 0;
fHistDeltaPtDeltaPhi2ExLJ[i] = 0;
- fHistDeltaPtDeltaPhi3ExLJ[i] = 0;
- /* fHistRCPhiEtaRand[i] = 0; */
- /* fHistRhoVsRCPtRand[i] = 0; */
- /* fHistRCPtRand[i] = 0; */
- /* fHistDeltaPtDeltaPhi2Rand[i] = 0; */
- /* fHistDeltaPtDeltaPhi3Rand[i] = 0; */
+ fHistDeltaPtDeltaPhi2ExLJRho0[i] = 0;
fHistJetPtRaw[i] = 0;
fHistJetPt[i] = 0;
fHistJetEtaPhi[i] = 0;
fHistJetPtConstituents[i] = 0;
fHistJetEtaRho[i] = 0;
fHistJetPsi2Pt[i] = 0;
- fHistJetPsi3Pt[i] = 0;
+ fHistJetPsi2PtRho0[i] = 0;
}
// constructor
DefineInput(0, TChain::Class());
if(fLocalRhoName=="") fLocalRhoName = Form("LocalRhoFrom_%s", GetName());
}
//_____________________________________________________________________________
-AliAnalysisTaskRhoVnModulation::~AliAnalysisTaskRhoVnModulation()
+AliAnalysisTaskJetV2::~AliAnalysisTaskJetV2()
{
// destructor
if(fOutputList) delete fOutputList;
if(fFitControl) delete fFitControl;
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::ExecOnce()
+void AliAnalysisTaskJetV2::ExecOnce()
{
// Init the analysis
fLocalRho = new AliLocalRhoParameter(fLocalRhoName.Data(), 0);
}
AliAnalysisTaskEmcalJet::ExecOnce(); // init the base class
AliAnalysisTaskEmcalJet::SetVzRange(-1.*fAbsVertexZ, fAbsVertexZ);
- if(fUseScaledRho) {
- // unscaled rho has been retrieved by the parent class, now we retrieve rho scaled
- fRho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(Form("%s_Scaled", fRho->GetName())));
- if(!fRho) {
- AliFatal(Form("%s: Couldn't find container for scaled rho. Aborting !", GetName()));
- }
- }
if(!GetJetContainer()) AliFatal(Form("%s: Couldn't find jet container. Aborting !", GetName()));
}
//_____________________________________________________________________________
-Bool_t AliAnalysisTaskRhoVnModulation::InitializeAnalysis()
+Bool_t AliAnalysisTaskJetV2::InitializeAnalysis()
{
// initialize the anaysis
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
- if(fRandomConeRadius <= 0) fRandomConeRadius = GetJetContainer()->GetJetRadius();
- if(fMaxCones <= 0) fMaxCones = TMath::Nint(1.8*TMath::TwoPi()/(TMath::Pi()*fRandomConeRadius*fRandomConeRadius));
- if(fLocalJetMinEta > -10 && fLocalJetMaxEta > -10) GetJetContainer()->SetJetEtaLimits(fLocalJetMinEta, fLocalJetMaxEta);
- if(fLocalJetMinPhi > -10 && fLocalJetMaxPhi > -10) GetJetContainer()->SetJetPhiLimits(fLocalJetMinPhi, fLocalJetMaxPhi);
- if(fMinDisanceRCtoLJ==0) fMinDisanceRCtoLJ = .5*GetJetRadius();
+ // if not set, estimate the number of cones that would fit into the selected acceptance
+ if(fMaxCones <= 0) fMaxCones = TMath::CeilNint((TMath::Abs(GetJetContainer()->GetJetEtaMax()-GetJetContainer()->GetJetEtaMin())*TMath::Abs(GetJetContainer()->GetJetPhiMax()-GetJetContainer()->GetJetPhiMin()))/(TMath::Pi()*GetJetRadius()*GetJetRadius()));
+ // manually 'override' the default acceptance cuts of the emcal framework (use with caution)
+ if(fMinDisanceRCtoLJ==0) fMinDisanceRCtoLJ = GetJetRadius();
if(dynamic_cast<AliAODEvent*>(InputEvent())) fDataType = kAOD; // determine the datatype
else if(dynamic_cast<AliESDEvent*>(InputEvent())) fDataType = kESD;
fHistAnalysisSummary->SetBinContent(36, (int)fDataType);
- if(!fRandom) fRandom = new TRandom3(0); // get a randomized if one hasn't been user-supplied
+ if(!fRandom) fRandom = new TRandom3(0); // set randomizer and random seed
switch (fFitModulationType) {
case kNoFit : { SetModulationFit(new TF1("fix_kNoFit", "[0]", 0, TMath::TwoPi())); } break;
case kV2 : {
return kTRUE;
}
//_____________________________________________________________________________
-TH1F* AliAnalysisTaskRhoVnModulation::BookTH1F(const char* name, const char* x, Int_t bins, Double_t min, Double_t max, Int_t c, Bool_t append)
+TH1F* AliAnalysisTaskJetV2::BookTH1F(const char* name, const char* x, Int_t bins, Double_t min, Double_t max, Int_t c, Bool_t append)
{
// book a TH1F and connect it to the output container
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
return histogram;
}
//_____________________________________________________________________________
-TH2F* AliAnalysisTaskRhoVnModulation::BookTH2F(const char* name, const char* x, const char*y, Int_t binsx, Double_t minx, Double_t maxx, Int_t binsy, Double_t miny, Double_t maxy, Int_t c, Bool_t append)
+TH2F* AliAnalysisTaskJetV2::BookTH2F(const char* name, const char* x, const char*y, Int_t binsx, Double_t minx, Double_t maxx, Int_t binsy, Double_t miny, Double_t maxy, Int_t c, Bool_t append)
{
// book a TH2F and connect it to the output container
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
return histogram;
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::UserCreateOutputObjects()
+void AliAnalysisTaskJetV2::UserCreateOutputObjects()
{
- // create output objects
+ // create output objects. also initializes some default values in case they aren't
+ // loaded via the AddTask macro
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fOutputList = new TList();
fOutputList->SetOwner(kTRUE);
fHistCentrality = BookTH1F("fHistCentrality", "centrality", 102, -2, 100);
fHistVertexz = BookTH1F("fHistVertexz", "vertex z (cm)", 100, -12, 12);
- // pico track kinematics
+ // pico track and emcal cluster kinematics
for(Int_t i(0); i < fCentralityClasses->GetSize()-1; i++) {
- fHistPicoTrackPt[i] = BookTH1F("fHistPicoTrackPt", "p_{t} [GeV/c]", 100, 0, 100, i);
- fHistPicoTrackMult[i] = BookTH1F("fHistPicoTrackMult", "multiplicity", 100, 0, 5000, i);
+ fHistPicoTrackPt[i] = BookTH1F("fHistPicoTrackPt", "p_{t} [GeV/c]", 100, 0, 100, i);
+ fHistPicoTrackMult[i] = BookTH1F("fHistPicoTrackMult", "multiplicity", 100, 0, 5000, i);
if(fFillQAHistograms) {
- fHistPicoCat1[i] = BookTH2F("fHistPicoCat1", "#eta", "#phi", 50, -1, 1, 50, 0, TMath::TwoPi(), i);
- fHistPicoCat2[i] = BookTH2F("fHistPicoCat2", "#eta", "#phi", 50, -1, 1, 50, 0, TMath::TwoPi(), i);
- fHistPicoCat3[i] = BookTH2F("fHistPicoCat3", "#eta", "#phi", 50, -1, 1, 50, 0, TMath::TwoPi(), i);
+ fHistPicoCat1[i] = BookTH2F("fHistPicoCat1", "#eta", "#phi", 50, -1, 1, 50, 0, TMath::TwoPi(), i);
+ fHistPicoCat2[i] = BookTH2F("fHistPicoCat2", "#eta", "#phi", 50, -1, 1, 50, 0, TMath::TwoPi(), i);
+ fHistPicoCat3[i] = BookTH2F("fHistPicoCat3", "#eta", "#phi", 50, -1, 1, 50, 0, TMath::TwoPi(), i);
+ if(fAnalysisType == AliAnalysisTaskJetV2::kFull) {
+ fHistClusterPt[i] = BookTH1F("fHistClusterPt", "p_{t} [GeV/c]", 100, 0, 100, i);
+ fHistClusterEtaPhi[i] = BookTH2F("fHistClusterEtaPhi", "#eta", "#phi", 100, -1., 1., 100, 0, TMath::TwoPi(), i);
+ fHistClusterEtaPhiWeighted[i] = BookTH2F("fHistClusterEtaPhiWeighted", "#eta", "#phi", 100, -1., 1., 100, 0, TMath::TwoPi(), i);
+ }
}
- // emcal kinematics
- /* fHistClusterPt[i] = BookTH1F("fHistClusterPt", "p_{t} [GeV/c]", 100, 0, 100, i); */
- /* fHistClusterPhi[i] = BookTH1F("fHistClusterPhi", "#phi", 100, 0, TMath::TwoPi(), i); */
- /* fHistClusterEta[i] = BookTH1F("fHistClusterEta", "#eta", 100, -5, 5); */
-
- // emcal kinematics after hadronic correction
- /* fHistClusterCorrPt[i] = BookTH1F("fHistClusterCorrPt", "p_{t} [GeV/c]", 100, 0, 100, i); */
- /* fHistClusterCorrPhi[i] = BookTH1F("fHistClusterCorrPhi", "#phi", 100, 0, TMath::TwoPi(), i); */
- /* fHistClusterCorrEta[i] = BookTH1F("fHistClusterCorrEta", "#eta", 100, -5, 5, i); */
}
if(fFillQAHistograms) {
fHistRCPt[i] = BookTH1F("fHistRCPt", "p_{t} (RC) [GeV/c]", 130, -20, 150, i);
if(fFillQAHistograms) fHistRCPhiEtaExLJ[i] = BookTH2F("fHistRCPhiEtaExLJ", "#phi (RC)", "#eta (RC)", 40, 0, TMath::TwoPi(), 40, -1, 1, i);
fHistDeltaPtDeltaPhi2[i] = BookTH2F("fHistDeltaPtDeltaPhi2", Form("#phi - #Psi_{2, %s}", detector.Data()), "#delta p_{t} [GeV/c]", 40, 0, TMath::Pi(), 400, -70, 130, i);
- fHistDeltaPtDeltaPhi3[i] = BookTH2F("fHistDeltaPtDeltaPhi3", Form("#phi - #Psi_{3, %s}", detector.Data()), "#delta p_{t} [GeV/c]", 40, 0, TMath::TwoPi()/3., 400, -70, 130, i);
+ fHistDeltaPtDeltaPhi2Rho0[i] = BookTH2F("fHistDeltaPtDeltaPhi2Rho0", Form("#phi - #Psi_{2, %s}", detector.Data()), "#delta p_{t} [GeV/c]", 40, 0, TMath::Pi(), 400, -70, 130, i);
fHistRhoVsRCPtExLJ[i] = BookTH2F("fHistRhoVsRCPtExLJ", "p_{t} (RC) [GeV/c]", "#rho * A (RC) [GeV/c]", 100, 0, 300, 100, 0, 350, i);
fHistRCPtExLJ[i] = BookTH1F("fHistRCPtExLJ", "p_{t} (RC) [GeV/c]", 130, -20, 150, i);
- /* fHistRCPhiEtaRand[i] = BookTH2F("fHistRCPhiEtaRand", "#phi (RC)", "#eta (RC)", 100, 0, TMath::TwoPi(), 100, -1, 1, i); */
fHistDeltaPtDeltaPhi2ExLJ[i] = BookTH2F("fHistDeltaPtDeltaPhi2ExLJ", Form("#phi - #Psi_{2, %s}", detector.Data()), "#delta p_{t} [GeV/c]", 40, 0, TMath::Pi(), 400, -70, 130, i);
- fHistDeltaPtDeltaPhi3ExLJ[i] = BookTH2F("fHistDeltaPtDeltaPhi3ExLJ", Form("#phi - #Psi_{3, %s}", detector.Data()), "#delta p_{t} [GeV/c]", 40, 0, TMath::TwoPi()/3., 400, -70, 130, i);
- /* fHistRhoVsRCPtRand[i] = BookTH2F("fHistRhoVsRCPtRand", "p_{t} (RC) [GeV/c]", "#rho * A (RC) [GeV/c]", 100, 0, 300, 100, 0, 350, i); */
- /* fHistRCPtRand[i] = BookTH1F("fHistRCPtRand", "p_{t} (RC) [GeV/c]", 130, -20, 150, i); */
- /* fHistDeltaPtDeltaPhi2Rand[i] = BookTH2F("fHistDeltaPtDeltaPhi2Rand", "#phi - #Psi_{TPC}", "#delta p_{t} [GeV/c]", 50, 0, TMath::Pi(), 100, -50, 100, i); */
- /* fHistDeltaPtDeltaPhi3Rand[i] = BookTH2F("fHistDeltaPtDeltaPhi3Rand", "#phi - #Psi_{TPC}", "#delta p_{t} [GeV/c]", 50, 0, TMath::TwoPi()/3., 100, -50, 100, i); */
+ fHistDeltaPtDeltaPhi2ExLJRho0[i] = BookTH2F("fHistDeltaPtDeltaPhi2ExLJRho0", Form("#phi - #Psi_{2, %s}", detector.Data()), "#delta p_{t} [GeV/c]", 40, 0, TMath::Pi(), 400, -70, 130, i);
// jet histograms (after kinematic cuts)
fHistJetPtRaw[i] = BookTH1F("fHistJetPtRaw", "p_{t, jet} RAW [GeV/c]", 200, -50, 150, i);
fHistJetPt[i] = BookTH1F("fHistJetPt", "p_{t, jet} [GeV/c]", 350, -100, 250, i);
if(fFillQAHistograms) fHistJetEtaPhi[i] = BookTH2F("fHistJetEtaPhi", "#eta", "#phi", 100, -1, 1, 100, 0, TMath::TwoPi(), i);
fHistJetPtArea[i] = BookTH2F("fHistJetPtArea", "p_{t, jet} [GeV/c]", "Area", 175, -100, 250, 30, 0, 0.9, i);
- fHistJetPtEta[i] = BookTH2F("fHistJetPtEta", "p_{t, jet} [GeV/c]", "Eta", 175, -100, 250, 30, -0.9, 0.9, i);
+ fHistJetPtEta[i] = BookTH2F("fHistJetPtEta", "p_{t, jet} [GeV/c]", "Eta", 175, -100, 250, 30, -0.9, 0.9, i);
fHistJetPtConstituents[i] = BookTH2F("fHistJetPtConstituents", "p_{t, jet} [GeV/c]", "Area", 350, -100, 250, 60, 0, 150, i);
fHistJetEtaRho[i] = BookTH2F("fHistJetEtaRho", "#eta", "#rho", 100, -1, 1, 100, 0, 300, i);
// in plane and out of plane spectra
- fHistJetPsi2Pt[i] = BookTH2F("fHistJetPsi2Pt", Form("#phi_{jet} - #Psi_{2, %s}", detector.Data()), "p_{t, jet} [GeV/c]", 40, 0., TMath::Pi(), 350, -100, 250, i);
- fHistJetPsi3Pt[i] = BookTH2F("fHistJetPsi3Pt", Form("#phi_{jet} - #Psi_{3, %s}", detector.Data()), "p_{t, jet} [GeV/c]", 40, 0., TMath::TwoPi()/3., 350, -100, 250, i);
+ fHistJetPsi2Pt[i] = BookTH2F("fHistJetPsi2Pt", Form("#phi_{jet} - #Psi_{2, %s}", detector.Data()), "p_{t, jet} [GeV/c]", 40, 0., TMath::Pi(), 350, -100, 250, i);
+ fHistJetPsi2PtRho0[i] = BookTH2F("fHistJetPsi2PtRho0", Form("#phi_{jet} - #Psi_{2, %s}", detector.Data()), "p_{t, jet} [GeV/c]", 40, 0., TMath::Pi(), 350, -100, 250, i);
// profiles for all correlator permutations which are necessary to calculate each second and third order event plane resolution
fProfV2Resolution[i] = new TProfile(Form("fProfV2Resolution_%i", i), Form("fProfV2Resolution_%i", i), 11, -0.5, 10.5);
fProfV2Resolution[i]->GetXaxis()->SetBinLabel(3, "<cos(2(#Psi_{VZEROA} - #Psi_{VZEROC}))>");
// get the containers
fTracksCont = GetParticleContainer("Tracks");
+ fClusterCont = GetClusterContainer(0); // get the default cluster container
fJetsCont = GetJetContainer("Jets");
}
//_____________________________________________________________________________
-Bool_t AliAnalysisTaskRhoVnModulation::Run()
+Bool_t AliAnalysisTaskJetV2::Run()
{
// user exec: execute once for each event
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fLocalRho->SetLocalRho(fFitModulation);
// fill a number of histograms. event qa needs to be filled first as it also determines the runnumber for the track qa
if(fFillQAHistograms) FillQAHistograms(InputEvent());
- if(fFillHistograms) FillHistogramsAfterSubtraction(psi2, psi3, vzero, vzeroComb, tpc);
+ if(fFillHistograms) FillHistogramsAfterSubtraction(psi2, vzero, vzeroComb, tpc);
// send the output to the connected output container
PostData(1, fOutputList);
switch (fRunModeType) {
return kTRUE;
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::CalculateEventPlaneVZERO(Double_t vzero[2][2]) const
+void AliAnalysisTaskJetV2::CalculateEventPlaneVZERO(Double_t vzero[2][2]) const
{
// get the vzero event plane
if(fUseV0EventPlaneFromHeader) { // use the vzero from the header
Double_t qxa3(0), qya3(0), qxc3(0), qyc3(0); // for psi3
for(Int_t iVZERO(0); iVZERO < 64; iVZERO++) {
Double_t phi(TMath::PiOver4()*(.5+iVZERO%8)), /* eta(0), */ weight(InputEvent()->GetVZEROEqMultiplicity(iVZERO));
-// (iVZERO<32) ? eta = -3.45+.5*(iVZERO/8) : eta = 4.8-.6*((iVZERO/8)-4);
if(iVZERO<32) {
qxa2 += weight*TMath::Cos(2.*phi);
qya2 += weight*TMath::Sin(2.*phi);
vzero[1][1] = (1./3.)*TMath::ATan2(qyc3, qxc3);
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::CalculateEventPlaneTPC(Double_t* tpc)
+void AliAnalysisTaskJetV2::CalculateEventPlaneTPC(Double_t* tpc)
{
// grab the TPC event plane
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fNAcceptedTracks = 0; // reset the track counter
Double_t qx2(0), qy2(0); // for psi2
Double_t qx3(0), qy3(0); // for psi3
- if(fTracks) {
+ if(fTracksCont) {
Float_t excludeInEta = -999;
if(fExcludeLeadingJetsFromFit > 0 ) { // remove the leading jet from ep estimate
if(fLeadingJet) excludeInEta = fLeadingJet->Eta();
}
- Int_t iTracks(fTracks->GetEntriesFast());
- for(Int_t iTPC(0); iTPC < iTracks; iTPC++) {
- AliVTrack* track = static_cast<AliVTrack*>(fTracks->At(iTPC));
+ for(Int_t iTPC(0); iTPC < fTracksCont->GetNEntries(); iTPC++) {
+ AliVParticle* track = fTracksCont->GetParticle(iTPC);
if(!PassesCuts(track) || track->Pt() < fSoftTrackMinPt || track->Pt() > fSoftTrackMaxPt) continue;
if(fExcludeLeadingJetsFromFit > 0 &&( (TMath::Abs(track->Eta() - excludeInEta) < GetJetContainer()->GetJetRadius()*fExcludeLeadingJetsFromFit ) || (TMath::Abs(track->Eta()) - GetJetContainer()->GetJetRadius() - GetJetContainer()->GetJetEtaMax() ) > 0 )) continue;
fNAcceptedTracks++;
tpc[1] = (1./3.)*TMath::ATan2(qy3, qx3);
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::CalculateEventPlaneCombinedVZERO(Double_t* comb) const
+void AliAnalysisTaskJetV2::CalculateEventPlaneCombinedVZERO(Double_t* comb) const
{
// grab the combined vzero event plane
-// if(fUseV0EventPlaneFromHeader) { // use the vzero from the header
- Double_t a(0), b(0), c(0), d(0);
- comb[0] = InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 10, 2, a, b);
- comb[1] = InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 10, 3, c, d);
-// } else {
-// Double_t qx2a(0), qy2a(0), qx2c(0), qy2c(0), qx3a(0), qy3a(0), qx3c(0), qy3c(0);
-// InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 8, 2, qx2a, qy2a);
-// InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 9, 2, qx2c, qy2c);
-// InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 8, 3, qx3a, qy3a);
-// InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 9, 3, qx3c, qy3c);
-// FIXME the rest of this function isn't impelmented yet (as of 01-07-2013)
-// Double_t chi2A(-1), chi2C(-1), chi3A(-1), chi3C(-1); // get chi from the resolution
-// Double_t qx2(chi2A*chi2A*qx2a+chi2C*chi2C*qx2c);
-// Double_t qy2(chi2A*chi2A*qy2a+chi2C*chi2C*qy2c);
-// Double_t qx3(chi3A*chi3A*qx3a+chi3C*chi3C*qx3c);
-// Double_t qy3(chi3A*chi3A*qy3a+chi3C*chi3C*qy3c);
-// comb[0] = .5*TMath::ATan2(qy2, qx2);
-// comb[1] = (1./3.)*TMath::ATan2(qy3, qx3);
-// }
+ Double_t a(0), b(0), c(0), d(0);
+ comb[0] = InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 10, 2, a, b);
+ comb[1] = InputEvent()->GetEventplane()->CalculateVZEROEventPlane(InputEvent(), 10, 3, c, d);
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::CalculateEventPlaneResolution(Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc)
+void AliAnalysisTaskJetV2::CalculateEventPlaneResolution(Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc)
{
// fill the profiles for the resolution parameters
if(fDebug > 1) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fProfV3Resolution[fInCentralitySelection]->Fill(10., TMath::Cos(3.*(tpca3 - tpcb3)));
}
//_____________________________________________________________________________
-Double_t AliAnalysisTaskRhoVnModulation::CalculateEventPlaneChi(Double_t resEP) const
-{
- // Get Chi from EP resolution (PRC 58 1671)
- Double_t chi(2.), delta (1.);
- for (Int_t i(0); i < 15; i++) {
- chi = ((TMath::Sqrt(TMath::Pi()/2.)/2.)*chi*exp(-chi*chi/4.)*(TMath::BesselI0(chi*chi/4.)+TMath::BesselI1(chi* chi/4.)) < resEP) ? chi+delta : chi-delta;
- delta/=2.;
- }
- return chi;
-}
-//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::CalculateRandomCone(Float_t &pt, Float_t &eta, Float_t &phi,
- AliEmcalJet* jet) const
+void AliAnalysisTaskJetV2::CalculateRandomCone(Float_t &pt, Float_t &eta, Float_t &phi,
+ AliParticleContainer* tracksCont, AliClusterContainer* clusterCont, AliEmcalJet* jet) const
{
// get a random cone
if(fDebug > 1) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
pt = 0; eta = 0; phi = 0;
Float_t etaJet(999), phiJet(999), dJet(999); // no jet: same as jet very far away
- if(jet) { // if a leading jet is given, use its kinematic properties
+ if(jet) { // if a leading jet is given, use its kinematic properties to exclude it
etaJet = jet->Eta();
phiJet = jet->Phi();
}
// where jet acceptance is adjusted to reduced acceptance - hence random cone acceptance as well
Float_t minPhi(GetJetContainer()->GetJetPhiMin()), maxPhi(GetJetContainer()->GetJetPhiMax());
if(maxPhi > TMath::TwoPi()) maxPhi = TMath::TwoPi();
- if(minPhi < 0 ) minPhi = 0;
- Float_t diffRcRJR(TMath::Abs(fRandomConeRadius-GetJetContainer()->GetJetRadius()));
+ if(minPhi < 0 ) minPhi = 0.;
// construct a random cone and see if it's far away enough from the leading jet
Int_t attempts(1000);
while(kTRUE) {
attempts--;
- eta = gRandom->Uniform(GetJetContainer()->GetJetEtaMin()+diffRcRJR, GetJetContainer()->GetJetEtaMax()-diffRcRJR);
+ eta = gRandom->Uniform(GetJetContainer()->GetJetEtaMin(), GetJetContainer()->GetJetEtaMax());
phi = gRandom->Uniform(minPhi, maxPhi);
dJet = TMath::Sqrt((etaJet-eta)*(etaJet-eta)+(phiJet-phi)*(phiJet-phi));
return;
}
}
- if(fTracksCont) {
- AliVParticle* track = fTracksCont->GetNextAcceptParticle(0);
+ // get the charged energy (if tracks are provided)
+ if(tracksCont) {
+ AliVParticle* track = tracksCont->GetNextAcceptParticle(0);
while(track) {
- Float_t etaTrack(track->Eta()), phiTrack(track->Phi()), ptTrack(track->Pt());
+ Float_t etaTrack(track->Eta()), phiTrack(track->Phi());
// get distance from cone
if(TMath::Abs(phiTrack-phi) > TMath::Abs(phiTrack - phi + TMath::TwoPi())) phiTrack+=TMath::TwoPi();
if(TMath::Abs(phiTrack-phi) > TMath::Abs(phiTrack - phi - TMath::TwoPi())) phiTrack-=TMath::TwoPi();
- if(TMath::Sqrt(TMath::Abs((etaTrack-eta)*(etaTrack-eta)+(phiTrack-phi)*(phiTrack-phi))) <= fRandomConeRadius) pt+=ptTrack;
- track = fTracksCont->GetNextAcceptParticle();
+ if(TMath::Sqrt(TMath::Abs((etaTrack-eta)*(etaTrack-eta)+(phiTrack-phi)*(phiTrack-phi))) <= GetJetRadius()) pt += track->Pt();
+ track = tracksCont->GetNextAcceptParticle();
+ }
+ }
+ // get the neutral energy (if clusters are provided)
+ if(clusterCont) {
+ AliVCluster* cluster = clusterCont->GetNextAcceptCluster(0);
+ while(cluster) {
+ TLorentzVector momentum;
+ cluster->GetMomentum(momentum, const_cast<Double_t*>(fVertex));
+ Float_t etaClus(momentum.Eta()), phiClus(momentum.Phi());
+ // get distance from cone
+ if(TMath::Abs(phiClus-phi) > TMath::Abs(phiClus - phi + TMath::TwoPi())) phiClus+=TMath::TwoPi();
+ if(TMath::Abs(phiClus-phi) > TMath::Abs(phiClus - phi - TMath::TwoPi())) phiClus-=TMath::TwoPi();
+ if(TMath::Sqrt(TMath::Abs((etaClus-eta)*(etaClus-eta)+(phiClus-phi)*(phiClus-phi))) <= GetJetRadius()) pt += momentum.Pt();
+ cluster = clusterCont->GetNextAcceptCluster();
}
}
}
//_____________________________________________________________________________
-Double_t AliAnalysisTaskRhoVnModulation::CalculateQC2(Int_t harm) {
+Double_t AliAnalysisTaskJetV2::CalculateQC2(Int_t harm) {
// get the second order q-cumulant, a -999 return will be caught in the qa routine of CorrectRho
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
Double_t reQ(0), imQ(0), modQ(0), M11(0), M(0);
return (M > 1) ? (modQ - M)/(M*(M-1)) : -999;
}
//_____________________________________________________________________________
-Double_t AliAnalysisTaskRhoVnModulation::CalculateQC4(Int_t harm) {
+Double_t AliAnalysisTaskJetV2::CalculateQC4(Int_t harm) {
// get the fourth order q-cumulant, a -999 return will be caught in the qa routine of CorrectRho
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
Double_t reQn1(0), imQn1(0), reQ2n2(0), imQ2n2(0), reQn3(0), imQn3(0), M1111(0), M(0);
return (a+b+c+e+f)/(M*(M-1)*(M-2)*(M-3));
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::QCnQnk(Int_t n, Int_t k, Double_t &reQ, Double_t &imQ) {
+void AliAnalysisTaskJetV2::QCnQnk(Int_t n, Int_t k, Double_t &reQ, Double_t &imQ) {
// get the weighted n-th order q-vector, pass real and imaginary part as reference
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
if(!fTracks) return;
}
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::QCnDiffentialFlowVectors(
+void AliAnalysisTaskJetV2::QCnDiffentialFlowVectors(
TClonesArray* pois, TArrayD* ptBins, Bool_t vpart, Double_t* repn, Double_t* impn,
Double_t *mp, Double_t *reqn, Double_t *imqn, Double_t* mq, Int_t n)
{
}
}
//_____________________________________________________________________________
-Double_t AliAnalysisTaskRhoVnModulation::QCnS(Int_t i, Int_t j) {
+Double_t AliAnalysisTaskJetV2::QCnS(Int_t i, Int_t j) {
// get the weighted ij-th order autocorrelation correction
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
if(!fTracks || i <= 0 || j <= 0) return -999;
return TMath::Power(Sij, i);
}
//_____________________________________________________________________________
-Double_t AliAnalysisTaskRhoVnModulation::QCnM() {
+Double_t AliAnalysisTaskJetV2::QCnM() {
// get multiplicity for unweighted q-cumulants. function QCnQnk should be called first
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
return (Double_t) fNAcceptedTracksQCn;
}
//_____________________________________________________________________________
-Double_t AliAnalysisTaskRhoVnModulation::QCnM11() {
+Double_t AliAnalysisTaskJetV2::QCnM11() {
// get multiplicity weights for the weighted two particle cumulant
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
return (QCnS(2,1) - QCnS(1,2));
}
//_____________________________________________________________________________
-Double_t AliAnalysisTaskRhoVnModulation::QCnM1111() {
+Double_t AliAnalysisTaskJetV2::QCnM1111() {
// get multiplicity weights for the weighted four particle cumulant
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
return (QCnS(4,1)-6*QCnS(1,2)*QCnS(2,1)+8*QCnS(1,3)*QCnS(1,1)+3*QCnS(2,2)-6*QCnS(1,4));
}
//_____________________________________________________________________________
-Bool_t AliAnalysisTaskRhoVnModulation::QCnRecovery(Double_t psi2, Double_t psi3) {
+Bool_t AliAnalysisTaskJetV2::QCnRecovery(Double_t psi2, Double_t psi3) {
// decides how to deal with the situation where c2 or c3 is negative
// returns kTRUE depending on whether or not a modulated rho is used for the jet background
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
return kFALSE;
}
//_____________________________________________________________________________
-Bool_t AliAnalysisTaskRhoVnModulation::CorrectRho(Double_t psi2, Double_t psi3)
+Bool_t AliAnalysisTaskJetV2::CorrectRho(Double_t psi2, Double_t psi3)
{
// get rho' -> rho(phi)
// two routines are available, both can be used with or without pt weights
fFitModulation->FixParameter(3, TMath::Sqrt(fFitModulation->GetParameter(3)));
fFitModulation->FixParameter(7, TMath::Sqrt(fFitModulation->GetParameter(7)));
} else if (!QCnRecovery(psi2, psi3)) return kFALSE; // try to recover the cumulant, this will set v2 and v3
- if(fAbsVnHarmonics && fFitModulation->GetMinimum(0, TMath::TwoPi()) < 0) { // general check
+ if(fFitModulation->GetMinimum(0, TMath::TwoPi()) < 0) { // general check
fFitModulation->SetParameter(7, 0);
fFitModulation->SetParameter(3, 0);
fFitModulation->SetParameter(0, fLocalRho->GetVal());
fFitModulation->FixParameter(3, TMath::Sqrt(fFitModulation->GetParameter(3)));
fFitModulation->FixParameter(7, TMath::Sqrt(fFitModulation->GetParameter(7)));
} else if (!QCnRecovery(psi2, psi3)) return kFALSE; // try to recover the cumulant, this will set v2 and v3
- if(fAbsVnHarmonics && fFitModulation->GetMinimum(0, TMath::TwoPi()) < 0) { // general check
+ if(fFitModulation->GetMinimum(0, TMath::TwoPi()) < 0) { // general check
fFitModulation->SetParameter(7, 0);
fFitModulation->SetParameter(3, 0);
fFitModulation->SetParameter(0, fLocalRho->GetVal());
fFitModulation->FixParameter(4, psi2);
fFitModulation->FixParameter(6, psi3);
fFitModulation->FixParameter(7, fUserSuppliedV3->GetBinContent(fUserSuppliedV3->GetXaxis()->FindBin(fCent)));
- if(fAbsVnHarmonics && fFitModulation->GetMinimum(0, TMath::TwoPi()) < 0) {
+ if(fFitModulation->GetMinimum(0, TMath::TwoPi()) < 0) {
fFitModulation->SetParameter(7, 0);
fFitModulation->SetParameter(3, 0);
fFitModulation->SetParameter(0, fLocalRho->GetVal());
fHistRhoStatusCent->Fill(fCent, -1);
}
}
- if(CDF >= fMinPvalue && CDF <= fMaxPvalue && ( fAbsVnHarmonics && fFitModulation->GetMinimum(0, TMath::TwoPi()) > 0)) { // fit quality. not that although with limited acceptance the fit is performed on just
+ if(CDF >= fMinPvalue && CDF <= fMaxPvalue && ( fFitModulation->GetMinimum(0, TMath::TwoPi()) > 0)) { // fit quality. not that although with limited acceptance the fit is performed on just
// part of phase space, the requirement that energy desntiy is larger than zero is applied
// to the FULL spectrum
fHistRhoStatusCent->Fill(fCent, 0.);
return kTRUE;
}
//_____________________________________________________________________________
-Bool_t AliAnalysisTaskRhoVnModulation::PassesCuts(AliVEvent* event)
+Bool_t AliAnalysisTaskJetV2::PassesCuts(AliVEvent* event)
{
// event cuts
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fRunNumber = InputEvent()->GetRunNumber(); // set the current run number
if(fDebug > 0) printf("__FUNC__ %s > NEW RUNNUMBER DETECTED \n ", __func__);
// reset the cuts. should be a pointless operation except for the case where the run number changes
- // from semi-good back to good on one node, which is not a likely scenario
+ // from semi-good back to good on one node, which is not a likely scenario (unless trains will
+ // run as one masterjob)
AliAnalysisTaskEmcal::SetTrackPhiLimits(-10., 10.);
- AliAnalysisTaskEmcalJet::SetJetPhiLimits(-10., 10.);
+ switch (fAnalysisType) {
+ case kCharged: {
+ AliAnalysisTaskEmcalJet::SetJetPhiLimits(-10., 10.);
+ } break;
+ case kFull: {
+ AliAnalysisTaskEmcalJet::SetJetPhiLimits(1.405 + GetJetRadius(), 3.135 - GetJetRadius());
+ } break;
+ default: break;
+ }
if(fCachedRho) { // if there's a cached rho, it's the default, so switch back
if(fDebug > 0) printf("__FUNC__ %s > replacing rho with cached rho \n ", __func__);
fRho = fCachedRho; // reset rho back to cached value. again, should be pointless
if(fExpectedSemiGoodRuns->At(i) == fRunNumber) { // run is semi-good
if(fDebug > 0) printf("__FUNC__ %s > semi-good tpc run detected, adjusting acceptance \n ", __func__);
flaggedAsSemiGood = kTRUE;
- AliAnalysisTaskEmcalJet::SetJetPhiLimits(fSemiGoodJetMinPhi, fSemiGoodJetMaxPhi); // just an acceptance cut, jets are obtained from full azimuth, so no edge effects
+ switch (fAnalysisType) {
+ // for full jets the jet acceptance does not have to be changed as emcal does not
+ // cover the tpc low voltage readout strips
+ case kCharged: {
+ AliAnalysisTaskEmcalJet::SetJetPhiLimits(fSemiGoodJetMinPhi, fSemiGoodJetMaxPhi); // just an acceptance cut, jets are obtained from full azimuth, so no edge effects
+ } break;
+ default: break;
+ }
AliAnalysisTaskEmcal::SetTrackPhiLimits(fSemiGoodTrackMinPhi, fSemiGoodTrackMaxPhi); // only affects vn extraction, NOT jet finding
// for semi-good runs, also try to get the 'small rho' estimate, if it is available
AliRhoParameter* tempRho(dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fNameSmallRho.Data())));
}
// continue with event selection
if(!event || !AliAnalysisTaskEmcal::IsEventSelected()) return kFALSE;
- if(fSemiCentralInclusive && ! (event->GetTriggerMask() & (ULong64_t(1)<<7))) return kFALSE;
if(TMath::Abs(InputEvent()->GetPrimaryVertex()->GetZ()) > 10.) return kFALSE;
// aod and esd specific checks
switch (fDataType) {
if(fExplicitOutlierCut == 2010 || fExplicitOutlierCut == 2011) {
if(!PassesCuts(fExplicitOutlierCut)) return kFALSE;
}
+ // see if input containers are filled
if(fTracks->GetEntries() < 1) return kFALSE;
if(fRho->GetVal() <= 0 ) return kFALSE;
+ if(fAnalysisType == AliAnalysisTaskJetV2::kFull && !fClusterCont) return kFALSE;
return kTRUE;
}
//_____________________________________________________________________________
-Bool_t AliAnalysisTaskRhoVnModulation::PassesCuts(Int_t year)
+Bool_t AliAnalysisTaskJetV2::PassesCuts(Int_t year)
{
// additional centrality cut based on relation between tpc and global multiplicity
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
return kFALSE;
}
//_____________________________________________________________________________
-Bool_t AliAnalysisTaskRhoVnModulation::PassesCuts(const AliVCluster* cluster) const
-{
- // cluster cuts
- if(fDebug > 1) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
- if(!cluster) return kFALSE;
- return kTRUE;
-}
-//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillHistogramsAfterSubtraction(Double_t psi2, Double_t psi3, Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc)
+void AliAnalysisTaskJetV2::FillHistogramsAfterSubtraction(Double_t psi2, Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc)
{
// fill histograms
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
FillTrackHistograms();
- /* FillClusterHistograms(); */
- FillJetHistograms(psi2, psi3);
- /* FillCorrectedClusterHistograms(); */
+ if(fAnalysisType == AliAnalysisTaskJetV2::kFull) FillClusterHistograms();
+ FillJetHistograms(psi2);
if(fFillQAHistograms) FillEventPlaneHistograms(vzero, vzeroComb, tpc);
FillRhoHistograms();
- FillDeltaPtHistograms(psi2, psi3);
+ FillDeltaPtHistograms(psi2);
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillTrackHistograms() const
+void AliAnalysisTaskJetV2::FillTrackHistograms() const
{
// fill track histograms
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fHistPicoTrackMult[fInCentralitySelection]->Fill(iAcceptedTracks);
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillClusterHistograms() const
+void AliAnalysisTaskJetV2::FillClusterHistograms() const
{
// fill cluster histograms
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
- Int_t iClusters(fCaloClusters->GetEntriesFast());
+ if(!fClusterCont) return;
+ Int_t iClusters(fClusterCont->GetNClusters());
for(Int_t i(0); i < iClusters; i++) {
- AliVCluster* cluster = static_cast<AliVCluster*>(fCaloClusters->At(iClusters));
+ AliVCluster* cluster = fClusterCont->GetCluster(i);
if (!PassesCuts(cluster)) continue;
TLorentzVector clusterLorentzVector;
cluster->GetMomentum(clusterLorentzVector, const_cast<Double_t*>(fVertex));
- //fHistClusterPt[fInCentralitySelection]->Fill(clusterLorentzVector.Pt());
- //fHistClusterEta[fInCentralitySelection]->Fill(clusterLorentzVector.Eta());
- //fHistClusterPhi[fInCentralitySelection]->Fill(clusterLorentzVector.Phi());
+ fHistClusterPt[fInCentralitySelection]->Fill(clusterLorentzVector.Pt());
+ fHistClusterEtaPhi[fInCentralitySelection]->Fill(clusterLorentzVector.Eta(), clusterLorentzVector.Phi());
+ fHistClusterEtaPhiWeighted[fInCentralitySelection]->Fill(clusterLorentzVector.Eta(), clusterLorentzVector.Phi(), clusterLorentzVector.Pt());
}
return;
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillCorrectedClusterHistograms() const
-{
- // fill clusters after hadronic correction FIXME implement
- if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
-}
-//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillEventPlaneHistograms(Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc) const
+void AliAnalysisTaskJetV2::FillEventPlaneHistograms(Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc) const
{
// fill event plane histograms
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fHistPsiTPCTRK->Fill(TRK, tpc[0]);
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillRhoHistograms()
+void AliAnalysisTaskJetV2::FillRhoHistograms()
{
// fill rho histograms
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
}
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillDeltaPtHistograms(Double_t psi2, Double_t psi3) const
+void AliAnalysisTaskJetV2::FillDeltaPtHistograms(Double_t psi2) const
{
// fill delta pt histograms
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
Int_t i(0);
- const Float_t areaRC = fRandomConeRadius*fRandomConeRadius*TMath::Pi();
+ const Float_t areaRC = GetJetRadius()*GetJetRadius()*TMath::Pi();
// we're retrieved the leading jet, now get a random cone
for(i = 0; i < fMaxCones; i++) {
Float_t pt(0), eta(0), phi(0);
// get a random cone without constraints on leading jet position
- CalculateRandomCone(pt, eta, phi, 0x0);
+ CalculateRandomCone(pt, eta, phi, fTracksCont, fClusterCont, 0x0);
if(pt > 0) {
if(fFillQAHistograms) fHistRCPhiEta[fInCentralitySelection]->Fill(phi, eta);
fHistRhoVsRCPt[fInCentralitySelection]->Fill(pt, fLocalRho->GetLocalVal(phi, GetJetContainer()->GetJetRadius(), fLocalRho->GetVal())*areaRC);
fHistRCPt[fInCentralitySelection]->Fill(pt);
fHistDeltaPtDeltaPhi2[fInCentralitySelection]->Fill(PhaseShift(phi-psi2, 2.), pt - areaRC*fLocalRho->GetLocalVal(phi, GetJetContainer()->GetJetRadius(), fLocalRho->GetVal()));
- fHistDeltaPtDeltaPhi3[fInCentralitySelection]->Fill(PhaseShift(phi-psi3, 3.), pt - areaRC*fLocalRho->GetLocalVal(phi, GetJetContainer()->GetJetRadius(), fLocalRho->GetVal()));
+ fHistDeltaPtDeltaPhi2Rho0[fInCentralitySelection]->Fill(PhaseShift(phi-psi2, 2.), pt - areaRC*fLocalRho->GetVal());
+
}
// get a random cone excluding leading jet area
- CalculateRandomCone(pt, eta, phi, fLeadingJet);
+ CalculateRandomCone(pt, eta, phi, fTracksCont, fClusterCont, fLeadingJet);
if(pt > 0) {
if(fFillQAHistograms) fHistRCPhiEtaExLJ[fInCentralitySelection]->Fill(phi, eta);
fHistRhoVsRCPtExLJ[fInCentralitySelection]->Fill(pt, fLocalRho->GetLocalVal(phi, GetJetContainer()->GetJetRadius(), fLocalRho->GetVal())*areaRC);
fHistRCPtExLJ[fInCentralitySelection]->Fill(pt);
fHistDeltaPtDeltaPhi2ExLJ[fInCentralitySelection]->Fill(PhaseShift(phi-psi2, 2.), pt - areaRC*fLocalRho->GetLocalVal(phi, GetJetContainer()->GetJetRadius(), fLocalRho->GetVal()));
- fHistDeltaPtDeltaPhi3ExLJ[fInCentralitySelection]->Fill(PhaseShift(phi-psi3, 3.), pt - areaRC*fLocalRho->GetLocalVal(phi, GetJetContainer()->GetJetRadius(), fLocalRho->GetVal()));
+ fHistDeltaPtDeltaPhi2ExLJRho0[fInCentralitySelection]->Fill(PhaseShift(phi-psi2, 2.), pt - areaRC*fLocalRho->GetVal());
}
}
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillJetHistograms(Double_t psi2, Double_t psi3)
+void AliAnalysisTaskJetV2::FillJetHistograms(Double_t psi2)
{
// fill jet histograms
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fHistJetPtArea[fInCentralitySelection]->Fill(pt-area*rho, area);
fHistJetPtEta[fInCentralitySelection]->Fill(pt-area*rho, eta);
fHistJetPsi2Pt[fInCentralitySelection]->Fill(PhaseShift(phi-psi2, 2.), pt-area*rho);
- fHistJetPsi3Pt[fInCentralitySelection]->Fill(PhaseShift(phi-psi3, 3.), pt-area*rho);
+ fHistJetPsi2PtRho0[fInCentralitySelection]->Fill(PhaseShift(phi-psi2, 2.), pt-area*fLocalRho->GetVal());
fHistJetPtConstituents[fInCentralitySelection]->Fill(pt-area*rho, jet->Nch());
fHistJetEtaRho[fInCentralitySelection]->Fill(eta, pt/area);
- if(fSubtractJetPt) jet->SetPtSub(pt-area*rho); // if requested, save the subtracted jet pt
- } else if(fSubtractJetPt) jet->SetPtSub(-999.);
+ }
}
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillQAHistograms(AliVTrack* vtrack) const
+void AliAnalysisTaskJetV2::FillQAHistograms(AliVTrack* vtrack) const
{
// fill qa histograms for pico tracks
if(!vtrack) return;
}
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillQAHistograms(AliVEvent* vevent)
+void AliAnalysisTaskJetV2::FillQAHistograms(AliVEvent* vevent)
{
// fill qa histograms for events
if(!vevent) return;
}
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillAnalysisSummaryHistogram() const
+void AliAnalysisTaskJetV2::FillAnalysisSummaryHistogram() const
{
// fill the analysis summary histrogram, saves all relevant analysis settigns
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fHistAnalysisSummary->SetBinContent(20, fMaxVz);
fHistAnalysisSummary->GetXaxis()->SetBinLabel(21, "fOffTrigger");
fHistAnalysisSummary->SetBinContent(21, fOffTrigger);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(33, "fRandomConeRadius");
- fHistAnalysisSummary->SetBinContent(33, fRandomConeRadius);
fHistAnalysisSummary->GetXaxis()->SetBinLabel(34, "fitModulationType");
fHistAnalysisSummary->SetBinContent(34, (int)fFitModulationType);
fHistAnalysisSummary->GetXaxis()->SetBinLabel(35, "runModeType");
fHistAnalysisSummary->SetBinContent(41, (int)fRebinSwapHistoOnTheFly);
fHistAnalysisSummary->GetXaxis()->SetBinLabel(42, "fUsePtWeight");
fHistAnalysisSummary->SetBinContent(42, (int)fUsePtWeight);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(43, "fMinLeadingHadronPt");
- fHistAnalysisSummary->SetBinContent(43, fMinLeadingHadronPt);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(44, "fExplicitOutlierCut");
- fHistAnalysisSummary->SetBinContent(44, fExplicitOutlierCut);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(45, "fLocalJetMinEta");
- fHistAnalysisSummary->SetBinContent(45,fLocalJetMinEta );
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(46, "fLocalJetMaxEta");
- fHistAnalysisSummary->SetBinContent(46, fLocalJetMaxEta);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(47, "fLocalJetMinPhi");
- fHistAnalysisSummary->SetBinContent(47, fLocalJetMinPhi);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(48, "fLocalJetMaxPhi");
- fHistAnalysisSummary->SetBinContent(48, fLocalJetMaxPhi);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(49, "fSoftTrackMinPt");
- fHistAnalysisSummary->SetBinContent(49, fSoftTrackMinPt);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(50, "fSoftTrackMaxPt");
- fHistAnalysisSummary->SetBinContent(50, fSoftTrackMaxPt);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(51, "fMaxCones");
- fHistAnalysisSummary->SetBinContent(51, fMaxCones);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(52, "fUseScaledRho");
- fHistAnalysisSummary->SetBinContent(52, fUseScaledRho);
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(53, "used rho");
- fHistAnalysisSummary->GetXaxis()->SetBinLabel(54, "used small rho");
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(43, "fExplicitOutlierCut");
+ fHistAnalysisSummary->SetBinContent(43, fExplicitOutlierCut);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(44, "fSoftTrackMinPt");
+ fHistAnalysisSummary->SetBinContent(44, fSoftTrackMinPt);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(45, "fSoftTrackMaxPt");
+ fHistAnalysisSummary->SetBinContent(45, fSoftTrackMaxPt);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(46, "fMaxCones");
+ fHistAnalysisSummary->SetBinContent(46, fMaxCones);
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(47, "used rho");
+ fHistAnalysisSummary->GetXaxis()->SetBinLabel(48, "used small rho");
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::Terminate(Option_t *)
+void AliAnalysisTaskJetV2::Terminate(Option_t *)
{
// terminate
switch (fRunModeType) {
case kLocal : {
printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
- AliAnalysisTaskRhoVnModulation::Dump();
+ AliAnalysisTaskJetV2::Dump();
for(Int_t i(0); i < fHistAnalysisSummary->GetXaxis()->GetNbins(); i++) printf( " > flag: %s \t content %.2f \n", fHistAnalysisSummary->GetXaxis()->GetBinLabel(1+i), fHistAnalysisSummary->GetBinContent(1+i));
} break;
default : break;
}
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::SetModulationFit(TF1* fit)
+void AliAnalysisTaskJetV2::SetModulationFit(TF1* fit)
{
// set modulation fit
if (fFitModulation) delete fFitModulation;
fFitModulation = fit;
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::SetUseControlFit(Bool_t c)
+void AliAnalysisTaskJetV2::SetUseControlFit(Bool_t c)
{
// set control fit
if (fFitControl) delete fFitControl;
} else fFitControl = 0x0;
}
//_____________________________________________________________________________
-TH1F* AliAnalysisTaskRhoVnModulation::GetResolutionFromOuptutFile(detectorType det, Int_t h, TArrayD* cen)
+TH1F* AliAnalysisTaskJetV2::GetResolutionFromOuptutFile(detectorType det, Int_t h, TArrayD* cen)
{
// INTERFACE METHOD FOR OUTPUTFILE
// get the detector resolution, user has ownership of the returned histogram
return r;
}
//_____________________________________________________________________________
-TH1F* AliAnalysisTaskRhoVnModulation::CorrectForResolutionDiff(TH1F* v, detectorType det, TArrayD* cen, Int_t c, Int_t h)
+TH1F* AliAnalysisTaskJetV2::CorrectForResolutionDiff(TH1F* v, detectorType det, TArrayD* cen, Int_t c, Int_t h)
{
// INTERFACE METHOD FOR OUTPUT FILE
// correct the supplied differential vn histogram v for detector resolution
return v;
}
//_____________________________________________________________________________
-TH1F* AliAnalysisTaskRhoVnModulation::CorrectForResolutionInt(TH1F* v, detectorType det, TArrayD* cen, Int_t h)
+TH1F* AliAnalysisTaskJetV2::CorrectForResolutionInt(TH1F* v, detectorType det, TArrayD* cen, Int_t h)
{
// INTERFACE METHOD FOR OUTPUT FILE
// correct the supplied intetrated vn histogram v for detector resolution
return v;
}
//_____________________________________________________________________________
-TH1F* AliAnalysisTaskRhoVnModulation::GetDifferentialQC(TProfile* refCumulants, TProfile* diffCumlants, TArrayD* ptBins, Int_t h)
+TH1F* AliAnalysisTaskJetV2::GetDifferentialQC(TProfile* refCumulants, TProfile* diffCumlants, TArrayD* ptBins, Int_t h)
{
// get differential QC
Double_t r(refCumulants->GetBinContent(h-1)); // v2 reference flow
/* See cxx source for full Copyright notice */
/* $Id$ */
-#ifndef ALIANALYSISTASKRHOVNMODULATION_H
-#define ALIANALYSISTASKRHOVNMODULATION_H
+#ifndef AliAnalysisTaskJetV2_H
+#define AliAnalysisTaskJetV2_H
#include <AliAnalysisTaskEmcalJet.h>
#include <AliEmcalJet.h>
#include <AliVEvent.h>
-#include <AliVTrack.h>
+#include <AliVParticle.h>
#include <AliVCluster.h>
#include <TClonesArray.h>
#include <TMath.h>
class THF2;
class TProfile;
class AliLocalRhoParameter;
+class AliClusterContainer;
+class AliVTrack;
-class AliAnalysisTaskRhoVnModulation : public AliAnalysisTaskEmcalJet {
+class AliAnalysisTaskJetV2 : public AliAnalysisTaskEmcalJet {
public:
// enumerators
enum fitModulationType { kNoFit, kV2, kV3, kCombined, kFourierSeries, kIntegratedFlow, kQC2, kQC4 }; // fit type
enum runModeType { kLocal, kGrid }; // run mode type
enum dataType { kESD, kAOD, kESDMC, kAODMC }; // data type
enum detectorType { kTPC, kVZEROA, kVZEROC, kVZEROComb}; // detector that was used
+ enum analysisType { kCharged, kFull }; // analysis type
// constructors, destructor
- AliAnalysisTaskRhoVnModulation();
- AliAnalysisTaskRhoVnModulation(const char *name, runModeType type);
- virtual ~AliAnalysisTaskRhoVnModulation();
+ AliAnalysisTaskJetV2();
+ AliAnalysisTaskJetV2(const char *name, runModeType type);
+ virtual ~AliAnalysisTaskJetV2();
// setting up the task and technical aspects
void ExecOnce();
Bool_t InitializeAnalysis();
void SetDebugMode(Int_t d) {fDebug = d;}
void SetRunToyMC(Bool_t t) {fRunToyMC = t; }
void SetAttachToEvent(Bool_t b) {fAttachToEvent = b;}
- void SetSemiCentralInclusive(Bool_t b) {fSemiCentralInclusive = b;}
void SetFillHistograms(Bool_t b) {fFillHistograms = b;}
void SetFillQAHistograms(Bool_t qa) {fFillQAHistograms = qa;}
void SetReduceBinsXYByFactor(Float_t x, Float_t y) {fReduceBinsXByFactor = x;
fReduceBinsYByFactor = y;}
void SetNoEventWeightsForQC(Bool_t e) {fNoEventWeightsForQC = e;}
void SetCentralityClasses(TArrayD* c) {fCentralityClasses = c;}
- void SetPtBinsHybrids(TArrayD* p) {fPtBinsHybrids = p;}
- void SetPtBinsJets(TArrayD* p) {fPtBinsJets = p;}
void SetExpectedRuns(TArrayI* r) {fExpectedRuns = r;}
void SetExpectedSemiGoodRuns(TArrayI* r) {fExpectedSemiGoodRuns = r;}
void SetIntegratedFlow(TH1F* i, TH1F* j) {fUserSuppliedV2 = i;
fUserSuppliedV3 = j; }
void SetOnTheFlyResCorrection(TH1F* r2, TH1F* r3) {fUserSuppliedR2 = r2;
fUserSuppliedR3 = r3; }
- void SetNameJetClones(const char* name) {fNameJetClones = name; }
- void SetNamePicoTrackClones(const char* name) {fNamePicoTrackClones = name; }
- void SetNameRho(const char* name) {fNameRho = name; }
void SetNameRhoSmall(TString name) {fNameSmallRho = name; }
- void SetUseScaledRho(Bool_t s) {fUseScaledRho = s; }
void SetRandomSeed(TRandom3* r) {if (fRandom) delete fRandom; fRandom = r; }
void SetModulationFit(TF1* fit);
void SetUseControlFit(Bool_t c);
void SetQCnRecoveryType(qcRecovery type) {fQCRecovery = type; }
void SetModulationFitOptions(TString opt) {fFitModulationOptions = opt; }
void SetReferenceDetector(detectorType type) {fDetectorType = type; }
+ void SetAnalysisType(analysisType type) {fAnalysisType = type; }
void SetCollisionType(collisionType type) {fCollisionType = type; }
void SetUsePtWeight(Bool_t w) {
fUsePtWeight = w;
void SetRunModeType(runModeType type) {fRunModeType = type; }
void SetAbsVertexZ(Float_t v) {fAbsVertexZ = v; }
void SetMinDistanceRctoLJ(Float_t m) {fMinDisanceRCtoLJ = m; }
- void SetRandomConeRadius(Float_t r) {fRandomConeRadius = r; }
void SetMaxNoRandomCones(Int_t m) {fMaxCones = m; }
- void SetMinLeadingHadronPt(Double_t m) {fMinLeadingHadronPt = m; }
- void SetSetPtSub(Bool_t s) {fSubtractJetPt = s;}
- void SetForceAbsVnHarmonics(Bool_t f) {fAbsVnHarmonics = f; }
void SetExcludeLeadingJetsFromFit(Float_t n) {fExcludeLeadingJetsFromFit = n; }
void SetRebinSwapHistoOnTheFly(Bool_t r) {fRebinSwapHistoOnTheFly = r; }
void SetSaveThisPercentageOfFits(Float_t p) {fPercentageOfFits = p; }
TString GetTracksName() const {return GetParticleContainer()->GetArrayName(); }
TString GetLocalRhoName() const {return fLocalRhoName; }
TArrayD* GetCentralityClasses() const {return fCentralityClasses;}
- TArrayD* GetPtBinsHybrids() const {return fPtBinsHybrids; }
- TArrayD* GetPtBinsJets() const {return fPtBinsJets; }
TProfile* GetResolutionParameters(Int_t h, Int_t c) const {return (h==2) ? fProfV2Resolution[c] : fProfV3Resolution[c];}
TList* GetOutputList() const {return fOutputList;}
AliLocalRhoParameter* GetLocalRhoParameter() const {return fLocalRho;}
}
return leadingJet;
}
- void ExecMe() {ExecOnce();}
- AliAnalysisTaskRhoVnModulation* ReturnMe() {return this;}
+ void ExecMe() {ExecOnce();}
+ AliAnalysisTaskJetV2* ReturnMe() {return this;}
// local cuts
- void SetLocalJetMinMaxEta(Float_t min, Float_t max) {fLocalJetMinEta = min; fLocalJetMaxEta = max;}
- void SetLocalJetMinMaxEta(Float_t R) {fLocalJetMinEta = - 0.9 + R; fLocalJetMaxEta = 0.9 - R; }
- void SetLocalJetMinMaxPhi(Float_t min, Float_t max) {fLocalJetMinPhi = min; fLocalJetMaxEta = max;}
- void SetSoftTrackMinMaxPt(Float_t min, Float_t max) {fSoftTrackMinPt = min; fSoftTrackMaxPt = max;}
- void SetSemiGoodJetMinMaxPhi(Double_t a, Double_t b) {fSemiGoodJetMinPhi = a; fSemiGoodJetMaxPhi = b;}
+ void SetSoftTrackMinMaxPt(Float_t min, Float_t max) {fSoftTrackMinPt = min; fSoftTrackMaxPt = max;}
+ void SetSemiGoodJetMinMaxPhi(Double_t a, Double_t b) {fSemiGoodJetMinPhi = a; fSemiGoodJetMaxPhi = b;}
void SetSemiGoodTrackMinMaxPhi(Double_t a, Double_t b) {fSemiGoodTrackMinPhi = a; fSemiGoodTrackMaxPhi = b;}
// numerical evaluations
void CalculateEventPlaneVZERO(Double_t vzero[2][2]) const;
void CalculateEventPlaneTPC(Double_t* tpc);
void CalculateEventPlaneCombinedVZERO(Double_t* comb) const;
void CalculateEventPlaneResolution(Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc);
- Double_t CalculateEventPlaneChi(Double_t resEP) const;
- void CalculateRandomCone(Float_t &pt, Float_t &eta, Float_t &phi, AliEmcalJet* jet = 0x0) const;
+ void CalculateRandomCone(
+ Float_t &pt,
+ Float_t &eta,
+ Float_t &phi,
+ AliParticleContainer* tracksCont,
+ AliClusterContainer* clusterCont = 0x0,
+ AliEmcalJet* jet = 0x0
+ ) const;
Double_t CalculateQC2(Int_t harm);
Double_t CalculateQC4(Int_t harm);
// helper calculations for the q-cumulant analysis, also used by AliAnalyisTaskJetFlow
// analysis details
Bool_t CorrectRho(Double_t psi2, Double_t psi3);
// event and track selection, also used by AliAnalyisTaskJetFlow
- /* inline */ Bool_t PassesCuts(AliVTrack* track) const { return AcceptTrack(track, 0); }
- /* inline */ Bool_t PassesCuts(AliEmcalJet* jet) { return AcceptJet(jet, 0); }
- /* inline */ Bool_t PassesSimpleCuts(AliEmcalJet* jet) {
+ /* inline */ Bool_t PassesCuts(AliVParticle* track) const { return AcceptTrack(track, 0); }
+ /* inline */ Bool_t PassesCuts(AliEmcalJet* jet) { return AcceptJet(jet, 0); }
+ /* inline */ Bool_t PassesCuts(AliVCluster* clus) const { return AcceptCluster(clus, 0); }
+ /* inline */ Bool_t PassesSimpleCuts(AliEmcalJet* jet) {
Float_t minPhi(GetJetContainer()->GetJetPhiMin()), maxPhi(GetJetContainer()->GetJetPhiMax());
- return (jet && jet->Pt() > 1 && jet->Eta() < .9-GetJetRadius() && jet->Eta() > -.9+GetJetRadius() && jet->Phi() > minPhi && jet->Phi() < maxPhi && jet->Area() > .557*GetJetRadius()*GetJetRadius()*TMath::Pi());
+ Float_t minEta(GetJetContainer()->GetJetEtaMin()), maxEta(GetJetContainer()->GetJetEtaMax());
+ return (jet && jet->Pt() > 1. && jet->Eta() > minEta && jet->Eta() < maxEta && jet->Phi() > minPhi && jet->Phi() < maxPhi && jet->Area() > .557*GetJetRadius()*GetJetRadius()*TMath::Pi());
}
Bool_t PassesCuts(AliVEvent* event);
Bool_t PassesCuts(Int_t year);
Bool_t PassesCuts(const AliVCluster* track) const;
// filling histograms
- void FillHistogramsAfterSubtraction(Double_t psi2, Double_t psi3, Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc);
+ void FillHistogramsAfterSubtraction(Double_t psi2, Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc);
void FillTrackHistograms() const;
void FillClusterHistograms() const;
- void FillCorrectedClusterHistograms() const;
void FillEventPlaneHistograms(Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc) const;
void FillRhoHistograms();
- void FillDeltaPtHistograms(Double_t psi2, Double_t psi3) const;
- void FillJetHistograms(Double_t psi2, Double_t psi3);
+ void FillDeltaPtHistograms(Double_t psi2) const;
+ void FillJetHistograms(Double_t psi2);
void FillQAHistograms(AliVTrack* vtrack) const;
void FillQAHistograms(AliVEvent* vevent);
void FillAnalysisSummaryHistogram() const;
Bool_t fRunToyMC; // run toy mc for fit routine
Bool_t fLocalInit; //! is the analysis initialized?
Bool_t fAttachToEvent; // attach local rho to the event
- Bool_t fSemiCentralInclusive; // semi central inclusive event selection
Bool_t fFillHistograms; // fill histograms
Bool_t fFillQAHistograms; // fill qa histograms
Float_t fReduceBinsXByFactor; // reduce the bins on x-axis of histo's by this much
Float_t fReduceBinsYByFactor; // reduce the bins on y-axis of histo's by this much
Bool_t fNoEventWeightsForQC; // don't store event weights for qc analysis
TArrayD* fCentralityClasses; //-> centrality classes (maximum 10)
- TArrayD* fPtBinsHybrids; //-> pt bins for hybrid track vn anaysis
- TArrayD* fPtBinsJets; //-> pt bins for jet vn analysis
TArrayI* fExpectedRuns; //-> array of expected run numbers, used for QA
TArrayI* fExpectedSemiGoodRuns; //-> array of expected semi-good runs, used for cuts and QA
TH1F* fUserSuppliedV2; // histo with integrated v2
TH1F* fUserSuppliedV3; // histo with integrated v3
TH1F* fUserSuppliedR2; // correct the extracted v2 with this r
TH1F* fUserSuppliedR3; // correct the extracted v3 with this r
- AliParticleContainer* fTracksCont; //!tracks
- AliJetContainer* fJetsCont; //!jets
+ AliParticleContainer* fTracksCont; //! tracks
+ AliClusterContainer* fClusterCont; //! cluster container
+ AliJetContainer* fJetsCont; //! jets
AliEmcalJet* fLeadingJet; //! leading jet
// members
- Bool_t fUseScaledRho; // use scaled rho
Int_t fNAcceptedTracks; //! number of accepted tracks
Int_t fNAcceptedTracksQCn; //! accepted tracks for QCn
fitModulationType fFitModulationType; // fit modulation type
Bool_t fUsePtWeight; // use dptdphi instead of dndphi
Bool_t fUsePtWeightErrorPropagation; // recalculate the bin errors in case of pt weighting
detectorType fDetectorType; // type of detector used for modulation fit
+ analysisType fAnalysisType; // analysis type (full or charged jets)
TString fFitModulationOptions; // fit options for modulation fit
runModeType fRunModeType; // run mode type
dataType fDataType; // datatype
TF1* fFitControl; //-> control fit
Float_t fMinPvalue; // minimum value of p
Float_t fMaxPvalue; // maximum value of p
- const char* fNameJetClones; //! collection of tclones array with jets
- const char* fNamePicoTrackClones; //! collection of tclones with pico tracks
- const char* fNameRho; //! name of rho
TString fNameSmallRho; // name of small rho
AliRhoParameter* fCachedRho; //! temp cache for rho pointer
// additional jet cuts (most are inherited)
- Float_t fLocalJetMinEta; // local eta cut for jets
- Float_t fLocalJetMaxEta; // local eta cut for jets
- Float_t fLocalJetMinPhi; // local phi cut for jets
- Float_t fLocalJetMaxPhi; // local phi cut for jets
Float_t fSoftTrackMinPt; // min pt for soft tracks
Float_t fSoftTrackMaxPt; // max pt for soft tracks
Double_t fSemiGoodJetMinPhi; // min phi for semi good tpc runs
TH1F* fHistUndeterminedRunQA; //! undetermined run QA
// general settings
Float_t fMinDisanceRCtoLJ; // min distance between rc and leading jet
- Float_t fRandomConeRadius; // radius of random cone
Int_t fMaxCones; // max number of random cones
- Bool_t fAbsVnHarmonics; // force postive local rho
Float_t fExcludeLeadingJetsFromFit; // exclude n leading jets from fit
Bool_t fRebinSwapHistoOnTheFly; // rebin swap histo on the fly
Float_t fPercentageOfFits; // save this percentage of fits
- Bool_t fUseV0EventPlaneFromHeader; // use the vzero event plane from the header
+ Bool_t fUseV0EventPlaneFromHeader; // use the vzero event plane from the header
Int_t fExplicitOutlierCut; // cut on correlation of tpc and global multiplicity
- Double_t fMinLeadingHadronPt; // minimum pt for leading hadron
- Bool_t fSubtractJetPt; // save subtracted jet pt by calling SetPtSub
// transient object pointers
TList* fOutputList; //! output list
TList* fOutputListGood; //! output list for local analysis
TProfile* fProfV3Cumulant; //! v3 cumulant
TProfile* fProfV3Resolution[10]; //! resolution parameters for v3
// qa histograms for accepted pico tracks
- TH1F* fHistPicoTrackPt[10]; //! pt of all charged tracks
- TH1F* fHistPicoTrackMult[10]; //! multiplicity of accepted pico tracks
- TH2F* fHistPicoCat1[10]; //! pico tracks spd hit and refit
- TH2F* fHistPicoCat2[10]; //! pico tracks wo spd hit w refit, constrained
- TH2F* fHistPicoCat3[10]; //! pico tracks wo spd hit wo refit, constrained
+ TH1F* fHistPicoTrackPt[10]; //! pt of all charged tracks
+ TH1F* fHistPicoTrackMult[10]; //! multiplicity of accepted pico tracks
+ TH2F* fHistPicoCat1[10]; //! pico tracks spd hit and refit
+ TH2F* fHistPicoCat2[10]; //! pico tracks wo spd hit w refit, constrained
+ TH2F* fHistPicoCat3[10]; //! pico tracks wo spd hit wo refit, constrained
// qa histograms for accepted emcal clusters
- /* TH1F* fHistClusterPt[10]; //! pt uncorrected emcal clusters */
- /* TH1F* fHistClusterPhi[10]; //! phi uncorrected emcal clusters */
- /* TH1F* fHistClusterEta[10]; //! eta uncorrected emcal clusters */
- // qa histograms for accepted emcal clusters aftehadronic correction
- /* TH1F* fHistClusterCorrPt[10]; //! pt corrected emcal clusters */
- /* TH1F* fHistClusterCorrPhi[10]; //! phi corrected emcal clusters */
- /* TH1F* fHistClusterCorrEta[10]; //! eta corrected emcal clusters */
+ TH1F* fHistClusterPt[10]; //! pt emcal clusters
+ TH2F* fHistClusterEtaPhi[10]; //! eta phi emcal clusters
+ TH2F* fHistClusterEtaPhiWeighted[10]; //! eta phi emcal clusters, pt weighted
// qa event planes
- TProfile* fHistPsiControl; //! event plane control histogram
- TProfile* fHistPsiSpread; //! event plane spread histogram
- TH1F* fHistPsiVZEROA; //! psi 2 from vzero a
- TH1F* fHistPsiVZEROC; //! psi 2 from vzero c
- TH1F* fHistPsiVZERO; //! psi 2 from combined vzero
- TH1F* fHistPsiTPC; //! psi 2 from tpc
+ TProfile* fHistPsiControl; //! event plane control histogram
+ TProfile* fHistPsiSpread; //! event plane spread histogram
+ TH1F* fHistPsiVZEROA; //! psi 2 from vzero a
+ TH1F* fHistPsiVZEROC; //! psi 2 from vzero c
+ TH1F* fHistPsiVZERO; //! psi 2 from combined vzero
+ TH1F* fHistPsiTPC; //! psi 2 from tpc
TH2F* fHistPsiVZEROAV0M; //! psi 2 from vzero a
TH2F* fHistPsiVZEROCV0M; //! psi 2 from vzero c
TH2F* fHistPsiVZEROVV0M; //! psi 2 from combined vzero
TH2F* fHistPsiVZEROTRK; //! psi 2 from combined vzero
TH2F* fHistPsiTPCTRK; //! psi 2 from tpc
// background
- TH1F* fHistRhoPackage[10]; //! rho as estimated by emcal jet package
- TH1F* fHistRho[10]; //! background
- TH2F* fHistRhoVsMult; //! rho versus multiplicity
- TH2F* fHistRhoVsCent; //! rho veruss centrality
- TH2F* fHistRhoAVsMult; //! rho * A vs multiplicity for all jets
- TH2F* fHistRhoAVsCent; //! rho * A vs centrality for all jets
+ TH1F* fHistRhoPackage[10]; //! rho as estimated by emcal jet package
+ TH1F* fHistRho[10]; //! background
+ TH2F* fHistRhoVsMult; //! rho versus multiplicity
+ TH2F* fHistRhoVsCent; //! rho veruss centrality
+ TH2F* fHistRhoAVsMult; //! rho * A vs multiplicity for all jets
+ TH2F* fHistRhoAVsCent; //! rho * A vs centrality for all jets
// delta pt distributions
TH2F* fHistRCPhiEta[10]; //! random cone eta and phi
TH2F* fHistRhoVsRCPt[10]; //! rho * A vs rcpt
TH1F* fHistRCPt[10]; //! rcpt
TH2F* fHistDeltaPtDeltaPhi2[10]; //! dpt vs dphi (psi2 - phi)
- TH2F* fHistDeltaPtDeltaPhi3[10]; //! dpt vs dphi (psi3 - phi)
+ TH2F* fHistDeltaPtDeltaPhi2Rho0[10]; //! dpt vs dphi, rho_0
TH2F* fHistRCPhiEtaExLJ[10]; //! random cone eta and phi, excl leading jet
TH2F* fHistRhoVsRCPtExLJ[10]; //! rho * A vs rcpt, excl leading jet
TH1F* fHistRCPtExLJ[10]; //! rcpt, excl leading jet
TH2F* fHistDeltaPtDeltaPhi2ExLJ[10]; //! dpt vs dphi, excl leading jet
- TH2F* fHistDeltaPtDeltaPhi3ExLJ[10]; //! dpt vs dphi, excl leading jet
- /* TH2F* fHistRCPhiEtaRand[10]; //! random cone eta and phi, randomized */
- /* TH2F* fHistRhoVsRCPtRand[10]; //! rho * A vs rcpt, randomized */
- /* TH1F* fHistRCPtRand[10]; //! rcpt, randomized */
- /* TH2F* fHistDeltaPtDeltaPhi2Rand[10]; //! dpt vs dphi, randomized */
- /* TH2F* fHistDeltaPtDeltaPhi3Rand[10]; //! dpt vs dphi, randomized */
+ TH2F* fHistDeltaPtDeltaPhi2ExLJRho0[10]; //! dpt vs dphi, excl leading jet, rho_0
// jet histograms (after kinematic cuts)
TH1F* fHistJetPtRaw[10]; //! jet pt - no background subtraction
TH1F* fHistJetPt[10]; //! pt of found jets (background subtracted)
TH2F* fHistJetPtArea[10]; //! jet pt versus area
TH2F* fHistJetPtEta[10]; //! jet pt versus eta (temp control)
TH2F* fHistJetPtConstituents[10]; //! jet pt versus number of constituents
- TH2F* fHistJetEtaRho[10]; //! jet eta versus jet rho
+ TH2F* fHistJetEtaRho[10]; //! jet eta versus rho
// in plane, out of plane jet spectra
- TH2F* fHistJetPsi2Pt[10]; //! psi tpc versus pt
- TH2F* fHistJetPsi3Pt[10]; //! psi vzeroc versus pt
+ TH2F* fHistJetPsi2Pt[10]; //! event plane dependence of jet pt
+ TH2F* fHistJetPsi2PtRho0[10]; //! event plane dependence of jet pt vs rho_0
- AliAnalysisTaskRhoVnModulation(const AliAnalysisTaskRhoVnModulation&); // not implemented
- AliAnalysisTaskRhoVnModulation& operator=(const AliAnalysisTaskRhoVnModulation&); // not implemented
+ AliAnalysisTaskJetV2(const AliAnalysisTaskJetV2&); // not implemented
+ AliAnalysisTaskJetV2& operator=(const AliAnalysisTaskJetV2&); // not implemented
- ClassDef(AliAnalysisTaskRhoVnModulation, 26);
+ ClassDef(AliAnalysisTaskJetV2, 1);
};
#endif
fDoV0QA(0),
fDoEPQA(0),
fDoLeadingObjectPosition(0),
- fMaxCellsInCluster(30),
+ fMaxCellsInCluster(50),
fCent2(0),
fCent3(0),
fVZERO(0),
fV0ATotMult(0),
fV0CTotMult(0),
- fHistEventQA(0)
+ fHistEventQA(0),
+ fHistTrNegativeLabels(0),
+ fHistTrZeroLabels(0),
+ fHistTrPhiEtaPt(0),
+ fHistTrPhiEtaZeroLab(0),
+ fHistTrPtZeroLab(0),
+ fHistTrEmcPhiEta(0),
+ fHistTrEmcPt(0),
+ fHistTrPhiEtaNonProp(0),
+ fHistTrPtNonProp(0),
+ fHistDeltaEtaPt(0),
+ fHistDeltaPhiPt(0),
+ fHistDeltaPtvsPt(0),
+ fHistClusPhiEtaEnergy(0),
+ fHistClusDeltaPhiEPEnergy(0),
+ fHistNCellsEnergy(0),
+ fHistFcrossEnergy(0),
+ fHistClusTimeEnergy(0),
+ fHistClusMCEnergyFraction(0),
+ fHistCellsAbsIdEnergy(0),
+ fHistJetsPhiEta(0),
+ fHistJetsPtArea(0)
{
// Default constructor.
- fHistTrNegativeLabels = 0;
- fHistTrZeroLabels = 0;
- fHistTrPhiEtaZeroLab = 0;
- fHistTrPtZeroLab = 0;
- fHistTrEmcPhiEta = 0;
- fHistTrEmcPt = 0;
- fHistTrPhiEtaNonProp = 0;
- fHistTrPtNonProp = 0;
- fHistDeltaEtaPt = 0;
- fHistDeltaPhiPt = 0;
- fHistDeltaPtvsPt = 0;
-
- fHistClusPhiEtaEnergy = 0;
- fHistClusDeltaPhiEPEnergy = 0;
- fHistNCellsEnergy = 0;
- fHistFcrossEnergy = 0;
- fHistClusTimeEnergy = 0;
- fHistClusMCEnergyFraction = 0;
-
- fHistCellsAbsIdEnergy = 0;
-
- fHistJetsPhiEta = 0;
- fHistJetsPtArea = 0;
-
- fHistTrPhiEtaPt = 0;
-
SetMakeGeneralHistograms(kTRUE);
}
fDoV0QA(0),
fDoEPQA(0),
fDoLeadingObjectPosition(0),
- fMaxCellsInCluster(30),
+ fMaxCellsInCluster(50),
fCent2(0),
fCent3(0),
fVZERO(0),
fV0ATotMult(0),
fV0CTotMult(0),
- fHistEventQA(0)
+ fHistEventQA(0),
+ fHistTrNegativeLabels(0),
+ fHistTrZeroLabels(0),
+ fHistTrPhiEtaPt(0),
+ fHistTrPhiEtaZeroLab(0),
+ fHistTrPtZeroLab(0),
+ fHistTrEmcPhiEta(0),
+ fHistTrEmcPt(0),
+ fHistTrPhiEtaNonProp(0),
+ fHistTrPtNonProp(0),
+ fHistDeltaEtaPt(0),
+ fHistDeltaPhiPt(0),
+ fHistDeltaPtvsPt(0),
+ fHistClusPhiEtaEnergy(0),
+ fHistClusDeltaPhiEPEnergy(0),
+ fHistNCellsEnergy(0),
+ fHistFcrossEnergy(0),
+ fHistClusTimeEnergy(0),
+ fHistClusMCEnergyFraction(0),
+ fHistCellsAbsIdEnergy(0),
+ fHistJetsPhiEta(0),
+ fHistJetsPtArea(0)
{
// Standard
- fHistTrNegativeLabels = 0;
- fHistTrZeroLabels = 0;
- fHistTrPhiEtaZeroLab = 0;
- fHistTrPtZeroLab = 0;
- fHistTrEmcPhiEta = 0;
- fHistTrEmcPt = 0;
- fHistTrPhiEtaNonProp = 0;
- fHistTrPtNonProp = 0;
- fHistDeltaEtaPt = 0;
- fHistDeltaPhiPt = 0;
- fHistDeltaPtvsPt = 0;
-
- fHistClusPhiEtaEnergy = 0;
- fHistClusDeltaPhiEPEnergy = 0;
- fHistNCellsEnergy = 0;
- fHistFcrossEnergy = 0;
- fHistClusTimeEnergy = 0;
- fHistClusMCEnergyFraction = 0;
-
- fHistCellsAbsIdEnergy = 0;
-
- fHistJetsPhiEta = 0;
- fHistJetsPtArea = 0;
-
- fHistTrPhiEtaPt = 0;
-
SetMakeGeneralHistograms(kTRUE);
}
--- /dev/null
+
+AliAnalysisTaskEmcalJetHF* AddTaskEmcalJetHF(
+ const char *outfilename = "AnalysisOutput.root",
+ const char *nJets = "Jets",
+ const char *nClusters = "CaloClustersCorr",
+ UInt_t type = 0, //AliAnalysisTaskEmcal::kTPC,
+ const char *nRhosChEm = "rhoChEm",
+ const Double_t minPhi = 1.8,
+ const Double_t maxPhi = 2.74,
+ const Double_t minEta = -0.3,
+ const Double_t maxEta = 0.3,
+ const Double_t minArea = 0.4,
+ const char *nTracks = "PicoTracks",
+ const Double_t hiPTjet = 50.0,
+ const Double_t trptcut = 2.0,
+ const Double_t trketa = 0.9,
+ const Int_t trkQAcut = 10041006,
+ const Bool_t isESD = 1,
+ const char *tag = ""
+)
+{
+ // Get the pointer to the existing analysis manager via the static access method.
+ //==============================================================================
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr)
+ {
+ ::Error("AddTaskEmcalJetHF", "No analysis manager to connect to.");
+ return NULL;
+ }
+
+ // Check the analysis type using the event handlers connected to the analysis manager.
+ //==============================================================================
+ if (!mgr->GetInputEventHandler())
+ {
+ ::Error("AddTaskEmcalJetHF", "This task requires an input event handler");
+ return NULL;
+ }
+ //ESD Trk Cuts
+ if(isESD > 0){
+ AliESDtrackCuts *esdTrackCuts = 0x0;
+ gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
+ esdTrackCuts = CreateTrackCutsPWGJE(trkQAcut);
+ }
+
+ //-------------------------------------------------------
+ // Init the task and do settings
+ //-------------------------------------------------------
+
+// TString name(Form("Spectra_%s", nJets));
+ TString name(Form("Spectra_%s_%s%s", nJets, nRhosChEm, tag));
+ AliAnalysisTaskEmcalJetHF *spectratask = new AliAnalysisTaskEmcalJetHF(name);
+ spectratask->SetJetsName(nJets);
+ spectratask->SetClusName(nClusters);
+ spectratask->SetAnaType(type);
+ spectratask->SetRhoName(nRhosChEm);
+ spectratask->SetJetPhiLimits(minPhi,maxPhi);
+ spectratask->SetJetEtaLimits(minEta,maxEta);
+ spectratask->SetJetAreaCut(minArea);
+ spectratask->SetTracksName(nTracks);
+ spectratask->SetJetPt(hiPTjet);
+ spectratask->SetTrackPtCut(trptcut);
+ spectratask->SetTrackEta(trketa);
+ spectratask->SetTrackQACut(trkQAcut);
+ //spectratask->SetDataType(isESD);
+
+ //-------------------------------------------------------
+ // Final settings, pass to manager and set the containers
+ //-------------------------------------------------------
+
+ mgr->AddTask(spectratask);
+
+ // Create containers for input/output
+ mgr->ConnectInput (spectratask, 0, mgr->GetCommonInputContainer() );
+ AliAnalysisDataContainer *cospectra = mgr->CreateContainer(name,
+ TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ outfilename);
+ mgr->ConnectOutput(spectratask,1,cospectra);
+
+ return spectratask;
+}
+
Bool_t PID = 0, //kFALSE,
Bool_t PIDtrackBIAS = 0, //kFALSE,
Bool_t varbinTHnSparse = 0, //kFALSE,
- Bool_t isAOD = 0, //kFALSE,
+ Bool_t allpidAXIS = 0, //kFALSE,
Bool_t QAhistos = 0, //kFALSE,
Bool_t BIAShistos = 0, //kFALSE,
Bool_t extraCORRhistos = 0, //kFALSE,
const Int_t MixingTracks = 50000,
TString cutType = "EMCAL",
Bool_t Comments = 0,
+ Bool_t IO = 0,
Int_t esdcuts = 10001006
)
{
::Error("AddTaskEmcalJetHadEPpid", "This task requires an input event handler");
return NULL;
}
-
+
//-------------------------------------------------------
// Init the task and do settings
//-------------------------------------------------------
correlationtask->SetdoPID(PID);
correlationtask->SetdoPIDtrackBIAS(PIDtrackBIAS);
correlationtask->SetvarbinTHnSparse(varbinTHnSparse);
- correlationtask->SetDataType(isAOD);
+ correlationtask->SetallpidAXIS(allpidAXIS);
correlationtask->SetmakeQAhistos(QAhistos);
correlationtask->SetmakeBIAShistos(BIAShistos);
correlationtask->SetmakeextraCORRhistos(extraCORRhistos);
correlationtask->SetMixingTracks(MixingTracks);
correlationtask->SetcutType(cutType);
correlationtask->SetdoComments(Comments);
+ correlationtask->SetIOon(IO);
// =================== set up containers ================================================
// Cluster Container
spectratask->SetAnaType(type);
spectratask->SetRhoName(nRhosChEm);
spectratask->SetLocalRhoName(lrho);
- spectratask->SetJetPhiLimits(minPhi,maxPhi);
- spectratask->SetJetEtaLimits(minEta,maxEta);
+ spectratask->SetJetPhi(minPhi,maxPhi);
+ spectratask->SetJetEta(minEta,maxEta);
spectratask->SetJetAreaCut(minArea);
spectratask->SetTracksName(nTracks);
Double_t jetRadius = 0.4, //radius of analyzed jets
Double_t jetRadiusBg = 0.3, //radius of jets to be removed when estimating cell median bg
Int_t trigger = AliVEvent::kINT7, //trigger
- Bool_t isMC = kFALSE, //MC flag
+ Int_t isMC = 0, //MC flag
Double_t randomConeR = 0.4, //random cone for deltaPt + perp cone bg
const char* containerSuffix = "", //tag to the name of container
const char* usedTracks = "PicoTracks", //tracks
Double_t ttHigh = 50.0, // trigger hadron high pT
Int_t ttType = 0, // 0= single inclusive hadron trigger, else inclusive hadron trigger
Double_t dphi = 0.6, // |Delta phi_jet, trigger|< pi-0.6
- Double_t binning = 0 //binning of jet histograms 0=2GeV width 1=1GeV width
+ Bool_t binning = 0 //binning of jet histograms 0=2GeV width 1=1GeV width
){
0.4, //jet radius
"TPC", //cut type
0., //jet area cut
- 10., //jet pt cut ????????
+ 15., //jet pt cut ????????
0, //enareacut
0, //sfunc
1, //excl Jets //FK// ????????
task->SetMinPtOfJetsToBeRemovedInBg(15.0);
//task->SetMC(isMC);
task->SetNofRandomCones(1);
-
+
+ if(isMC) task->SetAnalyzeMC(isMC);
+
// output container
contHistos = manager->CreateContainer(myContName.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:ChJetSpectra%s", AliAnalysisManager::GetCommonFileName(), myContName.Data()));
*
*/
-AliAnalysisTaskRhoVnModulation* AddTaskRhoVnModulation(
+AliAnalysisTaskJetV2* AddTaskJetV2(
const char *ntracks = "Tracks",
const char *nclusters = "",
const char *njets = "Jets",
Double_t jetareacut = 0.557,
const char* type = "TPC",
Int_t leadhadtype = 0,
- const char *taskname = "AliAnalysisTaskRhoVnModulation",
- UInt_t runMode = AliAnalysisTaskRhoVnModulation::kGrid,
+ const char *taskname = "AliAnalysisTaskJetV2",
+ UInt_t runMode = AliAnalysisTaskJetV2::kGrid,
Bool_t fillQA = kTRUE,
TString fitOpts = "WLQI",
- UInt_t fitType = AliAnalysisTaskRhoVnModulation::kFourierSeries,
+ UInt_t fitType = AliAnalysisTaskJetV2::kFourierSeries,
TArrayD *centralities = 0x0,
TRandom3 *randomizer = 0x0,
Double_t trackptcut = .15
else if (!strcmp(type, "USER"))
name += "_USER";
- AliAnalysisTaskRhoVnModulation* jetTask = new AliAnalysisTaskRhoVnModulation(name, runMode);
- // inherited setters
+ // create instance of the object
+ AliAnalysisTaskJetV2* jetTask = new AliAnalysisTaskJetV2(name, runMode);
+
+ // create and connect data containers
AliParticleContainer* partCont = jetTask->AddParticleContainer(ntracks);
if(partCont) {
partCont->SetName("Tracks");
partCont->SetParticlePtCut(trackptcut);
}
+ TString tmp(nclusters);
+ AliClusterContainer* clusterCont = 0x0;
+ if(!tmp.IsNull()) {
+ clusterCont = jetTask->AddClusterContainer(nclusters);
+ jetTask->SetAnalysisType(AliAnalysisTaskJetV2::kFull);
+ }
AliJetContainer* jetCont = jetTask->AddJetContainer(njets, type, jetradius);
if(jetCont) {
jetCont->SetName("Jets");
jetCont->SetPercAreaCut(jetareacut);
jetCont->SetRhoName(nrho);
- jetCont->ConnectParticleContainer(partCont);
+ if(partCont) jetCont->ConnectParticleContainer(partCont);
+ if(clusterCont) jetCont->ConnectClusterContainer(clusterCont);
}
+
// task specific setters
jetTask->SetFillQAHistograms(fillQA);
jetTask->SetDebugMode(-1);
jetTask->SetModulationFitType(fitType);
jetTask->SetModulationFitOptions(fitOpts);
jetTask->SetModulationFitMinMaxP(.01, 1);
- jetTask->SetRandomConeRadius(jetradius);
// if centralities haven't been specified use defaults
if(!centralities) {
Double_t c[] = {0., 10., 30., 50., 70., 90.};
// if a randomized hasn't specified use a safe default
if(!randomizer) jetTask->SetRandomSeed(new TRandom3(0));
-
// pass the expected run lists to the task. the total list is used for QA plots which are stored per run-number, the semi-good list is used to change the phi acceptance of jets and pico trakcs, and - if an alternatie is provided - switch to a 'small rho' task, which also runs on limited acceptance
Int_t totalRuns[] = {167813, 167988, 168066, 168068, 168069, 168076, 168104, 168212, 168311, 168322, 168325, 168341, 168361, 168362, 168458, 168460, 168461, 168992, 169091, 169094, 169138, 169143, 169167, 169417, 169835, 169837, 169838, 169846, 169855, 169858, 169859, 169923, 169956, 170027, 170036, 170081, /* up till here original good TPC list */169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 170270, 170306, 170308, 170309, /* original semi-good tpc list */169415, 169411, 169035, 168988, 168984, 168826, 168777, 168512, 168511, 168467, 168464, 168342, 168310, 168115, 168108, 168107, 167987, 167915, 167903, /*new runs, good according to RCT */ 169238, 169160, 169156, 169148, 169145, 169144 /* run swith missing OROC 8 but seem ok in QA */};
jetTask->SetExpectedRuns(new TArrayI(sizeof(totalRuns)/sizeof(totalRuns[0]), totalRuns));
mgr->ConnectOutput (jetTask, 1, coutput1 );
switch (runMode) {
- case AliAnalysisTaskRhoVnModulation::kLocal : {
+ case AliAnalysisTaskJetV2::kLocal : {
gStyle->SetOptFit(1);
AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(Form("good_fits_%s", name.Data()),
TList::Class(),AliAnalysisManager::kOutputContainer,
--- /dev/null
+/*
+ * AddTask macro for class
+ * Redmer Alexander Bertens, rbertens@cern.ch
+ * Utrecht University, Utrecht, Netherlands
+ */
+
+AliAnalysisTaskLocalRhoDev* AddTaskLocalRhoDev(
+ const char *ntracks = "Tracks", // track selection used for vn estimate
+ const char *nclusters = "", // clusters (not used)
+ const char *njets = "Jets", // jet selection for finding leading jet
+ const char *nrho = "Rho", // name of nominal rho
+ const char *lrho = "LocalRho", // name of local rho object
+ Double_t jetradius = 0.3, // jet radius (to remove leading jet)
+ Double_t jetptcut = 1,
+ Double_t jetareacut = 0.557,
+ const char* type = "TPC",
+ Int_t leadhadtype = 0,
+ const char *name = "AliAnalysisTaskLocalRhoDev", // task name
+ TString fitOpts = "WLQI", // options for tfitter
+ UInt_t fitType = AliAnalysisTaskLocalRhoDev::kCombined, // fitting strategy
+ TArrayI *centralities = 0x0, // centrality binning for qa
+ UInt_t runMode = AliAnalysisTaskLocalRhoDev::kGrid // run mode
+ )
+{
+ // Get the pointer to the existing analysis manager via the static access method.
+ //==============================================================================
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr)
+ {
+ ::Error("AddTaskEmcalJetSample", "No analysis manager to connect to.");
+ return NULL;
+ }
+
+ // Check the analysis type using the event handlers connected to the analysis manager.
+ //==============================================================================
+ if (!mgr->GetInputEventHandler())
+ {
+ ::Error("AddTaskEmcalJetSample", "This task requires an input event handler");
+ return NULL;
+ }
+
+ //-------------------------------------------------------
+ // Init the task and do settings
+ //-------------------------------------------------------
+
+ AliAnalysisTaskLocalRhoDev* jetTask = new AliAnalysisTaskLocalRhoDev(name, runMode);
+ // inherited setters
+ AliParticleContainer* partCont = jetTask->AddParticleContainer(ntracks);
+ if(partCont) {
+ partCont->SetName("Tracks");
+ partCont->SetParticlePtCut(.15);
+ }
+ AliJetContainer* jetCont = jetTask->AddJetContainer(njets, type, jetradius);
+ if(jetCont) {
+ jetCont->SetName("Jets");
+ jetCont->SetPercAreaCut(jetareacut);
+ jetCont->SetRhoName(nrho);
+ jetCont->ConnectParticleContainer(partCont);
+ }
+ // task specific setters
+ jetTask->SetDebugMode(-1);
+ jetTask->SetModulationFitType(fitType);
+ jetTask->SetModulationFitOptions(fitOpts);
+ jetTask->SetModulationFitMinMaxP(.01, 1);
+ // if centralities haven't been specified use defaults
+ if(!centralities) {
+ Double_t c[] = {0., 10., 30., 50., 70., 90.};
+ jetTask->SetCentralityClasses(new TArrayD(sizeof(c)/sizeof(c[0]), c));
+ }
+ // pass the expected run lists to the task. the total list is used for QA plots which are stored per run-number, the semi-good list is used to change the phi acceptance of jets and pico trakcs, and - if an alternatie is provided - switch to a 'small rho' task, which also runs on limited acceptance
+ Int_t totalRuns[] = {167813, 167988, 168066, 168068, 168069, 168076, 168104, 168212, 168311, 168322, 168325, 168341, 168361, 168362, 168458, 168460, 168461, 168992, 169091, 169094, 169138, 169143, 169167, 169417, 169835, 169837, 169838, 169846, 169855, 169858, 169859, 169923, 169956, 170027, 170036, 170081, /* up till here original good TPC list */169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 170270, 170306, 170308, 170309, /* original semi-good tpc list */169415, 169411, 169035, 168988, 168984, 168826, 168777, 168512, 168511, 168467, 168464, 168342, 168310, 168115, 168108, 168107, 167987, 167915, 167903, /*new runs, good according to RCT */ 169238, 169160, 169156, 169148, 169145, 169144 /* run swith missing OROC 8 but seem ok in QA */};
+ jetTask->SetExpectedRuns(new TArrayI(sizeof(totalRuns)/sizeof(totalRuns[0]), totalRuns));
+
+ Int_t semiGoodRuns[] = {169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 170270, 170306, 170308, 170309};
+ jetTask->SetExpectedSemiGoodRuns(new TArrayI(sizeof(semiGoodRuns)/sizeof(semiGoodRuns[0]), semiGoodRuns));
+
+
+ //-------------------------------------------------------
+ // Final settings, pass to manager and set the containers
+ //-------------------------------------------------------
+
+ mgr->AddTask(jetTask);
+
+ // Create containers for input/output
+ AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer() ;
+ TString contname(name);
+ contname += "_histos";
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contname.Data(),
+ TList::Class(),AliAnalysisManager::kOutputContainer,
+ Form("%s", AliAnalysisManager::GetCommonFileName()));
+ mgr->ConnectInput (jetTask, 0, cinput1 );
+ mgr->ConnectOutput (jetTask, 1, coutput1 );
+
+ switch (runMode) {
+ case AliAnalysisTaskLocalRhoDev::kLocal : {
+ gStyle->SetOptFit(1);
+ AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(Form("good_fits_%s", name),
+ TList::Class(),AliAnalysisManager::kOutputContainer,
+ Form("%s", AliAnalysisManager::GetCommonFileName()));
+ AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(Form("bad_fits_%s", name),
+ TList::Class(),AliAnalysisManager::kOutputContainer,
+ Form("%s", AliAnalysisManager::GetCommonFileName()));
+ mgr->ConnectOutput (jetTask, 2, coutput2);
+ mgr->ConnectOutput (jetTask, 3, coutput3);
+ } break;
+ default: break;
+ }
+ return jetTask;
+}
+
+AliAnalysisTaskLocalRhoDev* AddTaskLocalRhoDev(
+ const char *ntracks = "Tracks", // track selection used for vn estimate
+ const char *nclusters = "", // clusters (not used)
+ const char *njets = "Jets", // jet selection for finding leading jet
+ const char *nrho = "Rho", // name of nominal rho
+ const char *lrho = "LocalRho", // name of local rho object
+ Double_t jetradius = 0.3, // jet radius (to remove leading jet)
+ Double_t jetptcut = 1,
+ Double_t jetareacut = 0.557,
+ const Int_t type = 0,
+ Int_t leadhadtype = 0,
+ const char *name = "AliAnalysisTaskLocalRhoDev", // task name
+ TString fitOpts = "WLQI", // options for tfitter
+ UInt_t fitType = AliAnalysisTaskLocalRhoDev::kCombined, // fitting strategy
+ TArrayI *centralities = 0x0, // centrality binning for qa
+ UInt_t runMode = AliAnalysisTaskLocalRhoDev::kGrid // run mode
+ )
+{
+ // overloaded addtask for backward compatibility
+ UInt_t jetType = 0;
+ jetType |= AliEmcalJetTask::kAKT;
+
+ if (type==0)
+ jetType |= AliEmcalJetTask::kFullJet;
+ else if (type==1)
+ jetType |= AliEmcalJetTask::kChargedJet;
+ else if (type==2)
+ jetType |= AliEmcalJetTask::kNeutralJet;
+
+ if (jetradius==0.2)
+ jetType |= AliEmcalJetTask::kR020Jet;
+ else if (jetradius==0.3)
+ jetType |= AliEmcalJetTask::kR030Jet;
+ else if (jetradius==0.4)
+ jetType |= AliEmcalJetTask::kR040Jet;
+ else
+ jetType |= AliEmcalJetTask::kRX1Jet;
+
+ return AddTaskLocalRhoDev(ntracks, nclusters, njets, nrho, lrho, jetradius, jetptcut, jetareacut, jetType, leadhadtype, name, fitOpts, fitType, centralities, runMode);
+}
const char* runPeriod = "LHC11h", // set the run period (used on grid)
const char* uniqueName = "EMCalJF_LEGOTrainTest", // sets base string for the name of the task on the grid
UInt_t pSel = AliVEvent::kAny, // used event selection for every task except for the analysis tasks
- Bool_t useTender = kFALSE, // trigger, if tender task should be used
+ Bool_t useTender = kTRUE, // trigger, if tender, track and cluster selection should be used (always)
Bool_t isMC = kFALSE, // trigger, if MC handler should be used
Bool_t doBkg = kTRUE,
// Here you have to specify additional code files you want to use but that are not in aliroot
{
cout << "Data type not recognized! You have to specify ESD, AOD, or sESD!\n";
}
-
+
if(!useGrid)
cout << "Using " << localFiles.Data() << " as input file list.\n";
setupTask->SetGeoPath("$ALICE_ROOT/OADB/EMCAL");
// Tender Supplies
- if (useTender)
- {
- gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEMCALTender.C");
- AliAnalysisTaskSE *tender = AddTaskEMCALTender(runPeriod, kTRUE, kTRUE, kTRUE, kTRUE, kTRUE, kFALSE, kTRUE, kTRUE, kTRUE,
- AliEMCALRecoUtils::kBeamTestCorrected,kTRUE,0.1,0.05,AliEMCALRecParam::kClusterizerv2,
- kFALSE,kFALSE,-1,1e6,1e6);
- if (usedData != "AOD" && !useGrid) {
- AliTender *alitender = dynamic_cast<AliTender*>(tender);
- alitender->SetDefaultCDBStorage("local://$ALICE_ROOT/OCDB");
- }
+ if (useTender) {
+ gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPreparation.C");
+ //adjust pass when running locally. On grid give empty string, will be picked up automatically from path to ESD/AOD file
+ AliAnalysisTaskSE *clusm = AddTaskEmcalPreparation(runPeriod,"pass1");
}
// Names of the different objects passed around; these are the default names; added here mostly for documentation purposes
// rhoName is only set if the background subtraction is switched on (doBkg)
TString tracksName = "PicoTracks";
- TString clustersName = "CaloClusters";
+ TString clustersName = "EmcCaloClusters";
TString clustersCorrName = "CaloClustersCorr";
TString rhoName = "";
if(fCandidateType==kDstartoKpipi && !fUseMCInfo){
AliAODRecoCascadeHF *sbcand=(AliAODRecoCascadeHF*)fSideBandArray->At(ib);
if(!sbcand) continue;
-
+
fIsDInJet=IsDInJet(jet, sbcand,kFALSE);
Double_t pjet[3];
jet->PxPyPz(pjet);
Double_t pi=TMath::Pi(), philims2[2];
philims2[0]=-pi*1./2.;
philims2[1]=pi*3./2.;
- const Int_t nAxis=7;
- const Int_t nbinsSparse[nAxis]={nbinsz,nbinsphi,nbinsptjet,nbinsptD,nbinsmass,2, 2};
- const Double_t minSparse[nAxis]={zlims[0],philims2[0],ptjetlims[0],ptDlims[0],fMinMass,-0.5, -0.5};
- const Double_t maxSparse[nAxis]={zlims[1],philims2[1],ptjetlims[1],ptDlims[1],fMaxMass, 1.5, 1.5};
- THnSparseF *hsDphiz=new THnSparseF("hsDphiz","Z and #Delta#phi vs p_{T}^{jet}, p_{T}^{D}, mass. For SB or not and within the jet cone or not", nAxis, nbinsSparse, minSparse, maxSparse);
+ const Int_t nAxis=9;
+ const Int_t nbinsSparse[nAxis]={nbinsz,nbinsphi,nbinsptjet,nbinsptD,nbinsmass,2, 2, 2, 2};
+ const Double_t minSparse[nAxis]={zlims[0],philims2[0],ptjetlims[0],ptDlims[0],fMinMass,-0.5, -0.5,-0.5,-0.5};
+ const Double_t maxSparse[nAxis]={zlims[1],philims2[1],ptjetlims[1],ptDlims[1],fMaxMass, 1.5, 1.5, 1.5 , 1.5};
+ THnSparseF *hsDphiz=new THnSparseF("hsDphiz","Z and #Delta#phi vs p_{T}^{jet}, p_{T}^{D}, mass. SB? D within the jet cone?, D in EMCal acc?, jet in EMCal acc?", nAxis, nbinsSparse, minSparse, maxSparse);
hsDphiz->Sumw2();
fOutput->Add(hsDphiz);
if(fIsDInJet)((TH1F*)fOutput->FindObject("hzDT"))->Fill(Z(candidate,jet,kTRUE));
TH1F* hDeltaRD=(TH1F*)fOutput->FindObject("hDeltaRD");
- hDeltaRD->Fill(deltaR);
+ hDeltaRD->Fill(deltaR);
+ Bool_t bDInEMCalAcc=InEMCalAcceptance(candidate);
+ Bool_t bJetInEMCalAcc=InEMCalAcceptance(jet);
if(fUseReco){
if(fCandidateType==kD0toKpi) {
AliAODRecoDecayHF* dzero=(AliAODRecoDecayHF*)candidate;
- FillHistogramsD0JetCorr(dzero,deltaphi,phiD,z,ptD,fPtJet, aodEvent);
+ FillHistogramsD0JetCorr(dzero,deltaphi,phiD,z,ptD,fPtJet,bDInEMCalAcc,bJetInEMCalAcc, aodEvent);
}
if(fCandidateType==kDstartoKpipi) {
AliAODRecoCascadeHF* dstar = (AliAODRecoCascadeHF*)candidate;
- FillHistogramsDstarJetCorr(dstar,deltaphi,phiD,z,ptD,fPtJet);
+ FillHistogramsDstarJetCorr(dstar,deltaphi,phiD,z,ptD,fPtJet,bDInEMCalAcc,bJetInEMCalAcc);
}
} else{ //generated level
//AliInfo("Non reco");
- FillHistogramsMCGenDJetCorr(deltaphi,phiD,z,ptD,fPtJet);
+ FillHistogramsMCGenDJetCorr(deltaphi,phiD,z,ptD,fPtJet,bDInEMCalAcc,bJetInEMCalAcc);
}
}
//_______________________________________________________________________________
-void AliAnalysisTaskFlavourJetCorrelations::FillHistogramsD0JetCorr(AliAODRecoDecayHF* candidate, Double_t dPhi, Double_t phiD, Double_t z, Double_t ptD, Double_t ptj, AliAODEvent* aodEvent){
+void AliAnalysisTaskFlavourJetCorrelations::FillHistogramsD0JetCorr(AliAODRecoDecayHF* candidate, Double_t dPhi, Double_t phiD, Double_t z, Double_t ptD, Double_t ptj, Bool_t bDInEMCalAcc, Bool_t bJetInEMCalAcc, AliAODEvent* aodEvent){
Double_t masses[2]={0.,0.};
TH3F* hPtJetWithD=(TH3F*)fOutput->FindObject("hPtJetWithD");
THnSparseF* hsDphiz=(THnSparseF*)fOutput->FindObject("hsDphiz");
- Double_t point[8]={z,dPhi,ptj,ptD,masses[0],0, static_cast<Double_t>(fIsDInJet ? 1 : 0),phiD};
+
+ Double_t point[9]={z,dPhi,ptj,ptD,masses[0],0, static_cast<Double_t>(fIsDInJet ? 1 : 0),bDInEMCalAcc,bJetInEMCalAcc};
Printf("Candidate in FillHistogramsD0JetCorr IsA %s", (candidate->IsA())->GetName());
Int_t isselected=fCuts->IsSelected(candidate,AliRDHFCuts::kAll,aodEvent);
if(isselected==1 || isselected==3) {
//_______________________________________________________________________________
-void AliAnalysisTaskFlavourJetCorrelations::FillHistogramsDstarJetCorr(AliAODRecoCascadeHF* dstar, Double_t dPhi, Double_t phiD, Double_t z, Double_t ptD, Double_t ptj){
+void AliAnalysisTaskFlavourJetCorrelations::FillHistogramsDstarJetCorr(AliAODRecoCascadeHF* dstar, Double_t dPhi, Double_t phiD, Double_t z, Double_t ptD, Double_t ptj, Bool_t bDInEMCalAcc, Bool_t bJetInEMCalAcc){
//dPhi and z not used at the moment,but will be (re)added
AliAODTrack *softpi = (AliAODTrack*)dstar->GetBachelor();
THnSparseF* hsDphiz=(THnSparseF*)fOutput->FindObject("hsDphiz");
Int_t isSB=0;//IsDzeroSideBand(dstar);
- Double_t point[8]={z,dPhi,ptj,ptD,deltamass,static_cast<Double_t>(isSB), static_cast<Double_t>(fIsDInJet ? 1 : 0),phiD};
+ Double_t point[]={z,dPhi,ptj,ptD,deltamass,static_cast<Double_t>(isSB), static_cast<Double_t>(fIsDInJet ? 1 : 0),bDInEMCalAcc,bJetInEMCalAcc};
if(fIsDInJet) hPtJetWithD->Fill(ptj,deltamass,ptD);
//_______________________________________________________________________________
-void AliAnalysisTaskFlavourJetCorrelations::FillHistogramsMCGenDJetCorr(Double_t dPhi,Double_t phiD,Double_t z,Double_t ptD,Double_t ptjet){
+void AliAnalysisTaskFlavourJetCorrelations::FillHistogramsMCGenDJetCorr(Double_t dPhi,Double_t phiD,Double_t z,Double_t ptD,Double_t ptjet, Bool_t bDInEMCalAcc, Bool_t bJetInEMCalAcc){
Double_t pdgmass=0;
TH3F* hPtJetWithD=(TH3F*)fOutput->FindObject("hPtJetWithD");
THnSparseF* hsDphiz=(THnSparseF*)fOutput->FindObject("hsDphiz");
- Double_t point[8]={z,dPhi,ptjet,ptD,pdgmass,0, static_cast<Double_t>(fIsDInJet ? 1 : 0),phiD};
+ Double_t point[9]={z,dPhi,ptjet,ptD,pdgmass,0, static_cast<Double_t>(fIsDInJet ? 1 : 0),bDInEMCalAcc,bJetInEMCalAcc};
if(fCandidateType==kD0toKpi) pdgmass=TDatabasePDG::Instance()->GetParticle(421)->Mass();
if(fCandidateType==kDstartoKpipi) pdgmass=TDatabasePDG::Instance()->GetParticle(413)->Mass()-TDatabasePDG::Instance()->GetParticle(421)->Mass();
TH3F* hPtJetWithDsb=(TH3F*)fOutput->FindObject("hPtJetWithDsb");
THnSparseF* hsDphiz=(THnSparseF*)fOutput->FindObject("hsDphiz");
+ Bool_t bDInEMCalAcc=InEMCalAcceptance(candDstar);
+ Bool_t bJetInEMCalAcc=InEMCalAcceptance(jet);
+
Double_t deltaM=candDstar->DeltaInvMass();
//Printf("Inv mass = %f between %f and %f or %f and %f?",invM, sixSigmal,fourSigmal,fourSigmar,sixSigmar);
Double_t z=Z(candDstar,jet);
if(dPhi>(3*(TMath::Pi()))/2) dPhi = dPhi-2*(TMath::Pi());
Int_t isSideBand=1;//IsDzeroSideBand(candDstar);
- Double_t point[7]={z,dPhi,fPtJet,ptD,deltaM,static_cast<Double_t>(isSideBand), static_cast<Double_t>(fIsDInJet ? 1 : 0)};
+ Double_t point[9]={z,dPhi,fPtJet,ptD,deltaM,static_cast<Double_t>(isSideBand), static_cast<Double_t>(fIsDInJet ? 1 : 0),bDInEMCalAcc,bJetInEMCalAcc};
//fill the background histogram with the side bands or when looking at MC with the real background
if(isSideBand==1){
hDiffSideBand->Fill(deltaM,ptD); // M(Kpipi)-M(Kpi) side band background
TH2F* hInvMassptDbg=(TH2F*)fOutput->FindObject("hInvMassptDbg");
TH3F* hPtJetWithDsb=(TH3F*)fOutput->FindObject("hPtJetWithDsb");
-
-
+
+
if(fCandidateType==kDstartoKpipi){
AliAODRecoCascadeHF* dstarbg = (AliAODRecoCascadeHF*)candbg;
Double_t deltaM=dstarbg->DeltaInvMass();
}
return result;
}
+
+Bool_t AliAnalysisTaskFlavourJetCorrelations::InEMCalAcceptance(AliVParticle *vpart){
+ //check eta phi of a VParticle: return true if it is in the EMCal acceptance, false otherwise
+
+ Double_t phiEMCal[2]={1.405,3.135},etaEMCal[2]={-0.7,0.7};
+ Bool_t binEMCal=kTRUE;
+ Double_t phi=vpart->Phi(), eta=vpart->Eta();
+ if(phi<phiEMCal[0] || phi>phiEMCal[1]) binEMCal=kFALSE;
+ if(eta<etaEMCal[0] || eta>etaEMCal[1]) binEMCal=kFALSE;
+ return binEMCal;
+
+
+}
//Bool_t FillMCDJetInfo(AliPicoTrack *jetTrk,AliEmcalJet* jet, TClonesArray *mcArray,Double_t ptjet);
void FillHistogramsRecoJetCorr(AliVParticle* candidate, AliEmcalJet *jet, AliAODEvent* aodEvent);
- void FillHistogramsD0JetCorr(AliAODRecoDecayHF* candidate, Double_t dPhi, Double_t phiD, Double_t z, Double_t ptD, Double_t ptj, AliAODEvent* aodEvent);
+ void FillHistogramsD0JetCorr(AliAODRecoDecayHF* candidate, Double_t dPhi, Double_t phiD, Double_t z, Double_t ptD, Double_t ptj, Bool_t bDInEMCalAcc, Bool_t bJetInEMCalAcc, AliAODEvent* aodEvent);
- void FillHistogramsDstarJetCorr(AliAODRecoCascadeHF* dstar, Double_t dPhi, Double_t phiD, Double_t z, Double_t ptD, Double_t ptj);
- void FillHistogramsMCGenDJetCorr(Double_t dPhi, Double_t phiD, Double_t z,Double_t ptD,Double_t ptjet);
+ void FillHistogramsDstarJetCorr(AliAODRecoCascadeHF* dstar, Double_t dPhi, Double_t phiD, Double_t z, Double_t ptD, Double_t ptj, Bool_t bDInEMCalAcc, Bool_t bJetInEMCalAcc);
+ void FillHistogramsMCGenDJetCorr(Double_t dPhi, Double_t phiD, Double_t z,Double_t ptD,Double_t ptjet, Bool_t bDInEMCalAcc, Bool_t bJetInEMCalAcc);
void SideBandBackground(AliAODRecoCascadeHF *candDstar, AliEmcalJet *jet);
void MCBackground(AliAODRecoDecayHF *candbg);
void FillMassHistograms(Double_t mass,Double_t ptD);
void FlagFlavour(AliEmcalJet* jet);
Int_t IsDzeroSideBand(AliAODRecoCascadeHF *candDstar);
-
+ Bool_t InEMCalAcceptance(AliVParticle *vpart);
private:
AliAnalysisTaskFlavourJetCorrelations(const AliAnalysisTaskFlavourJetCorrelations &source);
printf("CREATE TASK\n"); //CREATE THE TASK
+ TString candname="DStar";
+ if(cand==0) candname="D0";
+
+ TString taskFiltername="DmesonsFilterCJ";
+ taskFiltername+=candname;
+ taskFiltername+=suffix;
+ if(theMCon) taskFiltername+="MC";
+ if(!reco) taskFiltername+="gen";
+
+ AliAnalysisTaskSEDmesonsFilterCJ* taskFilter = mgr->GetTask(taskFiltername.Data());
+ if (!taskFilter){
+ taskFilter = new AliAnalysisTaskSEDmesonsFilterCJ(taskFiltername.Data(),analysiscuts,cand);
+ if(!theMCon) reco=kTRUE;
+ taskFilter->SetMC(theMCon); //D meson settings
+ taskFilter->SetUseReco(reco);
+ mgr->AddTask(taskFilter);
+ }
+
// create the task
- AliAnalysisTaskSEDmesonsFilterCJ *taskFilter = new AliAnalysisTaskSEDmesonsFilterCJ("AnaTaskSEDmesonsFilterCJ",analysiscuts,cand);
- if(!theMCon) reco=kTRUE;
- taskFilter->SetMC(theMCon); //D meson settings
- taskFilter->SetUseReco(reco);
- taskFilter->SetName("AliAnalysisTaskSEDmesonsFilterCJ");
- mgr->AddTask(taskFilter);
-
- // create the task
-
- AliAnalysisTaskFlavourJetCorrelations *taskCorr = new AliAnalysisTaskFlavourJetCorrelations("AnaTaskFlavourJetCorrelations",
+ TString taskCorrName="TaskFlavourJetCorrelations";
+ taskCorrName+=candname;
+ taskCorrName+=suffix;
+ if(theMCon) taskCorrName+="MC";
+ if(!reco) taskCorrName+="gen";
+ taskCorrName+=cutType;
+ taskCorrName+=Form("PTj%.0f",jptcut);
+ taskCorrName+="";
+
+ AliAnalysisTaskFlavourJetCorrelations *taskCorr = new AliAnalysisTaskFlavourJetCorrelations(taskCorrName.Data(),
analysiscuts, cand);
- taskCorr->SetName("AliAnalysisTaskFlavourJetCorrelations");
+
taskCorr->SetJetsName(jetArrname);
taskCorr->SetMC(theMCon);
taskCorr->SetUseReco(reco);
if(reco) suffix+="rec";
}
- TString candname="DStar";
- if(cand==0) candname="D0";
// Create and connect containers for input/output
TString outputfile = AliAnalysisManager::GetCommonFileName();
gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskJetPreparation.C");
AddTaskJetPreparation(sRunPeriod,"PicoTracks",bIsMC ? "MCParticlesSelected" : "",/*next 7 emcal default settings*/"","",2.,0.,0.03,0.015,0.15,uTriggerMask, kFALSE /*track cluster*/,kFALSE /*do histos*/,kTRUE /*make pico tracks*/,kFALSE /*make emcal trigger*/,kFALSE /*is emcal train*/);
- gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPicoTrackMaker.C");
- AliEmcalPicoTrackMaker *taskPicoTrack = AddTaskEmcalPicoTrackMaker(sUsedTrks.Data(),sInputTrk.Data());
- taskPicoTrack->SelectCollisionCandidates(uTriggerMask);
gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJet.C");
//gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJetSample.C");
#pragma link C++ class AliAnalysisTaskEmcalJetHMEC+;
#pragma link C++ class AliAnalysisTaskEmcalJetHadCorQA+;
#pragma link C++ class AliAnalysisTaskEmcalJetHadEPpid+;
+#pragma link C++ class AliAnalysisTaskEmcalJetHF+;
#pragma link C++ class AliAnalysisTaskEmcalJetMass+;
#pragma link C++ class AliAnalysisTaskEmcalJetMassBkg+;
#pragma link C++ class AliAnalysisTaskEmcalJetMassResponse+;
#pragma link C++ class AliAnalysisTaskEmcalTriggerInfoQA+;
#pragma link C++ class AliAnalysisTaskHJetEmbed+;
#pragma link C++ class AliAnalysisTaskJetMatching+;
-#pragma link C++ class AliAnalysisTaskRhoVnModulation+;
+#pragma link C++ class AliAnalysisTaskJetV2+;
#pragma link C++ class AliAnalysisTaskRhoMass+;
#pragma link C++ class AliAnalysisTaskRhoMassBase+;
#pragma link C++ class AliAnalysisTaskSAJF+;
fkEvtClasses(12),
fOutputList(0x0),
fHistEvtSelection(0x0),
-fh1JetEntries(0x0),
+fh2JetEntries(0x0),
fh2Circularity(0x0),
fhnJetTM(0x0)
{
fkEvtClasses(12),
fOutputList(0x0),
fHistEvtSelection(0x0),
-fh1JetEntries(0x0),
+fh2JetEntries(0x0),
fh2Circularity(0x0),
fhnJetTM(0x0)
{
fHistEvtSelection->GetXaxis()->SetBinLabel(5,"centrality (rejected)");
fHistEvtSelection->GetXaxis()->SetBinLabel(6,"multiplicity (rejected)");
fOutputList->Add(fHistEvtSelection);
- fh1JetEntries=new TH1F("JetEntries","",150,0,150);
- fOutputList->Add(fh1JetEntries);
+ fh2JetEntries=new TH2F("JetEntries","",150,0,150,10,-0.5,9.5);
+ fOutputList->Add(fh2JetEntries);
fh2Circularity=new TH2F("Circcularity","",10,0,1,150,0,150);
fOutputList->Add(fh2Circularity);
- Int_t nbinsJet[6]={15,30,9,36,10,20};
- Double_t binlowJet[6]= {0, 0, 0,-0.5*TMath::Pi(),0,0};
- Double_t binupJet[6]= {1.5, 150,150,1.5*TMath::Pi(),1,200};
- fhnJetTM = new THnSparseF("fhnJetTM", "fhnJetTM; dr;pt_jet;pt_track;phi;",6,nbinsJet,binlowJet,binupJet);
- Double_t xPt3[10];
+ Int_t nbinsJet[9]={10,9,7,9,36,10,2,10,10};
+ Double_t binlowJet[9]= {0,0, 0, 0,-0.5*TMath::Pi(),0,0,-0.5,0};
+ Double_t binupJet[9]= {100,0.9, 150,150,1.5*TMath::Pi(),1,200,9.5,20};
+ fhnJetTM = new THnSparseF("fhnJetTM", "fhnJetTM; cent;dr;pt_jet;pt_track;phi;circ;nc;pthard",9,nbinsJet,binlowJet,binupJet);
+ Double_t *xPt3=new Double_t[10];
xPt3[0] = 0.;
for(Int_t i = 1;i<=9;i++){
if(xPt3[i-1]<2)xPt3[i] = xPt3[i-1] + 0.4; // 1 - 5
else if(xPt3[i-1]<11)xPt3[i] = xPt3[i-1] + 3; // 5 - 12
else xPt3[i] = xPt3[i-1] + 150.; // 18
}
- fhnJetTM->SetBinEdges(2,xPt3);
+ fhnJetTM->SetBinEdges(3,xPt3);
+
+ Double_t *xPt2=new Double_t[10];
+ xPt2[0] = 0.;
+ xPt2[1]=20;
+ xPt2[2]=40;
+ xPt2[3]=60;
+ xPt2[4]=80;
+ xPt2[5]=100;
+ xPt2[6]=120;
+ xPt2[7]=150;
+
+ fhnJetTM->SetBinEdges(2,xPt2);
fOutputList->Add(fhnJetTM);
-
+ delete [] xPt3;
+ delete [] xPt2;
// =========== Switch on Sumw2 for all histos ===========
for (Int_t i=0; i<fOutputList->GetEntries(); ++i) {
TH1 *h1 = dynamic_cast<TH1*>(fOutputList->At(i));
fHistEvtSelection->Fill(0);
// accepted events
// -- end event selection --
-
+ // pt hard
+ Double_t pthard=0;
+ Double_t pthardbin=0;
+ if(fDoMatching){
+ pthard = AliAnalysisTaskFastEmbedding::GetPtHard();
+ pthardbin = GetPtHardBin(pthard);}
// get background
AliAODJetEventBackground* externalBackground = 0;
if(fAODOut&&!externalBackground&&fBackgroundBranch.Length()){
Float_t mxy = 0.;
Int_t nc = 0;
Float_t sump2 = 0.;
-
+ Float_t ptmax=-10;
for(int it = 0;it<ParticleList.GetEntries();++it){
AliVParticle *track = (AliVParticle*)ParticleList.At(it);
TVector3 pp(track->Px(), track->Py(), track->Pz());
Float_t dphi = RelativePhi(phi,phibig);
if(TMath::Abs(dphi)>=0.5*TMath::Pi()) continue;
Float_t r = TMath::Sqrt(dphi * dphi + deta * deta);
- if (r < 0.4 && pt>fCutTM) {
+
+ if (r < 0.4 && pt>fCutTM) {
//longitudinal and perpendicular component of the track pT in the
//local frame
+ if(pt>ptmax) ptmax=pt;
TVector3 pLong = pp.Dot(ppJ1) / ppJ1.Mag2() * ppJ1;
TVector3 pPerp = pp - pLong;
//projection onto the two perpendicular vectors defined above
mxy += (ppjX * ppjY / ppjT);
nc++;
sump2 += ppjT;}
- // max pt
+
if(nc<2) continue;
} // 1st Track Loop
if(jev==1) circ=2*eval[0];
if(jev==0) circ=2*eval[1];
fh2Circularity->Fill(circ,ptbig);
- fh1JetEntries->Fill(ptbig);
+ fh2JetEntries->Fill(ptbig,pthardbin);
+
+
for (Int_t ip = 0; ip < ParticleList.GetEntries(); ip++) {
AliVParticle *track = (AliVParticle*)ParticleList.At(ip);
+
TVector3 pp(track->Px(), track->Py(), track->Pz());
Float_t phi = track->Phi();
Float_t eta = track->Eta();
Float_t pt = track->Pt();
-
+
Float_t deta = eta - etabig;
Float_t dphi = RelativePhi(phi,phibig);
if(TMath::Abs(dphi)>=0.5*TMath::Pi()) continue;
if(phistr<-0.5*TMath::Pi()) phistr += 2*TMath::Pi();
if(phistr>1.5*TMath::Pi()) phistr -= 2*TMath::Pi();
- double jetEntries[6] = {dRR,ptbig,pt,phistr,circ,static_cast<double>(nc)};
+ double jetEntries[9] = {centValue,dRR,ptbig,pt,phistr,circ,static_cast<double>(nc),pthardbin,ptmax};
fhnJetTM->Fill(jetEntries);
} // 2nd Track loop
else aod = fAODOut;
if(!aod)return 0;
- TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(aod->FindListObject("aodExtraTracks"));
+ for(int it = 0;it < aod->GetNumberOfTracks();++it){
+ AliAODTrack *tr = aod->GetTrack(it);
+ Bool_t bGood = false;
+ if(fFilterType == 0)bGood = true;
+ else if(fFilterType == 1)bGood = tr->IsHybridTPCConstrainedGlobal();
+ else if(fFilterType == 2)bGood = tr->IsHybridGlobalConstrainedGlobal();
+ if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
+ if(fRequireITSRefit==1){if((tr->GetStatus()&AliESDtrack::kITSrefit)==0)continue;}
+ if(bGood==false) continue;
+ if (fApplySharedClusterCut) {
+ Double_t frac = Double_t(tr->GetTPCnclsS()) /Double_t(tr->GetTPCncls());
+ if (frac > 0.4) continue;
+ }
+ if(TMath::Abs(tr->Eta())>0.9)continue;
+ if(tr->Pt()<0.15)continue;
+ list->Add(tr);
+ iCount++;
+ }
+
+
+
+
+
+ TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(aod->FindListObject("aodExtraTracks"));
if(!aodExtraTracks)return iCount;
for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
if(fDebug) printf("pt extra track %.2f \n", trackAOD->Pt());
list->Add(trackAOD);
iCount++;
- }
+ }
+ list->Sort();
return iCount;
}
if(phibin<0||phibin>=fNRPBins){AliError("Phi Bin not defined");}
return phibin;
}
+
+Int_t AliAnalysisTaskJetAntenna::GetPtHardBin(Double_t ptHard){
+
+ const Int_t nBins = 10;
+ Double_t binLimits[nBins] = { 5., 11., 21., 36., 57., 84., 117., 156., 200., 249. }; // lower limits
+
+ Int_t bin = -1;
+ while(bin<nBins-1 && binLimits[bin+1]<ptHard){
+ bin++;
+ }
+
+ return bin;
+}
Double_t RelativePhi(Double_t angle1,Double_t angle2);
Int_t GetPhiBin(Double_t phi);
-
+ Int_t GetPtHardBin(Double_t ptHard);
virtual AliVEvent::EOfflineTriggerTypes GetOfflineTrgMask() const { return fOfflineTrgMask; }
virtual void GetBranchNames(TString &branch1, TString &branch2) const { branch1 = fJetBranchName[0]; branch2 = fJetBranchName[1]; }
Int_t SelectTrigger(TList *list,Double_t minT,Double_t maxT,Int_t &number);
Int_t GetHardestTrackBackToJet(AliAODJet *jet);
Int_t GetListOfTracksCloseToJet(TList *list,AliAODJet *jet);
+
// jets to compare
TString fJetBranchName[2]; // name of jet branches to compare
TList *fListJets[2]; //! jet lists
TList *fOutputList; //! output data container
TH1I *fHistEvtSelection; //! event selection statistic
- TH1F* fh1JetEntries; //centrality bias of triggers
+ TH2F* fh2JetEntries; //centrality bias of triggers
TH2F* fh2Circularity; //jet density
THnSparse *fhnJetTM; //Recoil jet spectrum
// mcAccCuts->SetMinNHitITS(mintrackrefsITS);
//mcAccCuts->SetMinNHitTPC(mintrackrefsTPC);
- TObjArray* recList = new TObjArray(0);
+ TObjArray* recMCList = new TObjArray(0);
TObjArray* secList = new TObjArray(0) ;
printf("CREATE MC KINE CUTS\n");
- TObjArray* recMCList = new TObjArray(0);
+ TObjArray* recList = new TObjArray(0);
TObjArray* mcList = new TObjArray(0) ;
mcList->AddLast(mcKineCuts);
- recMCList->AddLast(mcKineCuts);
+ recList->AddLast(mcKineCuts);
//mcList->AddLast(mcAccCuts);
//CREATE THE INTERFACE TO CORRECTION FRAMEWORK USED IN THE TASK
STRANGENESS/Hypernuclei/AliAnalysisTaskESDNuclExFilterMC.cxx
STRANGENESS/Hypernuclei/AliAnalysisTaskReadNuclexAOD.cxx
STRANGENESS/Hypernuclei/AliAnalysisTaskAntiHe4.cxx
-
+ STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2.cxx
)
FORWARD/analysis2/DrawUnfoldedSummary.C
FORWARD/analysis2/ForwardAODConfig.C
FORWARD/analysis2/CentralAODConfig.C
+ FORWARD/analysis2/dNdetaConfig.C
FORWARD/analysis2/MakeAOD.C
FORWARD/analysis2/MakedNdeta.C
FORWARD/analysis2/MakeELossFits.C
FORWARD/analysis2/MakeForwardQA.C
FORWARD/analysis2/MakeMCCorr.C
FORWARD/analysis2/OtherData.C
+ FORWARD/analysis2/other.root
DESTINATION PWGLF/FORWARD/analysis2 )
# FORWARD/analysis2/AliFMDCorrAcceptance.h
--- /dev/null
+# -*- mode: CMake -*-
+#--------------------------------------------------------------------------------#
+# Package File for PWGLFresonances #
+# Author : Johny Jose (johny.jose@cern.ch) #
+# Variables Defined : #
+# #
+# SRCS - C++ source files #
+# HDRS - C++ header files #
+# DHDR - ROOT Dictionary Linkdef header file #
+# CSRCS - C source files #
+# CHDRS - C header files #
+# EINCLUDE - Include directories #
+# EDEFINE - Compiler definitions #
+# ELIBS - Extra libraries to link #
+# ELIBSDIR - Extra library directories #
+# PACKFFLAGS - Fortran compiler flags for package #
+# PACKCXXFLAGS - C++ compiler flags for package #
+# PACKCFLAGS - C compiler flags for package #
+# PACKSOFLAGS - Shared library linking flags #
+# PACKLDFLAGS - Module linker flags #
+# PACKBLIBS - Libraries to link (Executables only) #
+# EXPORT - Header files to be exported #
+# CINTHDRS - Dictionary header files #
+# CINTAUTOLINK - Set automatic dictionary generation #
+# ARLIBS - Archive Libraries and objects for linking (Executables only) #
+# SHLIBS - Shared Libraries and objects for linking (Executables only) #
+#--------------------------------------------------------------------------------#
+
+set ( SRCS
+ SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskJetSpectraAOD.cxx
+ )
+
+string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" )
+
+set ( DHDR PWGLFspectraJETLinkDef.h)
+
+set ( EXPORT )
+
+set ( EINCLUDE PWGLF/SPECTRA/PiKaPr/TestAOD TPC TOF STEER/STEER STEER/ESD STEER/AOD STEER/CDB STEER/STEERBase ANALYSIS)
* @ingroup pwglf_forward_dndeta
*/
AliAnalysisTask*
-AddTaskCentraldNdeta(const char* trig = "INEL",
+AddTaskCentraldNdeta(const char* config = "dNdetaConfig.C",
+ const char* trig = "INEL",
Double_t vzMin = -10,
Double_t vzMax = +10,
- Bool_t useCent = false,
+ const char* cent = "",
const char* scheme = 0,
- Bool_t cutEdges = false,
Double_t trigEff = 1,
Double_t trigEff0 = 1,
- Bool_t corrEmpty = true,
- const char* mcanalysisfilename = "none")
+ Bool_t satVtx = false)
{
// --- Load libraries ----------------------------------------------
gROOT->LoadClass("AliAODForwardMult", "libPWGLFforward2");
// --- Make our object ---------------------------------------------
AliCentraldNdetaTask* task = new AliCentraldNdetaTask("Central");
- task->SetMCFinalCorrFilename(mcanalysisfilename);
// Set the vertex range to use
task->SetIpZRange(vzMin, vzMax);
task->SetTriggerMask(trig);
task->SetTriggerEff(trigEff); // 0.997535);
task->SetTriggerEff0(trigEff0);
- // Whether to cut edges when re-binning
- task->SetCutEdges(cutEdges);
- // Whether to correct for empty bins when projecting
- task->SetCorrEmpty(corrEmpty);
- // Whether to use TH2::ProjectionX
- task->SetUseROOTProjectX(false);
+
// Bit mask of
//
// kNone Normalise to accepted events
// Note, that a bin specified as a-b, covers the interval from a,
// inclusive to b exclusive. An upper bound of 100 is treated
// especially, and the upper bound is inclusive in that case .
- if (useCent) {
- Short_t bins[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 100 };
- task->SetCentralityAxis(10, bins);
+ if (cent) {
+ if (task->SetCentralityMethod(cent)) {
+ Short_t bins[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 100 };
+ task->SetCentralityAxis(10, bins);
+ }
}
+
+ // Set-up task using a script
+ task->Configure(config);
+
+ // Connect to manager
task->Connect(0,0);
return task;
* @ingroup pwglf_forward_dndeta
*/
AliAnalysisTask*
-AddTaskForwarddNdeta(const char* trig = "INEL",
+AddTaskForwarddNdeta(const char* config = "dNdetaConfig.C",
+ const char* trig = "INEL",
Double_t vzMin = -10,
Double_t vzMax = +10,
- Bool_t useCent = false,
+ const char* cent = "none",
const char* scheme = 0,
- Bool_t cutEdges = false,
Double_t trigEff = 1,
Double_t trigEff0 = 1,
- Bool_t corrEmpty= false,
- Bool_t satVtx = false,
- const char* mcanalysisfilename = "/home/hehi/alex/work/dispVtxDNdeta/mcCorrectionPos.root")
+ Bool_t satVtx = false)
{
// --- Load libraries ----------------------------------------------
gROOT->LoadClass("AliAODForwardMult", "libPWGLFforward2");
// --- Make our object ---------------------------------------------
AliForwarddNdetaTask* task = new AliForwarddNdetaTask("Forward");
- //Set the filename of the corresponding MC analysis
- task->SetMCFinalCorrFilename(mcanalysisfilename);
// Set the vertex range to use
task->SetIpZRange(vzMin, vzMax);
// Set the trigger efficiency
task->SetTriggerEff(trigEff); // 0.997535);
task->SetTriggerEff0(trigEff0);
- // Whether to cut edges when re-binning
- task->SetCutEdges(cutEdges);
- // Whether to correct for empty bins when projecting
- // task->SetCorrEmpty(true);
- task->SetCorrEmpty(corrEmpty);
- // Whether to use TH2::ProjectionX
- task->SetUseROOTProjectX(false);
// Bit mask of
//
// kNone Normalise to accepted events
// Note, that a bin specified as a-b, covers the interval from a,
// inclusive to b exclusive. An upper bound of 100 is treated
// especially, and the upper bound is inclusive in that case .
- if (useCent) {
- Short_t bins[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 100 };
- task->SetCentralityAxis(10, bins);
+ if (cent) {
+ Info("", "Centrality estimator is %s (AddTask)", cent);
+ if (task->SetCentralityMethod(cent)) {
+ Short_t bins[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 100 };
+ task->SetCentralityAxis(10, bins);
+ }
}
// Set satellite vertex flag
task->SetSatelliteVertices(satVtx);
+ // Set-up task using a script
+ task->Configure(config);
+
+ // Connect to manager
task->Connect(0,0);
+
return task;
}
* @ingroup pwglf_forward_dndeta
*/
AliAnalysisTask*
-AddTaskMCTruthdNdeta(const char* trig = "INEL",
+AddTaskMCTruthdNdeta(const char* config = "dNdetaConfig.C",
+ const char* trig = "INEL",
Double_t vzMin = -10,
Double_t vzMax = +10,
- Bool_t useCent = false,
+ const char* cent = "",
const char* scheme = 0,
- Bool_t cutEdges = false,
Double_t trigEff = 1,
Double_t trigEff0 = 1,
- Bool_t corrEmpty = false)
+ Bool_t satOnly = false)
{
// --- Load libraries ----------------------------------------------
gROOT->LoadClass("AliAODForwardMult", "libPWGLFforward2");
// Set the trigger efficiency
task->SetTriggerEff(trigEff); // 0.997535);
task->SetTriggerEff0(trigEff0);
- // Whether to cut edges when re-binning
- task->SetCutEdges(cutEdges);
- // Whether to correct for empty bins when projecting
- task->SetCorrEmpty(corrEmpty);
- // Whether to use TH2::ProjectionX
- task->SetUseROOTProjectX(false);
// Bit mask of
//
// kNone Normalise to accepted events
// inclusive to b exclusive. An upper bound of 100 is treated
// especially, and the upper bound is inclusive in that case .
if (useCent) {
- Short_t bins[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
- task->SetCentralityAxis(11, bins);
+ if (task->SetCentralityMethod(cent)) {
+ Short_t bins[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
+ task->SetCentralityAxis(11, bins);
+ }
}
+ // Set satellite vertex flag
+ task->SetSatelliteVertices(satOnly);
+
+ // Set-up task using a script
+ task->Configure(config);
+
+ // Connect to manager
task->Connect(0,0);
return task;
#include <AliLog.h>
#include <AliAODEvent.h>
#include <TROOT.h>
+#include <TSystem.h>
+#include <TInterpreter.h>
//____________________________________________________________________
AliBaseAODTask::AliBaseAODTask()
{
}
//____________________________________________________________________
-AliBaseAODTask::AliBaseAODTask(const char* name)
+AliBaseAODTask::AliBaseAODTask(const char* name,
+ const char* title)
: AliAnalysisTaskSE(name),
fTriggerMask(0xFFFFFFFF),
fMinIpZ(0),
fSums(0),
fResults(0)
{
+ SetTitle(title && title[0] != '\0' ? title : this->ClassName());
fCentAxis.SetName("centAxis");
fCentAxis.SetTitle("Centrality [%]");
DefineOutput(1, TList::Class());
DefineOutput(2, TList::Class());
}
+
+//____________________________________________________________________
+Bool_t
+AliBaseAODTask::Configure(const char* macro)
+{
+ // --- Configure the task ------------------------------------------
+ TString macroPath(gROOT->GetMacroPath());
+ if (!macroPath.Contains("$(ALICE_ROOT)/PWGLF/FORWARD/analysis2")) {
+ macroPath.Append(":$(ALICE_ROOT)/PWGLF/FORWARD/analysis2");
+ gROOT->SetMacroPath(macroPath);
+ }
+ TString mac(macro);
+ if (mac.EqualTo("-default-"))
+ mac = "$(ALICE_ROOT)/PWGLF/FORWARD/analysis2/dNdetaConfig.C";
+ const char* config = gSystem->Which(gROOT->GetMacroPath(), mac.Data());
+ if (!config) {
+ AliWarningF("%s not found in %s", mac.Data(), gROOT->GetMacroPath());
+ return false;
+ }
+ // if (gInterpreter->IsLoaded(config))
+ // gInterpreter->UnloadFile(config);
+
+ AliInfoF("Loading configuration of '%s' from %s", ClassName(), config);
+ gROOT->Macro(Form("%s((%s*)%p)", config, GetTitle(), this));
+
+ Info("Configure", "Unloading configuration script");
+ gInterpreter->UnloadFile(config);
+ delete config;
+
+ return true;
+}
+
//________________________________________________________________________
void
AliBaseAODTask::SetTriggerMask(const char* mask)
fVertex->SetFillStyle(3001);
fVertex->SetLineColor(kRed+2);
fSums->Add(fVertex);
- fAccVertex = static_cast<TH1*>(fVertex->Clone("vertexAcc"));
+ fAccVertex = static_cast<TH1D*>(fVertex->Clone("vertexAcc"));
fAccVertex->SetTitle("IP_{z} of accepted events");
fAccVertex->SetDirectory(0);
fAccVertex->SetFillColor(kGreen+2);
fCent->SetLineColor(kRed+2);
fCent->SetDirectory(0);
fSums->Add(fCent);
- fAccCent = static_cast<TH1*>(fCent->Clone("centAcc"));
+ fAccCent = static_cast<TH1D*>(fCent->Clone("centAcc"));
fAccCent->SetTitle("Centrality of accepted events");
fAccCent->SetDirectory(0);
fAccCent->SetFillColor(kGreen+2);
* Constructor
*
* @param name Name of task
+ * @param title Class name used in configuration script
*/
- AliBaseAODTask(const char* name);
+ AliBaseAODTask(const char* name,
+ const char* title);
/**
* Destructor
*/
virtual ~AliBaseAODTask() {}
+ /**
+ * Configure this task via a macro
+ *
+ * @param macro Macro to configure va
+ *
+ * @return true on success, false otherwise
+ */
+ virtual Bool_t Configure(const char* macro="dNdetaConfig.C");
/**
* @{
* @name Set parameters
Double_t fMinIpZ; // Least z--coordiante of interaction point
Double_t fMaxIpZ; // Largest z--coordiante of interaction point
TAxis fCentAxis; // Centrality axis
- TH1* fTriggers; // Histogram of triggers
- TH1* fEventStatus; // Histogram of event selection
- TH1* fVertex; // Vertex distribution of all events
- TH1* fCent; // Centrality distribution of all events
- TH1* fAccVertex; // Vertex distribution of accepted events
- TH1* fAccCent; // Centrality distribution of accepted events
+ TH1I* fTriggers; // Histogram of triggers
+ TH1I* fEventStatus; // Histogram of event selection
+ TH1D* fVertex; // Vertex distribution of all events
+ TH1D* fCent; // Centrality distribution of all events
+ TH1D* fAccVertex; // Vertex distribution of accepted events
+ TH1D* fAccCent; // Centrality distribution of accepted events
Bool_t fFirstEvent; // Information stored or not
Bool_t fCloneList; // Wether to clone sum list for results
TList* fSums; // Output list of sums
#include <AliESDEvent.h>
#include <TROOT.h>
#include <TSystem.h>
+#include <TInterpreter.h>
#include <iostream>
#include <iomanip>
AliInfoF("Loading configuration of '%s' from %s", ClassName(), config);
gROOT->Macro(Form("%s((%s*)%p)", config, GetTitle(), this));
+
+ Info("Configure", "Unloading configuration script");
+ gInterpreter->UnloadFile(config);
+
delete config;
return true;
fFinalMCCorrFile(""),
fSatelliteVertices(0),
fEmpiricalCorrection(0),
- fMeanVsC(0)
+ fMeanVsC(0),
+ fCentMethod("VOM")
{
//
// Constructor
//____________________________________________________________________
AliBasedNdetaTask::AliBasedNdetaTask(const char* name)
- : AliBaseAODTask(Form("%sdNdeta", name)),
+ : AliBaseAODTask(Form("%sdNdeta", name),"AliBasedNdetaTask"),
fRebin(5), // Rebinning factor
fCutEdges(false),
fSymmetrice(true),
fFinalMCCorrFile(""),
fSatelliteVertices(0),
fEmpiricalCorrection(0),
- fMeanVsC(0)
+ fMeanVsC(0),
+ fCentMethod("VOM")
{
//
// Constructor
fShapeCorr = static_cast<TH2F*>(c->Clone());
fShapeCorr->SetDirectory(0);
}
+//____________________________________________________________________
+Bool_t
+AliBasedNdetaTask::SetCentralityMethod(const TString& method)
+{
+ TString meth(method);
+ meth.ToUpper();
+
+ // Info("", "Setting centrality estimator to %s", method.Data());
+ // Here, we make sure that the string is well formed, and
+ // that the requested method exists. If not, we bark.
+ if (meth.EqualTo("NONE") || meth.EqualTo("NO") || meth.EqualTo("FALSE")) return false;
+ if (meth.IsNull() || // Default
+ meth.EqualTo("TRUE") || // If --cent is given w/o arg
+ meth.EqualTo("DEFAULT") || // Stored in Mult AOD object
+ meth.EqualTo("AOD")) // Stored in Mult AOD object
+ meth = "";
+ else if (meth.EqualTo("V0M") || // VZERO multiplicity
+ meth.EqualTo("V0A") || // VZERO A-side
+ meth.EqualTo("V0A0") || // VZERO A-side
+ meth.EqualTo("V0A123") || // VZERO A-side
+ meth.EqualTo("V0C") || // VZERO C-side
+ meth.EqualTo("FMD") || // FMD
+ meth.EqualTo("TRK") || // Tracks
+ meth.EqualTo("TKL") || // Tracklets
+ meth.EqualTo("CL0") || // Clusters - layer 0
+ meth.EqualTo("CL1") || // Clusters - layer 1
+ meth.EqualTo("CND") || // ?
+ meth.EqualTo("ZNA") || // ZDC corr A-side
+ meth.EqualTo("ZNC") || // ZDC corr C-side
+ meth.EqualTo("ZPA") || // ZDC protons A-side
+ meth.EqualTo("ZPC") || // ZDC protons C-side
+ meth.EqualTo("NPA")) // ?
+ ; // No-op
+ else if (meth.EqualTo("V0MEQ") || // ?
+ meth.EqualTo("V0AEQ") || // ?
+ meth.EqualTo("V0CEQ")) //
+ meth.ReplaceAll("EQ", "eq");
+ else if (meth.EqualTo("V0MVSFMD") || // VZERO vs FMD multiplicity
+ meth.EqualTo("TKLVSV0M") || // Tracklets vs VZERO multiplicty
+ meth.EqualTo("ZEMVSZDC")) // ZDC neutrons vs proton veto
+ meth.ReplaceAll("VS", "vs");
+ else if (meth.EqualTo("V0MTRUE") || // VZERO multiplicity
+ meth.EqualTo("V0ATRUE") || // VZERO A-side
+ meth.EqualTo("V0CTRUE") || // VZERO C-side
+ meth.EqualTo("FMDTRUE") || // FMD
+ meth.EqualTo("TRKTRUE") || // Tracks
+ meth.EqualTo("TKLTRUE") || // Tracklets
+ meth.EqualTo("CL0TRUE") || // Clusters - layer 0
+ meth.EqualTo("CL1TRUE") || // Clusters - layer 1
+ meth.EqualTo("CNDTRUE") || // ?
+ meth.EqualTo("ZNATRUE") || // ZDC corr A-side
+ meth.EqualTo("ZNCTRUE") || // ZDC corr C-side
+ meth.EqualTo("ZPATRUE") || // ZDC protons A-side
+ meth.EqualTo("ZPCTRUE")) // ZDC protons C-side
+ meth.ReplaceAll("TRUE", "true");
+ else if (meth.EqualTo("V0MEQTRUE") || // VZERO multiplicity
+ meth.EqualTo("V0AEQTRUE") || // VZERO A-side
+ meth.EqualTo("V0CEQTRUE")) // VZERO C-side
+ meth.ReplaceAll("EQTRUE", "Eqtrue");
+ else {
+ AliErrorF("Unknown centrality estimator: %s", meth.Data());
+ return false;
+ }
+
+ if (fName.Contains("Forward", TString::kIgnoreCase) &&
+ meth.Contains("FMD"))
+ AliWarningF("Centrality estimator %s used by %s - beware of auto-corr",
+ meth.Data(), fName.Data());
+ else if (fName.Contains("Central", TString::kIgnoreCase) &&
+ (meth.Contains("CL0") || meth.Contains("TKL")))
+ AliWarningF("Centrality estimator %s used by %s - beware of auto-corr",
+ meth.Data(), fName.Data());
+
+ fCentMethod = meth;
+ return true;
+}
+
//________________________________________________________________________
void
AliBasedNdetaTask::InitializeCentBins()
fSums->Add(AliForwardUtil::MakeParameter("empirical",
fEmpiricalCorrection != 0));
fSums->Add(AliForwardUtil::MakeParameter("scheme", fNormalizationScheme));
+ fSums->Add(new TNamed("centEstimator", fCentMethod.Data()));
// Make our centrality bins
InitializeCentBins();
// Loop over centrality bins
CentralityBin* allBin =
static_cast<CentralityBin*>(fListOfCentralities->At(0));
- if (allBin->ProcessEvent(forward, fTriggerMask, isZero,
- fMinIpZ, fMaxIpZ, data, dataMC)) taken = true;
+ if (allBin->ProcessEvent(forward, fTriggerMask, isZero, fMinIpZ, fMaxIpZ,
+ data, dataMC)) taken = true;
// Find this centrality bin
if (HasCentrality()) {
Double_t cent = forward->GetCentrality();
+ if (!fCentMethod.IsNull()) {
+ AliAODHeader* hdr = aod.GetHeader();
+ if (hdr) {
+ AliCentrality* cP = hdr->GetCentralityP();
+ if (cP) {
+ cent = cP->GetCentralityPercentile(fCentMethod);
+ }
+ }
+ }
Int_t icent = fCentAxis.FindBin(cent);
CentralityBin* thisBin = 0;
if (icent >= 1 && icent <= fCentAxis.GetNbins())
thisBin = static_cast<CentralityBin*>(fListOfCentralities->At(icent));
if (thisBin)
if (thisBin->ProcessEvent(forward, fTriggerMask, isZero, fMinIpZ,
- fMaxIpZ, data, dataMC)) taken = true;
+ fMaxIpZ, data, dataMC))
+ taken = true;
}
return taken;
PFV("Trigger efficiency", fTriggerEff);
PFV("Bin-0 Trigger efficiency", fTriggerEff0);
PFV("Shape correction", (fShapeCorr?fShapeCorr->GetName():"none"));;
+ PFV("Centrality estimator", fCentMethod);
gROOT->DecreaseDirLevel();
}
* @param satVtx
*/
void SetSatelliteVertices(Bool_t satVtx) { fSatelliteVertices = satVtx; }
+ /**
+ * Set which centrality estimator to use - if not set, use the one
+ * from the Forward AOD object. Note, the string is diagnosed, and
+ * if found not to be valid, then a the program terminates via a
+ * Fatal.
+ *
+ * @param method String definining centrality method (case insensitive)
+ * Typical values are
+ * - V0M (e.g., PbPb)
+ * - V0A
+ * - V0C
+ * - FMD
+ * - ZNA (e.g., pPb)
+ * - ZNC (e.g., Pbp)
+ * - ZPA
+ * - ZPC
+ * - ZEMvsZDC
+ *
+ * @return true if @a method is valid estimator
+ */
+ Bool_t SetCentralityMethod(const TString& method);
/**
* Get a string representing the normalization scheme
*
Bool_t fSatelliteVertices; // satellite vertex flag
TH2D* fEmpiricalCorrection; // Empirical correction
TH2D* fMeanVsC; //mean signal per event vs cent
- ClassDef(AliBasedNdetaTask,14); // Determine charged particle density
+ TString fCentMethod; // Centrality estimator
+ ClassDef(AliBasedNdetaTask,15); // Determine charged particle density
};
#endif
#include "AliInputEventHandler.h"
#include "TFile.h"
#include "AliEventplane.h"
+#include "AliESDVertex.h"
+#include "AliAODVertex.h"
ClassImp(AliCopyHeaderTask)
#if 0
aodHeader->SetEventType(esd->GetEventType());
aodHeader->SetEventNumberESDFile(esd->GetHeader()->GetEventNumberInFile());
if(esd->GetCentrality())
- aodHeader->SetCentrality(new AliCentrality(*(esd->GetCentrality())));
+ aodHeader->SetCentrality(esd->GetCentrality());
else
aodHeader->SetCentrality(0);
aodHeader->SetZDCP2Energy(esd->GetZDCP2Energy());
aodHeader->SetZDCEMEnergy(esd->GetZDCEMEnergy(0),esd->GetZDCEMEnergy(1));
+ AliESDHeader* esdHeader = esd->GetHeader();
+ if (esdHeader) {
+ aodHeader->SetIRInt2InteractionMap(esdHeader->GetIRInt2InteractionMap());
+ aodHeader->SetIRInt1InteractionMap(esdHeader->GetIRInt1InteractionMap());
+ }
+
TTree* tree = fInputHandler->GetTree();
if (tree) {
TFile* file = tree->GetCurrentFile();
AliEventplane* ep = esd->GetEventplane();
if (ep) aodHeader->SetEventplane(ep);
+ // Copy primary vertices
+ CopyVertex(*aod, esd->GetPrimaryVertex(), AliAODVertex::kPrimary);
+ CopyVertex(*aod, esd->GetPrimaryVertexSPD(), AliAODVertex::kMainSPD);
+ CopyVertex(*aod, esd->GetPrimaryVertexTPC(), AliAODVertex::kMainTPC);
+
+ // Loop over pile-ups
+ for (Int_t i = 0; i < esd->GetNumberOfPileupVerticesSPD(); i++)
+ CopyVertex(*aod, esd->GetPileupVertexSPD(i), AliAODVertex::kPileupSPD);
+ for (Int_t i = 0; i < esd->GetNumberOfPileupVerticesTracks(); i++)
+ CopyVertex(*aod, esd->GetPileupVertexTracks(i),AliAODVertex::kPileupTracks);
+
+}
+
+void
+AliCopyHeaderTask::CopyVertex(AliAODEvent& aod,
+ const AliESDVertex* vtx,
+ Int_t type)
+{
+ if (!vtx) return;
+
+ TClonesArray* arr = aod.GetVertices();
+ if (!arr) return;
+
+ Int_t n = arr->GetEntriesFast();
+ Double_t pos[] = { 0., 0., 0. };
+ Double_t cov[] = { 0., 0., 0., 0., 0., 0. };
+ Double_t chi2 = vtx->GetChi2toNDF();
+ vtx->GetXYZ(pos);
+ vtx->GetCovMatrix(cov);
+
+ AliAODVertex* out = new((*arr)[n]) AliAODVertex(pos, cov, chi2, 0, -1, type);
+ out->SetName(vtx->GetName());
+ out->SetTitle(vtx->GetTitle());
+ out->SetBC(vtx->GetBC());
+ TString tit(out->GetTitle());
+ if (!tit.Contains("VertexerTracks"))
+ out->SetNContributors(vtx->GetNContributors());
}
void
* @ingroup pwglf_forward_tasks
*/
#include <AliAnalysisTaskSE.h>
+class AliESDVertex;
/**
* Task to copy header from ESD to AOD
virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *option);
/* @} */
+protected:
+ /**
+ * Copy an ESD primary vertex to the AOD
+ *
+ * @param aod Where to copy to
+ * @param vtx Vertex (if any) to copy to
+ * @param type Type of vertex
+ */
+ void CopyVertex(AliAODEvent& aod, const AliESDVertex* vtx, Int_t type);
ClassDef(AliCopyHeaderTask,1); // Task to copy header from ESD to AOD
};
}
//_____________________________________________________________________
AliFMDEventPlaneTask::AliFMDEventPlaneTask(const char* name)
- : AliBaseAODTask(name),
+ : AliBaseAODTask(name, "AliFMDEventPlaneTask"),
fEventPlaneFinder("eventPlane"), // EP finder
fHistVertexSel(0) // Diagnostics histogram
{
//_____________________________________________________________________
AliForwardCreateResponseMatrices::AliForwardCreateResponseMatrices(const char* name)
- : AliBaseAODTask(name),
+ : AliBaseAODTask(name,"AliForwardCreateResponseMatrices"),
fBins(),
fIsSelected(false)
{
//____________________________________________________________________
AliForwardMultDists::AliForwardMultDists(const char* name)
- : AliBaseAODTask(name),
+ : AliBaseAODTask(name,"AliForwardMultDists"),
fBins(),
fSymmetric(0),
fNegative(0),
//_____________________________________________________________________
AliForwardMultiplicityDistribution::AliForwardMultiplicityDistribution(const char* name)
- : AliBaseAODTask(name),
+ : AliBaseAODTask(name, "AliForwardMultiplicityDistribution"),
fBins(), // eta bin list
fNBins(-1) // multiplicity axis' runs from 0 to fNbins
{
#include <TLegend.h>
#include <TLegendEntry.h>
#include <TLatex.h>
+#include <TArrow.h>
#include <TImage.h>
#include <TRandom.h>
#include <TParameter.h>
struct dNdetaDrawer
{
enum EFlags {
- kShowRatios = 0x00001,
- kShowLeftRight = 0x00002,
- kShowSysError = 0x00004,
- kShowRings = 0x00008,
- kCutEdges = 0x00010,
- kRemoveOuters = 0x00020,
- kUseFinalMC = 0x00040,
- kUseEmpirical = 0x00080,
- kForceMB = 0x00100,
- kMirror = 0x00200,
- kExport = 0x00400,
- kAddExec = 0x00800,
- kOldFormat = 0x01000,
- kVerbose = 0x02000,
- kHiRes = 0x04000,
- kExtraWhite = 0x08000,
- kLogo = 0x10000,
- kNoCentral = 0x20000,
- kNoLabels = 0x40000,
+ kShowRatios = 0x00001,
+ kShowLeftRight = 0x00002,
+ kShowSysError = 0x00004,
+ kShowRings = 0x00008,
+ kCutEdges = 0x00010,
+ kRemoveOuters = 0x00020,
+ kUseFinalMC = 0x00040,
+ kUseEmpirical = 0x00080,
+ kForceMB = 0x00100,
+ kMirror = 0x00200,
+ kExport = 0x00400,
+ kAddExec = 0x00800,
+ kOldFormat = 0x01000,
+ kVerbose = 0x02000,
+ kHiRes = 0x04000,
+ kExtraWhite = 0x08000,
+ kLogo = 0x10000,
+ kNoCentral = 0x20000,
+ kNoLabels = 0x40000,
kDefaultOptions = 0x1CE07
};
enum EOutFormat {
* @{
* @name Main steering functions
*/
+ void Run(const char* filename="forward_dndeta.root",
+ const char* title="",
+ const char* others="all",
+ const char* options="default",
+ const char* formats="all",
+ UShort_t rebin=5,
+ Float_t eff=0,
+ UShort_t centMin=0,
+ UShort_t centMax=0,
+ Float_t vzMin=+999,
+ Float_t vzMax=-999,
+ const char* base="")
+ {
+ TString ostr(others); ostr.ToUpper();
+ UShort_t obits = 0x0;
+ if (ostr.EqualTo("ALL")) obits = 0xf;
+ else {
+ if (ostr.Contains("UA5")) obits |= 0x1;
+ if (ostr.Contains("CMS")) obits |= 0x2;
+ if (ostr.Contains("ALICE")) obits |= 0x4;
+ if (ostr.Contains("WIP")) obits |= 0x8;
+ }
+
+ TString fstr(options);
+ UInt_t fbits = 0;
+ if (fstr.EqualTo("default", TString::kIgnoreCase)) fbits = kDefaultOptions;
+ else {
+ TObjArray* farr = fstr.Tokenize(" ,");
+ TIter next(farr);
+ TObjString* ftoken = 0;
+ while ((ftoken = static_cast<TObjString*>(next()))) {
+ TString& token = ftoken->String();
+ token.ToLower();
+ if (token.BeginsWith("ratio")) fbits |= kShowRatios;
+ else if (token.BeginsWith("asym")) fbits |= kShowLeftRight;
+ else if (token.BeginsWith("left")) fbits |= kShowLeftRight;
+ else if (token.BeginsWith("syse")) fbits |= kShowSysError;
+ else if (token.BeginsWith("rings")) fbits |= kShowRings;
+ else if (token.BeginsWith("noedge")) fbits |= kCutEdges;
+ else if (token.BeginsWith("noout")) fbits |= kRemoveOuters;
+ else if (token.BeginsWith("finalmc")) fbits |= kUseFinalMC;
+ else if (token.BeginsWith("mb")) fbits |= kForceMB;
+ else if (token.BeginsWith("mirror")) fbits |= kMirror;
+ else if (token.BeginsWith("export")) fbits |= kExport;
+ else if (token.BeginsWith("exec")) fbits |= kAddExec;
+ else if (token.BeginsWith("old")) fbits |= kOldFormat;
+ else if (token.BeginsWith("verbose")) fbits |= kVerbose;
+ else if (token.BeginsWith("hires")) fbits |= kHiRes;
+ else if (token.BeginsWith("extraw")) fbits |= kExtraWhite;
+ else if (token.BeginsWith("logo")) fbits |= kLogo;
+ else if (token.BeginsWith("nocentr")) fbits |= kNoCentral;
+ else if (token.BeginsWith("nolabels")) fbits |= kNoLabels;
+ else if (token.BeginsWith("empirical")) {
+ fbits |= kUseEmpirical;
+ TObjArray* parts=token.Tokenize("=");
+ if (parts->GetEntriesFast() > 1)
+ SetEmpirical(parts->At(1)->GetName());
+ delete parts;
+ }
+ }
+ delete farr;
+ }
+ TString estr(formats); estr.ToUpper();
+ UShort_t ebits = 0x0;
+ if (ostr.EqualTo("ALL")) ebits = kAllFormats;
+ else {
+ if (ostr.Contains("PNG")) ebits |= kPNG;
+ if (ostr.Contains("PDF")) ebits |= kPDF;
+ if (ostr.Contains("ROOT")) ebits |= kROOT;
+ if (ostr.Contains("C")) ebits |= kScript;
+ }
+
+ Run(filename, title, rebin, obits, fbits, 0, 0, 0, eff,
+ centMin, centMax, vzMin, vzMax, base, ebits);
+ }
/**
- * Run the code to produce the final result.
+ * Run the job
*
- * @param filename File containing the data
+ * @param filename Input file name
+ * @param title Title to put on plot
+ * @param rebin Rebinning factor
+ * @param others Which other to draw
+ * @param flags Flags for the drawing
+ * @param sys (optional) Collision system
+ * @param sNN (optional) Collision energy
+ * @param trg (optional) Trigger
+ * @param eff (optional) Efficiency
+ * @param centMin (optional) Least centrality
+ * @param centMax (optional) Largest centrality
+ * @param vzMin (optional) Least @f$ IP_z@f$
+ * @param vzMax (optional) Largest @f$ IP_z@f$
+ * @param base Basename for output files
+ * @param formats Formats to export to
*/
- void Run(const char* filename="forward_dndeta.root",
- UInt_t flags=kDefaultOptions, UInt_t formats=kAllFormats)
+ void Run(const char* filename,
+ const char* title,
+ UShort_t rebin,
+ UShort_t others=0x7,
+ UInt_t flags=kDefaultOptions,
+ UShort_t sys=0,
+ UShort_t sNN=0,
+ UShort_t trg=0,
+ Float_t eff=0,
+ UShort_t centMin=0,
+ UShort_t centMax=0,
+ Float_t vzMin=+999,
+ Float_t vzMax=-999,
+ const char* base="",
+ UShort_t formats=kAllFormats)
{
+ SetRebin(rebin);
+ SetTitle(title);
+ SetShowOthers(others);
+ SetBase(base);
+ // d.fClusterScale = "1.06 -0.003*x +0.0119*x*x";
+ // Do the below if your input data does not contain these settings
+ if (sNN > 0) SetSNN(sNN); // Collision energy per nucleon pair (GeV)
+ if (sys > 0) SetSys(sys); // Collision system (1:pp, 2:PbPB)
+ if (trg > 0) SetTrigger(trg); // Collision trigger (1:INEL, 2:INEL>0, 4:NSD)
+ if (eff > 0) SetTriggerEfficiency(eff); // Trigger efficiency
+ if (vzMin < 999 && vzMax > -999)
+ SetVertexRange(vzMin,vzMax); // Collision vertex range (cm)
+ SetCentralityRange(centMin,centMax); // Collision vertex range (cm)
+
fOptions = flags;
fFormats = formats;
SetForwardSysError(flags & kShowSysError ? 0.076 : 0);
" Show ratios: %5s\n"
" Show Left/right: %5s\n"
" Show rings: %5s\n"
- " Export to file: %5s\n"
" Cut edges when rebinning: %5s\n"
" Remove outer rings: %5s\n"
- " Mirror to un-covered regions: %5s\n"
" Force minimum bias: %5s\n"
+ " Mirror to un-covered regions: %5s\n"
+ " Export to file: %5s\n"
+ " Add Zoom code: %5s\n"
+ " Assume old format: %5s\n"
+ " Be verbose: %5s\n"
+ " Hi-resolution plot: %5s\n"
+ " Extra whitespace: %5s\n"
+ " Show logo: %5s\n"
" Show clusters: %5s\n"
+ " Show y-axis labels: %5s\n"
" Show other results: 0x%03x\n"
" Rebinning factor: %5d\n"
" Forward systematic error: %5.1f%%\n"
((fOptions & kShowRatios) ? "yes" : "no"),
((fOptions & kShowLeftRight) ? "yes" : "no"),
((fOptions & kShowRings) ? "yes" : "no"),
- ((fOptions & kExport) ? "yes" : "no"),
((fOptions & kCutEdges) ? "yes" : "no"),
((fOptions & kRemoveOuters) ? "yes" : "no"),
- ((fOptions & kMirror) ? "yes" : "no"),
((fOptions & kForceMB) ? "yes" : "no"),
+ ((fOptions & kMirror) ? "yes" : "no"),
+ ((fOptions & kExport) ? "yes" : "no"),
+ ((fOptions & kAddExec) ? "yes" : "no"),
+ ((fOptions & kOldFormat) ? "yes" : "no"),
+ ((fOptions & kVerbose) ? "yes" : "no"),
+ ((fOptions & kHiRes) ? "yes" : "no"),
+ ((fOptions & kExtraWhite) ? "yes" : "no"),
+ ((fOptions & kLogo) ? "yes" : "no"),
((fOptions & kNoCentral) ? "no" : "yes"),
- fShowOthers, fRebin, (100*fFwdSysErr), (100*fCenSysErr),
+ ((fOptions & kNoLabels) ? "no" : "yes"),
+ fShowOthers,
+ fRebin,
+ (100*fFwdSysErr),
+ (100*fCenSysErr),
(100*fTriggerEff),
- fTitle.Data(), fClusterScale.Data(), fFinalMC.Data(),
+ fTitle.Data(),
+ fClusterScale.Data(),
+ fFinalMC.Data(),
fEmpirical.Data());
// --- Set the macro pathand load other data script --------------
TF1* f = FitMerged(tmp, low, high);
MakeSysError(tmp, cen, fwd, f);
delete f;
+
+ if (fOptions & kNoCentral) {
+ // Split Sys error into two histograms
+ const char* nme = tmp->GetName();
+ TH1* tmpp = static_cast<TH1*>(tmp->Clone(Form("%s_a", nme)));
+ tmp->SetName(Form("%s_c", nme));
+ for (Int_t k = 1; k <= tmp->GetNbinsX(); k++) {
+ Double_t x = tmp->GetXaxis()->GetBinCenter(k);
+ TH1* tmppp = (x < 0 ? tmpp : tmp);
+ tmppp->SetBinError(k, 0);
+ tmppp->SetBinContent(k, 0);
+ }
+ fResults->GetHists()->AddFirst(tmpp, "e5");
+ }
+
if (fOptions & kVerbose)
Info("", "Adding systematic error histogram %s", tmp->GetName());
fResults->GetHists()->AddFirst(tmp, "e5");
UShort_t sys = (fSysString ? fSysString->GetUniqueID() : 0);
UShort_t trg = (fTrigString ? fTrigString->GetUniqueID() : 0);
UShort_t snn = (fSNNString ? fSNNString->GetUniqueID() : 0);
+ if (centLow < centHigh) {
+ // Possibly modify trg according to method
+ }
Long_t ret =
gROOT->ProcessLine(Form("RefData::GetData(%d,%d,%d,%d,%d,%d);",
sys,snn,trg,centLow,centHigh,fShowOthers));
if (!ret) {
+ Warning("", "RefData::GetData(%d,%d,0x%x,%d,%d,0x%x);",
+ sys,snn,trg,centLow,centHigh,fShowOthers);
Warning("FetchOthers",
"No other data for %s %s %s %3d%%-%3d%% central (0x%x)",
fSysString ? fSysString->GetTitle() : "unknown",
c->SetBorderSize(0);
c->SetBorderMode(0);
- PlotResults(max, y1);
+ Double_t s = Float_t(h) / 900;
+
+ PlotResults(max, y1, s);
c->cd();
PlotRatios(rmax, y2, y1);
if (t.Contains("mirrored")) { mirrorSeen = true; continue; }
if (n.Contains("syserror")) { sysErrSeen = true; continue; }
if (unique.FindObject(t.Data())) continue;
- TObjString* s1 = new TObjString(hist->GetTitle());
+ // TObjString* s1 = new TObjString(hist->GetTitle());
+ TParameter<float>* s1 = new TParameter<float>(t,hist->GetMarkerSize());
s1->SetUniqueID(((hist->GetMarkerStyle() & 0xFFFF) << 16) |
((hist->GetMarkerColor() & 0xFFFF) << 0));
unique.Add(s1);
TString n(g->GetTitle());
if (n.Contains("mirrored")) continue;
if (unique.FindObject(n.Data())) continue;
- TObjString* s2 = new TObjString(n);
+ // TObjString* s2 = new TObjString(n);
+ TParameter<float>* s2 = new TParameter<float>(n,g->GetMarkerSize());
s2->SetUniqueID(((g->GetMarkerStyle() & 0xFFFF) << 16) |
((g->GetMarkerColor() & 0xFFFF) << 0));
unique.Add(s2);
// Add legend entries for unique items only
TIter nextu(&unique);
- TObject* s = 0;
+ // TObject* s = 0;
+ TParameter<float>* s = 0;
Int_t i = 0;
- while ((s = nextu())) {
+ while ((s = static_cast<TParameter<float>*>(nextu()))) {
TLegendEntry* dd = l->AddEntry(Form("data%2d", i++),
s->GetName(), "lp");
Int_t style = (s->GetUniqueID() >> 16) & 0xFFFF;
if (HasCent()) dd->SetMarkerColor(kBlack);
else dd->SetMarkerColor(color);
dd->SetMarkerStyle(style);
+ dd->SetMarkerSize(s->GetVal());
}
if (sysErrSeen) {
// Add entry for systematic errors
* @param max Maximum
* @param yd Bottom position of pad
*/
- void PlotResults(Double_t max, Double_t yd)
+ void PlotResults(Double_t max, Double_t yd, Double_t s)
{
// --- Make a sub-pad for the result itself ----------------------
TPad* p1 = new TPad("p1", "p1", 0, yd, 1.0, 1.0, 0, 0, 0);
//"#frac{1}{#it{N}}#kern[.1]{#frac{d#it{N}_{ch}}{d#it{#eta}}}"
);
+ // --- Fix up marker size ---------------------------------------
+ TIter next(fResults->GetHists());
+ TH1* h = 0;
+ while ((h = static_cast<TH1*>(next())))
+ h->SetMarkerSize(h->GetMarkerSize()*s);
// --- Clear pad and re-draw ------------------------------------
p1->Clear();
fResults->DrawClone("nostack e1");
if (fShowOthers != 0) {
TGraphAsymmErrors* o = 0;
TIter nextG(fOthers->GetListOfGraphs());
- while ((o = static_cast<TGraphAsymmErrors*>(nextG())))
+ while ((o = static_cast<TGraphAsymmErrors*>(nextG()))) {
+ Double_t gS = s;
+ switch (o->GetMarkerStyle()) {
+ case 29:
+ case 30: gS *= 1.2; break; // Star
+ case 27:
+ case 33: gS *= 1.2; break; // Diamond
+ }
+ o->SetMarkerSize(o->GetMarkerSize()*gS);
+
o->DrawClone("same p");
+ }
}
// --- Make a legend in the result pad ---------------------------
UShort_t snn = fSNNString->GetUniqueID();
const char* sys = fSysString->GetTitle();
if (snn == 2750) snn = 2760;
- if (snn > 1000) eS = Form("%4.2fTeV", float(snn)/1000);
- else eS = Form("%3dGeV", snn);
+ if (snn < 1000) eS = Form("%3dGeV", snn);
+ else if (snn % 1000 == 0) eS = Form("%dTeV", snn/1000);
+ else eS = Form("%.2fTeV", float(snn)/1000);
+ Bool_t nn = (fSysString->GetUniqueID() != 1);
+ TString tS(fTrigString->GetTitle());
+ if (HasCent()) {
+ tS = "by centrality";
+ UShort_t trg = fTrigString->GetUniqueID();
+ switch (trg) {
+ case 0x10: tS.Append(" (V0M)"); break;
+ case 0x20: tS.Append(" (V0A)"); break;
+ case 0x40: tS.Append(" (ZNA)"); break;
+ case 0x80: tS.Append(" (ZNC)"); break;
+ }
+ }
+
TLatex* tt = new TLatex(xR, yR, Form("%s #sqrt{s%s}=%s, %s",
- sys,
- (HasCent() ? "_{NN}" : ""),
- eS.Data(),
- HasCent() ? "by centrality" :
- fTrigString->GetTitle()));
+ sys, (nn ? "_{NN}" : ""),
+ eS.Data(), tS.Data()));
tt->SetTextColor(kAliceBlue);
tt->SetNDC();
tt->SetTextFont(kFont);
tt->Draw();
yR -= tt->GetTextSize() + .01;
+ if (fSysString->GetUniqueID() == 3) {
+ // pPb - put arrow at y_CM
+ UShort_t a1 = 1;
+ UShort_t a2 = 208;
+ UShort_t z1 = 1;
+ UShort_t z2 = 82;
+ Double_t yCM = .5 * TMath::Log(Float_t(z1*a2)/z2/a1);
+ TArrow* a = new TArrow(yCM, 0, yCM, 0.05*max, 0.01, "<|");
+ a->SetAngle(30);
+ a->SetFillColor(kAliceBlue);
+ a->SetLineColor(kAliceBlue);
+ a->Draw();
+ }
+
// --- Put number of accepted events on the plot -----------------
Int_t nev = 0;
if (fTriggers) nev = fTriggers->GetBinContent(1);
{
if (!h) return;
if (color < 0) return;
- // h->SetLineColor(color);
+ h->SetLineColor(color);
h->SetMarkerColor(color);
// h->SetFillColor(color);
}
Warning("FixAxis", "No stack passed for %s!", ytitle);
return;
}
+ Bool_t supLabel = (fResults == stack && ((fOptions & kNoLabels)));
if (force) stack->Draw("nostack e1");
TH1* h = stack->GetHistogram();
ya->SetNdivisions(ynDiv);
ya->SetTitleSize(s*ya->GetTitleSize());
ya->SetTitleOffset(/*1.15*/1.4*ya->GetTitleOffset()/s);
- ya->SetLabelSize((fOptions & kNoLabels) ? 0 : s*ya->GetLabelSize());
+ ya->SetLabelSize(supLabel ? 0 : s*ya->GetLabelSize());
}
}
//__________________________________________________________________
return;
}
dNdetaDrawer* pd = new dNdetaDrawer;
- dNdetaDrawer& d = *pd;
- d.SetRebin(rebin);
- d.SetTitle(title);
- d.SetShowOthers(others);
- d.SetBase(base);
- d.SetEmpirical("file://../empirical.root#default");
+ pd->SetEmpirical("file://../empirical.root#default");
// d.fClusterScale = "1.06 -0.003*x +0.0119*x*x";
- // Do the below if your input data does not contain these settings
- if (sNN > 0) d.SetSNN(sNN); // Collision energy per nucleon pair (GeV)
- if (sys > 0) d.SetSys(sys); // Collision system (1:pp, 2:PbPB)
- if (trg > 0) d.SetTrigger(trg); // Collision trigger (1:INEL, 2:INEL>0, 4:NSD)
- if (eff > 0) d.SetTriggerEfficiency(eff); // Trigger efficiency
- if (vzMin < 999 && vzMax > -999)
- d.SetVertexRange(vzMin,vzMax); // Collision vertex range (cm)
- d.SetCentralityRange(centMin,centMax); // Collision vertex range (cm)
- d.Run(filename, flags, outflg);
+ pd->Run(filename, title, rebin, others, flags, sys, sNN, trg, eff,
+ centMin, centMax, vzMin, vzMax, base, outflg);
+}
+
+/**
+ * Display usage information
+ *
+ */
+void
+UsageS()
+{
+ std::ostream& o = std::cout;
+ o << "Usage: DrawdNdeta(FILE,TITLE,OTHERS,OPTIONS,FORMATS,REBIN,EFF,"
+ << "CMIN,CMAX,IPZMIN,IPZMAX,BASE)\n"
+ << " const char* FILE File name to open (\"forward_dndeta.root\")\n"
+ << " const char* TITLE Title to put on plot (\"\")\n"
+ << " const char* OTHERS Other data to draw - more below (\"all\")\n"
+ << " const char* FLAGS Visualisation flags - more below (\"default\")\n"
+ << " const char* FMT (optional) Output formats (\"all\")\n"
+ << " UShort_t REBIN (optional) Rebinning factor (5)\n"
+ << " Float_t EFF (optional) Trigger efficiency\n"
+ << " Float_t IPZMIN (optional) Least z coordinate of IP\n"
+ << " Float_t IPZMAX (optional) Largest z coordinate of IP\n"
+ << " UShort_t CMIN (optional) Least centrality\n"
+ << " UShort_t CMAX (optional) Largest centrality\n"
+ << " const char* BASE (optional) base name of output files\n"
+ << "\n";
+ o << " OTHERS space separated list of\n"
+ << " UA5 Show UA5 data (INEL,NSD, ppbar, 900GeV)\n"
+ << " CMS Show CMS data (NSD, pp)\n"
+ << " ALICE Show published ALICE data (INEL,INEL>0,NSD, pp)\n"
+ << " WIP Show event genertor data/work-in-progress\n"
+ << "\n";
+ o << " FMT space separated list of \n"
+ << " PNG Make PNG output\n"
+ << " PDF Make PDF output\n"
+ << " ROOT Make ROOT file output\n"
+ << " C Make ROOT script output\n"
+ << "\n";
+ o << " FLAGS is a bit mask of\n"
+ << " ratio Show ratios of data to other data and possibly MC\n"
+ << " asymmetry Show left-right asymmetry\n"
+ << " syserror Show systematic error band\n"
+ << " rings Show individual ring results (INEL only)\n"
+ << " noedges Cut edges when rebinning\n"
+ << " noouters Remove FMDxO points\n"
+ << " finalmc Apply `final MC' correction\n"
+ << " empirical[=URL] Apply `Emperical' correction\n"
+ << " mb Force use of MB\n"
+ << " mirror Mirror data\n"
+ << " export Export results to script\n"
+ << " exec Add code to do combined zooms on eta axis\n"
+ << " old Assume old-style input\n"
+ << " verbose Be verbose\n"
+ << " hires Hi-res batch output\n"
+ << " extrawhite Add aditional white-space above results\n"
+ << " logo Add ALICE logo\n"
+ << " nocentral Do not plot cluster data\n"
+ << " nolabels No labels on y-axis\n"
+ << "\n";
+ o << "finalmc requires the file forward_dndetamc.root\n"
+ << "empirical requires the histogram at URL \n"
+ << std::endl;
+
+}
+
+void
+Draw(const char* filename,
+ const char* title="",
+ const char* others="ALL",
+ const char* options="DEFAULT",
+ const char* outFlg="ALL",
+ UShort_t rebin=5,
+ Float_t eff=0,
+ UShort_t centMin=0,
+ UShort_t centMax=0,
+ Float_t vzMin=+999,
+ Float_t vzMax=-999,
+ const char* base="")
+{
+ TString fname(filename);
+ fname.ToLower();
+ if (fname.CompareTo("help") == 0 ||
+ fname.CompareTo("--help") == 0) {
+ UsageS();
+ return;
+ }
+
+ dNdetaDrawer* pd = new dNdetaDrawer;
+ pd->SetEmpirical("file://../empirical.root#default");
+
+ pd->Run(filename, title, others, options, outFlg, rebin, eff,
+ centMin, centMax, vzMin, vzMax, base);
}
//____________________________________________________________________
//
-//____________________________________________________________________
-/**
- * @defgroup pwglf_forward_otherdata External data
- *
- * Collection of external data points for comparisons and the like
- *
- * @ingroup pwglf_forward_scripts
- */
-/**
- * @file
- *
- * @ingroup pwglf_forward_script_otherdata
- */
#ifndef __CINT__
+# include <TFile.h>
+# include <TString.h>
# include <TGraphAsymmErrors.h>
# include <TMultiGraph.h>
+# include <TROOT.h>
+# include <TError.h>
+# include <TSystem.h>
+# include <TH1F.h>
# include <TStyle.h>
# include <TMath.h>
-# include <TCanvas.h>
-# include <TLegend.h>
-# include <TLegendEntry.h>
-# include <TList.h>
-# include <TAxis.h>
-# include <TH1F.h>
-#else
+#else
+class TFile;
class TGraphAsymmErrors;
class TMultiGraph;
-class TStyle;
-class TCanvas;
-class TLegend;
-class TLegendEntry;
-class TList;
-class TAxis;
-class TH1F;
class TGraph;
-#endif
+class TH1;
+#endif
+
struct RefData
{
INELGt0,
NSD
};
+
+ //____________________________________________________________________
+ /**
+ * Get a pointer to our data file. @a path is the path to the file
+ * containing the data. If it is null, then first search the
+ * current directory, and if not found there, search in specific
+ * AliROOT directory. If @a rw is try the file is (re-)opened in
+ * UPDATE mode.
+ *
+ * @param path Path to file.
+ * @param rw If true, open read/write.
+ *
+ * @return Pointer to file, or null
+ */
+ static TFile* GetFile(const char* path=0, Bool_t rw=false) {
+ TString base = ((path && path[0] != '\0') ?
+ gSystem->BaseName(path) : "other.root");
+
+ TObject* o = gROOT->GetListOfFiles()->FindObject(base);
+
+ TFile* f = 0;
+ if (o) {
+ f = static_cast<TFile*>(o);
+ if (!rw) return f;
+ if (!f->IsWritable() && f->ReOpen("UPDATE") < 0) return 0;
+ return f;
+ }
+
+ const char* mode = (rw ? "UPDATE" : "READ");
+ if (path && path[0] != '\0' && !gSystem->AccessPathName(path))
+ f = TFile::Open(path, mode);
+ if (!f && !gSystem->AccessPathName("other.root"))
+ f = TFile::Open("other.root", mode);
+ if (!f)
+ f = TFile::Open("$ALICE_ROOT/PWGLF/FORWARD/analysis2/other.root",mode);
+ if (!f)
+ ::Error("", "Failed to open file");
+ return f;
+ }
+ //____________________________________________________________________
+ /**
+ * Get the collision system name from the identifier (1: pp, 2:
+ * PbPb, 3: pPb)
+ *
+ * @param sys Collision system identifier
+ *
+ * @return String or null
+ */
+ static const char* SysName(UShort_t sys) {
+ switch (sys) {
+ case 1: return "pp";
+ case 2: return "PbPb";
+ case 3: return "pPb";
+ }
+ ::Error("", "Unknown system: %d", sys);
+ return 0;
+ }
+ //____________________________________________________________________
+ /**
+ * Get the zero-padded collision energy name
+ *
+ * @param sNN Collision energy (in GeV)
+ *
+ * @return Zero-padded collision energy
+ */
+ static const char* SNNName(UShort_t sNN)
+ {
+ return Form("%05d", sNN);
+ }
+ //____________________________________________________________________
+ /**
+ * Get the centrality method prefix. @a trg is a bit mask, of which
+ * bits 4-7 are used here. The flags are
+ *
+ * - 0x10 V0M
+ * - 0x20 V0A
+ * - 0x40 ZNA
+ * - 0X80 ZNC
+ *
+ * @param trg Bits
+ *
+ * @return Prefix string or empty string
+ */
+ static const char* CntName(UShort_t trg)
+ {
+ switch (trg >> 4) {
+ case 1: return "V0M_";
+ case 2: return "V0A_";
+ case 4: return "ZNA_";
+ case 8: return "ZNC_";
+ }
+ return "";
+ }
+ //____________________________________________________________________
+ /**
+ * Get the trigger name. If @f$ c_2 > c_1@f$ then the bits of @a
+ * trg are ignored, save for the bits 4-7 which are interpreted
+ * according to CntName.
+ *
+ * The meaning of the bits are
+ *
+ * - 0x01 INEL
+ * - 0x02 INEL>0
+ * - 0x04 NSD
+ * - 0xf0 Mask for centrality estimator.
+ *
+ * @param trg Trigger mask.
+ * @param c1 Least centrality @f$ c_1@f$
+ * @param c2 Largest centrality @f$ c_2@f$
+ *
+ * @return Trigger string or null
+ */
+ static const char* TrgName(UShort_t trg, UShort_t c1, UShort_t c2)
+ {
+ if (c2 > c1) return Form("%s%03d_%03d", CntName(trg), c1, c2);
+
+ switch (trg) {
+ case 1: return "INEL";
+ case 2: return "INELGT0";
+ case 4: return "NSD";
+ }
+ ::Error("", "Unknown trigger: %d", trg);
+ return 0;
+ }
+ //____________________________________________________________________
+ /**
+ * Get the experiment name.
+ *
+ * - 0: UA5
+ * - 1: CMS
+ * - 2: ALICE (published or pre-print)
+ * - 3: ALICE Work-in-progress
+ * - 4: PYTHIA (or MC)
+ *
+ * @param which Experiment identifier
+ *
+ * @return Experiment name or null
+ */
+ static const char* ExpName(UShort_t which)
+ {
+ switch (which) {
+ case 0: return "UA5";
+ case 1: return "CMS";
+ case 2: return "ALICE";
+ case 3: return "WIP";
+ case 4: return "PYTHIA";
+ }
+ ::Error("", "Unknown experiment: %d", which);
+ return 0;
+ }
+ // _________________________________________________________________
+ /**
+ * Get graphs for selected experiments under @a d.
+ *
+ * @param d Directory to search
+ * @param which Which experiments to get data from
+ * @param verbose Whether to be verbose or not
+ *
+ * @return Graph of data, or null
+ */
+ static TMultiGraph* GetExps(TDirectory* d, UShort_t which, Bool_t verbose)
+ {
+ TMultiGraph* ret = 0;
+ for (UShort_t w = UA5; w <= PYTHIA; w++) {
+ if (!(which & (1 << w))) continue;
+
+ const char* expName = ExpName(w);
+ TDirectory* expDir = 0;
+ if (!expName || !(expDir = d->GetDirectory(expName))) continue;
+
+ TObject* o = expDir->Get("data");
+ if (o) {
+ if (!ret) ret = new TMultiGraph();
+ TMultiGraph* mg = static_cast<TMultiGraph*>(o);
+ if (w == WIP) {
+ TIter next(mg->GetListOfGraphs());
+ TGraph* g = 0;
+ while ((g = static_cast<TGraph*>(next())))
+ if (g->GetMarkerColor() == kMagenta+3) {
+ g->SetMarkerColor(kCyan-6);
+ g->SetLineColor(kCyan-6);
+ }
+ }
+ ret->Add(mg);
+ }
+ }
+ if (!ret && verbose)
+ ::Error("GetExps", "Didn't get any data for exp=0x%x in dir %s",
+ which, d->GetPath());
+ return ret;
+ }
+
+ // _________________________________________________________________
+ /**
+ * Get data for selected trigger and experiments under @a d.
+ *
+ * @param d Directory to seach
+ * @param type Which triggers
+ * @param which Which experiments
+ * @param verbose Whether to be verbose
+ *
+ * @return Graph of data, or null
+ */
+ static TMultiGraph* GetTrigs(TDirectory* d, UShort_t type,
+ UShort_t which, Bool_t verbose)
+ {
+ TMultiGraph* ret = 0;
+ for (UShort_t t = INEL; t <= NSD; t++) {
+ UShort_t trg = (1 << (t-INEL));
+ if (!(type & trg)) {
+ if (verbose)
+ ::Info("GetTrigs", "Skipping trigger 0x%x (0x%x)", trg, type);
+ continue;
+ }
+
+ const char* trgName = TrgName(trg, 0, 0);
+ TDirectory* trgDir = 0;
+ if (!trgName || !(trgDir = d->GetDirectory(trgName))) {
+ if (verbose)
+ ::Warning("GetTrigs", "No directory %s for 0x%x in %s",
+ trgName, trg, d->GetPath());
+ continue;
+ }
+
+ TMultiGraph* g = GetExps(trgDir, which, verbose);
+ if (g) {
+ if (!ret) ret = new TMultiGraph();
+ ret->Add(g);
+ }
+ }
+ if (!ret)
+ ::Error("GetTrigs",
+ "Didn't get any data for trigger=0x%x and exp=0x%x in dir %s",
+ type, which, d->GetPath());
+ return ret;
+ }
+
+ // _________________________________________________________________
+ /**
+ * Get data for selected centrality range
+ *
+ * @param d Directory to search
+ * @param experiment Which experiment
+ * @param trigger Which centrality estimator (possibly 0)
+ * @param centLow Least centrality
+ * @param centHigh Largetst centrality
+ * @param verbose Whether to be verbose
+ *
+ * @return Graph of data or null
+ */
+ static TMultiGraph* GetCents(TDirectory* d, UShort_t experiment,
+ UShort_t trigger, UShort_t centLow,
+ UShort_t centHigh, Bool_t verbose)
+ {
+ // We need to find the bins we can and check for the
+ // experiments
+ TMultiGraph* ret = 0;
+ TIter next(d->GetListOfKeys());
+ TObject* obj = 0;
+ const char* cntPre = CntName(trigger);
+ // Info("", "trigger=0x%x pre=%s", trigger, cntPre);
+ while ((obj = next())) {
+ TString n(obj->GetName());
+ if (n.EqualTo("all")) continue;
+ UShort_t off = 0;
+ if (cntPre && cntPre[0] != '\0') {
+ if (!n.BeginsWith(cntPre, TString::kIgnoreCase)) continue;
+ off = 4;
+ }
+ if (n.Length() != 7+off) continue;
+
+ TString l1(n(off, 3)); TString l2 = l1.Strip(TString::kLeading, '0');
+ TString h1(n(off+4,3)); TString h2 = h1.Strip(TString::kLeading, '0');
+ UShort_t c1 = l2.Atoi();
+ UShort_t c2 = h2.Atoi();
+
+ // Info("", "n=%s off=%d c1=%d c2=%d", n.Data(), off, c1, c2);
+ if (c1 < centLow || c2 > centHigh) {
+ if (verbose) ::Info("", "Skipping %s in %s", n.Data(),d->GetPath());
+ continue;
+ }
+
+ TDirectory* centDir = d->GetDirectory(obj->GetName());
+ if (!centDir) continue;
+
+ TMultiGraph* exps = GetExps(centDir, experiment, verbose);
+ if (exps) {
+ if (!ret) ret = new TMultiGraph();
+ ret->Add(exps);
+ }
+ } // experiment (key)
+ if (!ret && verbose)
+ ::Error("GetCents", "No graphs for centralities %d-%d%% in %s",
+ centLow, centHigh, d->GetPath());
+ return ret;
+ }
+ //____________________________________________________________________
+ /**
+ * Get a multi graph of data for a given energy and trigger type
+ *
+ * @param sys Collision system (1: pp, 2: PbPb, 3: pPb)
+ * @param energy Energy in GeV (900, 2360, 2760, 7000, 8000)
+ * @param triggers Bit pattern of trigger type
+ * - 0x01 INEL
+ * - 0x02 INEL>0
+ * - 0x04 NSD
+ * - 0xF0 Mask for centrality estimator
+ * @param centLow Low centrality cut (not pp)
+ * @param centHigh High centrality cut (not pp)
+ * @param experiments From which experiments
+ *
+ * @return A multi graph with the selected data.
+ *
+ * @ingroup pwglf_forward_otherdata
+ */
+ static TMultiGraph* GetData(UShort_t sys,
+ UShort_t sNN,
+ UShort_t triggers=0x1,
+ UShort_t centLow=0,
+ UShort_t centHigh=0,
+ UShort_t experiments=0x7)
+ {
+ Bool_t verbose = true;
+ UShort_t trg = (triggers & 0xF7);
+ if (triggers & 0x2000) trg |= 0x4;
+
+ TFile* f = GetFile(0,false);
+ if (!f) return 0;
+
+ TDirectory* sysDir = 0;
+ const char* sysName = SysName(sys);
+ if (!sysName || !(sysDir = f->GetDirectory(sysName))) {
+ ::Error("", "Invalid system %d (%s)", sys, sysName);
+ return 0;
+ }
+
+ TDirectory* sNNDir = 0;
+ const char* sNNName = SNNName(sNN);
+ if (!sNNName || !(sNNDir = sysDir->GetDirectory(sNNName))) {
+ ::Error("", "Invalid CMS energy %d (%s)", sNN, sNNName);
+ return 0;
+ }
+
+ TMultiGraph* ret = 0;
+ // If we have a centrality request
+ if (centHigh > centLow) {
+ if (centLow == 0 && centHigh >= 100)
+ ret = GetCents(sNNDir, experiments, trg,
+ centLow, centHigh, verbose);
+ else {
+ // Look for specific centrality bin
+ TDirectory* centDir = sNNDir->GetDirectory(TrgName(trg,
+ centLow,centHigh));
+ if (!centDir) {
+ Warning("", "No directory '%s' (0x%x,%d%d)",
+ TrgName(trg, centLow,centHigh), trg, centLow, centHigh);
+ return 0;
+ }
+
+ return GetExps(centDir, experiments, verbose);
+ }
+ } // centHigh > centLow
+ else
+ ret = GetTrigs(sNNDir, trg, experiments, verbose);
+
+ if (ret) {
+ TString title;
+ FormatTitle(title, sys, sNN, trg, centLow, centHigh);
+ ret->SetTitle(title);
+ }
+ return ret;
+ }
+ //__________________________________________________________________
+ /**
+ * Format title of a plot
+ *
+ * @param title On return, the title
+ * @param sys Collision system (1: pp, 2: PbPb, 3: pPb)
+ * @param energy Energy in GeV (900, 2360, 2760, 7000, 8000)
+ * @param triggers Bit pattern of trigger type
+ * - 0x01 INEL
+ * - 0x02 INEL>0
+ * - 0x04 NSD
+ * - 0xF0 Mask for centrality estimator
+ * @param centLow Low centrality cut (not pp)
+ * @param centHigh High centrality cut (not pp)
+ * @param seenUA5 If true and sys=1, then put in p-pbar
+ */
+ static void FormatTitle(TString& title,
+ UShort_t sys,
+ UShort_t sNN,
+ UShort_t triggers,
+ UShort_t centLow,
+ UShort_t centHigh,
+ Bool_t seenUA5=false)
+ {
+ TString sn(SysName(sys));
+ if (seenUA5) sn.Append("(p#bar{p})");
+
+ TString en(Form("#sqrt{s%s}=", (sys==1 ? "" : "_{NN}")));
+ if (sNN < 1000) en.Append(Form("%dGeV", sNN));
+ else if ((sNN % 1000) == 0) en.Append(Form("%dTeV", (sNN/1000)));
+ else en.Append(Form("%.2fTeV", Float_t(sNN)/1000));
+ TString tn;
+ if (centHigh > centLow)
+ tn = Form("%d%% - %d%% central", centLow, centHigh);
+ else {
+ for (UShort_t t = INEL; t <= NSD; t++) {
+ UShort_t trg = (1 << (t-INEL));
+ if (!(triggers & trg)) continue;
+ if (!tn.IsNull()) tn.Append("|");
+ switch (t) {
+ case INEL: tn.Append("INEL"); break;
+ case INELGt0: tn.Append("INEL>0"); break;
+ case NSD: tn.Append("NSD"); break;
+ }
+ } // for
+ }
+ if (!en.IsNull()) en.Prepend(", ");
+ if (!tn.IsNull()) tn.Prepend(", ");
+ title.Form("%s%s%s", sn.Data(), en.Data(), tn.Data());
+ }
+ //=== Importing ====================================================
enum {
/** Style used for UA5 data */
UA5Style = 21,
/** Color used for ALICE data */
ALICEColor = kMagenta+1,
/** Color used for ALICE work-in-progress data */
- WIPColor = kMagenta+3
+ WIPColor = kCyan+2
};
enum {
/** Marker style INEL data */
/** Style offset for mirror data */
MirrorOff = 4
};
-
//____________________________________________________________________
/**
* Set graph attributes based on trigger type and experiment.
const Char_t* title)
{
Int_t color = 0;
- switch (exp) {
- case UA5: color = UA5Color; break;
- case CMS: color = CMSColor; break;
- case ALICE: color = ALICEColor; break;
- case WIP: color = WIPColor; break;
- case PYTHIA: color = PYTHIAColor; break;
- }
Int_t style = 0;
switch (exp) {
- case UA5: style = UA5Style; break;
- case CMS: style = CMSStyle; break;
- case ALICE: style = ALICEStyle; break;
- case WIP: style = WIPStyle; break;
- case PYTHIA: style = PYTHIAStyle; break;
+ case UA5: color = UA5Color; style = UA5Style; break;
+ case CMS: color = CMSColor; style = CMSStyle; break;
+ case ALICE: color = ALICEColor; style = ALICEStyle; break;
+ case WIP: color = WIPColor; style = WIPStyle; break;
+ case PYTHIA: color = PYTHIAColor; style = PYTHIAStyle; break;
}
Float_t size = g->GetMarkerSize();
switch (style) {
- case 21:
+ case 21: // fall-through
case 25: size *= 0.8; break;
case 27: size *= 1.4; break;
case 33: size *= 1.4; break;
if (mirror) style += MirrorOff;
- g->SetName(name);
- g->SetTitle(title);
+ if (name) g->SetName(name);
+ if (title) g->SetTitle(title);
g->SetMarkerStyle(style);
g->SetMarkerSize(size);
g->SetMarkerColor(color);
g->GetHistogram()->SetXTitle("#eta");
g->GetHistogram()->SetYTitle("#frac{1}{N} #frac{dN_{ch}}{#eta}");
}
-
- //____________________________________________________________________
- /**
- * Get PYTHIA 900GeV INEL data
- *
- *
- * @return Data graph
- */
- static TGraphAsymmErrors* Pythia900INEL()
- {
-
- TGraphAsymmErrors *gre = new TGraphAsymmErrors(100);
- SetGraphAttributes(gre, INEL, PYTHIA, false, "pythia900Inel",
- "Pythia");
- gre->SetPoint(0,-3.95,1.78199);
- gre->SetPointError(0, 0, 0, 0.0145305, 0.0145305);
- gre->SetPoint(1,-3.85,1.85486);
- gre->SetPointError(1,0,0,0.0148246,0.0148246);
- gre->SetPoint(2,-3.75,1.93886);
- gre->SetPointError(2,0,0,0.0151566,0.0151566);
- gre->SetPoint(3,-3.65,1.96055);
- gre->SetPointError(3,0,0,0.0152411,0.0152411);
- gre->SetPoint(4,-3.55,1.98756);
- gre->SetPointError(4,0,0,0.0153458,0.0153458);
- gre->SetPoint(5,-3.45,2.02844);
- gre->SetPointError(5,0,0,0.0155028,0.0155028);
- gre->SetPoint(6,-3.35,2.09585);
- gre->SetPointError(6,0,0,0.0157583,0.0157583);
- gre->SetPoint(7,-3.25,2.13732);
- gre->SetPointError(7,0,0,0.0159134,0.0159134);
- gre->SetPoint(8,-3.15,2.1686);
- gre->SetPointError(8,0,0,0.0160295,0.0160295);
- gre->SetPoint(9,-3.05,2.25296);
- gre->SetPointError(9,0,0,0.0163383,0.0163383);
- gre->SetPoint(10,-2.95,2.29265);
- gre->SetPointError(10,0,0,0.0164815,0.0164815);
- gre->SetPoint(11,-2.85,2.34799);
- gre->SetPointError(11,0,0,0.0166792,0.0166792);
- gre->SetPoint(12,-2.75,2.35652);
- gre->SetPointError(12,0,0,0.0167095,0.0167095);
- gre->SetPoint(13,-2.65,2.40545);
- gre->SetPointError(13,0,0,0.0168821,0.0168821);
- gre->SetPoint(14,-2.55,2.43934);
- gre->SetPointError(14,0,0,0.0170006,0.0170006);
- gre->SetPoint(15,-2.45,2.45735);
- gre->SetPointError(15,0,0,0.0170633,0.0170633);
- gre->SetPoint(16,-2.35,2.48945);
- gre->SetPointError(16,0,0,0.0171744,0.0171744);
- gre->SetPoint(17,-2.25,2.51635);
- gre->SetPointError(17,0,0,0.0172669,0.0172669);
- gre->SetPoint(18,-2.15,2.55047);
- gre->SetPointError(18,0,0,0.0173836,0.0173836);
- gre->SetPoint(19,-2.05,2.58021);
- gre->SetPointError(19,0,0,0.0174846,0.0174846);
- gre->SetPoint(20,-1.95,2.58732);
- gre->SetPointError(20,0,0,0.0175087,0.0175087);
- gre->SetPoint(21,-1.85,2.60095);
- gre->SetPointError(21,0,0,0.0175547,0.0175547);
- gre->SetPoint(22,-1.75,2.59941);
- gre->SetPointError(22,0,0,0.0175495,0.0175495);
- gre->SetPoint(23,-1.65,2.63021);
- gre->SetPointError(23,0,0,0.0176532,0.0176532);
- gre->SetPoint(24,-1.55,2.61043);
- gre->SetPointError(24,0,0,0.0175867,0.0175867);
- gre->SetPoint(25,-1.45,2.61363);
- gre->SetPointError(25,0,0,0.0175975,0.0175975);
- gre->SetPoint(26,-1.35,2.60829);
- gre->SetPointError(26,0,0,0.0175795,0.0175795);
- gre->SetPoint(27,-1.25,2.61434);
- gre->SetPointError(27,0,0,0.0175999,0.0175999);
- gre->SetPoint(28,-1.15,2.61327);
- gre->SetPointError(28,0,0,0.0175963,0.0175963);
- gre->SetPoint(29,-1.05,2.57145);
- gre->SetPointError(29,0,0,0.0174549,0.0174549);
- gre->SetPoint(30,-0.95,2.55723);
- gre->SetPointError(30,0,0,0.0174066,0.0174066);
- gre->SetPoint(31,-0.85,2.57879);
- gre->SetPointError(31,0,0,0.0174798,0.0174798);
- gre->SetPoint(32,-0.75,2.516);
- gre->SetPointError(32,0,0,0.0172657,0.0172657);
- gre->SetPoint(33,-0.65,2.53709);
- gre->SetPointError(33,0,0,0.0173379,0.0173379);
- gre->SetPoint(34,-0.55,2.51197);
- gre->SetPointError(34,0,0,0.0172519,0.0172519);
- gre->SetPoint(35,-0.45,2.44052);
- gre->SetPointError(35,0,0,0.0170047,0.0170047);
- gre->SetPoint(36,-0.35,2.44882);
- gre->SetPointError(36,0,0,0.0170336,0.0170336);
- gre->SetPoint(37,-0.25,2.45308);
- gre->SetPointError(37,0,0,0.0170484,0.0170484);
- gre->SetPoint(38,-0.15,2.4622);
- gre->SetPointError(38,0,0,0.0170801,0.0170801);
- gre->SetPoint(39,-0.05,2.45735);
- gre->SetPointError(39,0,0,0.0170633,0.0170633);
- gre->SetPoint(40,0.05,2.49254);
- gre->SetPointError(40,0,0,0.017185,0.017185);
- gre->SetPoint(41,0.15,2.49479);
- gre->SetPointError(41,0,0,0.0171928,0.0171928);
- gre->SetPoint(42,0.25,2.49289);
- gre->SetPointError(42,0,0,0.0171862,0.0171862);
- gre->SetPoint(43,0.35,2.4628);
- gre->SetPointError(43,0,0,0.0170822,0.0170822);
- gre->SetPoint(44,0.45,2.51422);
- gre->SetPointError(44,0,0,0.0172596,0.0172596);
- gre->SetPoint(45,0.55,2.51268);
- gre->SetPointError(45,0,0,0.0172543,0.0172543);
- gre->SetPoint(46,0.65,2.51066);
- gre->SetPointError(46,0,0,0.0172474,0.0172474);
- gre->SetPoint(47,0.75,2.53661);
- gre->SetPointError(47,0,0,0.0173363,0.0173363);
- gre->SetPoint(48,0.85,2.54479);
- gre->SetPointError(48,0,0,0.0173642,0.0173642);
- gre->SetPoint(49,0.95,2.55391);
- gre->SetPointError(49,0,0,0.0173953,0.0173953);
- gre->SetPoint(50,1.05,2.5872);
- gre->SetPointError(50,0,0,0.0175083,0.0175083);
- gre->SetPoint(51,1.15,2.60344);
- gre->SetPointError(51,0,0,0.0175631,0.0175631);
- gre->SetPoint(52,1.25,2.60616);
- gre->SetPointError(52,0,0,0.0175723,0.0175723);
- gre->SetPoint(53,1.35,2.62156);
- gre->SetPointError(53,0,0,0.0176242,0.0176242);
- gre->SetPoint(54,1.45,2.61173);
- gre->SetPointError(54,0,0,0.0175911,0.0175911);
- gre->SetPoint(55,1.55,2.60415);
- gre->SetPointError(55,0,0,0.0175655,0.0175655);
- gre->SetPoint(56,1.65,2.60723);
- gre->SetPointError(56,0,0,0.0175759,0.0175759);
- gre->SetPoint(57,1.75,2.60427);
- gre->SetPointError(57,0,0,0.0175659,0.0175659);
- gre->SetPoint(58,1.85,2.56765);
- gre->SetPointError(58,0,0,0.017442,0.017442);
- gre->SetPoint(59,1.95,2.58602);
- gre->SetPointError(59,0,0,0.0175043,0.0175043);
- gre->SetPoint(60,2.05,2.55936);
- gre->SetPointError(60,0,0,0.0174138,0.0174138);
- gre->SetPoint(61,2.15,2.54858);
- gre->SetPointError(61,0,0,0.0173771,0.0173771);
- gre->SetPoint(62,2.25,2.5205);
- gre->SetPointError(62,0,0,0.0172811,0.0172811);
- gre->SetPoint(63,2.35,2.49491);
- gre->SetPointError(63,0,0,0.0171932,0.0171932);
- gre->SetPoint(64,2.45,2.42773);
- gre->SetPointError(64,0,0,0.0169601,0.0169601);
- gre->SetPoint(65,2.55,2.42879);
- gre->SetPointError(65,0,0,0.0169638,0.0169638);
- gre->SetPoint(66,2.65,2.39372);
- gre->SetPointError(66,0,0,0.0168409,0.0168409);
- gre->SetPoint(67,2.75,2.38412);
- gre->SetPointError(67,0,0,0.0168071,0.0168071);
- gre->SetPoint(68,2.85,2.31896);
- gre->SetPointError(68,0,0,0.0165758,0.0165758);
- gre->SetPoint(69,2.95,2.26209);
- gre->SetPointError(69,0,0,0.0163713,0.0163713);
- gre->SetPoint(70,3.05,2.24313);
- gre->SetPointError(70,0,0,0.0163026,0.0163026);
- gre->SetPoint(71,3.15,2.20403);
- gre->SetPointError(71,0,0,0.0161599,0.0161599);
- gre->SetPoint(72,3.25,2.12855);
- gre->SetPointError(72,0,0,0.0158808,0.0158808);
- gre->SetPoint(73,3.35,2.13104);
- gre->SetPointError(73,0,0,0.01589,0.01589);
- gre->SetPoint(74,3.45,2.06339);
- gre->SetPointError(74,0,0,0.0156358,0.0156358);
- gre->SetPoint(75,3.55,1.9846);
- gre->SetPointError(75,0,0,0.0153343,0.0153343);
- gre->SetPoint(76,3.65,1.95391);
- gre->SetPointError(76,0,0,0.0152153,0.0152153);
- gre->SetPoint(77,3.75,1.87998);
- gre->SetPointError(77,0,0,0.0149247,0.0149247);
- gre->SetPoint(78,3.85,1.86256);
- gre->SetPointError(78,0,0,0.0148554,0.0148554);
- gre->SetPoint(79,3.95,1.77239);
- gre->SetPointError(79,0,0,0.0144913,0.0144913);
- gre->SetPoint(80,4.05,1.72855);
- gre->SetPointError(80,0,0,0.014311,0.014311);
- gre->SetPoint(81,4.15,1.69479);
- gre->SetPointError(81,0,0,0.0141705,0.0141705);
- gre->SetPoint(82,4.25,1.64147);
- gre->SetPointError(82,0,0,0.0139459,0.0139459);
- gre->SetPoint(83,4.35,1.58116);
- gre->SetPointError(83,0,0,0.0136873,0.0136873);
- gre->SetPoint(84,4.45,1.55735);
- gre->SetPointError(84,0,0,0.0135838,0.0135838);
- gre->SetPoint(85,4.55,1.48815);
- gre->SetPointError(85,0,0,0.0132786,0.0132786);
- gre->SetPoint(86,4.65,1.40853);
- gre->SetPointError(86,0,0,0.0129185,0.0129185);
- gre->SetPoint(87,4.75,1.36979);
- gre->SetPointError(87,0,0,0.0127396,0.0127396);
- gre->SetPoint(88,4.85,1.32666);
- gre->SetPointError(88,0,0,0.0125374,0.0125374);
- gre->SetPoint(89,4.95,1.29763);
- gre->SetPointError(89,0,0,0.0123995,0.0123995);
- gre->SetPoint(90,5.05,1.25533);
- gre->SetPointError(90,0,0,0.0121957,0.0121957);
- gre->SetPoint(91,5.15,1.20912);
- gre->SetPointError(91,0,0,0.0119692,0.0119692);
- gre->SetPoint(92,5.25,1.18839);
- gre->SetPointError(92,0,0,0.0118661,0.0118661);
- gre->SetPoint(93,5.35,1.15948);
- gre->SetPointError(93,0,0,0.0117209,0.0117209);
- gre->SetPoint(94,5.45,1.1141);
- gre->SetPointError(94,0,0,0.0114892,0.0114892);
- gre->SetPoint(95,5.55,1.06315);
- gre->SetPointError(95,0,0,0.0112235,0.0112235);
- gre->SetPoint(96,5.65,1.05213);
- gre->SetPointError(96,0,0,0.0111651,0.0111651);
- gre->SetPoint(97,5.75,1.02476);
- gre->SetPointError(97,0,0,0.011019,0.011019);
- gre->SetPoint(98,5.85,0.984834);
- gre->SetPointError(98,0,0,0.0108022,0.0108022);
- gre->SetPoint(99,5.95,0.952844);
- gre->SetPointError(99,0,0,0.0106253,0.0106253);
-
- return gre;
- }
-
- //____________________________________________________________________
- /**
- * Get PYTHIA 900GeV NSD data
- *
- *
- * @return Data graph
- */
- static TGraphAsymmErrors* Pythia900NSD()
- {
-
- TGraphAsymmErrors *gre = new TGraphAsymmErrors(100);
- SetGraphAttributes(gre, NSD, PYTHIA, false, "pythia900NSD",
- "Pythia");
-
- gre->SetPoint(0,-3.95,2.11766);
- gre->SetPointError(0,0,0,0.0179417,0.0179417);
- gre->SetPoint(1,-3.85,2.20415);
- gre->SetPointError(1,0,0,0.0183045,0.0183045);
- gre->SetPoint(2,-3.75,2.30949);
- gre->SetPointError(2,0,0,0.0187368,0.0187368);
- gre->SetPoint(3,-3.65,2.34582);
- gre->SetPointError(3,0,0,0.0188836,0.0188836);
- gre->SetPoint(4,-3.55,2.38322);
- gre->SetPointError(4,0,0,0.0190335,0.0190335);
- gre->SetPoint(5,-3.45,2.43353);
- gre->SetPointError(5,0,0,0.0192334,0.0192334);
- gre->SetPoint(6,-3.35,2.51106);
- gre->SetPointError(6,0,0,0.0195373,0.0195373);
- gre->SetPoint(7,-3.25,2.56578);
- gre->SetPointError(7,0,0,0.0197491,0.0197491);
- gre->SetPoint(8,-3.15,2.60515);
- gre->SetPointError(8,0,0,0.0199,0.0199);
- gre->SetPoint(9,-3.05,2.7105);
- gre->SetPointError(9,0,0,0.0202984,0.0202984);
- gre->SetPoint(10,-2.95,2.77008);
- gre->SetPointError(10,0,0,0.0205203,0.0205203);
- gre->SetPoint(11,-2.85,2.83332);
- gre->SetPointError(11,0,0,0.0207532,0.0207532);
- gre->SetPoint(12,-2.75,2.84715);
- gre->SetPointError(12,0,0,0.0208038,0.0208038);
- gre->SetPoint(13,-2.65,2.91693);
- gre->SetPointError(13,0,0,0.0210571,0.0210571);
- gre->SetPoint(14,-2.55,2.95797);
- gre->SetPointError(14,0,0,0.0212048,0.0212048);
- gre->SetPoint(15,-2.45,2.97499);
- gre->SetPointError(15,0,0,0.0212657,0.0212657);
- gre->SetPoint(16,-2.35,3.01345);
- gre->SetPointError(16,0,0,0.0214027,0.0214027);
- gre->SetPoint(17,-2.25,3.04659);
- gre->SetPointError(17,0,0,0.0215201,0.0215201);
- gre->SetPoint(18,-2.15,3.09341);
- gre->SetPointError(18,0,0,0.0216848,0.0216848);
- gre->SetPoint(19,-2.05,3.13187);
- gre->SetPointError(19,0,0,0.0218192,0.0218192);
- gre->SetPoint(20,-1.95,3.13917);
- gre->SetPointError(20,0,0,0.0218446,0.0218446);
- gre->SetPoint(21,-1.85,3.16911);
- gre->SetPointError(21,0,0,0.0219485,0.0219485);
- gre->SetPoint(22,-1.75,3.15665);
- gre->SetPointError(22,0,0,0.0219053,0.0219053);
- gre->SetPoint(23,-1.65,3.19693);
- gre->SetPointError(23,0,0,0.0220446,0.0220446);
- gre->SetPoint(24,-1.55,3.17002);
- gre->SetPointError(24,0,0,0.0219517,0.0219517);
- gre->SetPoint(25,-1.45,3.18538);
- gre->SetPointError(25,0,0,0.0220048,0.0220048);
- gre->SetPoint(26,-1.35,3.18066);
- gre->SetPointError(26,0,0,0.0219885,0.0219885);
- gre->SetPoint(27,-1.25,3.19754);
- gre->SetPointError(27,0,0,0.0220467,0.0220467);
- gre->SetPoint(28,-1.15,3.18021);
- gre->SetPointError(28,0,0,0.0219869,0.0219869);
- gre->SetPoint(29,-1.05,3.13111);
- gre->SetPointError(29,0,0,0.0218165,0.0218165);
- gre->SetPoint(30,-0.95,3.12153);
- gre->SetPointError(30,0,0,0.0217831,0.0217831);
- gre->SetPoint(31,-0.85,3.14798);
- gre->SetPointError(31,0,0,0.0218752,0.0218752);
- gre->SetPoint(32,-0.75,3.07912);
- gre->SetPointError(32,0,0,0.0216347,0.0216347);
- gre->SetPoint(33,-0.65,3.10207);
- gre->SetPointError(33,0,0,0.0217151,0.0217151);
- gre->SetPoint(34,-0.55,3.06346);
- gre->SetPointError(34,0,0,0.0215796,0.0215796);
- gre->SetPoint(35,-0.45,2.97651);
- gre->SetPointError(35,0,0,0.0212711,0.0212711);
- gre->SetPoint(36,-0.35,2.98715);
- gre->SetPointError(36,0,0,0.0213091,0.0213091);
- gre->SetPoint(37,-0.25,2.98548);
- gre->SetPointError(37,0,0,0.0213032,0.0213032);
- gre->SetPoint(38,-0.15,3.00555);
- gre->SetPointError(38,0,0,0.0213746,0.0213746);
- gre->SetPoint(39,-0.05,3.01193);
- gre->SetPointError(39,0,0,0.0213973,0.0213973);
- gre->SetPoint(40,0.05,3.04385);
- gre->SetPointError(40,0,0,0.0215104,0.0215104);
- gre->SetPoint(41,0.15,3.04933);
- gre->SetPointError(41,0,0,0.0215297,0.0215297);
- gre->SetPoint(42,0.25,3.04659);
- gre->SetPointError(42,0,0,0.0215201,0.0215201);
- gre->SetPoint(43,0.35,3.00813);
- gre->SetPointError(43,0,0,0.0213838,0.0213838);
- gre->SetPoint(44,0.45,3.06666);
- gre->SetPointError(44,0,0,0.0215908,0.0215908);
- gre->SetPoint(45,0.55,3.07167);
- gre->SetPointError(45,0,0,0.0216085,0.0216085);
- gre->SetPoint(46,0.65,3.0659);
- gre->SetPointError(46,0,0,0.0215881,0.0215881);
- gre->SetPoint(47,0.75,3.09159);
- gre->SetPointError(47,0,0,0.0216784,0.0216784);
- gre->SetPoint(48,0.85,3.10846);
- gre->SetPointError(48,0,0,0.0217375,0.0217375);
- gre->SetPoint(49,0.95,3.11925);
- gre->SetPointError(49,0,0,0.0217752,0.0217752);
- gre->SetPoint(50,1.05,3.15558);
- gre->SetPointError(50,0,0,0.0219016,0.0219016);
- gre->SetPoint(51,1.15,3.16911);
- gre->SetPointError(51,0,0,0.0219485,0.0219485);
- gre->SetPoint(52,1.25,3.17246);
- gre->SetPointError(52,0,0,0.0219601,0.0219601);
- gre->SetPoint(53,1.35,3.19146);
- gre->SetPointError(53,0,0,0.0220258,0.0220258);
- gre->SetPoint(54,1.45,3.17458);
- gre->SetPointError(54,0,0,0.0219675,0.0219675);
- gre->SetPoint(55,1.55,3.16866);
- gre->SetPointError(55,0,0,0.0219469,0.0219469);
- gre->SetPoint(56,1.65,3.16592);
- gre->SetPointError(56,0,0,0.0219375,0.0219375);
- gre->SetPoint(57,1.75,3.16394);
- gre->SetPointError(57,0,0,0.0219306,0.0219306);
- gre->SetPoint(58,1.85,3.11956);
- gre->SetPointError(58,0,0,0.0217762,0.0217762);
- gre->SetPoint(59,1.95,3.14646);
- gre->SetPointError(59,0,0,0.02187,0.02187);
- gre->SetPoint(60,2.05,3.10147);
- gre->SetPointError(60,0,0,0.021713,0.021713);
- gre->SetPoint(61,2.15,3.09356);
- gre->SetPointError(61,0,0,0.0216853,0.0216853);
- gre->SetPoint(62,2.25,3.05328);
- gre->SetPointError(62,0,0,0.0215437,0.0215437);
- gre->SetPoint(63,2.35,3.01953);
- gre->SetPointError(63,0,0,0.0214243,0.0214243);
- gre->SetPoint(64,2.45,2.9373);
- gre->SetPointError(64,0,0,0.0211305,0.0211305);
- gre->SetPoint(65,2.55,2.92772);
- gre->SetPointError(65,0,0,0.0210961,0.0210961);
- gre->SetPoint(66,2.65,2.89154);
- gre->SetPointError(66,0,0,0.0209653,0.0209653);
- gre->SetPoint(67,2.75,2.87619);
- gre->SetPointError(67,0,0,0.0209096,0.0209096);
- gre->SetPoint(68,2.85,2.78924);
- gre->SetPointError(68,0,0,0.0205911,0.0205911);
- gre->SetPoint(69,2.95,2.72159);
- gre->SetPointError(69,0,0,0.0203399,0.0203399);
- gre->SetPoint(70,3.05,2.69089);
- gre->SetPointError(70,0,0,0.0202248,0.0202248);
- gre->SetPoint(71,3.15,2.64939);
- gre->SetPointError(71,0,0,0.0200682,0.0200682);
- gre->SetPoint(72,3.25,2.55545);
- gre->SetPointError(72,0,0,0.0197092,0.0197092);
- gre->SetPoint(73,3.35,2.56745);
- gre->SetPointError(73,0,0,0.0197555,0.0197555);
- gre->SetPoint(74,3.45,2.47503);
- gre->SetPointError(74,0,0,0.0193967,0.0193967);
- gre->SetPoint(75,3.55,2.36741);
- gre->SetPointError(75,0,0,0.0189703,0.0189703);
- gre->SetPoint(76,3.65,2.33412);
- gre->SetPointError(76,0,0,0.0188364,0.0188364);
- gre->SetPoint(77,3.75,2.2385);
- gre->SetPointError(77,0,0,0.0184466,0.0184466);
- gre->SetPoint(78,3.85,2.21768);
- gre->SetPointError(78,0,0,0.0183606,0.0183606);
- gre->SetPoint(79,3.95,2.1055);
- gre->SetPointError(79,0,0,0.0178901,0.0178901);
- gre->SetPoint(80,4.05,2.05047);
- gre->SetPointError(80,0,0,0.0176548,0.0176548);
- gre->SetPoint(81,4.15,2.00486);
- gre->SetPointError(81,0,0,0.0174574,0.0174574);
- gre->SetPoint(82,4.25,1.94573);
- gre->SetPointError(82,0,0,0.017198,0.017198);
- gre->SetPoint(83,4.35,1.87064);
- gre->SetPointError(83,0,0,0.0168629,0.0168629);
- gre->SetPoint(84,4.45,1.83735);
- gre->SetPointError(84,0,0,0.0167122,0.0167122);
- gre->SetPoint(85,4.55,1.75314);
- gre->SetPointError(85,0,0,0.0163247,0.0163247);
- gre->SetPoint(86,4.65,1.65828);
- gre->SetPointError(86,0,0,0.0158769,0.0158769);
- gre->SetPoint(87,4.75,1.60751);
- gre->SetPointError(87,0,0,0.015632,0.015632);
- gre->SetPoint(88,4.85,1.56312);
- gre->SetPointError(88,0,0,0.0154146,0.0154146);
- gre->SetPoint(89,4.95,1.52117);
- gre->SetPointError(89,0,0,0.0152064,0.0152064);
- gre->SetPoint(90,5.05,1.46553);
- gre->SetPointError(90,0,0,0.0149257,0.0149257);
- gre->SetPoint(91,5.15,1.42038);
- gre->SetPointError(91,0,0,0.014694,0.014694);
- gre->SetPoint(92,5.25,1.38816);
- gre->SetPointError(92,0,0,0.0145263,0.0145263);
- gre->SetPoint(93,5.35,1.35046);
- gre->SetPointError(93,0,0,0.0143277,0.0143277);
- gre->SetPoint(94,5.45,1.30075);
- gre->SetPointError(94,0,0,0.0140616,0.0140616);
- gre->SetPoint(95,5.55,1.24025);
- gre->SetPointError(95,0,0,0.0137307,0.0137307);
- gre->SetPoint(96,5.65,1.21806);
- gre->SetPointError(96,0,0,0.0136073,0.0136073);
- gre->SetPoint(97,5.75,1.19435);
- gre->SetPointError(97,0,0,0.0134742,0.0134742);
- gre->SetPoint(98,5.85,1.14175);
- gre->SetPointError(98,0,0,0.0131741,0.0131741);
- gre->SetPoint(99,5.95,1.09235);
- gre->SetPointError(99,0,0,0.012886,0.012886);
-
- return gre;
- }
-
- //____________________________________________________________________
- /**
- * Get the UA5 NSD data for pp at @f$ \sqrt{s} = 900GeV@f$
- * p7886_d1x1y4 - Z.Phys.C33:1-6,1986.
- *
- * @param mirrored Wether to produce the mirrored plot
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* UA5Nsd(Bool_t mirrored=false)
- {
- //UA5 data NSD - p7886_d1x1y4 - Z.Phys.C33:1-6,1986.
- double x[] = { 0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875,2.125,
- 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125,4.375,
- 4.625 };
- double exm[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
- double exp[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
- double y[] = { 3.48, 3.38, 3.52, 3.68, 3.71, 3.86, 3.76, 3.66, 3.72,
- 3.69, 3.56, 3.41, 3.15, 3.09, 2.74, 2.73, 2.32, 1.99, 1.69 };
- double eym[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07,
- 0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1,
- 0.13 };
- double eyp[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07,
- 0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1,
- 0.13 };
- const int np = 19;
- double xm[np];
- double exmm[np];
- double expm[np];
- double ym[np];
- double eymm[np];
- double eypm[np];
- for (int i = 0; i < np; i++) {
- int j = np-1-i;
- xm[i] = -x[j];
- exmm[i] = exm[j];
- expm[i] = exp[j];
- ym[i] = y[j];
- eymm[i] = eym[j];
- eypm[i] = eyp[j];
- }
-
- TGraphAsymmErrors* g = new TGraphAsymmErrors(19,x, y, exm, exp, eym, eyp);
- TGraphAsymmErrors* gm = new TGraphAsymmErrors(19,xm,ym,exmm,expm,eymm,eypm);
- SetGraphAttributes(g, NSD, UA5, false,"ua5_nsd", "UA5");
- SetGraphAttributes(gm, NSD, UA5, true,"ua5_nsd_mirrored",
- "UA5 (mirrored)");
-
- return (mirrored ? gm : g);
- }
-
- //____________________________________________________________________
+ //__________________________________________________________________
/**
- * Get the UA5 INEL data for pp at @f$ \sqrt{s} = 900GeV@f$
- * p7886_d2x1y2 - Z.Phys.C33:1-6,1986.
- *
- * @param mirrored Wether to produce the mirrored plot
+ * Get the color for a centrality bin
*
- * @return graph of data
+ * @param centLow Centrality bin
+ * @param centHigh Centrality bin
*
- * @ingroup pwglf_forward_otherdata
+ * @return Color
*/
- static TGraphAsymmErrors* UA5Inel(Bool_t mirrored=false)
+ static Int_t CentralityColor(UShort_t centLow,
+ UShort_t centHigh,
+ UShort_t /*nBins*/=0)
{
- //UA5 data INEL - p7886_d2x1y2 - Z.Phys.C33:1-6,1986.
- double x[] = { 0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875,2.125,
- 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125,4.375,
- 4.625 };
- double exm[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
- double exp[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
- double y[] = { 3.14, 3.04, 3.17, 3.33, 3.33, 3.53, 3.46, 3.41, 3.45,
- 3.39, 3.07, 3.07, 2.93, 2.93, 2.55, 2.48, 2.18, 1.91, 1.52 };
- double eym[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07,
- 0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1,
- 0.13 };
- double eyp[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07,
- 0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1,
- 0.13 };
- const int np = 19;
- double xm[np];
- double exmm[np];
- double expm[np];
- double ym[np];
- double eymm[np];
- double eypm[np];
- for (int i = 0; i < np; i++) {
- int j = np-1-i;
- xm[i] = -x[j];
- exmm[i] = exm[j];
- expm[i] = exp[j];
- ym[i] = y[j];
- eymm[i] = eym[j];
- eypm[i] = eyp[j];
- }
- TGraphAsymmErrors* g = new TGraphAsymmErrors(np,x, y, exm, exp, eym, eyp);
- TGraphAsymmErrors* gm = new TGraphAsymmErrors(np,xm,ym,exmm,expm,eymm,eypm);
-
- SetGraphAttributes(g, INEL, UA5, false, "ua5_inel", "UA5");
- SetGraphAttributes(gm, INEL, UA5, true, "ua5_inel_mirrored",
- "UA5 (mirrored)");
-
- return (mirrored ? gm : g);
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE INEL data in @f$ |\eta|<1.3@f$ for pp at @f$ \sqrt{s}
- * = 900GeV@f$
- * p7742_d1x1y1 - Eur.Phys.J.C68:89-108,2010.
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInel900()
- {
- // INEL - p7742_d1x1y1 - Eur.Phys.J.C68:89-108,2010.
- TGraphAsymmErrors* g = 0;
- double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3,
- -0.1, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3 };
- double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1, 0.1, 0.1, 0.1, 0.1 };
- double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1, 0.1, 0.1, 0.1, 0.1 };
- double y[] = { 3.28, 3.28, 3.22, 3.12, 3.06, 3.02, 2.98, 3.02, 3.02,
- 3.05, 3.15, 3.21, 3.26, 3.33 };
- double eym[] = { 0.06324555320336758, 0.06324555320336758,
- 0.06324555320336758, 0.06324555320336758,
- 0.06324555320336758, 0.05385164807134505,
- 0.05385164807134505, 0.05385164807134505,
- 0.05385164807134505, 0.06324555320336758,
- 0.06324555320336758, 0.06324555320336758,
- 0.06324555320336758, 0.06324555320336758 };
- double eyp[] = { 0.08246211251235322, 0.08246211251235322,
- 0.08246211251235322, 0.08246211251235322,
- 0.08246211251235322, 0.08246211251235322,
- 0.07280109889280519, 0.08246211251235322,
- 0.08246211251235322, 0.08246211251235322,
- 0.08246211251235322, 0.08246211251235322,
- 0.08246211251235322, 0.08246211251235322 };
- const int np = 14;
- for (int i = 0; i < np; i++) {
- eym[i] += 0.02;
- eyp[i] += 0.02;
- }
- g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
- SetGraphAttributes(g, INEL, ALICE, false, "alice_inel",
- "#it{Eur.Phys.J}.#bf{C68}:89-108,2010"
- /* "ALICE INEL (publ.)" */);
-
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE INEL>0 data in @f$ |\eta|<1.3@f$ for pp at @f$
- * \sqrt{s} = 900GeV@f$
- *
- * p7741_d4x1y1 - Eur.Phys.J.C68:345-354,2010.
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInelGt900()
- {
#if 0
- // INEL>0 - p7741_d4x1y1 - Eur.Phys.J.C68:345-354,2010.
- double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7,
- 0.9 };
- double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1 };
- double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1 };
- double y[] = { 4.0, 3.87, 3.8, 3.7, 3.67, 3.73, 3.72, 3.77, 3.92,
- 4.01 };
- double eym[] = { 0.07615773105863909, 0.07615773105863909,
- 0.07615773105863909, 0.06324555320336758,
- 0.06324555320336758, 0.06324555320336758,
- 0.0670820393249937, 0.07615773105863909,
- 0.07615773105863909, 0.07615773105863909 };
- double eyp[] = { 0.08544003745317531, 0.07615773105863909,
- 0.07615773105863909, 0.07280109889280519,
- 0.07280109889280519, 0.07280109889280519,
- 0.07615773105863909, 0.07615773105863909,
- 0.08544003745317531, 0.08544003745317531 };
- const int np = 10;
- for (int i = 0; i < np; i++) {
- double stat = (i >= 3 && i<=5) ? 0.02 : 0.03;
- eym[i] += stat;
- eyp[i] += stat;
+ if (nBins > 0 && nBins < 6) {
+ switch (bin) {
+ case 1: return kRed+2;
+ case 2: return kGreen+2;
+ case 3: return kBlue+1;
+ case 4: return kCyan+1;
+ case 5: return kMagenta+1;
+ case 6: return kYellow+2;
+ }
}
-
- TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-#else
- // These are from JFGO
- TGraphAsymmErrors *g = new TGraphAsymmErrors(15);
- g->SetPoint(0,-1.5,4.12575);
- g->SetPointError(0,0.1,0.1,0.0742967,0.0814571);
- g->SetPoint(1,-1.3,3.91209);
- g->SetPointError(1,0.1,0.1,0.0697701,0.0766199);
- g->SetPoint(2,-1.1,3.98377);
- g->SetPointError(2,0.1,0.1,0.0704503,0.0774795);
- g->SetPoint(3,-0.9,4.00035);
- g->SetPointError(3,0.1,0.1,0.0702388,0.0773433);
- g->SetPoint(4,-0.7,3.87228);
- g->SetPointError(4,0.1,0.1,0.067597,0.0745103);
- g->SetPoint(5,-0.5,3.79613);
- g->SetPointError(5,0.1,0.1,0.0659771,0.0727816);
- g->SetPoint(6,-0.3,3.70489);
- g->SetPointError(6,0.1,0.1,0.0642016,0.0708603);
- g->SetPoint(7,-0.1,3.67423);
- g->SetPointError(7,0.1,0.1,0.0635759,0.0701884);
- g->SetPoint(8,0.1,3.72765);
- g->SetPointError(8,0.1,0.1,0.0645004,0.071209);
- g->SetPoint(9,0.3,3.72171);
- g->SetPointError(9,0.1,0.1,0.064493,0.071182);
- g->SetPoint(10,0.5,3.77428);
- g->SetPointError(10,0.1,0.1,0.0655974,0.0723627);
- g->SetPoint(11,0.7,3.91704);
- g->SetPointError(11,0.1,0.1,0.0683783,0.0753716);
- g->SetPoint(12,0.9,4.00674);
- g->SetPointError(12,0.1,0.1,0.0703511,0.0774669);
- g->SetPoint(13,1.1,3.97948);
- g->SetPointError(13,0.1,0.1,0.0703744,0.077396);
- g->SetPoint(14,1.3,3.99165);
- g->SetPointError(14,0.1,0.1,0.0711888,0.078178);
#endif
- SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt900",
- // "ALICE INEL>0 (publ.)"
- "#it{Eur.Phys.J}.#bf{C68}:345-354,2010");
- return g;
+ gStyle->SetPalette(1);
+ Float_t fc = (centLow+double(centHigh-centLow)/2) / 100;
+ Int_t nCol = gStyle->GetNumberOfColors();
+ Int_t icol = TMath::Min(nCol-1,int(fc * nCol + .5));
+ Int_t col = gStyle->GetColorPalette(icol);
+ //Info("GetCentralityColor","%3d: %3d-%3d -> %3d",bin,centLow,centHigh,col);
+ return col;
}
-
- //____________________________________________________________________
/**
- * Get the ALICE INEL>0 data in @f$ |\eta|<0.9@f$ for pp at @f$
- * \sqrt{s} = 2.36TeV@f$
- *
- * p7741_d5x1y1 - Eur.Phys.J.C68:345-354,2010.
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInelGt2360()
- {
-#if 0
- // INEL>0 - p7741_d5x1y1 - Eur.Phys.J.C68:345-354,2010.
- double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9 };
- double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
- double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
- double y[] = { 4.91, 4.76, 4.63, 4.64, 4.55, 4.55, 4.64, 4.66, 4.82, 4.88 };
- double eym[] = { 0.08544003745317531, 0.08544003745317531,
- 0.08544003745317531, 0.08544003745317531,
- 0.08544003745317531, 0.08544003745317531,
- 0.08544003745317531, 0.08544003745317531,
- 0.08544003745317531, 0.08544003745317531 };
- double eyp[] = { 0.11401754250991379, 0.11401754250991379,
- 0.1044030650891055, 0.1044030650891055,
- 0.1044030650891055, 0.1044030650891055,
- 0.1044030650891055, 0.1044030650891055,
- 0.11401754250991379, 0.11401754250991379 };
- const int np = 10;
- for (int i = 0; i < np; i++) {
- double stat = 0.3;
- eym[i] += stat;
- eyp[i] += stat;
+ * Import a histogram into the data base
+ *
+ * @param h Histogram
+ * @param title Title on plot
+ * @param experiment Which experiement
+ * @param sys Collision system
+ * @param sNN Collision energy (in GeV)
+ * @param trigger Trigger type
+ * @param centLow Lease centrality
+ * @param centHigh Largest centrality
+ * @param path Possible path to database
+ *
+ * @return true on success
+ */
+ static Bool_t Import(TH1* h,
+ const char* title,
+ UShort_t experiment,
+ UShort_t sys,
+ UShort_t sNN,
+ UShort_t trigger,
+ UShort_t centLow=0,
+ UShort_t centHigh=0,
+ const char* path=0)
+ {
+ TGraphAsymmErrors* g = new TGraphAsymmErrors();
+ Int_t nx = h->GetNbinsX();
+ Int_t j = 0;
+ for (Int_t i = 1; i <= nx; i++) {
+ Double_t x = h->GetXaxis()->GetBinCenter(i);
+ Double_t ex = h->GetXaxis()->GetBinWidth(i)/2;
+ Double_t y = h->GetBinContent(i);
+ Double_t ey = h->GetBinError(i);
+
+ if (TMath::Abs(y) < 1e-6 || ey < 1e-6) continue;
+
+ g->SetPoint(j, x, y);
+ g->SetPointError(j, ex, ex, ey, ey);
+ j++;
}
+ if (j <= 0) return false;
- TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-#else
- // These are from JFGO
- TGraphAsymmErrors* g = new TGraphAsymmErrors(15);
- g->SetPoint(0,-1.5,4.79047);
- g->SetPointError(0,0.1,0.1,0.0844278,0.109947);
- g->SetPoint(1,-1.3,4.91068);
- g->SetPointError(1,0.1,0.1,0.0856751,0.112038);
- g->SetPoint(2,-1.1,4.87386);
- g->SetPointError(2,0.1,0.1,0.0842846,0.110628);
- g->SetPoint(3,-0.9,4.91365);
- g->SetPointError(3,0.1,0.1,0.084339,0.111049);
- g->SetPoint(4,-0.7,4.7601);
- g->SetPointError(4,0.1,0.1,0.0812087,0.107203);
- g->SetPoint(5,-0.5,4.63355);
- g->SetPointError(5,0.1,0.1,0.078687,0.104079);
- g->SetPoint(6,-0.3,4.63885);
- g->SetPointError(6,0.1,0.1,0.0785337,0.104014);
- g->SetPoint(7,-0.1,4.55439);
- g->SetPointError(7,0.1,0.1,0.0769842,0.10203);
- g->SetPoint(8,0.1,4.55087);
- g->SetPointError(8,0.1,0.1,0.0769246,0.101951);
- g->SetPoint(9,0.3,4.64118);
- g->SetPointError(9,0.1,0.1,0.0785732,0.104066);
- g->SetPoint(10,0.5,4.66172);
- g->SetPointError(10,0.1,0.1,0.0791652,0.104711);
- g->SetPoint(11,0.7,4.81871);
- g->SetPointError(11,0.1,0.1,0.0822086,0.108523);
- g->SetPoint(12,0.9,4.88193);
- g->SetPointError(12,0.1,0.1,0.0837944,0.110332);
- g->SetPoint(13,1.1,4.89068);
- g->SetPointError(13,0.1,0.1,0.0845754,0.111009);
- g->SetPoint(14,1.3,5.05663);
- g->SetPointError(14,0.1,0.1,0.0882216,0.115368);
-#endif
-
- SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt2360",
- // "ALICE INEL>0 (publ.)"
- "#it{Eur.Phys.J}.#bf{C68}:345-354,2010");
- return g;
+ return Import(g, title, experiment, sys, sNN, trigger, centLow, centHigh,
+ path);
}
-
- //____________________________________________________________________
/**
- * Get the ALICE INEL>0 data in @f$ |\eta|<0.9@f$ for pp at @f$
- * \sqrt{s} = 7TeV@f$
- *
- * p7741_d6x1y1 - Eur.Phys.J.C68:345-354,2010.
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInelGt7000()
- {
-#if 0
- // INEL>0 - p7741_d6x1y1 - Eur.Phys.J.C68:345-354,2010.
- // Plot: p7741_d6x1y1
- double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9 };
- double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
- double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
- double y[] = { 6.22, 6.07, 6.01, 5.84, 5.85, 5.85, 5.91, 6.01, 6.17, 6.26 };
- double eym[] = { 0.1216552506059644, 0.1216552506059644,
- 0.1216552506059644, 0.11180339887498948,
- 0.11180339887498948, 0.11180339887498948,
- 0.11180339887498948, 0.1216552506059644,
- 0.1216552506059644, 0.1216552506059644 };
- double eyp[] = { 0.21095023109728983, 0.21095023109728983,
- 0.2009975124224178, 0.2009975124224178,
- 0.2009975124224178, 0.2009975124224178,
- 0.2009975124224178, 0.2009975124224178,
- 0.21095023109728983, 0.21095023109728983 };
- const int np = 10;
- for (int i = 0; i < np; i++) {
- double stat = 0.2;
- eym[i] += stat;
- eyp[i] += stat;
+ * Import a graph into the data base
+ *
+ * @param g Graph
+ * @param title Title on plot
+ * @param experiment Which experiement
+ * @param sys Collision system
+ * @param sNN Collision energy (in GeV)
+ * @param trigger Trigger type
+ * @param centLow Lease centrality
+ * @param centHigh Largest centrality
+ * @param path Possible path to database
+ *
+ * @return true on success
+ */
+ static Bool_t Import(TGraphAsymmErrors* g,
+ const char* title,
+ UShort_t experiment,
+ UShort_t sys,
+ UShort_t sNN,
+ UShort_t trigger,
+ UShort_t centLow=0,
+ UShort_t centHigh=0,
+ const char* path=0)
+ {
+ if (!g) return false;
+
+ TString expName = ExpName(experiment); expName.ToLower();
+ const char* sNNName = SNNName(sNN);
+ const char* sysName = SysName(sys);
+ const char* trgName = TrgName(trigger,centLow,centHigh);
+ TString name = Form("%s%s%s%s",
+ expName.Data(), sysName, sNNName, trgName);
+
+ SetGraphAttributes(g, trigger, experiment, false, name, title);
+ if (centLow < centHigh) {
+ Int_t col = CentralityColor(centLow, centHigh);
+ g->SetMarkerColor(col);
+ g->SetLineColor(col);
+ g->SetFillColor(col);
}
+
+ TMultiGraph* mg = new TMultiGraph("data","");
+ mg->Add(g);
- TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-#else
- // These are from JFGO
- TGraphAsymmErrors* g = new TGraphAsymmErrors(15);
- g->SetPoint(0,-1.5,6.28573);
- g->SetPointError(0,0.1,0.1,0.125928,0.215392);
- g->SetPoint(1,-1.3,6.25573);
- g->SetPointError(1,0.1,0.1,0.124352,0.213795);
- g->SetPoint(2,-1.1,6.28779);
- g->SetPointError(2,0.1,0.1,0.124143,0.214399);
- g->SetPoint(3,-0.9,6.21881);
- g->SetPointError(3,0.1,0.1,0.122079,0.211642);
- g->SetPoint(4,-0.7,6.0728);
- g->SetPointError(4,0.1,0.1,0.118661,0.206355);
- g->SetPoint(5,-0.5,6.011);
- g->SetPointError(5,0.1,0.1,0.117043,0.204019);
- g->SetPoint(6,-0.3,5.84071);
- g->SetPointError(6,0.1,0.1,0.11346,0.198086);
- g->SetPoint(7,-0.1,5.8532);
- g->SetPointError(7,0.1,0.1,0.113569,0.198433);
- g->SetPoint(8,0.1,5.84811);
- g->SetPointError(8,0.1,0.1,0.11347,0.198261);
- g->SetPoint(9,0.3,5.91022);
- g->SetPointError(9,0.1,0.1,0.11481,0.200444);
- g->SetPoint(10,0.5,6.00649);
- g->SetPointError(10,0.1,0.1,0.116955,0.203866);
- g->SetPoint(11,0.7,6.17115);
- g->SetPointError(11,0.1,0.1,0.120583,0.209697);
- g->SetPoint(12,0.9,6.2645);
- g->SetPointError(12,0.1,0.1,0.122976,0.213197);
- g->SetPoint(13,1.1,6.36448);
- g->SetPointError(13,0.1,0.1,0.125657,0.217014);
- g->SetPoint(14,1.3,6.39489);
- g->SetPointError(14,0.1,0.1,0.127118,0.218551);
-#endif
- SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt7000",
- // "ALICE INEL>0 (publ.)"
- "#it{Eur.Phys.J}.#bf{C68}:345-354,2010");
- return g;
+ return Import(mg, experiment, sys, sNN, trigger, centLow, centHigh, path);
}
-
- //____________________________________________________________________
/**
- * Get the ALICE NSD data in @f$ |\eta|<1.3@f$ for pp at @f$
- * \sqrt{s} = 900GeV@f$
- *
- * p7742_d2x1y1 - Eur.Phys.J.C68:89-108,2010.
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralNsd900()
- {
- //NSD - p7742_d2x1y1 - Eur.Phys.J.C68:89-108,2010.
- double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3,
- 0.5, 0.7, 0.9, 1.1, 1.3 };
- double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1, 0.1, 0.1, 0.1, 0.1 };
- double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1, 0.1, 0.1, 0.1, 0.1 };
- double y[] = { 3.9, 3.89, 3.81, 3.7, 3.64, 3.59, 3.53, 3.58, 3.59,
- 3.61, 3.74, 3.8, 3.87, 3.95 };
- double eym[] = { 0.13341664064126335, 0.13152946437965907,
- 0.13152946437965907, 0.1216552506059644,
- 0.1216552506059644, 0.1216552506059644,
- 0.1216552506059644, 0.1216552506059644,
- 0.1216552506059644, 0.1216552506059644,
- 0.1216552506059644, 0.13152946437965907,
- 0.13152946437965907, 0.13341664064126335 };
- double eyp[] = { 0.13341664064126335, 0.13152946437965907,
- 0.13152946437965907, 0.1216552506059644,
- 0.1216552506059644, 0.1216552506059644,
- 0.1216552506059644, 0.1216552506059644,
- 0.1216552506059644, 0.1216552506059644,
- 0.1216552506059644, 0.13152946437965907,
- 0.13152946437965907, 0.13341664064126335 };
- const int np = 14;
- for (int i = 0; i < np; i++) {
- double stat = (i == 0 || i == np-1) ? 0.03 : 0.02;
- eym[i] += stat;
- eyp[i] += stat;
+ * Import a graph into the data base
+ *
+ * @param g Graph
+ * @param title Title on plot
+ * @param experiment Which experiement
+ * @param sys Collision system
+ * @param sNN Collision energy (in GeV)
+ * @param trigger Trigger type
+ * @param centLow Lease centrality
+ * @param centHigh Largest centrality
+ * @param path Possible path to database
+ *
+ * @return true on success
+ */
+ static Bool_t Import(TMultiGraph* g,
+ UShort_t experiment,
+ UShort_t sys,
+ UShort_t sNN,
+ UShort_t trigger,
+ UShort_t centLow=0,
+ UShort_t centHigh=0,
+ const char* path=0)
+ {
+ TFile* file = GetFile(path, true);
+
+ const char* sysName = SysName(sys);
+ const char* sNNName = SNNName(sNN);
+ const char* trgName = TrgName(trigger, centLow, centHigh);
+ const char* expName = ExpName(experiment);
+
+ if (!sysName || !sNNName || !trgName || !expName) return false;
+
+ TString dirName;
+ dirName = Form("%s/%s/%s/%s", sysName, sNNName, trgName, expName);
+
+ TDirectory* dir = file->GetDirectory(dirName);
+ if (!dir) dir = file->mkdir(dirName);
+ file->cd(dirName);
+
+ if (dir->Get("data")) {
+ ::Warning("", "Already have data in %s", dirName.Data());
+ // return false;
}
- TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
- SetGraphAttributes(g, NSD, ALICE, false, "alice_nsd",
- //"ALICE NSD (publ.)"
- "#it{Eur.Phys.J}.#bf{C68}:89-108,2010");
+ g->SetName("data");
+ g->Write();
+
+ file->cd();
+ file->Close();
- return g;
+ return true;
}
+};
- //____________________________________________________________________
- /**
- * Get the ALICE INEL data in @f$ |\eta|<1.3@f$ for pp at @f$
- * \sqrt{s} = 2.36TeV@f$
- *
- * p7742_d3x1y1 - Eur.Phys.J.C68:89-108,2010.
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInel2360()
- {
- // INEL - p7742_d3x1y1 - Eur.Phys.J.C68:89-108,2010.
- double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3,
- 0.5, 0.7, 0.9, 1.1, 1.3 };
- double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1, 0.1, 0.1, 0.1, 0.1 };
- double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1, 0.1, 0.1, 0.1, 0.1 };
- double y[] = { 4.08, 4.01, 4.0, 3.88, 3.77, 3.8, 3.73, 3.71, 3.79,
- 3.82, 3.94, 4.02, 4.05, 4.16 };
- double eym[] = { 0.13341664064126335, 0.12369316876852982,
- 0.12369316876852982, 0.1216552506059644,
- 0.1216552506059644, 0.1216552506059644,
- 0.1216552506059644, 0.11180339887498948,
- 0.1216552506059644, 0.1216552506059644,
- 0.12369316876852982, 0.12369316876852982,
- 0.13341664064126335, 0.13341664064126335 };
- double eyp[] = { 0.2716615541441225, 0.2716615541441225,
- 0.2716615541441225, 0.260768096208106,
- 0.25079872407968906, 0.25079872407968906,
- 0.25079872407968906, 0.25079872407968906,
- 0.25079872407968906, 0.260768096208106,
- 0.261725046566048, 0.2716615541441225,
- 0.2716615541441225, 0.2816025568065745 };
- const int np = 14;
- for (int i = 0; i < np; i++) {
- double stat = (i < 3 || i > np-1-4) ? 0.03 : 0.02;
- eym[i] += stat;
- eyp[i] += stat;
- }
+// EOF
- TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
- SetGraphAttributes(g, NSD, ALICE, false, "alice_inel2360",
- // "ALICE INEL (publ.)"
- "#it{Eur.Phys.J}.#bf{C68}:89-108,2010");
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE NSD data in @f$ |\eta|<1.3@f$ for pp at @f$
- * \sqrt{s} = 2.36TeV@f$
- *
- * p7742_d4x1y1 - Eur.Phys.J.C68:89-108,2010.
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralNsd2360()
- {
- // NSD - p7742_d4x1y1 - Eur.Phys.J.C68:89-108,2010.
- double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3,
- 0.5, 0.7, 0.9, 1.1, 1.3 };
- double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1, 0.1, 0.1, 0.1, 0.1 };
- double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1, 0.1, 0.1, 0.1, 0.1 };
- double y[] = { 4.79, 4.72, 4.7, 4.56, 4.44, 4.47, 4.39, 4.37, 4.47,
- 4.5, 4.64, 4.73, 4.76, 4.9 };
- double eym[] = { 0.13601470508735444, 0.13341664064126335,
- 0.13341664064126335, 0.12369316876852982,
- 0.12369316876852982, 0.12369316876852982,
- 0.12369316876852982, 0.12369316876852982,
- 0.12369316876852982, 0.12369316876852982,
- 0.12369316876852982, 0.13341664064126335,
- 0.13341664064126335, 0.13341664064126335 };
- double eyp[] = { 0.18439088914585774, 0.18248287590894657,
- 0.18248287590894657, 0.1726267650163207,
- 0.1726267650163207, 0.1726267650163207,
- 0.16278820596099708, 0.16278820596099708,
- 0.1726267650163207, 0.1726267650163207,
- 0.1726267650163207, 0.18248287590894657,
- 0.18248287590894657, 0.18248287590894657 };
- const int np = 14;
-
- for (int i = 0; i < np; i++) {
- double stat = (i < 1) ? 0.03 : 0.02;
- eym[i] += stat;
- eyp[i] += stat;
- }
-
- TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
- SetGraphAttributes(g, NSD, ALICE, false, "alice_nsd2360",
- // "ALICE NSD (publ.)"
- "#it{Eur.Phys.J}.#bf{C68}:89-108,2010");
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE MB (CINT5, V0AND) data in @f$ |\eta|<2@f$ for pPb at
- * @f$ \sqrt{s} = 5.023TeV@f$
- *
- * arXiv:1210.3615 [nucl-ex]
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralpPb5023()
- {
- TGraphAsymmErrors *g = new TGraphAsymmErrors(43);
- g->SetName("");
- g->SetTitle("");
- g->SetFillColor(1);
- g->SetMarkerStyle(24);
- g->SetMarkerSize(1.3);
- g->SetPoint(0,-2.05,16.1757);
- g->SetPointError(0,0.05,0.05,0.360241,0.360241);
- g->SetPoint(1,-1.95,16.8454);
- g->SetPointError(1,0.05,0.05,0.184436,0.184436);
- g->SetPoint(2,-1.85,16.9748);
- g->SetPointError(2,0.05,0.05,0.112833,0.112833);
- g->SetPoint(3,-1.75,17.2504);
- g->SetPointError(3,0.05,0.05,0.0851792,0.0851792);
- g->SetPoint(4,-1.65,17.336);
- g->SetPointError(4,0.05,0.05,0.0674453,0.0674453);
- g->SetPoint(5,-1.55,17.4649);
- g->SetPointError(5,0.05,0.05,0.0558537,0.0558537);
- g->SetPoint(6,-1.45,17.5884);
- g->SetPointError(6,0.05,0.05,0.0481065,0.0481065);
- g->SetPoint(7,-1.35,17.7509);
- g->SetPointError(7,0.05,0.05,0.0448122,0.0448122);
- g->SetPoint(8,-1.25,17.8052);
- g->SetPointError(8,0.05,0.05,0.0403298,0.0403298);
- g->SetPoint(9,-1.15,17.8357);
- g->SetPointError(9,0.05,0.05,0.0383174,0.0383174);
- g->SetPoint(10,-1.05,17.7547);
- g->SetPointError(10,0.05,0.05,0.0356689,0.0356689);
- g->SetPoint(11,-0.95,17.6859);
- g->SetPointError(11,0.05,0.05,0.034326,0.034326);
- g->SetPoint(12,-0.85,17.6665);
- g->SetPointError(12,0.05,0.05,0.0333449,0.0333449);
- g->SetPoint(13,-0.75,17.6044);
- g->SetPointError(13,0.05,0.05,0.0325356,0.0325356);
- g->SetPoint(14,-0.65,17.4815);
- g->SetPointError(14,0.05,0.05,0.0318004,0.0318004);
- g->SetPoint(15,-0.55,17.4);
- g->SetPointError(15,0.05,0.05,0.0312675,0.0312675);
- g->SetPoint(16,-0.45,17.3425);
- g->SetPointError(16,0.05,0.05,0.0310344,0.0310344);
- g->SetPoint(17,-0.35,17.2885);
- g->SetPointError(17,0.05,0.05,0.0306043,0.0306043);
- g->SetPoint(18,-0.25,17.2646);
- g->SetPointError(18,0.05,0.05,0.0303226,0.0303226);
- g->SetPoint(19,-0.15,17.316);
- g->SetPointError(19,0.05,0.05,0.0302368,0.0302368);
- g->SetPoint(20,-0.05,17.312);
- g->SetPointError(20,0.05,0.05,0.0301444,0.0301444);
- g->SetPoint(21,0.05,17.4418);
- g->SetPointError(21,0.05,0.05,0.0301526,0.0301526);
- g->SetPoint(22,0.15,17.4944);
- g->SetPointError(22,0.05,0.05,0.0303199,0.0303199);
- g->SetPoint(23,0.25,17.642);
- g->SetPointError(23,0.05,0.05,0.0303867,0.0303867);
- g->SetPoint(24,0.35,17.8153);
- g->SetPointError(24,0.05,0.05,0.0306752,0.0306752);
- g->SetPoint(25,0.45,18.0244);
- g->SetPointError(25,0.05,0.05,0.0310274,0.0310274);
- g->SetPoint(26,0.55,18.1993);
- g->SetPointError(26,0.05,0.05,0.0314353,0.0314353);
- g->SetPoint(27,0.65,18.349);
- g->SetPointError(27,0.05,0.05,0.0316803,0.0316803);
- g->SetPoint(28,0.75,18.5976);
- g->SetPointError(28,0.05,0.05,0.0322819,0.0322819);
- g->SetPoint(29,0.85,18.8045);
- g->SetPointError(29,0.05,0.05,0.0329447,0.0329447);
- g->SetPoint(30,0.95,18.9865);
- g->SetPointError(30,0.05,0.05,0.0337513,0.0337513);
- g->SetPoint(31,1.05,19.2313);
- g->SetPointError(31,0.05,0.05,0.0354009,0.0354009);
- g->SetPoint(32,1.15,19.4055);
- g->SetPointError(32,0.05,0.05,0.0367366,0.0367366);
- g->SetPoint(33,1.25,19.5893);
- g->SetPointError(33,0.05,0.05,0.0385048,0.0385048);
- g->SetPoint(34,1.35,19.8196);
- g->SetPointError(34,0.05,0.05,0.0421699,0.0421699);
- g->SetPoint(35,1.45,19.9476);
- g->SetPointError(35,0.05,0.05,0.0451541,0.0451541);
- g->SetPoint(36,1.55,20.1012);
- g->SetPointError(36,0.05,0.05,0.0513641,0.0513641);
- g->SetPoint(37,1.65,20.1082);
- g->SetPointError(37,0.05,0.05,0.060302,0.060302);
- g->SetPoint(38,1.75,20.1732);
- g->SetPointError(38,0.05,0.05,0.0739969,0.0739969);
- g->SetPoint(39,1.85,20.1964);
- g->SetPointError(39,0.05,0.05,0.0953757,0.0953757);
- g->SetPoint(40,1.95,20.0509);
- g->SetPointError(40,0.05,0.05,0.147212,0.147212);
- g->SetPoint(41,2.05,20.3151);
- g->SetPointError(41,0.05,0.05,0.272151,0.272151);
- g->SetPoint(42,2.15,20.1319);
- g->SetPointError(42,0.05,0.05,0.802706,0.802706);
-
-
- SetGraphAttributes(g, NSD, ALICE, false, "alice_ppb50230",
- "arXiv:1210.3615");
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp at @f$ \sqrt{s}
- * = 900GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInel900Work()
- {
- TGraphAsymmErrors *g = new TGraphAsymmErrors(18);
- // g->SetPoint(0,-1.9,0); g->SetPointError(0,0.1,0.1,0,0);
- g->SetPoint(0,-1.7,3.13935);g->SetPointError(0,0.1,0.1,0.0726186,0.0525276);
- g->SetPoint(1,-1.5,3.15634);g->SetPointError(1,0.1,0.1,0.0338547,0.0380273);
- g->SetPoint(2,-1.3,3.13683);g->SetPointError(2,0.1,0.1,0.0295176,0.0295638);
- g->SetPoint(3,-1.1,3.10618);g->SetPointError(3,0.1,0.1,0.0306925,0.0329387);
- g->SetPoint(4,-0.9,3.05921);g->SetPointError(4,0.1,0.1,0.0224684,0.025408);
- g->SetPoint(5,-0.7,3.00303);g->SetPointError(5,0.1,0.1,0.0389278,0.0238328);
- g->SetPoint(6,-0.5,2.94604);g->SetPointError(6,0.1,0.1,0.0211986,0.0322219);
- g->SetPoint(7,-0.3,2.91507);g->SetPointError(7,0.1,0.1,0.030029,0.0209573);
- g->SetPoint(8,-0.1,2.88965);g->SetPointError(8,0.1,0.1,0.0286516,0.0253694);
- g->SetPoint(9,0.1,2.89731); g->SetPointError(9,0.1,0.1,0.0334615,0.0192116);
- g->SetPoint(10,0.3,2.91188);g->SetPointError(10,0.1,0.1,0.0503868,0.024911);
- g->SetPoint(11,0.5,2.96295);g->SetPointError(11,0.1,0.1,0.030009,0.0284692);
- g->SetPoint(12,0.7,3.0089); g->SetPointError(12,0.1,0.1,0.0189095,0.026319);
- g->SetPoint(13,0.9,3.07028);g->SetPointError(13,0.1,0.1,0.0449128,0.030738);
- g->SetPoint(14,1.1,3.10215);g->SetPointError(14,0.1,0.1,0.0288688,0.026301);
- g->SetPoint(15,1.3,3.12946);g->SetPointError(15,0.1,0.1,0.0431495,0.026355);
- g->SetPoint(16,1.5,3.14549);g->SetPointError(16,0.1,0.1,0.0322482,0.033611);
- g->SetPoint(17,1.7,3.15729);g->SetPointError(17,0.1,0.1,0.105509,0.0523796);
- // g->SetPoint(19,1.9,0); g->SetPointError(19,0.1,0.1,0,0);
-
- SetGraphAttributes(g, INEL, WIP, false, "alice_pp900work",
- "PWG-UD/MULT - work in progress");
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp at @f$ \sqrt{s}
- * = 900GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralNsd900Work()
- {
- TGraphAsymmErrors *g = new TGraphAsymmErrors(18);
-
- g->SetPoint(0,-1.7,3.84726);g->SetPointError(0,0.1,0.1,0.114853,0.118974);
- g->SetPoint(1,-1.5,3.87094);g->SetPointError(1,0.1,0.1,0.10574,0.108613);
- g->SetPoint(2,-1.3,3.84769);g->SetPointError(2,0.1,0.1,0.105942,0.107644);
- g->SetPoint(3,-1.1,3.8122); g->SetPointError(3,0.1,0.1,0.100838,0.101818);
- g->SetPoint(4,-0.9,3.75388);g->SetPointError(4,0.1,0.1,0.0967073,0.0972099);
- g->SetPoint(5,-0.7,3.68733);g->SetPointError(5,0.1,0.1,0.0923424,0.0925662);
- g->SetPoint(6,-0.5,3.61874);g->SetPointError(6,0.1,0.1,0.0904027,0.090477);
- g->SetPoint(7,-0.3,3.58091);g->SetPointError(7,0.1,0.1,0.0875915,0.0875992);
- g->SetPoint(8,-0.1,3.54905);g->SetPointError(8,0.1,0.1,0.086046,0.0860293);
- g->SetPoint(9,0.1,3.55968); g->SetPointError(9,0.1,0.1,0.0884776,0.0884612);
- g->SetPoint(10,0.3,3.57729);g->SetPointError(10,0.1,0.1,0.0857614,0.085769);
- g->SetPoint(11,0.5,3.63879);g->SetPointError(11,0.1,0.1,0.0879787,0.088056);
- g->SetPoint(12,0.7,3.69422);g->SetPointError(12,0.1,0.1,0.0931736,0.093396);
- g->SetPoint(13,0.9,3.76835);g->SetPointError(13,0.1,0.1,0.0928833,0.093410);
- g->SetPoint(14,1.1,3.80647);g->SetPointError(14,0.1,0.1,0.0998124,0.100799);
- g->SetPoint(15,1.3,3.83824);g->SetPointError(15,0.1,0.1,0.102549,0.104298);
- g->SetPoint(16,1.5,3.85778);g->SetPointError(16,0.1,0.1,0.10267,0.105607);
- g->SetPoint(17,1.7,3.87075);g->SetPointError(17,0.1,0.1,0.114093,0.11829);
-
- SetGraphAttributes(g, NSD, WIP, false, "alice_pp900nsdwork",
- "PWG-UD/MULT - work in progress");
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE INEL>0 data in @f$ |\eta|<1.8@f$ for pp at @f$ \sqrt{s}
- * = 900GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInelGt900Work()
- {
- TGraphAsymmErrors *g = new TGraphAsymmErrors(10);
-
- g->SetPoint(0,-0.9,3.90755);g->SetPointError(0,0.1,0.1,0.0377085,0.0355101);
- g->SetPoint(1,-0.7,3.8357); g->SetPointError(1,0.1,0.1,0.0477674,0.0349303);
- g->SetPoint(2,-0.5,3.76291);g->SetPointError(2,0.1,0.1,0.0277709,0.040401);
- g->SetPoint(3,-0.3,3.72336);g->SetPointError(3,0.1,0.1,0.0343553,0.0250805);
- g->SetPoint(4,-0.1,3.69098);g->SetPointError(4,0.1,0.1,0.0324842,0.0324248);
- g->SetPoint(5,0.1,3.70076); g->SetPointError(5,0.1,0.1,0.0390932,0.0246738);
- g->SetPoint(6,0.3,3.71924); g->SetPointError(6,0.1,0.1,0.0576054,0.0287106);
- g->SetPoint(7,0.5,3.7844); g->SetPointError(7,0.1,0.1,0.0316759,0.0295124);
- g->SetPoint(8,0.7,3.84319); g->SetPointError(8,0.1,0.1,0.0293134,0.0332125);
- g->SetPoint(9,0.9,3.92163); g->SetPointError(9,0.1,0.1,0.0558339,0.0394925);
-
- SetGraphAttributes(g, INELGt0, WIP, false, "alice_pp900inelgtwork",
- "PWG-UD/MULT - work in progress");
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 2760GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInel2760Work()
- {
- TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
- g->SetPoint(0,-1.7,4.0313); g->SetPointError(0,0.1,0.1,0.100951,0.104678);
- g->SetPoint(1,-1.5,4.0431); g->SetPointError(1,0.1,0.1,0.10129,0.103883);
- g->SetPoint(2,-1.3,4.01251); g->SetPointError(2,0.1,0.1,0.10847,0.110089);
- g->SetPoint(3,-1.1,3.96799); g->SetPointError(3,0.1,0.1,0.105543,0.106623);
- g->SetPoint(4,-0.9,3.89669); g->SetPointError(4,0.1,0.1,0.110974,0.111625);
- g->SetPoint(5,-0.7,3.81051); g->SetPointError(5,0.1,0.1,0.108463,0.108882);
- g->SetPoint(6,-0.5,3.76537); g->SetPointError(6,0.1,0.1,0.105488,0.105773);
- g->SetPoint(7,-0.3,3.69733); g->SetPointError(7,0.1,0.1,0.110156,0.11035);
- g->SetPoint(8,-0.1,3.68148); g->SetPointError(8,0.1,0.1,0.105564,0.105733);
- g->SetPoint(9,0.1,3.67386); g->SetPointError(9,0.1,0.1,0.1058,0.105968);
- g->SetPoint(10,0.3,3.69873); g->SetPointError(10,0.1,0.1,0.107167,0.107367);
- g->SetPoint(11,0.5,3.76377); g->SetPointError(11,0.1,0.1,0.111177,0.111448);
- g->SetPoint(12,0.7,3.81956); g->SetPointError(12,0.1,0.1,0.107198,0.107623);
- g->SetPoint(13,0.9,3.89506); g->SetPointError(13,0.1,0.1,0.105617,0.1063);
- g->SetPoint(14,1.1,3.95888); g->SetPointError(14,0.1,0.1,0.111316,0.112336);
- g->SetPoint(15,1.3,4.00176); g->SetPointError(15,0.1,0.1,0.111751,0.113315);
- g->SetPoint(16,1.5,4.03247); g->SetPointError(16,0.1,0.1,0.114383,0.116674);
- g->SetPoint(17,1.7,4.061); g->SetPointError(17,0.1,0.1,0.107094,0.110665);
-
- SetGraphAttributes(g, INEL, WIP, false,
- "alice_ppInel2760Work",
- "PWG-UD/MULT - work in progress");
- return g;
- }
- //____________________________________________________________________
- /**
- * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 2760GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralNsd2760Work()
- {
- TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
- g->SetPoint(0,-1.7,4.8704); g->SetPointError(0,0.1,0.1,0.221293,0.224755);
- g->SetPoint(1,-1.5,4.88859); g->SetPointError(1,0.1,0.1,0.221269,0.223478);
- g->SetPoint(2,-1.3,4.85326); g->SetPointError(2,0.1,0.1,0.21109,0.212455);
- g->SetPoint(3,-1.1,4.80085); g->SetPointError(3,0.1,0.1,0.21041,0.211157);
- g->SetPoint(4,-0.9,4.71513); g->SetPointError(4,0.1,0.1,0.198361,0.198749);
- g->SetPoint(5,-0.7,4.61153); g->SetPointError(5,0.1,0.1,0.194009,0.194176);
- g->SetPoint(6,-0.5,4.55715); g->SetPointError(6,0.1,0.1,0.193226,0.193281);
- g->SetPoint(7,-0.3,4.47508); g->SetPointError(7,0.1,0.1,0.182433,0.182439);
- g->SetPoint(8,-0.1,4.45709); g->SetPointError(8,0.1,0.1,0.186518,0.186506);
- g->SetPoint(9,0.1,4.44707); g->SetPointError(9,0.1,0.1,0.185747,0.185735);
- g->SetPoint(10,0.3,4.47734); g->SetPointError(10,0.1,0.1,0.185835,0.185841);
- g->SetPoint(11,0.5,4.55477); g->SetPointError(11,0.1,0.1,0.186934,0.186991);
- g->SetPoint(12,0.7,4.62236); g->SetPointError(12,0.1,0.1,0.196631,0.196796);
- g->SetPoint(13,0.9,4.71277); g->SetPointError(13,0.1,0.1,0.204034,0.20441);
- g->SetPoint(14,1.1,4.78902); g->SetPointError(14,0.1,0.1,0.20317,0.20394);
- g->SetPoint(15,1.3,4.84008); g->SetPointError(15,0.1,0.1,0.205573,0.206967);
- g->SetPoint(16,1.5,4.87453); g->SetPointError(16,0.1,0.1,0.206314,0.208667);
- g->SetPoint(17,1.7,4.90614); g->SetPointError(17,0.1,0.1,0.218996,0.222545);
-
- SetGraphAttributes(g, NSD, WIP, false,
- "alice_ppNsd2760Work",
- "PWG-UD/MULT - work in progress");
- return g;
- }
- //____________________________________________________________________
- /**
- * Get the ALICE INELGt0 data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 2760GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInelGt2760Work()
- {
- TGraphAsymmErrors* g = new TGraphAsymmErrors(10);
- g->SetPoint(0,-0.9,4.96315); g->SetPointError(0,0.1,0.1,0.0439746,0.0440108);
- g->SetPoint(1,-0.7,4.8532); g->SetPointError(1,0.1,0.1,0.0426373,0.0600727);
- g->SetPoint(2,-0.5,4.79582);g->SetPointError(2,0.1,0.1,0.0475367,0.0466255);
- g->SetPoint(3,-0.3,4.70907);g->SetPointError(3,0.1,0.1,0.0313084,0.0468084);
- g->SetPoint(4,-0.1,4.68906);g->SetPointError(4,0.1,0.1,0.0413149,0.0397909);
- g->SetPoint(5,0.1,4.67937); g->SetPointError(5,0.1,0.1,0.0346151,0.0450248);
- g->SetPoint(6,0.3,4.7109); g->SetPointError(6,0.1,0.1,0.0408403,0.0839992);
- g->SetPoint(7,0.5,4.79359); g->SetPointError(7,0.1,0.1,0.0324516,0.0357053);
- g->SetPoint(8,0.7,4.86469); g->SetPointError(8,0.1,0.1,0.0452175,0.0477304);
- g->SetPoint(9,0.9,4.96078); g->SetPointError(9,0.1,0.1,0.0566798,0.0804077);
-
- SetGraphAttributes(g, INELGt0, WIP, false,
- "alice_ppInelGt2760Work",
- "PWG-UD/MULT - work in progress");
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 7000GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInel7000Work()
- {
- TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
- g->SetPoint(0,-1.7,4.97541); g->SetPointError(0,0.1,0.1,0.187526,0.162049);
- g->SetPoint(1,-1.5,4.98161); g->SetPointError(1,0.1,0.1,0.128353,0.149085);
- g->SetPoint(2,-1.3,4.94853); g->SetPointError(2,0.1,0.1,0.129841,0.144762);
- g->SetPoint(3,-1.1,4.88924); g->SetPointError(3,0.1,0.1,0.137866,0.157862);
- g->SetPoint(4,-0.9,4.79998); g->SetPointError(4,0.1,0.1,0.144492,0.158783);
- g->SetPoint(5,-0.7,4.71399); g->SetPointError(5,0.1,0.1,0.132703,0.156135);
- g->SetPoint(6,-0.5,4.63098); g->SetPointError(6,0.1,0.1,0.129938,0.147085);
- g->SetPoint(7,-0.3,4.56815); g->SetPointError(7,0.1,0.1,0.129424,0.145485);
- g->SetPoint(8,-0.1,4.52372); g->SetPointError(8,0.1,0.1,0.129049,0.145285);
- g->SetPoint(9,0.1,4.52946); g->SetPointError(9,0.1,0.1,0.131266,0.144285);
- g->SetPoint(10,0.3,4.56411); g->SetPointError(10,0.1,0.1,0.130652,0.149019);
- g->SetPoint(11,0.5,4.63554); g->SetPointError(11,0.1,0.1,0.133415,0.144298);
- g->SetPoint(12,0.7,4.71592); g->SetPointError(12,0.1,0.1,0.136436,0.151768);
- g->SetPoint(13,0.9,4.8059); g->SetPointError(13,0.1,0.1,0.136996,0.142551);
- g->SetPoint(14,1.1,4.88457); g->SetPointError(14,0.1,0.1,0.134237,0.142764);
- g->SetPoint(15,1.3,4.92903); g->SetPointError(15,0.1,0.1,0.131933,0.152767);
- g->SetPoint(16,1.5,4.96487); g->SetPointError(16,0.1,0.1,0.140214,0.147354);
- g->SetPoint(17,1.7,4.95502); g->SetPointError(17,0.1,0.1,0.156906,0.14759);
-
- SetGraphAttributes(g, INEL, WIP, false,
- "alice_ppInel7000Work",
- "PWG-UD/MULT - work in progress");
- return g;
- }
- //____________________________________________________________________
- /**
- * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 7000GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralNsd7000Work()
- {
- TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
- g->SetPoint(0,-1.7,6.12747);g->SetPointError(0,0.1,0.1,0.157334,0.164918);
- g->SetPoint(1,-1.5,6.1353); g->SetPointError(1,0.1,0.1,0.146834,0.152011);
- g->SetPoint(2,-1.3,6.09648);g->SetPointError(2,0.1,0.1,0.140067,0.143287);
- g->SetPoint(3,-1.1,6.02552);g->SetPointError(3,0.1,0.1,0.133435,0.135281);
- g->SetPoint(4,-0.9,5.91705);g->SetPointError(4,0.1,0.1,0.129449,0.130381);
- g->SetPoint(5,-0.7,5.81246);g->SetPointError(5,0.1,0.1,0.126477,0.126883);
- g->SetPoint(6,-0.5,5.71104);g->SetPointError(6,0.1,0.1,0.124521,0.124655);
- g->SetPoint(7,-0.3,5.63422);g->SetPointError(7,0.1,0.1,0.120116,0.12013);
- g->SetPoint(8,-0.1,5.57977);g->SetPointError(8,0.1,0.1,0.119286,0.119256);
- g->SetPoint(9,0.1,5.58662); g->SetPointError(9,0.1,0.1,0.119331,0.119301);
- g->SetPoint(10,0.3,5.6291); g->SetPointError(10,0.1,0.1,0.120683,0.120697);
- g->SetPoint(11,0.5,5.7166); g->SetPointError(11,0.1,0.1,0.122787,0.122923);
- g->SetPoint(12,0.7,5.81463);g->SetPointError(12,0.1,0.1,0.126293,0.1267);
- g->SetPoint(13,0.9,5.92404);g->SetPointError(13,0.1,0.1,0.129522,0.130456);
- g->SetPoint(14,1.1,6.01958);g->SetPointError(14,0.1,0.1,0.134505,0.136333);
- g->SetPoint(15,1.3,6.07232);g->SetPointError(15,0.1,0.1,0.140728,0.143909);
- g->SetPoint(16,1.5,6.11596);g->SetPointError(16,0.1,0.1,0.14756,0.15268);
- g->SetPoint(17,1.7,6.10155);g->SetPointError(17,0.1,0.1,0.151731,0.159518);
-
- SetGraphAttributes(g, NSD, WIP, false,
- "alice_ppNsd7000Work",
- "PWG-UD/MULT - work in progress");
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE INELGt0 data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 7000GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInelGt7000Work()
- {
- TGraphAsymmErrors* g = new TGraphAsymmErrors(10);
- g->SetPoint(0,-0.9,6.22689);g->SetPointError(0,0.1,0.1,0.0959094,0.10395);
- g->SetPoint(1,-0.7,6.11603);g->SetPointError(1,0.1,0.1,0.0609242,0.0984269);
- g->SetPoint(2,-0.5,6.00881);g->SetPointError(2,0.1,0.1,0.0595691,0.0842045);
- g->SetPoint(3,-0.3,5.9274); g->SetPointError(3,0.1,0.1,0.0560837,0.0780806);
- g->SetPoint(4,-0.1,5.86988);g->SetPointError(4,0.1,0.1,0.0552611,0.0798584);
- g->SetPoint(5,0.1,5.8773); g->SetPointError(5,0.1,0.1,0.062512,0.077947);
- g->SetPoint(6,0.3,5.92215); g->SetPointError(6,0.1,0.1,0.0535152,0.0863595);
- g->SetPoint(7,0.5,6.01458); g->SetPointError(7,0.1,0.1,0.0578218,0.0745799);
- g->SetPoint(8,0.7,6.1186); g->SetPointError(8,0.1,0.1,0.0767397,0.0899574);
- g->SetPoint(9,0.9,6.23468); g->SetPointError(9,0.1,0.1,0.0786932,0.073295);
-
- SetGraphAttributes(g, INELGt0, WIP, false,
- "alice_ppInelGt7000Work",
- "PWG-UD/MULT - work in progress");
- return g;
- }
- //____________________________________________________________________
- /**
- * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 8000GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInel8000Work()
- {
- TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
- g->SetPoint(0,-1.7,5.1333); g->SetPointError(0,0.1,0.1,0.0613865,0.0707879);
- g->SetPoint(1,-1.5,5.14341);g->SetPointError(1,0.1,0.1,0.117829,0.121428);
- g->SetPoint(2,-1.3,5.13589);g->SetPointError(2,0.1,0.1,0.110807,0.113393);
- g->SetPoint(3,-1.1,5.06167);g->SetPointError(3,0.1,0.1,0.120091,0.121635);
- g->SetPoint(4,-0.9,4.97796);g->SetPointError(4,0.1,0.1,0.116141,0.117154);
- g->SetPoint(5,-0.7,4.88431);g->SetPointError(5,0.1,0.1,0.11944,0.120064);
- g->SetPoint(6,-0.5,4.81236);g->SetPointError(6,0.1,0.1,0.11049,0.110936);
- g->SetPoint(7,-0.3,4.72239);g->SetPointError(7,0.1,0.1,0.110969,0.111284);
- g->SetPoint(8,-0.1,4.66962);g->SetPointError(8,0.1,0.1,0.125108,0.125337);
- g->SetPoint(9,0.1,4.69441); g->SetPointError(9,0.1,0.1,0.113766,0.114021);
- g->SetPoint(10,0.3,4.7335); g->SetPointError(10,0.1,0.1,0.104531,0.104866);
- g->SetPoint(11,0.5,4.79917);g->SetPointError(11,0.1,0.1,0.107076,0.107534);
- g->SetPoint(12,0.7,4.88713);g->SetPointError(12,0.1,0.1,0.106124,0.106827);
- g->SetPoint(13,0.9,4.98035);g->SetPointError(13,0.1,0.1,0.120107,0.121087);
- g->SetPoint(14,1.1,5.05366);g->SetPointError(14,0.1,0.1,0.115795,0.11739);
- g->SetPoint(15,1.3,5.11276);g->SetPointError(15,0.1,0.1,0.123574,0.125877);
- g->SetPoint(16,1.5,5.16105);g->SetPointError(16,0.1,0.1,0.0979751,0.102305);
- g->SetPoint(17,1.7,5.16477);g->SetPointError(17,0.1,0.1,0.116096,0.121392);
-
- SetGraphAttributes(g, INEL, WIP, false,
- "alice_ppInel8000Work",
- "PWG-UD/MULT - work in progress");
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 8000GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralNsd8000Work()
- {
- TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
- g->SetPoint(0,-1.7,6.28722);g->SetPointError(0,0.1,0.1,0.220541,0.2263);
- g->SetPoint(1,-1.5,6.29211);g->SetPointError(1,0.1,0.1,0.126653,0.132922);
- g->SetPoint(2,-1.3,6.29313);g->SetPointError(2,0.1,0.1,0.142432,0.145805);
- g->SetPoint(3,-1.1,6.1944); g->SetPointError(3,0.1,0.1,0.116871,0.119093);
- g->SetPoint(4,-0.9,6.09529);g->SetPointError(4,0.1,0.1,0.121064,0.122121);
- g->SetPoint(5,-0.7,5.97811);g->SetPointError(5,0.1,0.1,0.111525,0.112012);
- g->SetPoint(6,-0.5,5.88992);g->SetPointError(6,0.1,0.1,0.119488,0.119637);
- g->SetPoint(7,-0.3,5.78296);g->SetPointError(7,0.1,0.1,0.114947,0.114962);
- g->SetPoint(8,-0.1,5.71633);g->SetPointError(8,0.1,0.1,0.0933,0.09326);
- g->SetPoint(9,0.1,5.74663); g->SetPointError(9,0.1,0.1,0.109892,0.109857);
- g->SetPoint(10,0.3,5.79472);g->SetPointError(10,0.1,0.1,0.123704,0.123718);
- g->SetPoint(11,0.5,5.87545);g->SetPointError(11,0.1,0.1,0.122522,0.122667);
- g->SetPoint(12,0.7,5.98273);g->SetPointError(12,0.1,0.1,0.128316,0.128739);
- g->SetPoint(13,0.9,6.09037);g->SetPointError(13,0.1,0.1,0.114321,0.115437);
- g->SetPoint(14,1.1,6.18105);g->SetPointError(14,0.1,0.1,0.125412,0.127476);
- g->SetPoint(15,1.3,6.24275);g->SetPointError(15,0.1,0.1,0.118631,0.122597);
- g->SetPoint(16,1.5,6.28916);g->SetPointError(16,0.1,0.1,0.144205,0.149736);
- g->SetPoint(17,1.7,6.28878);g->SetPointError(17,0.1,0.1,0.134438,0.143695);
-
- SetGraphAttributes(g, NSD, WIP, false,
- "alice_ppNsd8000Work",
- "PWG-UD/MULT - work in progress");
- return g;
- }
- //____________________________________________________________________
- /**
- * Get the ALICE INELGt0 data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 8000GeV@f$
- * Work in progress
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* AliceCentralInelGt8000Work()
- {
- TGraphAsymmErrors* g = new TGraphAsymmErrors(10);
- g->SetPoint(0,-0.9,6.38567);g->SetPointError(0,0.1,0.1,0.0436571,0.0436571);
- g->SetPoint(1,-0.7,6.26363);g->SetPointError(1,0.1,0.1,0.0312036,0.0312036);
- g->SetPoint(2,-0.5,6.17205);g->SetPointError(2,0.1,0.1,0.0351509,0.0351509);
- g->SetPoint(3,-0.3,6.05629);g->SetPointError(3,0.1,0.1,0.0302028,0.0302028);
- g->SetPoint(4,-0.1,5.98823);g->SetPointError(4,0.1,0.1,0.0141541,0.0141541);
- g->SetPoint(5,0.1,6.02043); g->SetPointError(5,0.1,0.1,0.0256893,0.0256893);
- g->SetPoint(6,0.3,6.07111); g->SetPointError(6,0.1,0.1,0.0380304,0.0380304);
- g->SetPoint(7,0.5,6.15492); g->SetPointError(7,0.1,0.1,0.0384435,0.0384435);
- g->SetPoint(8,0.7,6.26781); g->SetPointError(8,0.1,0.1,0.0450579,0.0450579);
- g->SetPoint(9,0.9,6.38491); g->SetPointError(9,0.1,0.1,0.0396431,0.0396431);
-
- SetGraphAttributes(g, INELGt0, WIP, false,
- "alice_ppInelGt8000Work",
- "PWG-UD/MULT - work in progress");
- return g;
- }
-
- //____________________________________________________________________
- /**
- * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
- * \sqrt{s} = 900GeV@f$
- *
- * p7743_d8x1y1
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* CMSNsd900()
- {
- // CMS published NSD data - p7743_d8x1y1
- double x[] ={ -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25};
- double exm[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
- double exp[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
- double y[] = { 3.6, 3.73, 3.62, 3.54, 3.48, 3.48, 3.54, 3.62, 3.73, 3.6 };
- double eym[] ={ 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14,0.13 };
- double eyp[] ={ 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14,0.13 };
- const int np = 10;
- TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
- SetGraphAttributes(g, NSD, CMS, false, "cms_nsd900", "CMS");
-
- return g;
- }
-
-
- //____________________________________________________________________
- /**
- * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
- * \sqrt{s} = 2.36GeV@f$
- *
- * p7743_d8x1y2
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* CMSNsd2360()
- {
- // CMS NSD 2360 - p7743_d8x1y2
- double x[] ={ -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25};
- double exm[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
- double exp[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
- double y[] = { 4.78, 4.81, 4.66, 4.61, 4.47, 4.47, 4.61, 4.66, 4.81, 4.78};
- double eym[] ={ 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17};
- double eyp[] ={ 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17};
- const int np = 10;
- TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
- SetGraphAttributes(g, NSD, CMS, false, "cms_nsd2360", "CMS");
- return g;
- }
- //____________________________________________________________________
- /**
- * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
- * \sqrt{s} = 7TeV@f$
- *
- * p7838_d5x1y1
- *
- * @return graph of data
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TGraphAsymmErrors* CMSNsd7000()
- {
- // CMS NSD 7000 - Plot: p7838_d5x1y1
- double x[] ={ -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25};
- double exm[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
- double exp[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
- double y[] ={ 6.18, 6.26, 6.14, 6.01, 5.78, 5.78, 6.01, 6.14, 6.26, 6.18 };
- double eym[] ={ 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25};
- double eyp[] ={ 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25};
- const int np = 10;
- TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
- SetGraphAttributes(g, NSD, CMS, false, "cms_nsd7000", "CMS");
- return g;
- }
-
- //____________________________________________________________________
- static TGraphAsymmErrors* AlicePbPb2760(UShort_t centLow, UShort_t centHigh)
- {
- const Int_t n = 42;
- // --- /HepData/8430/d1x1y1 --------------------------------------
- const double x[] = { -4.875, -4.625, -4.375, -4.125, -3.875,
- -3.625, -3.375, -3.125, -2.875, -2.625,
- -2.375, -2.125, -1.875, -1.625, -1.375,
- -1.125, -0.875, -0.625, -0.375, -0.125,
- +0.125, +0.375, +0.625, +0.875, +1.125,
- +1.375, +1.625, +1.875, +2.125, +2.375,
- +2.625, +2.875, +3.125, +3.375, +3.625,
- +3.875, +4.125, +4.375, +4.625, +4.875,
- +5.125, +5.375 };
- const double xe[] = { 0.125, 0.125, 0.125, 0.125, 0.125, 0.125,
- 0.125, 0.125, 0.125, 0.125, 0.125, 0.125,
- 0.125, 0.125, 0.125, 0.125, 0.125, 0.125,
- 0.125, 0.125, 0.125, 0.125, 0.125, 0.125,
- 0.125, 0.125, 0.125, 0.125, 0.125, 0.125,
- 0.125, 0.125, 0.125, 0.125, 0.125, 0.125,
- 0.125, 0.125, 0.125, 0.125, 0.125, 0.125 };
- const double y00_05[] = { 888.0, 974.0, 1046.0, 1128.0, 1209.0, 1304.0,
- 1388.0, 1449.0, 1504.0, 1578.0, 1627.0, 1674.0,
- 1709.0, 1736.0, 1739.0, 1699.0, 1674.0, 1658.0,
- 1627.0, 1615.0, 1615.0, 1627.0, 1658.0, 1674.0,
- 1699.0, 1739.0, 1736.0, 1709.0, 1674.0, 1627.0,
- 1578.0, 1504.0, 1449.0, 1388.0, 1304.0, 1209.0,
- 1128.0, 1046.0, 974.0, 888.0, 770.0, 667.0};
- const double ye00_05[] = { 39.0, 41.0, 44.0, 46.0, 50.0, 54.0, 57.0,
- 59.0, 58.0, 61.0, 62.0, 62.0, 66.0, 64.0,
- 65.0, 68.0, 46.0, 40.0, 39.0, 39.0, 39.0,
- 39.0, 40.0, 46.0, 68.0, 65.0, 64.0, 66.0,
- 62.0, 62.0, 61.0, 58.0, 59.0, 57.0, 54.0,
- 50.0, 46.0, 44.0, 41.0, 39.0, 42.0, 39.0 };
- // --- /HepData/8430/d1x1y2 --------------------------------------
- const double y05_10[] = { 744.0, 807.0, 861.0, 929.0, 1001.0, 1072.0,
- 1144.0, 1196.0, 1243.0, 1298.0, 1333.0, 1361.0,
- 1393.0, 1422.0, 1418.0, 1380.0, 1362.0, 1338.0,
- 1330.0, 1318.0, 1318.0, 1330.0, 1338.0, 1362.0,
- 1380.0, 1418.0, 1422.0, 1393.0, 1361.0, 1333.0,
- 1298.0, 1243.0, 1196.0, 1144.0, 1072.0, 1001.0,
- 929.0, 861.0, 807.0, 744.0, 651.0, 577.0 };
- const double ye05_10[] = { 34.0, 35.0, 37.0, 39.0, 43.0, 46.0, 49.0,
- 51.0, 51.0, 52.0, 54.0, 54.0, 58.0, 56.0,
- 56.0, 58.0, 37.0, 32.0, 32.0, 32.0, 32.0,
- 32.0, 32.0, 37.0, 58.0, 56.0, 56.0, 58.0,
- 54.0, 54.0, 52.0, 51.0, 51.0, 49.0, 46.0,
- 43.0, 39.0, 37.0, 35.0, 34.0, 39.0, 35.0 };
-
- // --- /HepData/8430/d1x1y3 --------------------------------------
- const double y10_20[] = { 559.0, 615.0, 656.0, 705.0, 754.0, 812.0,
- 862.0, 899.0, 928.0, 969.0, 998.0, 1022.0,
- 1048.0, 1062.0, 1064.0, 1026.0, 1014.0, 1006.0,
- 991.0, 982.0, 982.0, 991.0, 1006.0, 1014.0,
- 1026.0, 1064.0, 1062.0, 1048.0, 1022.0, 998.0,
- 969.0, 928.0, 899.0, 862.0, 812.0, 754.0,
- 705.0, 656.0, 615.0, 559.0, 491.0, 451.0 };
- const double ye10_20[] = { 29.0, 31.0, 32.0, 33.0, 36.0, 39.0, 42.0,
- 43.0, 44.0, 45.0, 45.0, 44.0, 46.0, 47.0,
- 47.0, 46.0, 28.0, 24.0, 24.0, 24.0, 24.0,
- 24.0, 24.0, 28.0, 46.0, 47.0, 47.0, 46.0,
- 44.0, 45.0, 45.0, 44.0, 43.0, 42.0, 39.0,
- 36.0, 33.0, 32.0, 31.0, 29.0, 37.0, 29.0 };
-
- // --- /HepData/8430/d1x1y4 --------------------------------------
- const double y20_30[] = { 389.0, 429.0, 459.0, 491.0, 526.0, 563.0,
- 596.0, 619.0, 641.0, 669.0, 683.0, 700.0,
- 716.0, 725.0, 724.0, 701.0, 692.0, 682.0,
- 673.0, 666.0, 666.0, 673.0, 682.0, 692.0,
- 701.0, 724.0, 725.0, 716.0, 700.0, 683.0,
- 669.0, 641.0, 619.0, 596.0, 563.0, 526.0,
- 491.0, 459.0, 429.0, 389.0, 343.0, 313.0 };
- const double ye20_30[] = { 21.0, 22.0, 24.0, 25.0, 27.0, 30.0, 31.0,
- 32.0, 34.0, 35.0, 33.0, 34.0, 35.0, 36.0,
- 37.0, 34.0, 19.0, 16.0, 16.0, 16.0, 16.0,
- 16.0, 16.0, 19.0, 34.0, 37.0, 36.0, 35.0,
- 34.0, 33.0, 35.0, 34.0, 32.0, 31.0, 30.0,
- 27.0, 25.0, 24.0, 22.0, 21.0, 26.0, 22.0 };
-
- // --- Select ----------------------------------------------------
- const double* yp = 0;
- const double* ype = 0;
- if (TMath::Abs(centLow- 0) < 1 && TMath::Abs(centHigh- 5) < 1) {
- yp = y00_05;
- ype = ye00_05;
- }
- else if (TMath::Abs(centLow- 5) < 1 && TMath::Abs(centHigh-10) < 1) {
- yp = y05_10;
- ype = ye05_10;
- }
- else if (TMath::Abs(centLow-10) < 1 && TMath::Abs(centHigh-20) < 1) {
- yp = y10_20;
- ype = ye10_20;
- }
- else if (TMath::Abs(centLow-20) < 1 && TMath::Abs(centHigh-30) < 1) {
- yp = y20_30;
- ype = ye20_30;
- }
- if (!yp || !ype) return 0;
- TGraphAsymmErrors* g = new TGraphAsymmErrors(n,x,yp,xe,xe,ype,ype);
- SetGraphAttributes(g, INEL, ALICE, false, "alice_pbpb2760",
- "#it{Phys.Lett.} #bf{B726}:610-622,2013");
-
- return g;
- }
- //____________________________________________________________________
- /**
- * Get a single data graph
- *
- * @param which Which type
- * @param sys Collisition system
- * @param energy Collision energy
- * @param type Trigger type
- * @param centLow Low cut on centrality
- * @param centHigh Up cut on centraltiy
- *
- * @return Data graph
- */
- static TGraphAsymmErrors* GetSingle(UShort_t which,
- UShort_t sys,
- UShort_t energy,
- UShort_t type=0x1,
- UShort_t centLow=0,
- UShort_t centHigh=0,
- Bool_t verbose=false)
- {
- TGraphAsymmErrors* ret = 0;
- if (sys == 1) {
- if (TMath::Abs(energy-900) < 10) {
- switch (type) {
- case 1: // INEL
- switch (which) {
- case PYTHIA: ret = Pythia900INEL(); break;
- case UA5: ret = UA5Inel(false); break;
- case UA5+10: ret = UA5Inel(true); break;
- case ALICE: ret = AliceCentralInel900(); break;
- case WIP: ret = AliceCentralInel900Work(); break;
- }
- break;
- case 2: // INEL>0
- switch (which) {
- case ALICE: ret = AliceCentralInelGt900(); break;
- case WIP: ret = AliceCentralInelGt900Work(); break;
- }
- break;
- case 4: // NSD
- case 0x2000: // V0-AND - same as NSD
- switch (which) {
- case PYTHIA: ret = Pythia900NSD(); break;
- case UA5: ret = UA5Nsd(false); break;
- case UA5+10: ret = UA5Nsd(true); break;
- case ALICE: ret = AliceCentralNsd900(); break;
- case WIP: ret = AliceCentralNsd900Work(); break;
- case CMS: ret = CMSNsd900(); break;
- }
- break;
- } // type
- }
- else if (TMath::Abs(energy-2360) < 10) {
- switch (type) {
- case 1: // INEL
- switch (which) {
- case ALICE: ret = AliceCentralInel2360(); break;
- case WIP: ret = AliceCentralInel2760Work(); break;
- }
- break;
- case 2: // INEL > 0
- switch (which) {
- case ALICE: ret = AliceCentralInelGt2360(); break;
- case WIP: ret = AliceCentralInelGt2760Work(); break;
- }
- break;
- case 4: // NSD
- switch (which) {
- case ALICE: ret = AliceCentralNsd2360(); break;
- case CMS: ret = CMSNsd2360(); break;
- case WIP: ret = AliceCentralNsd2760Work(); break;
- }
- break;
- }
- }
- else if (TMath::Abs(energy-2760) < 10) {
- switch (type) {
- case 1: // INEL
- switch (which) {
- case WIP: ret = AliceCentralInel2760Work(); break;
- }
- break;
- case 2: // INEL > 0
- switch (which) {
- case WIP: ret = AliceCentralInelGt2760Work(); break;
- }
- break;
- case 4: // NSD
- switch (which) {
- case WIP: ret = AliceCentralNsd2760Work(); break;
- }
- break;
- }
- }
- else if (TMath::Abs(energy-7000) < 10) {
- switch (type) {
- case 1:
- switch (which) {
- case WIP: ret = AliceCentralInel7000Work(); break;
- }
- break;
- case 2: // INEL > 0
- switch (which) {
- case ALICE: ret = AliceCentralInelGt7000(); break;
- case WIP: ret = AliceCentralInelGt7000Work(); break;
- }
- break;
- case 4: // NSD
- switch (which) {
- case CMS: ret = CMSNsd7000(); break;
- case WIP: ret = AliceCentralNsd7000Work(); break;
- }
- break;
- }
- }
- else if (TMath::Abs(energy-8000) < 10) {
- switch (type) {
- case 1:
- switch (which) {
- case WIP: ret = AliceCentralInel8000Work(); break;
- }
- break;
- case 2: // INEL > 0
- switch (which) {
- case WIP: ret = AliceCentralInelGt8000Work(); break;
- }
- break;
- case 4: // NSD
- switch (which) {
- case WIP: ret = AliceCentralNsd8000Work(); break;
- }
- break;
- }
- }
- } // pp
- else if (sys == 2) { // PbPb
- if (TMath::Abs(energy - 2760) < 10) {
- switch (which) {
- case ALICE: ret = AlicePbPb2760(centLow, centHigh);
- }
- }
- if (ret) {
- Int_t col = CentralityColor(centLow, centHigh);
- ret->SetMarkerColor(col);
- ret->SetLineColor(col);
- ret->SetFillColor(col);
- }
- }
- else if (sys == 3) { // pPb
- if (TMath::Abs(energy - 5023) < 10 ||
- TMath::Abs(energy - 8000) < 10) {
- switch (which) {
- case ALICE: ret = AliceCentralpPb5023(); break;
- }
- }
- } // pPb
- if (!ret) {
- TString w;
- switch (which) {
- case UA5: w = "UA5"; break;
- case CMS: w = "CMS"; break;
- case ALICE: w = "ALICE"; break;
- case WIP: w = "WIP"; break;
- case PYTHIA:w = "Pyhthia"; break;
- default: w = Form("unknown(%d)", which);
- }
- TString sy;
- switch (sys) {
- case 1: sy = "pp"; break;
- case 2: sy = "PbPb"; break;
- case 3: sy = "pPb"; break;
- default: sy = Form("unknown(%d)", sys);
- }
- TString tr;
- if (sys == 1 || sys == 3) {
- switch (type) {
- case 1: tr = "INEL"; break;
- case 2: tr = "INEL>0"; break;
- case 4: tr = "NSD"; break;
- default: tr = Form("unknown(%d)", sys);
- }
- }
- else
- tr.Form("%2d--%2d%%", centLow, centHigh);
-
- if (verbose)
- Warning("GetSingle", "Nothing to get for "
- "which=%s, sys=%s, energy=%dGeV, type=%s, "
- "centLow=%d, centHigh=%d",
- w.Data(), sy.Data(), energy, tr.Data(), centLow, centHigh);
- }
-#if 0
- if (ret) {
- if (!wn.IsNull()) wn.Append(",");
- switch (which) {
- case PYTHIA: wn.Append("Pythia"); break;
- case UA5: wn.Append("UA5"); break;
- case CMS: wn.Append("CMS"); break;
- case ALICE: wn.Append("ALICE"); break;
- }
- }
-#endif
- return ret;
- }
-
- //____________________________________________________________________
- /**
- * Append an item to a list
- *
- * @param s List to append to
- * @param delim Delimiter
- * @param what What to append
- *
- * @return New string value
- */
- static TString& AppendItem(TString& s, char delim, const char* what)
- {
- if (!s.IsNull()) s.Append(Form("%c", delim));
- s.Append(what);
- return s;
- }
-
- static void FormatEnergy(TString& en, UShort_t sys, UShort_t energy)
- {
- en.Append(Form("#sqrt{s%s}=", sys == 1 ? "" : "_{NN}"));
- if (energy < 1000)
- en.Append(Form("%dGeV", energy));
- else {
- if (energy % 1000 == 0)
- en.Append(Form("%dTeV", energy/1000));
- else
- en.Append(Form("%4.2fTeV", float(energy)/1000));
- }
- }
- static void FormatSystem(TString& sn, UShort_t sys)
- {
- switch (sys) {
- case 1: sn = "pp"; break;
- case 2: sn = "PbPb"; break;
- case 3: sn = "pPb"; break;
- default: sn = "unknown"; break;
- }
- }
- static void FormatCentrality(TString& cn, UShort_t sys, UShort_t l,UShort_t u)
- {
- if (sys == 2) cn.Form("%d%% - %d%% central", l, u);
- }
- static void FormatType(TString& tn, UShort_t sys, UShort_t type)
- {
- if (sys == 2) {
- tn = "";
- return;
- }
- if (type == 0x2000) type = 0x4;
- if (type & 0x1) AppendItem(tn, '|', "INEL");
- if (type & 0x2) AppendItem(tn, '|', "INEL>0");
- if (type & 0x4) AppendItem(tn, '|', "NSD");
- }
- static void FormatTitle(TString& title,
- UShort_t sys,
- UShort_t energy,
- UShort_t type,
- UShort_t centLow,
- UShort_t centHigh,
- Bool_t seenUA5)
- {
- TString sn; FormatSystem(sn, sys);
- TString en; FormatEnergy(en, sys, energy);
- TString tn; FormatType(tn, sys, type);
- TString cn; FormatCentrality(cn, sys, centLow, centHigh);
- if (seenUA5) sn.Append("(p#bar{p})");
- if (!en.IsNull()) en.Prepend(", ");
- if (!tn.IsNull()) tn.Prepend(", ");
- if (!cn.IsNull()) cn.Prepend(", ");
- title.Form("%s%s%s%s", sn.Data(), en.Data(), tn.Data(), cn.Data());
- }
- //__________________________________________________________________
- /**
- * Get the color for a centrality bin
- *
- * @param bin Centrality bin
- *
- * @return Color
- */
- static Int_t CentralityColor(UShort_t centLow,
- UShort_t centHigh,
- UShort_t /*nBins*/=0)
- {
-#if 0
- if (nBins > 0 && nBins < 6) {
- switch (bin) {
- case 1: return kRed+2;
- case 2: return kGreen+2;
- case 3: return kBlue+1;
- case 4: return kCyan+1;
- case 5: return kMagenta+1;
- case 6: return kYellow+2;
- }
- }
-#endif
- Float_t fc = (centLow+double(centHigh-centLow)/2) / 100;
- Int_t nCol = gStyle->GetNumberOfColors();
- Int_t icol = TMath::Min(nCol-1,int(fc * nCol + .5));
- Int_t col = gStyle->GetColorPalette(icol);
- //Info("GetCentralityColor","%3d: %3d-%3d -> %3d",bin,centLow,centHigh,col);
- return col;
- }
- static Bool_t GetPbPb(TMultiGraph* mp,
- Bool_t cms, Bool_t alice, Bool_t pythia,
- Bool_t work, UShort_t energy, UShort_t centLow,
- UShort_t centHigh)
- {
- // Nothing for PbPb so far
- TGraphAsymmErrors* gCMS =(cms ?GetSingle(CMS, 2,energy,0,
- centLow, centHigh):0);
- TGraphAsymmErrors* gALI =(alice ?GetSingle(ALICE, 2,energy,0,
- centLow, centHigh):0);
- TGraphAsymmErrors* gPYT =(pythia?GetSingle(PYTHIA,2,energy,0,
- centLow, centHigh):0);
- TGraphAsymmErrors* gWRK =(work ?GetSingle(WIP, 2,energy,0,
- centLow, centHigh):0);
- if (gCMS) mp->Add(gCMS);
- if (gALI) mp->Add(gALI);
- if (gPYT) mp->Add(gPYT);
- if (gWRK) mp->Add(gWRK);
- return (gCMS || gALI || gPYT || gWRK);
- }
- //____________________________________________________________________
- /**
- * Get a multi graph of data for a given energy and trigger type
- *
- * @param sys Collision system (1: pp, 2: PbPb)
- * @param energy Energy in GeV (900, 2360, 7000)
- * @param type Bit pattern of trigger type
- * - 0x1 INEL
- * - 0x2 INEL>0
- * - 0x4 NSD
- * @param centLow Low centrality cut (only for PbPB)
- * @param centHigh High centrality cut (only for PbPB)
- * @param which What to get
- *
- * @return A multi graph with the selected data.
- *
- * @ingroup pwglf_forward_otherdata
- */
- static TMultiGraph* GetData(UShort_t sys,
- UShort_t energy,
- UShort_t type=0x1,
- UShort_t centLow=0,
- UShort_t centHigh=0,
- UShort_t which=0x7)
- {
- TMultiGraph* mp = new TMultiGraph(Form("dndeta_%dGeV_%d_%03d_%03d",
- energy, type, centLow, centHigh),"");
- bool ua5 = (which & (1 << UA5)); // 0x1
- bool cms = (which & (1 << CMS)); // 0x2
- bool alice = (which & (1 << ALICE)); // 0x4
- bool work = (which & (1 << WIP)); // 0x8
- bool pythia = (which & (1 << PYTHIA)); // 0x10
- Bool_t seenUA5 = false;
-
- if (sys == 1) {
- if (!(type & 0x2007))
- Warning("GetData", "Unknown trigger mask 0x%x", type);
-
- if (TMath::Abs(energy-2750) < 11) {
- Warning("GetData", "Using 2360GeV data for %dGeV comparison", energy);
- energy = 2360;
- }
- if (!(TMath::Abs(energy-900) < 10 ||
- TMath::Abs(energy-2360) < 10 ||
- TMath::Abs(energy-7000) < 10 ||
- TMath::Abs(energy-8000) < 10)) {
- Warning("GetData", "No other results for sys=%d, energy=%d",
- sys, energy);
- return 0;
- }
-
- // Substitute NSD for V0-AND
- if (type == 0x2000) {
- Warning("GetData", "Using NSD for V0-AND results 0x%04x", type);
- type = 4;
- }
-
- for (Int_t i = 0; i < 3; i++) {
- UShort_t mask = (1 << i);
- if ((type & mask) == 0) continue;
- TGraphAsymmErrors* gUAp =(ua5 ?GetSingle(UA5, sys,energy,mask):0);
- TGraphAsymmErrors* gUAn =(ua5 ?GetSingle(UA5+10,sys,energy,mask):0);
- TGraphAsymmErrors* gCMS =(cms ?GetSingle(CMS, sys,energy,mask):0);
- TGraphAsymmErrors* gALI =(alice ?GetSingle(ALICE, sys,energy,mask):0);
- TGraphAsymmErrors* gPYT =(pythia?GetSingle(PYTHIA,sys,energy,mask):0);
- TGraphAsymmErrors* gWRK =(work ?GetSingle(WIP, sys,energy,mask):0);
- if (gUAp) mp->Add(gUAp);
- if (gUAn) mp->Add(gUAn);
- if (gCMS) mp->Add(gCMS);
- if (gALI) mp->Add(gALI);
- if (gPYT) mp->Add(gPYT);
- if (gWRK) mp->Add(gWRK);
- if (gUAp || gUAn) seenUA5 = true;
- }
- }
- else if (sys == 2) {
- // Warning("GetData", "No other data for PbPb yet");
- GetPbPb(mp,cms,alice,pythia,work,energy,centLow,centHigh);
- }
- else if (sys == 3) {
- if (!(TMath::Abs(energy-5023) < 10 ||
- TMath::Abs(energy-8000) < 10) ) {
- Warning("GetData", "No other results for sys=%d, energy=%d",
- sys, energy);
- return 0;
- }
- // Info("GetData", "Getting ALICE pPb data");
- TGraphAsymmErrors* gALI =(alice ?GetSingle(ALICE, sys,energy, 0):0);
- if (gALI) mp->Add(gALI);
- // Info("GetData", "Got %p", gALI);
- // Warning("GetData", "Unknown system %d", sys);
- }
-
- if (!mp->GetListOfGraphs() || mp->GetListOfGraphs()->GetEntries() <= 0) {
- delete mp;
- mp = 0;
- return 0;
- }
- TString title;
- FormatTitle(title, sys, energy, type, centLow, centHigh, seenUA5);
- mp->SetTitle(title.Data());
- return mp;
- }
-};
-//____________________________________________________________________
-/**
- * Plot external data for a given selection of energy and trigger type
- * (see GetData)
- *
- * @param sys Collision system (1: pp, 2: PbPb)
- * @param energy Energy in GeV (900, 2360, 7000)
- * @param type Bit pattern of trigger type
- * - 0x1 INEL
- * - 0x2 INEL>0
- * - 0x4 NSD
- * @param centLow Low centrality cut (only for PbPB)
- * @param centHigh High centrality cut (only for PbPB)
- * @param which Which data to show
- *
- * @ingroup pwglf_forward_otherdata
- */
-void
-OtherData(UShort_t sys=1,
- UShort_t energy=900,
- UShort_t type=0x1,
- UShort_t centLow=0,
- UShort_t centHigh=5,
- UShort_t which=0xf)
-{
- TMultiGraph* mp =
- RefData::GetData(sys, energy, type, centLow, centHigh, which);
- if (!mp) {
- if (sys != 2) return;
-
- UShort_t cents[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 100, 0 };
- UShort_t* lC = &(cents[0]);
- UShort_t* uC = &(cents[1]);
- TString title;
- RefData::FormatTitle(title, sys, energy, type, centLow, centHigh, false);
- mp = new TMultiGraph(Form("pbpb_%04dGeV_%03d_%03d",
- energy, centLow, centHigh), title.Data());
- Bool_t filled = false;
- while (*lC < centLow) { lC++; uC++; }
- while (*uC > 0 && *uC <= centHigh) {
- TMultiGraph* mg = RefData::GetData(sys, energy, type, *lC, *uC, which);
- if (!mg) continue;
- filled = true;
- mp->Add(mg);
- uC++;
- lC++;
- }
- if (!filled) return;
- }
-
- gStyle->SetTitleX(0.1);
- gStyle->SetTitleY(1.0);
- gStyle->SetTitleW(0.85);
- gStyle->SetTitleH(0.05);
- gStyle->SetTitleBorderSize(0);
- gStyle->SetTitleTextColor(kWhite);
- gStyle->SetTitleFillColor(kBlack);
- gStyle->SetTitleFontSize(0.02);
-
- gStyle->SetOptTitle(0);
- gStyle->SetOptStat(0);
-
- TCanvas* c = new TCanvas("c", "dN/deta", 800, 600);
- c->SetFillColor(0);
- c->SetBorderSize(0);
- c->SetBorderMode(0);
- c->SetRightMargin(0.02);
- c->SetTopMargin(0.02);
-
-
- mp->SetMinimum(0);
- mp->Draw("ap");
- if (mp->GetXaxis()) {
- mp->GetXaxis()->SetTitle("#eta");
- mp->GetXaxis()->SetTitleFont(12);
- mp->GetXaxis()->SetLabelFont(132);
- }
- if (mp->GetYaxis()) {
- mp->GetYaxis()->SetTitle("#frac{1}{N} #frac{dN_{#font[132]{ch}}}{d#eta}");
- mp->GetYaxis()->SetTitleFont(12);
- mp->GetYaxis()->SetLabelFont(132);
- }
- TLegend* l = c->BuildLegend(0.3, 0.15, 0.7, 0.5,
- mp->GetTitle());
- l->SetFillColor(0);
- l->SetTextFont(132);
- l->SetBorderSize(0);
- TLegendEntry* h = static_cast<TLegendEntry*>(l->GetListOfPrimitives()->At(0));
- if (h) {
- h->SetTextFont(22);
- }
- c->cd();
-}
-
-//____________________________________________________________________
-//
-// EOF
-//
+
--- /dev/null
+void
+CopySec(Bool_t fmd=true, UShort_t sys=2, UShort_t sNN=2760, Short_t fld=-5, ULong_t run=0)
+{
+ const char* fwd = "${ALICE_ROOT}/PWGLF/FORWARD/analysis2";
+ if (!gROOT->GetClass("AliOADBForward"))
+ gROOT->Macro(Form("%s/scripts/LoadLibs.C", fwd));
+
+ TString table = "secondary";
+ ULong_t oldRun = 118506;
+ UShort_t oldSys = 1; // pp
+ UShort_t oldSNN = 900;
+ Short_t oldFld = +5;
+ const char* det = fmd ? "fmd" : "spd";
+ AliOADBForward* db = new AliOADBForward;
+ db->Open(Form("%s_corrections.root", det), table, true);
+
+ if (!db->CopyEntry(table,
+ oldRun, oldSys, oldSNN, oldFld,
+ run, sys, sNN, fld,
+ false, false))
+ Warning("CopySec", "Failed to copy %s %lu/%hu/%hu/%hd -> %lu/%hu/%hu/%hd",
+ det,
+ oldRun, oldSys, oldSNN, oldFld,
+ run, sys, sNN, fld);
+}
+//
+// EOF
+//
+
+
+
+
+
+
+
opts.ToUpper();
Bool_t landscape = opts.Contains("LANDSCAPE");
Bool_t few = opts.Contains("FEW");
+ Bool_t details = !opts.Contains("SINGLE");
+ if (opts.Contains("PORTRAIT")) landscape = false;
CreateCanvas(out, landscape);
fBody->cd();
- Double_t y = .8;
- DrawParameter(y, "Run #", Form("%lu", runNo));
- DrawParameter(y, "System", AliForwardUtil::CollisionSystemString(sys));
- DrawParameter(y, "#sqrt{s_{NN}}",
- AliForwardUtil::CenterOfMassEnergyString(sNN));
- DrawParameter(y, "L3 field", AliForwardUtil::MagneticFieldString(field));
- DrawParameter(y, "Simulation", Form("%s", mc ? "yes" : "no"));
- DrawParameter(y, "Satellite", Form("%s", sat ? "yes" : "no"));
- PrintCanvas("Title");
+ if (details) {
+ Double_t y = .8;
+ DrawParameter(y, "Run #", Form("%lu", runNo));
+ DrawParameter(y, "System", AliForwardUtil::CollisionSystemString(sys));
+ DrawParameter(y, "#sqrt{s_{NN}}",
+ AliForwardUtil::CenterOfMassEnergyString(sNN));
+ DrawParameter(y, "L3 field", AliForwardUtil::MagneticFieldString(field));
+ DrawParameter(y, "Simulation", Form("%s", mc ? "yes" : "no"));
+ DrawParameter(y, "Satellite", Form("%s", sat ? "yes" : "no"));
+ PrintCanvas("Title");
+ }
- Bool_t details = !opts.Contains("SINGLE");
if (what & AliForwardCorrectionManager::kSecondaryMap)
DrawIt(mgr.GetSecondaryMap(), details);
if (what & AliForwardCorrectionManager::kAcceptance)
--- /dev/null
+/**
+ * @file ForwarddNdetaConfig.C
+ * @author Christian Holm Christensen <cholm@nbi.dk>
+ * @date Thu May 15 20:33:03 2014
+ *
+ * @brief Configuration file for Forward dN/deta task
+ *
+ *
+ */
+void dNdetaConfig(AliBasedNdetaTask* task)
+{
+ // - Whether to cut edges when re-binning
+ task->SetCutEdges(false);
+ // - Whether to correct for empty bins when projecting
+ // task->SetCorrEmpty(true);
+ task->SetCorrEmpty(task->IsA()->InheritsFrom(AliCentraldNdetaTask::Class()));
+ // - Whether to use TH2::ProjectionX
+ task->SetUseROOTProjectX(false);
+
+ // --- Special for Hans' analysis ----------------------------------
+ // - Set the filename of the corresponding MC analysis
+ // const char* mcanalysisfilename =
+ // "/home/hehi/alex/work/dispVtxDNdeta/mcCorrectionPos.root"
+ // task->SetMCFinalCorrFilename(mcanalysisfilename);
+
+ // --- Other things we may overwrite -------------------------------
+ // - Set the vertex range to use
+ // task->SetIpZRange(vzMin, vzMax);
+
+ // - Set the trigger mask to use (INEL,INEL>0,NSD)
+ // task->SetTriggerMask(trig);
+
+ // - Set the trigger efficiency
+ // task->SetTriggerEff(trigEff); // 0.997535);
+ // task->SetTriggerEff0(trigEff0);
+
+ // - Set how to normalize. Bit mask of
+ //
+ // kNone Normalise to accepted events
+ // kEventLevel Normalise to all events in selected range
+ // kAltEventLevel Normalise to all events in selected range
+ // kBackground Also correct for background triggers
+ // kShape Correct shape
+ //
+ // kNone, kEventLevel, and kAltEventLevel are mutually exclusive.
+ // If neither kEventLevel, nor kAltEventLevel is specified, then
+ // kNone is assumed. kBackground (when implemented) only makes
+ // sense with kEventLevel and kAltEventLevel. Furthermore, there
+ // are some constants that encode the common cases
+ //
+ // kFull = kEventLevel | kBackground | kShape
+ // kAltFull = kAltEventLevel | kBackground | kShape
+ //
+ // Default is kFull
+ // task->SetNormalizationScheme(scheme);
+
+ // - Set the centrality estimator to use
+ // task->SetCentralityMethod(cent);
+
+ // - Set the centrality bins to use. These are mutually exclusive.
+ // Note, that a bin specified as a-b, covers the interval from a,
+ // inclusive to b exclusive. An upper bound of 100 is treated
+ // especially, and the upper bound is inclusive in that case .
+ // Short_t bins[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 100 };
+ // task->SetCentralityAxis(10, bins);
+
+ // - Set satellite vertex flag
+ // task->SetSatelliteVertices(satVtx);
+}
+// EOF
+
{
local source=$1 ; shift
local store=$1 ; shift
- local r=$1 ; shift
+ local r=`echo $1 | sed 's/^0*//'` ; shift
local rr=`printf %09d $r`
local o=${store}/${rr}/input.root
mkdir -p ${store}/${rr}
<td colspan='$subspan' id='n${subpar}' class='name'>
<span style='width: 4em' id='a${subpar}'>${subpre}</span>
EOF
- if test $link -gt 0 && test -f $sub/index.html && $level -eq $maxCol; then
+ if test $link -gt 0 && test -f $sub/index.html
+ # && test $level -ge $maxCol;
+ then
echo " <span class='lnk' onclick='showSub(\"$sub\")'>$subtitle</span>"
# echo " <a href='$sub/index.html'>$subbase</a>"
else
--- /dev/null
+#ifndef __CINT__
+#include <TFile.h>
+#include <TSystem.h>
+#include <TROOT.h>
+#include <TCollection.h>
+#include <TString.h>
+#include <TH1.h>
+#include <TH2.h>
+#include <TGraph.h>
+#include <TGraphAsymmErrors.h>
+#include <TGraphErrors.h>
+#include <TClass.h>
+#include <TMultiGraph.h>
+#include <THStack.h>
+#include <TError.h>
+#else
+class TCollection;
+class TDirectory;
+class TFile;
+class TH1;
+class TH2;
+class TGraph;
+class THStack;
+class TAxis;
+class TMultiGraph;
+#endif
+
+struct EmpiricalMaker {
+ /**
+ * Open a file
+ *
+ * @param fname Filename of file to open
+ * @param rw If true, update for read/write acess
+ *
+ * @return Pointer to file handle or null
+ */
+ static TFile* OpenFile(const TString& fname, Bool_t rw=false)
+ {
+ TFile* file = TFile::Open(fname, rw ? "RECREATE" : "READ");
+ if (!file) {
+ ::Error("OpenFile", "Couldn't open %s for %s",
+ fname.Data(), (rw ? "read/write" : "read"));
+ return 0;
+ }
+ return file;
+ }
+ /**
+ * Check the type of an object
+ *
+ * @param o Object to check
+ * @param cl Class of object required
+ * @param quiet If true, report no errors
+ *
+ * @return true on success, false otherwise
+ */
+ static Bool_t CheckType(TObject* o, TClass* cl, Bool_t quiet=false)
+ {
+ if (!o || !cl) {
+ if (!quiet) ::Error("CheckType", "No object and/or class given");
+ return false;
+ }
+ if (!o->IsA()->InheritsFrom(cl)) {
+ if (!quiet) ::Error("CheckType", "Object %s is not a %s, but a %s",
+ o->GetName(), cl->GetName(), o->ClassName());
+ return false;
+ }
+ return true;
+ }
+ /**
+ * Get an object from a directory
+ *
+ * @param d Parent directory
+ * @param name Name of object
+ * @param quiet If true, report no errors
+ *
+ * @return Pointer to object, or null
+ */
+ static TObject* GetObject(TDirectory* d, const TString& name,
+ TClass* cl=0, Bool_t quiet=false)
+ {
+ if (!d) {
+ if (!quiet) ::Error("GetObject", "No parent directory");
+ return 0;
+ }
+ TObject* o = d->Get(name.Data());
+ if (!o) {
+ if (!quiet) ::Error("GetObject", "didn't find the object %s in %s", name.Data(), d->GetName());
+ if (!quiet) d->ls();
+ return 0;
+ }
+ if (cl && !CheckType(o, cl, quiet)) return 0;
+
+ return o;
+ }
+ /**
+ * Get an object from a directory
+ *
+ * @param d Parent directory
+ * @param name Name of object
+ * @param quiet If true, report no errors
+ *
+ * @return Pointer to object, or null
+ */
+ static TObject* GetObject(TCollection* d, const TString& name,
+ TClass* cl=0, Bool_t quiet=false)
+ {
+ if (!d) {
+ if (!quiet) ::Error("GetObject", "No parent directory");
+ return 0;
+ }
+ TObject* o = d->FindObject(name.Data());
+ if (!o) {
+ if (!quiet) ::Error("GetObject", "didn't find the object %s in %s",
+ name.Data(), d->GetName());
+ if (!quiet) d->ls();
+ return 0;
+ }
+ if (cl && !CheckType(o, cl, quiet)) return 0;
+
+ return o;
+ }
+ /**
+ * Get a collection from a directory
+ *
+ * @param d Parent
+ * @param name Name of collection to get
+ * @param quiet If true, report no errors
+ *
+ * @return The found collection or null
+ */
+ static TCollection* GetCollection(TDirectory* d, const TString& name,
+ Bool_t quiet=false)
+ {
+ return static_cast<TCollection*>(GetObject(d, name, TCollection::Class(),
+ quiet));
+ }
+ /**
+ * Get a collection from another collection
+ *
+ * @param d Parent
+ * @param name Name of collection to get
+ * @param quiet If true, report no errors
+ *
+ * @return The found collection or null
+ */
+ static TCollection* GetCollection(TCollection* d, const TString& name,
+ Bool_t quiet=false)
+ {
+ return static_cast<TCollection*>(GetObject(d, name, TCollection::Class(),
+ quiet));
+ }
+ /**
+ * Get a histogram from a directory
+ *
+ * @param d Parent
+ * @param name Name of collection to get
+ * @param quiet If true, report no errors
+ *
+ * @return The found histogram or null
+ */
+ static TH1* GetH1(TDirectory* d, const TString& name, Bool_t quiet=false)
+ {
+ return static_cast<TH1*>(GetObject(d, name, TH1::Class(), quiet));
+ }
+ /**
+ * Get a histogram from a collection
+ *
+ * @param d Parent
+ * @param name Name of collection to get
+ * @param quiet If true, report no errors
+ *
+ * @return The found histogram or null
+ */
+ static TH1* GetH1(TCollection* d, const TString& name, Bool_t quiet=false)
+ {
+ return static_cast<TH1*>(GetObject(d, name, TH1::Class(), quiet));
+ }
+ /**
+ * Get an graph from a collection
+ *
+ * @param d Parent
+ * @param name Name of collection to get
+ * @param quiet If true, report no errors
+ *
+ * @return The found graph or null
+ */
+ static TGraph* GetGraph(TCollection* d, const TString& name, Bool_t quiet=false)
+ {
+ return static_cast<TGraph*>(GetObject(d, name, TGraph::Class(), quiet));
+ }
+ /**
+ * Get an axis from a collection
+ *
+ * @param d Parent
+ * @param name Name of collection to get
+ * @param quiet If true, report no errors
+ *
+ * @return The found axis or null
+ */
+ static TAxis* GetAxis(TCollection* d, const TString& name,
+ Bool_t quiet=false)
+ {
+ return static_cast<TAxis*>(GetObject(d, name, TAxis::Class(), quiet));
+ }
+ /**
+ * Compute the ratio of @a h to @a g. @a g is evaluated at the bin
+ * centers of @a h
+ *
+ * @param h Numerator
+ * @param g Divisor
+ *
+ * @return h/g
+ */
+ static TH1* RatioHG(const TH1* h, const TGraph* g)
+ {
+ if (!h || !g) return 0;
+
+ TH1* ret = static_cast<TH1*>(h->Clone("tmp"));
+ ret->Reset();
+ ret->SetDirectory(0);
+ Double_t xlow = g->GetX()[0];
+ Double_t xhigh = g->GetX()[g->GetN()-1];
+ if (xlow > xhigh) { Double_t t = xhigh; xhigh = xlow; xlow = t; }
+
+ for (Int_t i = 1; i <= h->GetNbinsX(); i++) {
+ Double_t c = h->GetBinContent(i);
+ if (c <= 0) continue;
+
+ Double_t x = h->GetBinCenter(i);
+ if (x < xlow || x > xhigh) continue;
+
+ Double_t f = g->Eval(x);
+ if (f <= 0) continue;
+
+ ret->SetBinContent(i, c / f);
+ ret->SetBinError(i, h->GetBinError(i) / f);
+ }
+ return ret;
+ }
+ //==================================================================
+ /**
+ * Constructor
+ */
+ EmpiricalMaker()
+ : fRefLoaded(false)
+ {}
+ /**
+ * Load reference data as compiled script
+ *
+ */
+ void LoadReferences() {
+ if (fRefLoaded) return;
+ // --- Set the macro pathand load other data script --------------
+ TString savPath(gROOT->GetMacroPath());
+ gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWGLF/FORWARD/analysis2",
+ gROOT->GetMacroPath()));
+ // Always recompile
+ if (!gROOT->GetClass("RefData"))
+ gROOT->LoadMacro("OtherData.C+");
+ gROOT->SetMacroPath(savPath);
+ fRefLoaded = true;
+ }
+ /**
+ * Get reference dN/deta in some centrality range
+ *
+ * @param c1 Low value of centrality range
+ * @param c2 High value of centrallity range
+ *
+ * @return Reference data, or null
+ */
+ TMultiGraph* GetReference(UShort_t c1, UShort_t c2) {
+ if (!fRefLoaded) LoadReferences();
+
+ TMultiGraph* other = 0;
+ UShort_t sys = 2; // (fSysString ? fSysString->GetUniqueID() : 0);
+ UShort_t trg = 0; // (fTrigString ? fTrigString->GetUniqueID() : 0);
+ UShort_t snn = 2760; // (fSNNString ? fSNNString->GetUniqueID() : 0);
+ Long_t ret =
+ gROOT->ProcessLine(Form("RefData::GetData(%d,%d,%d,%d,%d,%d);",
+ sys,snn,trg,c1,c2,0xF));
+ if (!ret) {
+ Warning("GetReference",
+ "No other data for sys=%d trg=%d sNN=%d c=%3d%%-%3d%%",
+ sys, trg, snn, c1, c2);
+ return 0;
+ }
+
+ other = reinterpret_cast<TMultiGraph*>(ret);
+ return other;
+ }
+ /**
+ * Run the full thing
+ *
+ * @param fileName File to query results
+ */
+ void Run(const TString& fileName)
+ {
+ TFile* file = OpenFile(fileName, false);
+ if (!file) return;
+
+ TFile* out = OpenFile("empirical.root", true);
+ if (!out) return;
+
+ ProcessComponent(file, out, "Forward");
+ ProcessComponent(file, out, "Central");
+
+ out->ls();
+ out->Close();
+ file->Close();
+ }
+ /**
+ * Process a single component
+ *
+ * @param d Parent
+ * @param name Name of component
+ */
+ void ProcessComponent(TDirectory* d, TDirectory* out, const TString& name)
+ {
+ TDirectory* store = out->mkdir(name);
+ store->cd();
+
+ TString resName(Form("%sdNdetaResults", name.Data()));
+ TCollection* results = GetCollection(d, resName);
+ if (!results) return;
+
+ TAxis* centAxis = GetAxis(results, "centAxis");
+ if (!centAxis) return;
+
+ THStack* corrs = new THStack("empirical", "Empirical correction");
+ // TMultiGraph* corrs = new TMultiGraph("empirical");
+ corrs->SetTitle(Form("Empirical corrections for %s", name.Data()));
+ for (Int_t i=1; i<=centAxis->GetNbins(); i++) {
+ UShort_t c1 = UShort_t(centAxis->GetBinLowEdge(i));
+ UShort_t c2 = UShort_t(centAxis->GetBinUpEdge(i));
+
+ ProcessCent(c1, c2, results, name, corrs, store);
+ }
+
+ if (!corrs->GetHists() ||
+ corrs->GetHists()->GetEntries() <= 0) return;
+
+ TH1* sum = static_cast<TH1*>(corrs->GetHists()->At(0)->Clone("mean"));
+ sum->SetTitle("mean");
+ sum->Reset();
+ sum->SetMarkerColor(kBlack);
+ sum->SetDirectory(0);
+ Int_t nHist = corrs->GetHists()->GetEntries();
+ for (Int_t i = 0; i < nHist; i++)
+ sum->Add(static_cast<TH1*>(corrs->GetHists()->At(i)));
+ sum->Scale(1. / nHist);
+ sum->Write("default");
+
+ THStack* ratios = new THStack("ratios", "Ratio to mean");
+ for (Int_t i = 0; i < nHist; i++) {
+ TH1* h = static_cast<TH1*>(corrs->GetHists()->At(i));
+ TH1* r = static_cast<TH1*>(h->Clone());
+ r->SetDirectory(0);
+ r->Divide(sum);
+ ratios->Add(r);
+ }
+
+
+ TCanvas* c = new TCanvas(name);
+ c->SetRightMargin(0.05);
+ c->SetTopMargin(0.05);
+ c->Divide(1,2,0,0);
+ TVirtualPad* p = c->cd(1);
+ corrs->Add(sum);
+ corrs->DrawClone("nostack");
+ p->BuildLegend(0.2, 0.05, 0.4, 0.4);
+ corrs->Write();
+
+ p = c->cd(2);
+ THStack* cpy = static_cast<THStack*>(ratios->DrawClone("nostack"));
+ cpy->SetMinimum(0.95);
+ cpy->SetMaximum(1.05);
+ p->BuildLegend(0.35,0.15,0.55,0.4);
+ ratios->Write();
+
+ c->Print(Form("%sEmpirical.pdf", name.Data()));
+ }
+ /**
+ * Process a single centrality bin
+ *
+ * @param c1 Lower cut
+ * @param c2 Higher cut
+ * @param c Parent
+ * @param name Name of component
+ * @param s Stack
+ */
+ void ProcessCent(UShort_t c1, UShort_t c2, TCollection* c,
+ const TString& name, THStack* s, TDirectory* d)
+ {
+ TMultiGraph* others = GetReference(c1, c2);
+ if (!others) return;
+
+ TGraph* alice = GetGraph(others->GetListOfGraphs(),
+ Form("alice_pbpb2760"));
+ if (!alice) return;
+
+ TString folderName(Form("cent%03d_%03d", c1, c2));
+ TCollection* centBin = GetCollection(c, folderName);
+ if (!centBin) return;
+
+ TH1* ana = GetH1(centBin, Form("dndeta%s", name.Data()));
+ if (!ana) return;
+
+ TH1* ratio = RatioHG(ana, alice);
+ if (!ratio) return;
+
+ ::Info("", "Adding %s/%s", name.Data(), folderName.Data());
+ ratio->SetName(folderName);
+ ratio->SetTitle(Form("%3d%% - %3d%%", c1, c2));
+
+ // if (c1 == 0) ratio->Write("default");
+
+ TDirectory* store = d->mkdir(folderName);
+ store->cd();
+ ana->Write();
+ alice->Write();
+ d->cd();
+
+ s->Add(ratio);
+ }
+
+ Bool_t fRefLoaded;
+};
+
+void GenerateEmpirical(const Char_t* fileName="PbPb_2760_dndeta_nosec_CENT_20140513_1349/forward_dndeta.root")
+{
+ EmpiricalMaker m;
+ m.Run(fileName);
+}
gSystem->AddIncludePath(Form("-I%s", subDir.Data()));
}
}
-
+ gROOT->SetMacroPath(macPath);
gROOT->LoadMacro(Form("%s%s", name.Data(), (force ? "++g" : "+")));
-
}
//____________________________________________________________________
virtual void DrawEventInspector(TCollection* parent)
TH1* dndeta = GetH1(c, Form("dndeta%s",base.Data()));
TH2* d2ndetadphi = GetH2(c, Form("d2Ndetadphi%s", base.Data()));
if (!trig || !norm || !dndeta || !d2ndetadphi) return;
+ if (norm->GetEntries() <= 0) return;
norm->SetFillColor(kGreen+1);
norm->SetFillStyle(3001);
return;
}
f << "// Generated by " << ClassName() << "\n"
- << "void DownloadAODs()\n"
+ << "void DownloadAODs(Bool_t force=false)\n"
<< "{\n"
<< " if (!TGrid::Connect(\"alien://\")) {\n"
<< " Error(\"DownloadAODs\",\"Failed to connect to AliEn\");\n"
<< " TString subsub(gSystem->BaseName(gSystem->DirName(dir)));\n"
<< " TString out = TString::Format(\"AliAOD_%s_%s.root\",\n"
<< " subsub.Data(),sub.Data());\n"
+ << " if (!gSystem->AccessPathName(out.Data()) && !force) {\n"
+ << " Printf(\"=== Already have %s\",out.Data());\n"
+ << " continue;\n"
+ << " }\n"
<< " Printf(\"=== Getting %s %s (%3d/%3d)\",\n"
<< " subsub.Data(),sub.Data(),i,n);\n"
<< " if (!TFile::Cp(path, out)) {\n"
: TrainSetup(name)
{
// General
- fOptions.Add("dNdeta", "Add dN/deta tasks");
- fOptions.Add("flow", "Add flow tasks");
- fOptions.Add("cent", "Use centrality");
+ fOptions.Add("dNdeta", "Add dN/deta tasks");
+ fOptions.Add("flow", "Add flow tasks");
+ fOptions.Add("cent", "Use centrality");
+ fOptions.Add("sat-vtx", "Use satellite interactions");
// ESD settings
fOptions.Add("run", "NUMBER", "Run number", 0);
fOptions.Add("sys", "SYSTEM", "1:pp, 2:PbPb, 3:pPb", "");
"ForwardAODConfig.C");
fOptions.Add("central-config", "FILE", "Forward configuration",
"CentralAODConfig.C");
- fOptions.Add("satelitte", "Use satelitte interactions");
fOptions.Add("corr", "DIR", "Corrections dir", "");
// dNdeta AOD settings
- fOptions.Add("trig", "TYPE", "Trigger type", "INEL");
- fOptions.Add("vzMin", "CENTIMETER", "Min Ip Z", "-10");
- fOptions.Add("vzMax", "CENTIMETER", "Max Ip Z", "+10");
- fOptions.Add("scheme", "SCHEME", "Normalization scheme", "");
- fOptions.Add("trigEff", "EFFICENCY", "Trigger effeciency", "1");
- fOptions.Add("trigEff0", "EFFICENCY", "0-bin trigger effeciency", "1");
- fOptions.Add("cut-edges", "Cut acceptance edges");
+ fOptions.Add("dndeta-config", "FILE", "dN/deta configuration",
+ "dNdetaConfig.C");
+ fOptions.Add("trig", "TYPE", "Trigger type", "INEL");
+ fOptions.Add("vzMin", "CENTIMETER", "Min Ip Z", "-10");
+ fOptions.Add("vzMax", "CENTIMETER", "Max Ip Z", "+10");
+ fOptions.Add("scheme", "SCHEME", "Normalization scheme", "");
+ fOptions.Add("trigEff", "EFFICENCY", "Trigger effeciency", "1");
+ fOptions.Add("trigEff0", "EFFICENCY", "0-bin trigger effeciency", "1");
// Flow AOD settings
- fOptions.Add("mom", "Flow moments to analyse", "234", "234");
- fOptions.Add("eta-gap", "Whether to use an eta-gap", "[no,yes,both]",
- "both");
- fOptions.Add("eg-value", "Set value in |eta| of the eta gap", "2.0");
- fOptions.Add("b-cent","Whether to use the impact parameter for centrality");
- fOptions.Add("afterburner", "What to afterburn", "[eta,phi,b,pid]", "");
- fOptions.Add("ab-type", "Type of afterburner", "1|2|3|4", "");
- fOptions.Add("ab-order", "Order of afterburner", "2|3|4|5|6", "");
- fOptions.Add("sat-vtx", "Whether to use satellite interactions");
- fOptions.Add("outlier-fmd", "Outlier cut for FMD", "NSIGMA", "4.0");
- fOptions.Add("outlier-spd", "Outlier cut for SPD", "NSIGMA", "0.0");
+ fOptions.Add("mom", "MOMENTS", "Flow moments to analyse", "234");
+ fOptions.Add("eta-gap", "[no,yes,both]","Whether to use an eta-gap","both");
+ fOptions.Add("eg-value", "DISTANCE", "Size of eta gap", "2.0");
+ fOptions.Add("b-cent", "Use the impact parameter for centrality");
+ fOptions.Add("afterburner","[eta,phi,b,pid]", "What to afterburn", "");
+ fOptions.Add("ab-type", "[1-4]", "Type of afterburner", "");
+ fOptions.Add("ab-order", "[2-6]", "Order of afterburner", "");
+ fOptions.Add("outlier-fmd", "NSIGMA", "Outlier cut for FMD", "4.0");
+ fOptions.Add("outlier-spd", "NSIGMA", "Outlier cut for SPD", "0.0");
fOptions.Set("type", "ESD");
fOptions.Show(std::cout);
gROOT->Macro("AddTaskCopyHeader.C");
// --- Get options -----------------------------------------------
- ULong_t run = fOptions.AsInt("run", 0);
- UShort_t sys = fOptions.AsInt("sys", 0);
- UShort_t sNN = fOptions.AsInt("snn", 0);
- UShort_t fld = fOptions.AsInt("field", 0);
- Bool_t cent = fOptions.Has("cent");
+ ULong_t run = fOptions.AsInt("run", 0);
+ UShort_t sys = fOptions.AsInt("sys", 0);
+ UShort_t sNN = fOptions.AsInt("snn", 0);
+ UShort_t fld = fOptions.AsInt("field", 0);
+ Bool_t cent = fOptions.Has("cent");
+ Bool_t satVtx = fOptions.AsBool("sat-vtx");
TString cor = "";
if (fOptions.Has("corr")) cor = fOptions.Get("corr");
// --- Add the task ----------------------------------------------
TString fwdConfig = fOptions.Get("forward-config");
gROOT->Macro(Form("AddTaskForwardMult.C(%d,%d,%d,%d,%d,\"%s\")",
- mc, runNo, sys, sNN, fld, fwdConfig.Data()));
+ mc, run, sys, sNN, fld, fwdConfig.Data()));
fHelper->LoadAux(gSystem->Which(gROOT->GetMacroPath(), fwdConfig));
// --- Add the task ----------------------------------------------
TString cenConfig = fOptions.Get("central-config");
gROOT->Macro(Form("AddTaskCentralMult.C(%d,%d,%d,%d,%d,\"%s\")",
- mc, runNo, sys, sNN, fld, cenConfig.Data()));
+ mc, run, sys, sNN, fld, cenConfig.Data()));
fHelper->LoadAux(gSystem->Which(gROOT->GetMacroPath(), cenConfig));
// --- Add MC particle task --------------------------------------
Double_t vzMax = fOptions.AsDouble("vzmax", +10);
Double_t effT = fOptions.AsDouble("trigEff", 1);
Double_t effT0 = fOptions.AsDouble("trigEff0", 1);
- Bool_t edges = fOptions.Has("cut-edges");
- Bool_t corrEm = fOptions.Has("corr-empty");
+ TString config = fOptions.Get("dndeta-config");
// --- Form arguments --------------------------------------------
TString args;
- args.Form("\"%s\",%f,%f,%d,\"%s\",%d,%g,%g,%d",
- trig.Data(), vzMin, vzMax, cent, scheme.Data(),
- edges, effT, effT0, corrEm);
+ args.Form("\"%s\",\"%s\",%f,%f,%d,\"%s\",%g,%g",
+ config.Data(),trig.Data(), vzMin, vzMax, cent, scheme.Data(),
+ effT, effT0);
// --- Add the task ----------------------------------------------
gROOT->Macro(Form("AddTaskForwarddNdeta.C(%s);", args.Data()));
gROOT->Macro(Form("AddTaskCentraldNdeta.C(%s);", args.Data()));
TString addFlow = fOptions.Get("afterburner");
Int_t abType = fOptions.AsInt("ab-type");
Int_t abOrder = fOptions.AsInt("ab-order");
- Bool_t satVtx = fOptions.AsBool("sat-vtx");
Double_t fmdCut = fOptions.AsDouble("outlier-fmd");
Double_t spdCut = fOptions.AsDouble("outlier-spd");
fOptions.Add("scheme", "SCHEME", "Normalization scheme", "");
fOptions.Add("trigEff", "EFFICENCY", "Trigger effeciency", "1");
fOptions.Add("trigEff0", "EFFICENCY", "0-bin trigger effeciency", "1");
- fOptions.Add("cent", "Use centrality");
- fOptions.Add("cut-edges", "Cut acceptance edges");
- fOptions.Add("corr-empty", "Correct for empty bins (deprecated)");
+ fOptions.Add("cent", "ESTIMATOR", "Use centrality", "none");
fOptions.Add("mc", "Also make dN/deta for MC truth");
- fOptions.Add("mc-corr", "FILE", "MC corrections file", "");
fOptions.Add("satellite","Restrict analysis to satellite events", false);
+ fOptions.Add("forward-config", "FILE", "Forward configuration",
+ "dNdetaConfig.C");
+ fOptions.Add("central-config", "FILE", "Central configuration",
+ "dNdetaConfig.C");
+ fOptions.Add("truth-config", "FILE", "MC-Truth configuration",
+ "dNdetaConfig.C");
}
protected:
/**
Double_t vzMax = fOptions.AsDouble("vzmax", +10);
Double_t effT = fOptions.AsDouble("trigEff", 1);
Double_t effT0 = fOptions.AsDouble("trigEff0", 1);
- Bool_t cent = fOptions.Has("cent");
- Bool_t edges = fOptions.Has("cut-edges");
- Bool_t corrEm = fOptions.Has("corr-empty");
+ TString cent = fOptions.Get("cent");
Bool_t mc = fOptions.Has("mc");
- TString mccorr = fOptions.AsString("mc-corr", "");
Bool_t satonly = fOptions.AsBool("satellite");
+ TString fwdCfg = fOptions.Get("forward-config");
+ TString cenCfg = fOptions.Get("central-config");
+ TString mcCfg = fOptions.Get("truth-config");
if (!mc) mc = fHelper->IsMC();
+ if (!fOptions.Has("cent")) cent="none";
+
+ Info("", "Centrality option is '%s'", cent.Data());
+ fOptions.Show(std::cout);
// --- Form arguments --------------------------------------------
- TString args;
- args.Form("\"%s\",%f,%f,%d,\"%s\",%d,%g,%g,%d",
- trig.Data(), vzMin, vzMax, cent, scheme.Data(),
- edges, effT, effT0, corrEm);
- TString fargs(args);
- fargs.Append(Form(",%d,\"%s\"",satonly, mccorr.Data()));
+ TString fargs;
+ fargs.Form("\"%s\",\"%s\",%f,%f,\"%s\",\"%s\",%g,%g,%d",
+ fwdCfg.Data(), trig.Data(), vzMin, vzMax, cent.Data(),
+ scheme.Data(), effT, effT0, satonly);
+ TString cargs(fargs);
+ cargs.ReplaceAll(fwdCfg, cenCfg);
+ // Info("", "fargs=\"%s\", cargs=\"%s\"", fargs.Data(), cargs.Data());
// --- Add the task ----------------------------------------------
gROOT->Macro(Form("AddTaskForwarddNdeta.C(%s);", fargs.Data()));
- gROOT->Macro(Form("AddTaskCentraldNdeta.C(%s);", args.Data()));
- if (mc)
- gROOT->Macro(Form("AddTaskMCTruthdNdeta.C(%s);", args.Data()));
+ gROOT->Macro(Form("AddTaskCentraldNdeta.C(%s);", cargs.Data()));
+ if (mc) {
+ TString margs(fargs);
+ margs.ReplaceAll(fwdCfg, mcCfg);
+ gROOT->Macro(Form("AddTaskMCTruthdNdeta.C(%s);", margs.Data()));
+ }
}
//__________________________________________________________________
/**
}
o << "// Created by " << ClassName() << "\n"
- << "// \n"
- << "// Will draw dN/deta results from produced file\n"
+ << "Bool_t SetupDrawer(const TString& title, Bool_t old)\n"
+ << "{\n"
+ << " const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
+ << " gROOT->LoadMacro(Form(\"%s/DrawdNdeta.C+\",fwd));\n"
+ << " if (title.EqualTo(\"help\",TString::kIgnoreCase)) {\n"
+ << " if (old)\n"
+ << " DrawdNdeta(\"help\",\"\",5); // Get the help\n"
+ << " else\n"
+ << " DrawdNdeta(\"help\",\"\",\"\"); // Get the help\n"
+ << " return false;\n"
+ << " }\n"
+ << " return true;\n"
+ << "}\n"
+ << std::endl;
+ o << "// Will draw dN/deta results from produced file\n"
<< "// \n"
<< "// Options can be specified as needed. To get help, pass the\n"
<< "// string \"help\" for the title:\n"
<< " Float_t vzMin=999,\n"
<< " Float_t vzMax=-999)\n"
<< "{\n"
- << " const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
- << " gROOT->LoadMacro(Form(\"%s/DrawdNdeta.C+\",fwd));\n"
- << " if (title.EqualTo(\"help\",TString::kIgnoreCase)) {\n"
- << " DrawdNdeta(\"help\"); // Get the help\n"
- << " return;\n"
- << " }\n\n"
+ << " if (!SetupDrawer(title, true)) return;\n"
<< " DrawdNdeta(\"forward_dndeta.root\",\n"
<< " title,\n"
<< " rebin,\n"
<< " centMax,\n"
<< " vzMin,\n"
<< " vzMax,\n"
- <<" \"dNdeta_<trig>\");\n"
+ << " \"dNdeta_<trig>\");\n"
<< "}\n"
+ << std::endl;
+ o << "// Alternative using strings\n"
+ << "void Draw(const TString& title,\n"
+ << " const TString& others=\"ALL\",\n"
+ << " const TString& options=\"DEFAULT\",\n"
+ << " const TString& formats=\"ALL\",\n"
+ << " UShort_t rebin=5,\n"
+ << " Float_t eff=0,\n"
+ << " UShort_t centMin=0,\n"
+ << " UShort_t centMax=0,\n"
+ << " Float_t vzMin=+999,\n"
+ << " Float_t vzMax=-999,\n"
+ << " const TString& base="")\n"
+ << "{\n"
+ << " if (!SetupDrawer(title, false)) return;\n"
+ << " DrawdNdeta(\"forward_dndeta.root\",\n"
+ << " title,others,options,formats,\n"
+ << " rebin,eff,centMin,centMax,\n"
+ << " vzMin,vzMax,\"dNdeta_<trig>\");\n"
+ << "}\n"
<< "//\n"
<< "// EOF\n"
<< "//" << std::endl;
#pragma link C++ class AliAnalysisTaskESDNuclExFilterMC+;
#pragma link C++ class AliAnalysisTaskReadNuclexAOD+;
#pragma link C++ class AliAnalysisTaskAntiHe4+;
+#pragma link C++ class AliAnalysisTaskNucleiv2+;
#endif
--- /dev/null
+#ifdef __CINT__
+
+#pragma link C++ class AliAnalysisTaskJetSpectraAOD+;
+
+
+#endif
return;
}
if (fCollidingSystem == "PbPb") lPrimaryTrackMultiplicity = fESDtrackCuts->CountAcceptedTracks(lESDevent);
- if (fCollidingSystem == "PbPb") centrality = lESDevent->GetCentrality();
+ if (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb") centrality = lESDevent->GetCentrality();
} else if (fAnalysisType == "AOD") {
lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() );
if (track->TestFilterBit(AliAODTrack::kTrkGlobalNoDCA)) lPrimaryTrackMultiplicity++;
}
}
- if (fCollidingSystem == "PbPb") centrality = lAODevent->GetCentrality();
+ if (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb") centrality = lAODevent->GetCentrality();
} else {
Printf("Analysis type (ESD or AOD) not specified \n");
return;
// Centrality selection for PbPb collisions
//-----------------------------------------
Float_t lcentrality = 0.;
- if (fCollidingSystem == "PbPb") {
+ if (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb") {
if (fkUseCleaning) lcentrality = centrality->GetCentralityPercentile(fCentrEstimator.Data());
else {
lcentrality = centrality->GetCentralityPercentileUnchecked(fCentrEstimator.Data());
/* See cxx source for full Copyright notice */
-//-----------------------------------------------------------------
+/////////////////////////////////////////////////////////////
+//
// AliAnalysisTaskQAMultistrange class
// Origin AliAnalysisTaskCheckCascade
// This task has four roles :
// Origin: AliAnalysisTaskESDCheckV0 by Boris Hippolyte Nov2007, hippolyt@in2p3.fr
// 2. Prepare the plots which stand as raw material for yield extraction (wi/wo PID)
// 3. Supply an AliCFContainer meant to define the optimised topological selections
-// 4. Rough azimuthal correlation study (Eta, Phi)
// Adapted to Cascade : A.Maire Mar2008, antonin.maire@ires.in2p3.fr
// Modified : A.Maire Mar2010, antonin.maire@ires.in2p3.fr
// Modified for PbPb analysis: M. Nicassio Feb 2011, maria.nicassio@ba.infn.it
-//-----------------------------------------------------------------
+// Modified for QA production: D. Colella 2013, domenico.colella@cern.ch
+//
+/////////////////////////////////////////////////////////////
class TList;
class TH1F;
TString fAnalysisType; // "ESD" or "AOD" analysis type
AliESDtrackCuts *fESDtrackCuts; // ESD track cuts used for primary track definition
- TString fCollidingSystem; // "PbPb" or "pp" colliding system
+ TString fCollidingSystem; // "PbPb", "pPb" or "pp" colliding system
AliPIDResponse *fPIDResponse; //! PID response object
Bool_t fkSDDSelectionOn; // Boolean : kTRUE = apply the selection on SDD status
Bool_t fkQualityCutZprimVtxPos; // Boolean : kTRUE = cut on the prim.vtx z-position
Int_t fMinnTPCcls; // minimum number of TPC cluster for daughter tracks
Float_t fCentrLowLim; // Lower limit for centrality percentile selection
Float_t fCentrUpLim; // Upper limit for centrality percentile selection
- TString fCentrEstimator; // string for the centrality estimator
+ TString fCentrEstimator; // string for the centrality estimator: "V0M" for PbPb and "V0A" for pPb
Bool_t fkUseCleaning; // Boolean : kTRUE = uses all the cleaning criteria of centrality selections (vertex cut + outliers) otherwise only outliers
Float_t fVtxRange; // to select events with |zvtx|<fVtxRange cm
Float_t fMinPtCutOnDaughterTracks; // minimum pt cut on daughter tracks
//
// ------ Arguments
// -- icasType = 0) Xi- 1) Xi+ 2) Omega- 3) Omega+
-// -- collidingsystem = 0) PbPb 1) pp
+// -- collidingsystem = 0) PbPb 1) pp 2) pPb
// -- fileDir = "Input file directory"
// -- filein = "Input file name"
//
// ------ QATask output content
// The output produced by the QATask is a CFContainer with 4 steps and 21 variables.
// The meaning of each variable within the container are listed here:
-// -- 0 = Max DCA Cascade Daughters pp: 2.0 PbPb: 0.3
-// -- 1 = Min DCA Bach To PV pp: 0.01 PbPb: 0.03
-// -- 2 = Min Cascade Cosine Of PA pp: 0.98 PbPb: 0.999
-// -- 3 = Min Cascade Radius Fid. Vol. pp: 0.2 PbPb: 0.9
-// -- 4 = Window Invariant Mass Lambda pp: 0.008 PbPb: 0.0008
-// -- 5 = Max DCA V0 Daughters pp: 1.5 PbPb: 1.0
-// -- 6 = Min V0 Cosine Of PA To PV pp: pT dep. PbPb: 0.98
-// -- 7 = Min V0 Radius Fid. Vol. pp: 0.2 PbPb: 0.9
-// -- 8 = Min DCA V0 To PV pp: 0.01 PbPb: 0.05
-// -- 9 = Min DCA Pos To PV pp: 0.05 PbPb: 0.1
-// -- 10 = Min DCA Neg To PV pp: 0.05 PbPb: 0.1
+// -- 0 = Max DCA Cascade Daughters pp: 2.0 PbPb: 0.3 pPb: 2.0
+// -- 1 = Min DCA Bach To PV pp: 0.01 PbPb: 0.03 pPb: 0.03
+// -- 2 = Min Cascade Cosine Of PA pp: 0.98 PbPb: 0.999 pPb: 0.95
+// -- 3 = Min Cascade Radius Fid. Vol. pp: 0.2 PbPb: 0.9 pPb: 0.4
+// -- 4 = Window Invariant Mass Lambda pp: 0.008 PbPb: 0.0008 pPb: 0.010
+// -- 5 = Max DCA V0 Daughters pp: 1.5 PbPb: 1.0 pPb: 2.0
+// -- 6 = Min V0 Cosine Of PA To PV pp: pT dep. PbPb: 0.98 pPb: 0.95
+// -- 7 = Min V0 Radius Fid. Vol. pp: 0.2 PbPb: 0.9 pPb: 1.0
+// -- 8 = Min DCA V0 To PV pp: 0.01 PbPb: 0.05 pPb: 0.05
+// -- 9 = Min DCA Pos To PV pp: 0.05 PbPb: 0.1 pPb: 0.02
+// -- 10 = Min DCA Neg To PV pp: 0.05 PbPb: 0.1 pPb: 0.02
// -- 11 = Invariant Mass distribution for Xi
// -- 12 = Invariant Mass distribution for Omega
// -- 13 = Transverse Momentum distribution
//
// -- Third Canvas: InvMass, Transverse momentum, Cascade proper length, V0 proper length
//
-// In the end, only for thr PbPb collision the centrality distribution and the
-// track multiplicity distribution are sored.
-//
-// -- Fourth Canvas: Centrality, track multiplicity
+// -- Fourth Canvas: check on the invariant mass distribution
//
+// -- Fifth Canvas: Centrality, track multiplicity
+// (Only for PbPb collisions)
//
//////////////////////////////////////////////////////
class AliCFContainer;
-void PostProcessQAMultistrange(Int_t icasType = 0, // 0) Xi- 1) Xi+ 2) Omega- 3) Omega+
- Int_t collidingsystem = 0, // 0) PbPb 1) pp
- Char_t *fileDir = "./", // Input file directory
- Char_t *filein = "AnalysisResults_AOD.root" // Input file name
+void PostProcessQAMultistrange(Int_t icasType = 2, // 0) Xi- 1) Xi+ 2) Omega- 3) Omega+
+ Int_t collidingsystem = 1, // 0) PbPb 1) pp 2) pPb
+ Char_t *fileDir = ".", // Input file directory
+ Char_t *filein = "AnalysisResults.root" // Input file name
) {
- /////////////
- gStyle->SetOptStat(1110);
- gStyle->SetOptStat(kFALSE);
- gStyle->SetOptTitle(kFALSE);
- gStyle->SetFrameLineWidth(2.5);
- gStyle->SetCanvasColor(0);
- gStyle->SetPadColor(0);
- gStyle->SetHistLineWidth(2.5);
- gStyle->SetLabelSize(0.05, "x");
- gStyle->SetLabelSize(0.05, "y");
- gStyle->SetTitleSize(0.05, "x");
- gStyle->SetTitleSize(0.05, "y");
- gStyle->SetTitleOffset(1.1, "x");
- gStyle->SetPadBottomMargin(0.14);
- gSystem->Load("libANALYSIS.so");
- gSystem->Load("libANALYSISalice.so");
- gSystem->Load("libCORRFW.so");
+ //___________________
+ //DEFINE DRAW OPTIONS
+ gStyle->SetOptStat(1110);
+ gStyle->SetOptStat(kFALSE);
+ gStyle->SetOptTitle(kFALSE);
+ gStyle->SetFrameLineWidth(2.5);
+ gStyle->SetCanvasColor(0);
+ gStyle->SetPadColor(0);
+ gStyle->SetHistLineWidth(2.5);
+ gStyle->SetLabelSize(0.05, "x");
+ gStyle->SetLabelSize(0.05, "y");
+ gStyle->SetTitleSize(0.05, "x");
+ gStyle->SetTitleSize(0.05, "y");
+ gStyle->SetTitleOffset(1.1, "x");
+ gStyle->SetPadBottomMargin(0.14);
-
+ //_______________________
+ //SOURCE USEFUL LIBRARIES
+ gSystem->Load("libANALYSIS.so");
+ gSystem->Load("libANALYSISalice.so");
+ gSystem->Load("libCORRFW.so");
+ //_________________________________
+ //SOURCE THE FILE AND THE CONTAINER
TFile *f1 = new TFile(Form("%s/%s",fileDir,filein));
AliCFContainer *cf = (AliCFContainer*) (f1->Get("PWGLFStrangeness.outputCheckCascade/fCFContCascadeCuts"));
-
+ //____________
//DEEFINE TEXT
TLatex* t1 = new TLatex(0.6,0.55,"#color[3]{OK!!}");
t1->SetTextSize(0.1);
tpdgmass->SetTextSize(0.07);
tpdgmass->SetNDC();
tpdgmass->SetTextColor(2);
-
+
+ //________________________________
//DEFINE 1st CANVAS AND DRAW PLOTS
TCanvas *c1 = new TCanvas("c1","",1200,800);
c1->Divide(2,3);
Double_t x0;
if (collidingsystem == 0) x0 = 0.3;
else if (collidingsystem == 1) x0 = 2.0;
+ else if (collidingsystem == 2) x0 = 2.0;
TLine *line0 = new TLine(x0,0.,x0,hvar0->GetBinContent(hvar0->GetMaximumBin()));
line0->SetLineColor(kRed);
line0->SetLineStyle(9);
Double_t x1;
if (collidingsystem == 0) x1 = 0.03;
else if (collidingsystem == 1) x1 = 0.01;
+ else if (collidingsystem == 2) x1 = 0.03;
TLine *line1 = new TLine(x1,0.,x1,hvar1->GetBinContent(hvar1->GetMaximumBin()));
line1->SetLineColor(kRed);
line1->SetLineStyle(9);
Double_t x2;
if (collidingsystem == 0) x2 = 0.999;
else if (collidingsystem == 1) x2 = 0.98;
+ else if (collidingsystem == 2) x2 = 0.95;
TLine *line2 = new TLine(x2,0.,x2,hvar2->GetBinContent(hvar2->GetMaximumBin()));
line2->SetLineColor(kRed);
line2->SetLineStyle(9);
Double_t x3;
if (collidingsystem == 0) x3 = 0.9;
else if (collidingsystem == 1) x3 = 0.2;
+ else if (collidingsystem == 2) x3 = 0.4;
TLine *line3 = new TLine(x3,0.,x3,hvar3->GetBinContent(hvar3->GetMaximumBin()));
line3->SetLineColor(kRed);
line3->SetLineStyle(9);
line41->SetLineStyle(9);
line41->SetLineWidth(2.0);
line41->Draw("same");
- Double_t x42 = 1.115 - 0.008;
+ Double_t x42;
+ if (collidingsystem < 2) x42 = 1.115 - 0.008;
+ else if (collidingsystem == 2) x42 = 1.115 - 0.010;
TLine *line42 = new TLine(x42,0.,x42,hvar4->GetBinContent(hvar4->GetMaximumBin()));
line42->SetLineColor(kRed);
line42->SetLineStyle(9);
Double_t x5;
if (collidingsystem == 0) x5 = 1.0;
else if (collidingsystem == 1) x5 = 1.5;
+ else if (collidingsystem == 2) x5 = 2.0;
TLine *line5 = new TLine(x5,0.,x5,hvar5->GetBinContent(hvar5->GetMaximumBin()));
line5->SetLineColor(kRed);
line5->SetLineStyle(9);
else { cout<<"The cut is NOT OK!!"<<endl; t2->Draw(); }
c1->SaveAs("fig_lf_Multistrange.pdf(");
-
- //DEFINE 2st CANVAS AND DRAW PLOTS
+ //________________________________
+ //DEFINE 2nd CANVAS AND DRAW PLOTS
TCanvas *c2 = new TCanvas("c2","",1200,800);
c2->Divide(2,3);
//Pad 1: V0 cosine of Pointing Angle to PV
Double_t x7;
if (collidingsystem == 0) x7 = 0.9;
else if (collidingsystem == 1) x7 = 0.2;
+ else if (collidingsystem == 2) x7 = 0.4;
TLine *line7 = new TLine(x7,0.,x7,hvar7->GetBinContent(hvar7->GetMaximumBin()));
line7->SetLineColor(kRed);
line7->SetLineStyle(9);
Double_t x8;
if (collidingsystem == 0) x8 = 0.05;
else if (collidingsystem == 1) x8 = 0.01;
+ else if (collidingsystem == 2) x8 = 0.05;
TLine *line8 = new TLine(x8,0.,x8,hvar8->GetBinContent(hvar8->GetMaximumBin()));
line8->SetLineColor(kRed);
line8->SetLineStyle(9);
Double_t x9;
if (collidingsystem == 0) x9 = 0.1;
else if (collidingsystem == 1) x9 = 0.05;
+ else if (collidingsystem == 2) x9 = 0.02;
TLine *line9 = new TLine(x9,0.,x9,hvar9->GetBinContent(hvar9->GetMaximumBin()));
line9->SetLineColor(kRed);
line9->SetLineStyle(9);
Double_t x10;
if (collidingsystem == 0) x10 = 0.1;
else if (collidingsystem == 1) x10 = 0.05;
+ else if (collidingsystem == 2) x10 = 0.02;
TLine *line10 = new TLine(x10,0.,x10,hvar10->GetBinContent(hvar10->GetMaximumBin()));
line10->SetLineColor(kRed);
line10->SetLineStyle(9);
Bool_t check_10 = checkUnderTheLimit(hvar10, x10);
if (check_10) { cout<<"The cut is OK!!"<<endl; t1->Draw(); }
else { cout<<"The cut is NOT OK!!"<<endl; t2->Draw(); }
- //Pad 6: V0 cosine of Pointing Angle to XiV
+ //Pad 6: V0 cosine of Pointing Angle to Xi vtx
c2->cd(6);
gPad->SetLogy();
TH1D *hvar20 = cf->ShowProjection(18,icasType);
hvar20->Draw("histo");
c2->SaveAs("fig_lf_Multistrange.pdf");
- //DEFINE 3st CANVAS AND DRAW PLOTS
+ //________________________________
+ //DEFINE 3rd CANVAS AND DRAW PLOTS
TCanvas *c3 = new TCanvas("c3","",1200,800);
c3->Divide(2,3);
//Pad 1: InvMass
hvar19 = cf->ShowProjection(17,icasType);
hvar19->GetXaxis()->SetRangeUser(0.,90.);
hvar19->Draw("histo");
- //Pad 6
- // empty
+ //Pad 6
+ // empty
c3->SaveAs("fig_lf_Multistrange.pdf");
-
- //DEFINE 4st CANVAS AND DRAW PLOTS
- TCanvas *c4 = new TCanvas("c4","",600,400);
- c4->Divide(2,1);
- //Pad1: invariant mass fit
- c4->cd(1);
- TH1D *hvar18 = cf->ShowProjection(11+icasType/2,icasType);
- hvar18->Draw("histo");
- // - SOME PARAMETER VALUE
- Bool_t kfitgauss = kFALSE;
- Bool_t kfitleft = kFALSE;
- Bool_t kfitright = kFALSE;
- Int_t ptbinNarrowY = 0;
- if (icasType < 2) ptbinNarrowY = 10; // 6;
- else ptbinNarrowY = 3; // 2;
- // - SOME DEFINITIONS
- Float_t lowlimmass;
- Float_t uplimmass;
- Float_t lowgausslim;
- Float_t upgausslim;
- if (icasType==0||icasType==1) {
- lowlimmass=1.30;
- uplimmass=1.34;
- lowgausslim=1.312;
- upgausslim=1.332;
- } else {
- lowlimmass=1.645;
- uplimmass=1.70;
- lowgausslim=1.668;
- upgausslim=1.678;
- }
- TF1* fitinvmass = new TF1("fitinvmass","gaus(0)+pol2(3)",lowlimmass,uplimmass);
- fitinvmass->SetParName(0, "cnstntG");
- fitinvmass->SetParName(1, "meanG");
- fitinvmass->SetParName(2, "sigmaG");
- fitinvmass->SetParLimits(0,0.,500000.);
- if (icasType==0||icasType==1) {
- fitinvmass->SetParameter(1, 1.32171);
- fitinvmass->SetParLimits(1, 1.31,1.33);
- fitinvmass->SetParLimits(2,0.001,0.005);
- } else {
- fitinvmass->SetParameter(1, 1.67245);
- fitinvmass->SetParLimits(1, 1.664,1.68);
- fitinvmass->SetParLimits(2,0.0008,0.006);
- }
- hvar18->Fit("fitinvmass","rimeN");
- fitinvmass->SetLineColor(kRed);
- fitinvmass->Draw("same");
- Float_t meanGauss = fitinvmass->GetParameter(1);
- Float_t sigmaGauss = fitinvmass->GetParameter(2);
+ //________________________________
+ //DEFINE 4th CANVAS AND DRAW PLOTS
+ TCanvas *c4 = new TCanvas("c4","",600,400);
+ c4->Divide(2,1);
+ //Pad1: invariant mass fit
+ c4->cd(1);
+ TH1D *hvar18 = cf->ShowProjection(11+icasType/2,icasType);
+ hvar18->Draw("histo");
+ // - SOME PARAMETER VALUE
+ Bool_t kfitgauss = kFALSE;
+ Bool_t kfitleft = kFALSE;
+ Bool_t kfitright = kFALSE;
+ Int_t ptbinNarrowY = 0;
+ if (icasType < 2) ptbinNarrowY = 10; // 6;
+ else ptbinNarrowY = 3; // 2;
+ // - SOME DEFINITIONS
+ Float_t lowlimmass;
+ Float_t uplimmass;
+ Float_t lowgausslim;
+ Float_t upgausslim;
+ if (icasType==0||icasType==1) {
+ lowlimmass=1.30;
+ uplimmass=1.34;
+ lowgausslim=1.312;
+ upgausslim=1.332;
+ } else {
+ lowlimmass=1.645;
+ uplimmass=1.70;
+ lowgausslim=1.668;
+ upgausslim=1.678;
+ }
+ TF1* fitinvmass = new TF1("fitinvmass","gaus(0)+pol2(3)",lowlimmass,uplimmass);
+ fitinvmass->SetParName(0, "cnstntG");
+ fitinvmass->SetParName(1, "meanG");
+ fitinvmass->SetParName(2, "sigmaG");
+ fitinvmass->SetParLimits(0,0.,500000.);
+ if (icasType==0||icasType==1) {
+ fitinvmass->SetParameter(1, 1.32171);
+ fitinvmass->SetParLimits(1, 1.31,1.33);
+ fitinvmass->SetParLimits(2,0.001,0.005);
+ } else {
+ fitinvmass->SetParameter(1, 1.67245);
+ fitinvmass->SetParLimits(1, 1.664,1.68);
+ fitinvmass->SetParLimits(2,0.0008,0.006);
+ }
+ hvar18->Fit("fitinvmass","rimeN");
+ fitinvmass->SetLineColor(kRed);
+ fitinvmass->Draw("same");
+ Float_t meanGauss = fitinvmass->GetParameter(1);
+ Float_t sigmaGauss = fitinvmass->GetParameter(2);
cout<<"Mean: "<<meanGauss<<endl;
cout<<"Sigma: "<<sigmaGauss<<endl;
- //Pad2: Text
- c4->cd(2);
+ //Pad2: Text
+ c4->cd(2);
Float_t refwidth = 0.002;
- TPaveText *pave1 = new TPaveText(0.05,0.3,0.95,0.5);
- pave1->SetFillColor(0);
- pave1->SetTextSize(0.04);
- pave1->SetTextAlign(12);
- if (icasType < 2) pave1->AddText("PDG mass: 1.32171 GeV/c^{2}");
- else pave1->AddText("PDG mass: 1.67245 GeV/c^{2}");
- pave1->AddText(Form("#color[1]{Mass form Fit: %.5f #pm %.5f GeV/c^{2}}",meanGauss,sigmaGauss));
- if (sigmaGauss > refwidth - 0.0003 && sigmaGauss < refwidth + 0.0003) pave1->AddText("#color[3]{OK!! The width is compatible with standard.}");
- else pave1->AddText("#color[2]{NOT OK!! Problem.}");
- pave1->Draw();
- cout<<" "<<refwidth - 0.0003<<"<"<<sigmaGauss<<"<"<<refwidth + 0.0003<<endl;
- c4->SaveAs("fig_lf_Multistrange.pdf");
-
- //DEFINE 5st CANVAS AND DRAW PLOTS
+ if (icasType > 1) refwidth = 0.0025;
+ TPaveText *pave1 = new TPaveText(0.05,0.3,0.95,0.5);
+ pave1->SetFillColor(0);
+ pave1->SetTextSize(0.04);
+ pave1->SetTextAlign(12);
+ if (icasType < 2) pave1->AddText("PDG mass: 1.32171 GeV/c^{2}");
+ else pave1->AddText("PDG mass: 1.67245 GeV/c^{2}");
+ pave1->AddText(Form("#color[1]{Mass form Fit: %.5f #pm %.5f GeV/c^{2}}",meanGauss,sigmaGauss));
+ if (sigmaGauss > refwidth - 0.0003 && sigmaGauss < refwidth + 0.0003) pave1->AddText("#color[3]{OK!! The width is compatible with standard.}");
+ else pave1->AddText("#color[2]{NOT OK!! Problem.}");
+ pave1->Draw();
+ cout<<" "<<refwidth - 0.0003<<"<"<<sigmaGauss<<"<"<<refwidth + 0.0003<<endl;
+ c4->SaveAs("fig_lf_Multistrange.pdf");
+
+ //________________________________
+ //DEFINE 5th CANVAS AND DRAW PLOTS
if (collidingsystem == 0) {
TCanvas *c5 = new TCanvas("c5","",1200,270);
c5->Divide(2,1);
- //Pad 1: centrality
- c5->cd(1);
- TH1D *hvar16 = cf->ShowProjection(19,icasType);
- hvar16->Draw("histo");
- //Pad 2: track multiplicity
- c5->cd(2);
- TH1D *hvar17 = cf->ShowProjection(20,icasType);
- hvar17->Draw("histo");
+ //Pad 1: centrality
+ c5->cd(1);
+ TH1D *hvar16 = cf->ShowProjection(19,icasType);
+ hvar16->Draw("histo");
+ //Pad 2: track multiplicity
+ c5->cd(2);
+ TH1D *hvar17 = cf->ShowProjection(20,icasType);
+ hvar17->Draw("histo");
c5->SaveAs("fig_lf_Multistrange.pdf)");
}
-
+//______________________
Bool_t checkUnderTheLimit(TH1D *lHist, Double_t limit) {
Int_t binlimit = lHist->FindBin(limit);
}
-
+//______________________
Bool_t checkOverTheLimit(TH1D *lHist, Double_t limit) {
Int_t binlimit = lHist->FindBin(limit);
Int_t nmix = 5,
Double_t minYlab = -0.5,
Double_t maxYlab = 0.5,
+ Float_t mineta = -0.8,
+ Float_t maxeta = 0.8,
+ Float_t min_inv_mass = 0.6,
+ Float_t max_inv_mass = 2.2,
+ Int_t bins = 320,
Double_t dcaProduct = -1E-4,
Float_t maxDiffVzMix = 1.0,
Float_t maxDiffMultMix = 10.0,
}
// create the task and configure
- TString taskName = Form("D0%s%s_%.1f_%d_%.1f_%.1f_%.1f_%.1f_%.1f_%.4f_%.1f_%.5f_%.2f_%s", (isPP? "pp" : ispPb? "pPB": "PbPb"), (isMC ? "MC" : "Data"), cutV, NTPCcluster, nsigmaTPCPi, nsigmaTPCKa, nsigmaTOFPi, nsigmaTOFKa, trackDCAcutMax, trackDCAcutMin, trackDCAZcutMax, dcaProduct, minpt, eventType.Data());
+ TString taskName = Form("D0%s%s_%.1f_%d_%.1f_%.1f_%.1f_%.1f_%.1f_%.4f_%.1f_%.5f_%.2f_%d_%s", (isPP? "pp" : ispPb? "pPB": "PbPb"), (isMC ? "MC" : "Data"), cutV, NTPCcluster, nsigmaTPCPi, nsigmaTPCKa, nsigmaTOFPi, nsigmaTOFKa, trackDCAcutMax, trackDCAcutMin, trackDCAZcutMax, dcaProduct, minpt, originDselection, eventType.Data());
AliRsnMiniAnalysisTask *task = new AliRsnMiniAnalysisTask(taskName.Data(), isMC);
if (!isMC && !isPP){
Printf(Form("========== SETTING USE CENTRALITY PATCH AOD049 : %s", (aodN==49)? "yes" : "no"));
Printf("========================== MC analysis - PID cuts used");
} else
Printf("========================== DATA analysis - PID cuts used");
- if (!ConfigD0(task, isPP, isMC, nsigmaTPCPi, nsigmaTPCKa, nsigmaTOFPi, nsigmaTOFKa, aodFilterBit, trackDCAcutMax, trackDCAcutMin, trackDCAZcutMax, NTPCcluster, minpt, maxSisters, checkP, minDCAcutFixed, maxDCAcutFixed, ptdepPIDcut, checkFeedDown, checkQuark, originDselection, "", cutsPairY, cutsPair)) return 0x0;
+ if (!ConfigD0(task, isPP, isMC, nsigmaTPCPi, nsigmaTPCKa, nsigmaTOFPi, nsigmaTOFKa, aodFilterBit, trackDCAcutMax, trackDCAcutMin, trackDCAZcutMax, NTPCcluster, minpt, maxSisters, checkP, minDCAcutFixed, maxDCAcutFixed, ptdepPIDcut, checkFeedDown, checkQuark, originDselection, mineta, maxeta, min_inv_mass, max_inv_mass, bins, "", cutsPairY, cutsPair)) return 0x0;
//
// -- CONTAINERS --------------------------------------------------------------------------------
TString outputFileName = AliAnalysisManager::GetCommonFileName();
Printf("AddAnalysisTaskD0 - Set OutputFileName : \n %s\n", outputFileName.Data() );
- AliAnalysisDataContainer *output = mgr->CreateContainer(Form("%s_%.1f_%d_%.1f_%.1f_%.1f_%.1f_%.1f_%.4f_%.1f_%.5f_%.2f_%s",outNameSuffix.Data(),cutV,NTPCcluster,nsigmaTPCPi,nsigmaTPCKa,nsigmaTOFPi,nsigmaTOFKa,trackDCAcutMax,trackDCAcutMin,trackDCAZcutMax,dcaProduct,minpt,eventType.Data()),
+ AliAnalysisDataContainer *output = mgr->CreateContainer(Form("%s_%.1f_%d_%.1f_%.1f_%.1f_%.1f_%.1f_%.4f_%.1f_%.5f_%.2f_%d_%s",outNameSuffix.Data(),cutV,NTPCcluster,nsigmaTPCPi,nsigmaTPCKa,nsigmaTOFPi,nsigmaTOFKa,trackDCAcutMax,trackDCAcutMin,trackDCAZcutMax,dcaProduct,minpt,originDselection,eventType.Data()),
TList::Class(),
AliAnalysisManager::kOutputContainer,
outputFileName);
Int_t pairCutSetID = 0,
Int_t mixingConfigID = 0,
Int_t aodFilterBit = 5,
- Int_t piPIDCut = 3.0,
- Int_t pPIDCut = 3.0,
+ Float_t piPIDCut = 3.0,
+ Float_t pPIDCut = 3.0,
Float_t trackDCAcut = 7.0,
Float_t massTol = 0.01,
Float_t lambdaDCA = 0.3,
else if(collSyst==kPPb) collSystName="pPb";
else collSystName="PbPb";
- TString taskName = Form("SigmaStar%s%s_%.1f_%d_%.1f_%.1f_%.2f_%.2f_%.1f_%.2f_%.1f",
+ TString taskName = Form("SigmaStar%s%s_%.1f_%d_%.1f_%.1f_%.2f_%.4f_%.2f_%.2f_%.1f",
collSystName.Data(), (isMC ? "MC" : "Data"),cutV,NTPCcluster,piPIDCut,pPIDCut,trackDCAcut,massTol,lambdaDCA,lambdaCosPoinAn,lambdaDaughDCA);
AliRsnMiniAnalysisTask *task = new AliRsnMiniAnalysisTask(taskName.Data(), isMC);
// outputFileName += ":Rsn";
Printf("AddTaskSigmaStar - Set OutputFileName : \n %s\n", outputFileName.Data() );
- AliAnalysisDataContainer *output = mgr->CreateContainer(Form("RsnOut_%s_%.1f_%d_%.1f_%.1f_%.2f_%.2f_%.1f_%.2f_%.1f",outNameSuffix.Data(),cutV,NTPCcluster,piPIDCut,pPIDCut,trackDCAcut,massTol,lambdaDCA,lambdaCosPoinAn,lambdaDaughDCA),
+
+ AliAnalysisDataContainer *output = mgr->CreateContainer(Form("RsnOut_%s_%.1f_%d_%.1f_%.1f_%.2f_%.4f_%.2f_%.2f_%.1f",
+ outNameSuffix.Data(),cutV,NTPCcluster,piPIDCut,pPIDCut,
+ trackDCAcut,massTol,lambdaDCA,lambdaCosPoinAn,lambdaDaughDCA),
TList::Class(),
AliAnalysisManager::kOutputContainer,
outputFileName);
+
mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
mgr->ConnectOutput(task, 1, output);
-//
+/
// *** Configuration script for phi->KK analysis with 2010 runs ***
//
// A configuration script for RSN package needs to define the followings:
Bool_t checkFeedDown = kTRUE,
Bool_t checkQuark = kTRUE,
UShort_t originDselection = 0,
+ Float_t mineta = -0.8,
+ Float_t maxeta = 0.8,
+ Float_t min_inv_mass = 0.6,
+ Float_t max_inv_mass = 2.2,
+ Int_t bins = 320,
const char *suffix,
AliRsnCutSet *cutsPairY,
AliRsnCutSet *cutsPair
else cutQuality->SetDCARPtFormulaMin(formulaMin);
cutQuality->SetTPCminNClusters(NTPCcluster);
cutQuality->SetPtRange(minpt,1E20);
- cutQuality->SetEtaRange(-0.8, 0.8);
+ cutQuality->SetEtaRange(mineta, maxeta);
cutQuality->SetDCAZmax(trackDCAZcutMax);
cutQuality->SetSPDminNClusters(1);
cutQuality->SetITSminNClusters(0);
else cutQuality->SetDCARPtFormulaMin(formulaMin);
cutQuality->SetTPCminNClusters(NTPCcluster);
cutQuality->SetPtRange(minpt,1E20);
- cutQuality->SetEtaRange(-0.8, 0.8);
+ cutQuality->SetEtaRange(mineta, maxeta);
cutQuality->SetDCAZmax(trackDCAZcutMax);
cutQuality->SetSPDminNClusters(1);
cutQuality->SetITSminNClusters(0);
// axis X: invmass (or resolution)
//if (useIM[i])
- out->AddAxis(imID, 320, 0.6, 2.2);
+ out->AddAxis(imID, bins, min_inv_mass, max_inv_mass);
//else
// out->AddAxis(resID, 200, -0.02, 0.02);
// axis Y: transverse momentum
out->SetRejectCandidateIfNotFromQuark(checkQuark);
out->SetDselection(originDselection);
// binnings
- out->AddAxis(imID, 320, 0.6, 2.2);
+ out->AddAxis(imID, bins, min_inv_mass, max_inv_mass);
out->AddAxis(ptID, 200, 0.0, 20.0);
//out->AddAxis(yID, 100, -1, 1);
//out->AddAxis(dcapID, 100, -0.001, 0.001);
out->SetRejectCandidateIfNotFromQuark(checkQuark);
out->SetDselection(originDselection);
// binnings
- out->AddAxis(imID, 320, 0.6, 2.2);
+ out->AddAxis(imID, bins, min_inv_mass, max_inv_mass);
out->AddAxis(ptID, 200, 0.0, 20.0);
//out->AddAxis(yID, 100, -1, 1);
//out->AddAxis(dcapID, 100, -0.001, 0.001);
// pair cuts
out->SetPairCuts(cutsPairY);
// binnings
- out->AddAxis(imID, 320, 0.6, 2.2);
+ out->AddAxis(imID, bins, min_inv_mass, max_inv_mass);
out->AddAxis(ptID, 200, 0.0, 20.0);
//out->AddAxis(yID, 100, -1, 1);
// pair cuts
out->SetPairCuts(cutsPairY);
// binnings
- out->AddAxis(imID, 320, 0.6, 2.2);
+ out->AddAxis(imID, bins, min_inv_mass, max_inv_mass);
out->AddAxis(ptID, 200, 0.0, 20.0);
//out->AddAxis(yID, 100, -1, 1);
// PionEta
AliRsnValueDaughter *axisPionEta = new AliRsnValueDaughter("pion_eta", AliRsnValueDaughter::kEta);
- axisPionEta->SetBins(-1.0,1.0,0.001);
+ axisPionEta->SetBins(-1.0,1.0,0.01);
// output: 2D histogram
AliRsnListOutput *outMonitorPionEta = new AliRsnListOutput("Pion_Eta", AliRsnListOutput::kHistoDefault);
// PionY
AliRsnValueDaughter *axisPionY = new AliRsnValueDaughter("pion_y", AliRsnValueDaughter::kY);
- axisPionY->SetBins(-1.0,1.0,0.001);
+ axisPionY->SetBins(-1.0,1.0,0.01);
// output: 2D histogram
AliRsnListOutput *outMonitorPionY = new AliRsnListOutput("Pion_Y", AliRsnListOutput::kHistoDefault);
// PionMinPt
AliRsnValueDaughter *axisPionMinPt = new AliRsnValueDaughter("pion_minpt", AliRsnValueDaughter::kPt);
- axisPionMinPt->SetBins(0.0,1,0.001);
+ axisPionMinPt->SetBins(0.0,1,0.01);
// output: 2D histogram
AliRsnListOutput *outMonitorPionMinPt = new AliRsnListOutput("Pion_MinPt", AliRsnListOutput::kHistoDefault);
// PionDCA
AliRsnValueDaughter *axisPionDCA = new AliRsnValueDaughter("pion_dca", AliRsnValueDaughter::kDCAXY);
- axisPionDCA->SetBins(-1.0,1,0.001);
+ axisPionDCA->SetBins(-1.0,1,0.01);
// output: 2D histogram
AliRsnListOutput *outMonitorPionDCA = new AliRsnListOutput("Pion_DCA", AliRsnListOutput::kHistoDefault);
// Pion PID Cut
AliRsnValueDaughter *axisPionTPCPIDCut = new AliRsnValueDaughter("pionTPCPID", AliRsnValueDaughter::kTPCnsigmaPi);
- axisPionTPCPIDCut->SetBins(0.0,5,0.01);
+ axisPionTPCPIDCut->SetBins(0.0,5,0.1);
// output: 2D histogram
AliRsnListOutput *outMonitorPionTPCPIDCut = new AliRsnListOutput("Pion_TPC_PID_Cut", AliRsnListOutput::kHistoDefault);
// Pion PID Cut
AliRsnValueDaughter *axisPionTOFPIDCut = new AliRsnValueDaughter("pionTOFPID", AliRsnValueDaughter::kTOFnsigmaPi);
- axisPionTOFPIDCut->SetBins(0.0,5,0.01);
+ axisPionTOFPIDCut->SetBins(0.0,5,0.1);
// output: 2D histogram
AliRsnListOutput *outMonitorPionTOFPIDCut = new AliRsnListOutput("Pion_TOF_PID_Cut", AliRsnListOutput::kHistoDefault);
// KaonEta
AliRsnValueDaughter *axisKaonEta = new AliRsnValueDaughter("kaon_eta", AliRsnValueDaughter::kEta);
- axisKaonEta->SetBins(-1.0,1.0,0.001);
+ axisKaonEta->SetBins(-1.0,1.0,0.01);
// output: 2D histogram
AliRsnListOutput *outMonitorKaonEta = new AliRsnListOutput("Kaon_Eta", AliRsnListOutput::kHistoDefault);
// KaonY
AliRsnValueDaughter *axisKaonY = new AliRsnValueDaughter("kaon_y", AliRsnValueDaughter::kY);
- axisKaonY->SetBins(-1.0,1.0,0.001);
+ axisKaonY->SetBins(-1.0,1.0,0.01);
// output: 2D histogram
AliRsnListOutput *outMonitorKaonY = new AliRsnListOutput("Kaon_Y", AliRsnListOutput::kHistoDefault);
// KaonMinPt
AliRsnValueDaughter *axisKaonMinPt = new AliRsnValueDaughter("kaon_minpt", AliRsnValueDaughter::kPt);
- axisKaonMinPt->SetBins(0.0,1,0.001);
+ axisKaonMinPt->SetBins(0.0,1,0.01);
// output: 2D histogram
AliRsnListOutput *outMonitorKaonMinPt = new AliRsnListOutput("Kaon_MinPt", AliRsnListOutput::kHistoDefault);
// KaonDCA
AliRsnValueDaughter *axisKaonDCA = new AliRsnValueDaughter("kaon_dca", AliRsnValueDaughter::kDCAXY);
- axisKaonDCA->SetBins(-1.0,1,0.001);
+ axisKaonDCA->SetBins(-1.0,1,0.01);
// output: 2D histogram
AliRsnListOutput *outMonitorKaonDCA = new AliRsnListOutput("Kaon_DCA", AliRsnListOutput::kHistoDefault);
// Kaon TPC PID Cut
AliRsnValueDaughter *axisKaonTPCPIDCut = new AliRsnValueDaughter("kaonTPCPID", AliRsnValueDaughter::kTPCnsigmaK);
- axisKaonTPCPIDCut->SetBins(0.0,5,0.01);
+ axisKaonTPCPIDCut->SetBins(0.0,5,0.1);
// output: 2D histogram
AliRsnListOutput *outMonitorKaonTPCPIDCut = new AliRsnListOutput("Kaon_TPC_PID_Cut", AliRsnListOutput::kHistoDefault);
// Kaon TOF PID Cut
AliRsnValueDaughter *axisKaonTOFPIDCut = new AliRsnValueDaughter("kaonTOFPID", AliRsnValueDaughter::kTOFnsigmaK);
- axisKaonTOFPIDCut->SetBins(0.0,5,0.01);
+ axisKaonTOFPIDCut->SetBins(0.0,5,0.1);
// output: 2D histogram
AliRsnListOutput *outMonitorKaonTOFPIDCut = new AliRsnListOutput("Kaon_TOF_PID_Cut", AliRsnListOutput::kHistoDefault);
trkQualityCut->SetAODTestFilterBit(customFilterBit);
//apply all other cuts "by hand"
trkQualityCut->SetCheckOnlyFilterBit(kFALSE);
- trkQualityCut->SetMinNCrossedRowsTPC(70);
- trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.8);
+ trkQualityCut->SetMinNCrossedRowsTPC(70, kTRUE);
+ trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.8, kTRUE);
trkQualityCut->SetMaxChi2TPCConstrainedGlobal(36);//used for ESD only - for AOD does not correspond to any cut
trkQualityCut->SetTPCmaxChi2(4.0); //already in filter bit 0
trkQualityCut->SetRejectKinkDaughters(kTRUE); //already in filter bit 0
}
if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdCrossedRows60){
- trkQualityCut->SetMinNCrossedRowsTPC(60);
+ trkQualityCut->SetMinNCrossedRowsTPC(60, kTRUE);
}
if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdCrossedRows80){
- trkQualityCut->SetMinNCrossedRowsTPC(80);
+ trkQualityCut->SetMinNCrossedRowsTPC(80, kTRUE);
}
if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdRowsToCls075){
- trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.75);
+ trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.75, kTRUE);
}
if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdRowsToCls085){
- trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.85);
+ trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.85, kTRUE);
}
if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdCls70){
/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * *
- * Author: The ALICE Off-line Project. *
- * Contributors are mentioned in the code where appropriate. *
- * *
- * Permission to use, copy, modify and distribute this software and its *
- * documentation strictly for non-commercial purposes is hereby granted *
- * without fee, provided that the above copyright notice appears in all *
- * copies and that both the copyright notice and this permission notice *
- * appear in the supporting documentation. The authors make no claims *
- * about the suitability of this software for any purpose. It is *
- * provided "as is" without express or implied warranty. *
- **************************************************************************/
+* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+* *
+* Author: The ALICE Off-line Project. *
+* Contributors are mentioned in the code where appropriate. *
+* *
+* Permission to use, copy, modify and distribute this software and its *
+* documentation strictly for non-commercial purposes is hereby granted *
+* without fee, provided that the above copyright notice appears in all *
+* copies and that both the copyright notice and this permission notice *
+* appear in the supporting documentation. The authors make no claims *
+* about the suitability of this software for any purpose. It is *
+* provided "as is" without express or implied warranty. *
+**************************************************************************/
//------------------------------------------------------------------------------
// AlidNdPtAnalysisPbPbAOD class.
//
// Author: P. Luettig, 15.05.2013
-// last modified: 18.02.2014
+// last modified: 10.06.2014
//------------------------------------------------------------------------------
/*
- * This task analysis measured data in PbPb collisions stored in AODs and extract
- * transverse momentum spectra for unidentified charged hadrons vs. centrality.
- * Based on MC the efficiency and secondary contamination are determined,
- * to correct the measured pT distribution.
- * Histograms for the pT resolution correction are also filled.
- *
- */
+* This task analysis measured data in PbPb collisions stored in AODs and extract
+* transverse momentum spectra for unidentified charged hadrons vs. centrality.
+* Based on MC the efficiency and secondary contamination are determined,
+* to correct the measured pT distribution.
+* Histograms for the pT resolution correction are also filled.
+*
+*/
#include "AlidNdPtAnalysisPbPbAOD.h"
fEventplaneDist(0),
fMCEventplaneDist(0),
fCorrelEventplaneMCDATA(0),
+// cross check for event plane resolution
+fEPDistCent(0),
+fPhiCent(0),
+fPcosEPCent(0),
+fPsinEPCent(0),
+fPcosPhiCent(0),
+fPsinPhiCent(0),
//global
fIsMonteCarlo(0),
fEPselector("Q"),
if (!fBinsPtCheck) { SetBinsPtCheck(20,binsPtCheckDefault); }
if (!fBinsEta) { SetBinsEta(31,binsEtaDefault); }
if (!fBinsEtaCheck) { SetBinsEtaCheck(7,binsEtaCheckDefault); }
- if (!fBinsZv) { SetBinsZv(13,binsZvDefault); }
+ if (!fBinsZv) { SetBinsZv(7,binsZvDefault); }
if (!fBinsCentrality) { SetBinsCentrality(12,binsCentralityDefault); }
if (!fBinsPhi) { SetBinsPhi(37,binsPhiDefault); }
fCorrelEventplaneMCDATA->GetYaxis()->SetTitle("#phi (MC event plane)");
fCorrelEventplaneMCDATA->Sumw2();
+ // cross check for event plane resolution
+ fEPDistCent = new TH2F("fEPDistCent","fEPDistCent",20, -1.*TMath::Pi(), TMath::Pi(), fCentralityNbins-1, fBinsCentrality);
+ fEPDistCent->GetXaxis()->SetTitle("#phi (#Psi_{EP})");
+ fEPDistCent->GetYaxis()->SetTitle("Centrality");
+ fEPDistCent->Sumw2();
+
+ fPhiCent = new TH2F("fPhiCent","fPhiCent",200, -2.*TMath::Pi(), 2.*TMath::Pi(), fCentralityNbins-1, fBinsCentrality);
+ fPhiCent->GetXaxis()->SetTitle("#phi");
+ fPhiCent->GetYaxis()->SetTitle("Centrality");
+ fPhiCent->Sumw2();
+
+ fPcosEPCent = new TProfile("fPcosEPCent","fPcosEPCent", fCentralityNbins-1, fBinsCentrality);
+ fPcosEPCent->GetXaxis()->SetTitle("Centrality");
+ fPcosEPCent->GetYaxis()->SetTitle("#LT cos 2 #Psi_{EP} #GT");
+ fPcosEPCent->Sumw2();
+
+ fPsinEPCent = new TProfile("fPsinEPCent","fPsinEPCent", fCentralityNbins-1, fBinsCentrality);
+ fPsinEPCent->GetXaxis()->SetTitle("Centrality");
+ fPsinEPCent->GetYaxis()->SetTitle("#LT sin 2 #Psi_{EP} #GT");
+ fPsinEPCent->Sumw2();
+
+ fPcosPhiCent = new TProfile("fPcosPhiCent","fPcosPhiCent", fCentralityNbins-1, fBinsCentrality);
+ fPcosPhiCent->GetXaxis()->SetTitle("Centrality");
+ fPcosPhiCent->GetYaxis()->SetTitle("#LT cos 2 #phi #GT");
+ fPcosPhiCent->Sumw2();
+
+ fPsinPhiCent = new TProfile("fPsinPhiCent","fPsinPhiCent", fCentralityNbins-1, fBinsCentrality);
+ fPsinPhiCent->GetXaxis()->SetTitle("Centrality");
+ fPsinPhiCent->GetYaxis()->SetTitle("#LT sin 2 #phi #GT");
+ fPsinPhiCent->Sumw2();
+
// Add Histos, Profiles etc to List
fOutputList->Add(fZvPtEtaCent);
fOutputList->Add(fDeltaphiPtEtaCent);
fOutputList->Add(fMCEventplaneDist);
fOutputList->Add(fCorrelEventplaneMCDATA);
+ fOutputList->Add(fEPDistCent);
+ fOutputList->Add(fPhiCent);
+ fOutputList->Add(fPcosEPCent);
+ fOutputList->Add(fPsinEPCent);
+ fOutputList->Add(fPcosPhiCent);
+ fOutputList->Add(fPsinPhiCent);
+
StoreCutSettingsToHistogram();
PostData(1, fOutputList);
// only take tracks of events, which are triggered
if(nTriggerFired == 0) { return; }
+
// if( !bIsEventSelected || nTriggerFired>1 ) return;
// fEventStatistics->Fill("events with only coll. cand.", 1);
Double_t dCentrality = aCentrality->GetCentralityPercentile("V0M");
if( dCentrality < 0 ) return;
+
+ // protection for bias on pt spectra if all triggers selected
+ // if( (bIsEventSelectedCentral) /*&& (!bIsEventSelectedSemi) && (!bIsEventSelectedMB)*/ && (dCentrality > 10) ) return;
+ // if( /*(!bIsEventSelectedCentral) &&*/ (bIsEventSelectedSemi) /*&& (!bIsEventSelectedMB)*/ && (dCentrality < 20) && (dCentrality > 50)) return;
+ if( (bIsEventSelectedCentral) && (dCentrality > 10) ) return;
+ if( (bIsEventSelectedSemi) && ((dCentrality < 20) || (dCentrality > 50))) return;
+
fEventStatistics->Fill("after centrality selection",1);
// get event plane Angle from AODHeader, default is Q
// cout << dEventplaneAngle << endl;
fEventplaneDist->Fill(dEventplaneAngle);
+ // fill crosscheck histos
+ fEPDistCent->Fill(dEventplaneAngle, dCentrality);
+ fPcosEPCent->Fill(dCentrality, TMath::Cos(2.*dEventplaneAngle));
+ fPsinEPCent->Fill(dCentrality, TMath::Sin(2.*dEventplaneAngle));
+
// start with MC truth analysis
if(fIsMonteCarlo)
{
fMCGenZvPtEtaCent->Fill(dMCTrackZvPtEtaCent);
dMCTrackPhiPtEtaCent[0] = RotatePhi(mcPart->Phi(), dEventplaneAngle); // use eventplane and not reactionplan, similar to centrality vs impact paramter
-// if( dMCTrackPhiPtEtaCent[0] < 0) dMCTrackPhiPtEtaCent[0] += 2.*TMath::Pi();
-// else if( dMCTrackPhiPtEtaCent[0] > 2.*TMath::Pi()) dMCTrackPhiPtEtaCent[0] -= 2.*TMath::Pi();
+ // if( dMCTrackPhiPtEtaCent[0] < 0) dMCTrackPhiPtEtaCent[0] += 2.*TMath::Pi();
+ // else if( dMCTrackPhiPtEtaCent[0] > 2.*TMath::Pi()) dMCTrackPhiPtEtaCent[0] -= 2.*TMath::Pi();
dMCTrackPhiPtEtaCent[1] = mcPart->Pt();
dMCTrackPhiPtEtaCent[2] = mcPart->Eta();
dMCTrackPhiPtEtaCent[3] = dCentrality;
bEventHasATrackInRange = kTRUE;
fPt->Fill(track->Pt());
fCharge->Fill(track->Charge());
+
+ fPhiCent->Fill(track->Phi(), dCentrality);
+ fPcosPhiCent->Fill(dCentrality, TMath::Cos(2.*track->Phi()));
+ fPsinPhiCent->Fill(dCentrality, TMath::Sin(2.*track->Phi()));
}
} // end track loop
Double_t dPhi = 0;
dPhi = phiTrack - phiEP;
if ((dPhi >= -1./2. * TMath::Pi() ) &&
- (dPhi <= 1./2. * TMath::Pi() ) )
+ (dPhi <= 1./2. * TMath::Pi() ) )
{
return dPhi;
}
}
if ((dPhi > 0) &&
- (dPhi > 1./2. * TMath::Pi() ) &&
- (dPhi <= 3./2. * TMath::Pi() ) )
+ (dPhi > 1./2. * TMath::Pi() ) &&
+ (dPhi <= 3./2. * TMath::Pi() ) )
{
dPhi -= TMath::Pi();
return dPhi;
}
if ((dPhi > 0) &&
- (dPhi > 3./2. * TMath::Pi() ))
+ (dPhi > 3./2. * TMath::Pi() ))
{
dPhi -= 2.*TMath::Pi();
return dPhi;
}
-// Printf("[E] dphi = %.4f , phiTrack = %.4f, phiEP = %.4f", dPhi, phiTrack, phiEP);
+ // Printf("[E] dphi = %.4f , phiTrack = %.4f, phiEP = %.4f", dPhi, phiTrack, phiEP);
return -9999.;
}
if(dNClustersTPC < GetCutMinNClustersTPC()) { return kFALSE; }
if (IsITSRefitRequired() && !(tr->GetStatus() & AliVTrack::kITSrefit)) { return kFALSE; } // no ITS refit
-
- // do a relativ cut in Nclusters, both time at 80% of mean
- // if(fIsMonteCarlo)
- // {
- // if(dNClustersTPC < 88) { return kFALSE; }
- // }
- // else
- // {
- // if(dNClustersTPC < 76) { return kFALSE; }
- // }
-
- // fill histogram for pT resolution correction
- Double_t dPtResolutionHisto[3] = { dOneOverPt, dSigmaOneOverPt, dCentrality };
- fPtResptCent->Fill(dPtResolutionHisto);
-
- // fill debug histogram for all accepted tracks
- FillDebugHisto(dCheck, dKine, dCentrality, kTRUE);
-
- // delete pointers
-
- return kTRUE;
-}
-
-Bool_t AlidNdPtAnalysisPbPbAOD::FillDebugHisto(Double_t *dCrossCheckVar, Double_t *dKineVar, Double_t dCentrality, Bool_t bIsAccepted)
-{
- if(bIsAccepted)
- {
- for(Int_t iCrossCheck = 0; iCrossCheck < cqMax; iCrossCheck++)
- {
- Double_t dFillIt[5] = {dCrossCheckVar[iCrossCheck], dKineVar[0], dKineVar[1], dKineVar[2], dCentrality};
- fCrossCheckAcc[iCrossCheck]->Fill(dFillIt);
- }
-
- fCrossCheckRowsLengthAcc->Fill(dCrossCheckVar[cqLength], dCrossCheckVar[cqCrossedRows]);
- fCrossCheckClusterLengthAcc->Fill(dCrossCheckVar[cqLength], dCrossCheckVar[cqNcluster]);
- }
- else
- {
- for(Int_t iCrossCheck = 0; iCrossCheck < cqMax; iCrossCheck++)
- {
- Double_t dFillIt[5] = {dCrossCheckVar[iCrossCheck], dKineVar[0], dKineVar[1], dKineVar[2], dCentrality};
- fCrossCheckAll[iCrossCheck]->Fill(dFillIt);
- }
-
- fCrossCheckRowsLength->Fill(dCrossCheckVar[cqLength], dCrossCheckVar[cqCrossedRows]);
- fCrossCheckClusterLength->Fill(dCrossCheckVar[cqLength], dCrossCheckVar[cqNcluster]);
- }
-
- return kTRUE;
-
-}
-
-void AlidNdPtAnalysisPbPbAOD::StoreCutSettingsToHistogram()
-{
- //
- // this function stores all cut settings to a histograms
- //
-
- fCutSettings->Fill("IsMonteCarlo",fIsMonteCarlo);
-
- fCutSettings->Fill("fCutMaxZVertex", fCutMaxZVertex);
-
- // kinematic cuts
- fCutSettings->Fill("fCutPtMin", fCutPtMin);
- fCutSettings->Fill("fCutPtMax", fCutPtMax);
- fCutSettings->Fill("fCutEtaMin", fCutEtaMin);
- fCutSettings->Fill("fCutEtaMax", fCutEtaMax);
-
- // track quality cut variables
- fCutSettings->Fill("fFilterBit", fFilterBit);
- if(fUseRelativeCuts) fCutSettings->Fill("fUseRelativeCuts", 1);
- if(fCutRequireTPCRefit) fCutSettings->Fill("fCutRequireTPCRefit", 1);
- if(fCutRequireITSRefit) fCutSettings->Fill("fCutRequireITSRefit", 1);
-
- fCutSettings->Fill("fCutMinNumberOfClusters", fCutMinNumberOfClusters);
- fCutSettings->Fill("fCutPercMinNumberOfClusters", fCutPercMinNumberOfClusters);
- fCutSettings->Fill("fCutMinNumberOfCrossedRows", fCutMinNumberOfCrossedRows);
- fCutSettings->Fill("fCutPercMinNumberOfCrossedRows", fCutPercMinNumberOfCrossedRows);
-
- fCutSettings->Fill("fCutMinRatioCrossedRowsOverFindableClustersTPC", fCutMinRatioCrossedRowsOverFindableClustersTPC);
- fCutSettings->Fill("fCutMaxFractionSharedTPCClusters", fCutMaxFractionSharedTPCClusters);
- fCutSettings->Fill("fCutMaxDCAToVertexXY", fCutMaxDCAToVertexXY);
- fCutSettings->Fill("fCutMaxChi2PerClusterITS", fCutMaxChi2PerClusterITS);
-
- if(fCutDCAToVertex2D) fCutSettings->Fill("fCutDCAToVertex2D", 1);
- if(fCutRequireSigmaToVertex) fCutSettings->Fill("fCutRequireSigmaToVertex",1);
- fCutSettings->Fill("fCutMaxDCAToVertexXYPtDepPar0", fCutMaxDCAToVertexXYPtDepPar0);
- fCutSettings->Fill("fCutMaxDCAToVertexXYPtDepPar1", fCutMaxDCAToVertexXYPtDepPar1);
- fCutSettings->Fill("fCutMaxDCAToVertexXYPtDepPar2", fCutMaxDCAToVertexXYPtDepPar2);
-
- if(fCutAcceptKinkDaughters) fCutSettings->Fill("fCutAcceptKinkDaughters", 1);
- fCutSettings->Fill("fCutMaxChi2TPCConstrainedGlobal", fCutMaxChi2TPCConstrainedGlobal);
- if(fCutLengthInTPCPtDependent) fCutSettings->Fill("fCutLengthInTPCPtDependent", 1);
- fCutSettings->Fill("fPrefactorLengthInTPCPtDependent", fPrefactorLengthInTPCPtDependent);
- fCutSettings->Fill(Form("EP selector %s", fEPselector.Data()), 1);
-}
-
-Bool_t AlidNdPtAnalysisPbPbAOD::GetDCA(const AliAODTrack *track, AliAODEvent *evt, Double_t d0z0[2])
-{
- // function adapted from AliDielectronVarManager.h
-
- if(track->TestBit(AliAODTrack::kIsDCA)){
- d0z0[0]=track->DCA();
- d0z0[1]=track->ZAtDCA();
- return kTRUE;
- }
-
- Bool_t ok=kFALSE;
- if(evt) {
- Double_t covd0z0[3];
- //AliAODTrack copy(*track);
- AliExternalTrackParam etp; etp.CopyFromVTrack(track);
-
- Float_t xstart = etp.GetX();
- if(xstart>3.) {
- d0z0[0]=-999.;
- d0z0[1]=-999.;
- //printf("This method can be used only for propagation inside the beam pipe \n");
- return kFALSE;
- }
-
- AliAODVertex *vtx =(AliAODVertex*)(evt->GetPrimaryVertex());
- Double_t fBzkG = evt->GetMagneticField(); // z componenent of field in kG
- ok = etp.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
- //ok = copy.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
- }
- if(!ok){
- d0z0[0]=-999.;
- d0z0[1]=-999.;
- }
- return ok;
-}
-
-
-Bool_t AlidNdPtAnalysisPbPbAOD::IsMCTrackAccepted(AliAODMCParticle *part)
-{
- if(!part) return kFALSE;
-
- Double_t charge = part->Charge()/3.;
- if (TMath::Abs(charge) < 0.001) return kFALSE;
-
- return kTRUE;
-}
-
-const char * AlidNdPtAnalysisPbPbAOD::GetParticleName(Int_t pdg)
-{
- TParticlePDG * p1 = TDatabasePDG::Instance()->GetParticle(pdg);
- if(p1) return p1->GetName();
- return Form("%d", pdg);
-}
-
-AliGenHijingEventHeader* AlidNdPtAnalysisPbPbAOD::GetHijingEventHeader(AliAODMCHeader *header)
-{
- //
- // inspired by PWGJE/AliPWG4HighPtSpectra.cxx
- //
-
- if(!header) return 0x0;
- AliGenHijingEventHeader* hijingGenHeader = NULL;
-
- TList* headerList = header->GetCocktailHeaders();
-
- for(Int_t i = 0; i < headerList->GetEntries(); i++)
- {
- hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(headerList->At(i));
- if(hijingGenHeader) break;
- }
-
- if(!hijingGenHeader) return 0x0;
-
- return hijingGenHeader;
-}
-
-AliGenPythiaEventHeader* AlidNdPtAnalysisPbPbAOD::GetPythiaEventHeader(AliAODMCHeader *header)
-{
- //
- // inspired by PWGJE/AliPWG4HighPtSpectra.cxx
- //
-
- if(!header) return 0x0;
- AliGenPythiaEventHeader* PythiaGenHeader = NULL;
-
- TList* headerList = header->GetCocktailHeaders();
-
- for(Int_t i = 0; i < headerList->GetEntries(); i++)
- {
- PythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(headerList->At(i));
- if(PythiaGenHeader) break;
- }
-
- if(!PythiaGenHeader) return 0x0;
-
- return PythiaGenHeader;
-}
-
-//________________________________________________________________________
-Bool_t AlidNdPtAnalysisPbPbAOD::IsHijingParticle(const AliAODMCParticle *part, AliGenHijingEventHeader* hijingGenHeader){
-
- // Check whether a particle is from Hijing or some injected
- // returns kFALSE if particle is injected
-
- if(part->Label() > (hijingGenHeader->NProduced()-1)) return kFALSE;
- return kTRUE;
-}
-
-//________________________________________________________________________
-Bool_t AlidNdPtAnalysisPbPbAOD::IsPythiaParticle(const AliAODMCParticle *part, AliGenPythiaEventHeader* pythiaGenHeader){
-
- // Check whether a particle is from Pythia or some injected
-
- if(part->Label() > (pythiaGenHeader->NProduced()-1)) return kFALSE;
- return kTRUE;
-}
-
-Double_t* AlidNdPtAnalysisPbPbAOD::GetArrayClone(Int_t n, Double_t* source)
-{
- if (!source || n==0) return 0;
- Double_t* dest = new Double_t[n];
- for (Int_t i=0; i<n ; i++) { dest[i] = source[i]; }
- return dest;
-}
-
-void AlidNdPtAnalysisPbPbAOD::Terminate(Option_t *)
-{
-
-}
-
-
+ // do a relativ cut in Nclusters, both time at 80% of mean
+ // if(fIsMonteCarlo)
+ // {
+ // if(dNClustersTPC < 88) { return kFALSE; }
+ // }
+ // else
+ // {
+ // if(dNClustersTPC < 76) { return kFALSE; }
+ // }
+
+ // fill histogram for pT resolution correction
+ Double_t dPtResolutionHisto[3] = { dOneOverPt, dSigmaOneOverPt, dCentrality };
+ fPtResptCent->Fill(dPtResolutionHisto);
+
+ // fill debug histogram for all accepted tracks
+ FillDebugHisto(dCheck, dKine, dCentrality, kTRUE);
+
+ // delete pointers
+
+ return kTRUE;
+ }
+
+ Bool_t AlidNdPtAnalysisPbPbAOD::FillDebugHisto(Double_t *dCrossCheckVar, Double_t *dKineVar, Double_t dCentrality, Bool_t bIsAccepted)
+ {
+ if(bIsAccepted)
+ {
+ for(Int_t iCrossCheck = 0; iCrossCheck < cqMax; iCrossCheck++)
+ {
+ Double_t dFillIt[5] = {dCrossCheckVar[iCrossCheck], dKineVar[0], dKineVar[1], dKineVar[2], dCentrality};
+ fCrossCheckAcc[iCrossCheck]->Fill(dFillIt);
+ }
+
+ fCrossCheckRowsLengthAcc->Fill(dCrossCheckVar[cqLength], dCrossCheckVar[cqCrossedRows]);
+ fCrossCheckClusterLengthAcc->Fill(dCrossCheckVar[cqLength], dCrossCheckVar[cqNcluster]);
+ }
+ else
+ {
+ for(Int_t iCrossCheck = 0; iCrossCheck < cqMax; iCrossCheck++)
+ {
+ Double_t dFillIt[5] = {dCrossCheckVar[iCrossCheck], dKineVar[0], dKineVar[1], dKineVar[2], dCentrality};
+ fCrossCheckAll[iCrossCheck]->Fill(dFillIt);
+ }
+
+ fCrossCheckRowsLength->Fill(dCrossCheckVar[cqLength], dCrossCheckVar[cqCrossedRows]);
+ fCrossCheckClusterLength->Fill(dCrossCheckVar[cqLength], dCrossCheckVar[cqNcluster]);
+ }
+
+ return kTRUE;
+
+ }
+
+ void AlidNdPtAnalysisPbPbAOD::StoreCutSettingsToHistogram()
+ {
+ //
+ // this function stores all cut settings to a histograms
+ //
+
+ fCutSettings->Fill("IsMonteCarlo",fIsMonteCarlo);
+
+ fCutSettings->Fill("fCutMaxZVertex", fCutMaxZVertex);
+
+ // kinematic cuts
+ fCutSettings->Fill("fCutPtMin", fCutPtMin);
+ fCutSettings->Fill("fCutPtMax", fCutPtMax);
+ fCutSettings->Fill("fCutEtaMin", fCutEtaMin);
+ fCutSettings->Fill("fCutEtaMax", fCutEtaMax);
+
+ // track quality cut variables
+ fCutSettings->Fill("fFilterBit", fFilterBit);
+ if(fUseRelativeCuts) fCutSettings->Fill("fUseRelativeCuts", 1);
+ if(fCutRequireTPCRefit) fCutSettings->Fill("fCutRequireTPCRefit", 1);
+ if(fCutRequireITSRefit) fCutSettings->Fill("fCutRequireITSRefit", 1);
+
+ fCutSettings->Fill("fCutMinNumberOfClusters", fCutMinNumberOfClusters);
+ fCutSettings->Fill("fCutPercMinNumberOfClusters", fCutPercMinNumberOfClusters);
+ fCutSettings->Fill("fCutMinNumberOfCrossedRows", fCutMinNumberOfCrossedRows);
+ fCutSettings->Fill("fCutPercMinNumberOfCrossedRows", fCutPercMinNumberOfCrossedRows);
+
+ fCutSettings->Fill("fCutMinRatioCrossedRowsOverFindableClustersTPC", fCutMinRatioCrossedRowsOverFindableClustersTPC);
+ fCutSettings->Fill("fCutMaxFractionSharedTPCClusters", fCutMaxFractionSharedTPCClusters);
+ fCutSettings->Fill("fCutMaxDCAToVertexXY", fCutMaxDCAToVertexXY);
+ fCutSettings->Fill("fCutMaxChi2PerClusterITS", fCutMaxChi2PerClusterITS);
+
+ if(fCutDCAToVertex2D) fCutSettings->Fill("fCutDCAToVertex2D", 1);
+ if(fCutRequireSigmaToVertex) fCutSettings->Fill("fCutRequireSigmaToVertex",1);
+ fCutSettings->Fill("fCutMaxDCAToVertexXYPtDepPar0", fCutMaxDCAToVertexXYPtDepPar0);
+ fCutSettings->Fill("fCutMaxDCAToVertexXYPtDepPar1", fCutMaxDCAToVertexXYPtDepPar1);
+ fCutSettings->Fill("fCutMaxDCAToVertexXYPtDepPar2", fCutMaxDCAToVertexXYPtDepPar2);
+
+ if(fCutAcceptKinkDaughters) fCutSettings->Fill("fCutAcceptKinkDaughters", 1);
+ fCutSettings->Fill("fCutMaxChi2TPCConstrainedGlobal", fCutMaxChi2TPCConstrainedGlobal);
+ if(fCutLengthInTPCPtDependent) fCutSettings->Fill("fCutLengthInTPCPtDependent", 1);
+ fCutSettings->Fill("fPrefactorLengthInTPCPtDependent", fPrefactorLengthInTPCPtDependent);
+ fCutSettings->Fill(Form("EP selector %s", fEPselector.Data()), 1);
+ }
+
+ Bool_t AlidNdPtAnalysisPbPbAOD::GetDCA(const AliAODTrack *track, AliAODEvent *evt, Double_t d0z0[2])
+ {
+ // function adapted from AliDielectronVarManager.h
+
+ if(track->TestBit(AliAODTrack::kIsDCA)){
+ d0z0[0]=track->DCA();
+ d0z0[1]=track->ZAtDCA();
+ return kTRUE;
+ }
+
+ Bool_t ok=kFALSE;
+ if(evt) {
+ Double_t covd0z0[3];
+ //AliAODTrack copy(*track);
+ AliExternalTrackParam etp; etp.CopyFromVTrack(track);
+
+ Float_t xstart = etp.GetX();
+ if(xstart>3.) {
+ d0z0[0]=-999.;
+ d0z0[1]=-999.;
+ //printf("This method can be used only for propagation inside the beam pipe \n");
+ return kFALSE;
+ }
+
+
+ AliAODVertex *vtx =(AliAODVertex*)(evt->GetPrimaryVertex());
+ Double_t fBzkG = evt->GetMagneticField(); // z componenent of field in kG
+ ok = etp.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
+ //ok = copy.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
+ }
+ if(!ok){
+ d0z0[0]=-999.;
+ d0z0[1]=-999.;
+ }
+ return ok;
+ }
+
+
+ Bool_t AlidNdPtAnalysisPbPbAOD::IsMCTrackAccepted(AliAODMCParticle *part)
+ {
+ if(!part) return kFALSE;
+
+ Double_t charge = part->Charge()/3.;
+ if (TMath::Abs(charge) < 0.001) return kFALSE;
+
+ return kTRUE;
+ }
+
+ const char * AlidNdPtAnalysisPbPbAOD::GetParticleName(Int_t pdg)
+ {
+ TParticlePDG * p1 = TDatabasePDG::Instance()->GetParticle(pdg);
+ if(p1) return p1->GetName();
+ return Form("%d", pdg);
+ }
+
+ AliGenHijingEventHeader* AlidNdPtAnalysisPbPbAOD::GetHijingEventHeader(AliAODMCHeader *header)
+ {
+ //
+ // inspired by PWGJE/AliPWG4HighPtSpectra.cxx
+ //
+
+ if(!header) return 0x0;
+ AliGenHijingEventHeader* hijingGenHeader = NULL;
+
+ TList* headerList = header->GetCocktailHeaders();
+
+ for(Int_t i = 0; i < headerList->GetEntries(); i++)
+ {
+ hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(headerList->At(i));
+ if(hijingGenHeader) break;
+ }
+
+ if(!hijingGenHeader) return 0x0;
+
+ return hijingGenHeader;
+ }
+
+ AliGenPythiaEventHeader* AlidNdPtAnalysisPbPbAOD::GetPythiaEventHeader(AliAODMCHeader *header)
+ {
+ //
+ // inspired by PWGJE/AliPWG4HighPtSpectra.cxx
+ //
+
+ if(!header) return 0x0;
+ AliGenPythiaEventHeader* PythiaGenHeader = NULL;
+
+ TList* headerList = header->GetCocktailHeaders();
+
+ for(Int_t i = 0; i < headerList->GetEntries(); i++)
+ {
+ PythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(headerList->At(i));
+ if(PythiaGenHeader) break;
+ }
+
+ if(!PythiaGenHeader) return 0x0;
+
+ return PythiaGenHeader;
+ }
+
+ //________________________________________________________________________
+ Bool_t AlidNdPtAnalysisPbPbAOD::IsHijingParticle(const AliAODMCParticle *part, AliGenHijingEventHeader* hijingGenHeader){
+
+ // Check whether a particle is from Hijing or some injected
+ // returns kFALSE if particle is injected
+
+ if(part->Label() > (hijingGenHeader->NProduced()-1)) return kFALSE;
+ return kTRUE;
+ }
+
+ //________________________________________________________________________
+ Bool_t AlidNdPtAnalysisPbPbAOD::IsPythiaParticle(const AliAODMCParticle *part, AliGenPythiaEventHeader* pythiaGenHeader){
+
+ // Check whether a particle is from Pythia or some injected
+
+ if(part->Label() > (pythiaGenHeader->NProduced()-1)) return kFALSE;
+ return kTRUE;
+ }
+
+ Double_t* AlidNdPtAnalysisPbPbAOD::GetArrayClone(Int_t n, Double_t* source)
+ {
+ if (!source || n==0) return 0;
+ Double_t* dest = new Double_t[n];
+ for (Int_t i=0; i<n ; i++) { dest[i] = source[i]; }
+ return dest;
+ }
+
+ void AlidNdPtAnalysisPbPbAOD::Terminate(Option_t *)
+ {
+
+ }
+
+
+
\ No newline at end of file
// via AODs
//
// Author: P. Luettig, 15.05.2013
-// last modified: 08.10.2013
+// last modified: 10.06.2014
//------------------------------------------------------------------------------
#include "THn.h"
#include "TClonesArray.h"
#include "TString.h"
+#include "TProfile.h"
#include "TParticlePDG.h"
#include "TDatabasePDG.h"
TH1F *fEventplaneDist; // event plane distribution in phi
TH1F *fMCEventplaneDist; // MC event plane distribution in phi
TH2F *fCorrelEventplaneMCDATA; // correlation between data and MC eventplane
- // global variables
+
+ // cross check for event plane resolution
+ TH2F *fEPDistCent; // event plane distribution vs centrality
+ TH2F *fPhiCent; // particle phi distribution vs centrality
+ TProfile *fPcosEPCent; // < cos 2 psi_ep > vs centrality
+ TProfile *fPsinEPCent; // < sin 2 psi_ep > vs centrality
+ TProfile *fPcosPhiCent; // < cos 2 phi > vs centrality
+ TProfile *fPsinPhiCent; // < sin 2 phi > vs centrality
+
+ // global variables
Bool_t fIsMonteCarlo;
TString fEPselector;
flengthMCK(0), flifetiMCK(0), flifetim2(0), fLHelESDK(0),flifeInt(0), flifeYuri(0), flenYuri(0), flenTrRef(0),flifeSmall(0), flifetime(0),flifTiESDK(0),
flifeKink(), flenHelx(0), fradPtRapMC(0), fradPtRapDC(0), fradPtRapESD(0), fRadNclcln(0),
f1(0), f2(0),
- fListOfHistos(0),fLowMulcut(-1),fUpMulcut(-1), fKinkRadUp(200),fKinkRadLow(130), fLowCluster(20), fLowQt(.12), fCutsMul(0),fMaxDCAtoVtxCut(0), fPIDResponse(0)
+// fListOfHistos(0),fLowMulcut(-1),fUpMulcut(-1), fKinkRadUp(200),fKinkRadLow(130), fLowCluster(20), fLowQt(.12), fCutsMul(0),fMaxDCAtoVtxCut(0), fPIDResponse(0)
+ fListOfHistos(0),fLowMulcut(-1),fUpMulcut(-1), fKinkRadUp(200),fKinkRadLow(130), fLowCluster(20), fLowQt(.12), fRapiK(0.7), fCutsMul(0),fMaxDCAtoVtxCut(0), fPIDResponse(0)
{
// Constructor
f2->SetParameter(1,0.2731374);
f2->SetParameter(2,TMath::Pi());
//
+/*
Double_t gPt7K0[45] = {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8,0.9,1.0,
1.1, 1.2, 1.3, 1.4, 1.5, 1.6,1.7,1.8,1.9, 2.0,
2.2, 2.4, 2.6, 2.8, 3.0, 3.3, 3.6, 3.9,
4.2, 4.6,5.0, 5.4, 5.9, 6.5, 7.0,7.5, 8.0,8.5, 9.2, 10., 11., 12., 13.5,15.0 }; // David K0
+*/
//
//! ! ! ! ! KINK FROM HERE --------------->
Double_t gPt7Comb[48] = {
fHistQtAll = new TH1F("fHistQtAll", "Q_{T} distr All Kinks ",100, 0.0,.300);
fHistQt1= new TH1F("fHistQt1", "Q_{T} distribution",100, 0.0,.300);
fHistQt2= new TH1F("fHistQt2", "Q_{T} distribution",100, 0.0,.300);
-// fHistPtKaon = new TH1F("fHistPtKaon", "P_{T}Kaon distribution",200, 0.0,10.0);
- fHistPtKaon = new TH1F("fHistPtKaon", "P_{T}Kaon distribution",47,gPt7Comb );
- fHistPtKPDG = new TH1F("fHistPtKPDG", "P_{T}Kaon distribution",47, gPt7Comb );
+ fHistPtKaon = new TH1F("fHistPtKaon", "P_{T}Kaon distribution",300, 0.0,15.0);
+// fHistPtKaon = new TH1F("fHistPtKaon", "P_{T}Kaon distribution",47,gPt7Comb );
+ fHistPtKPDG = new TH1F("fHistPtKPDG", "P_{T}Kaon distribution",300,0.0,15.0 );
fHistEta= new TH1F("fHistEta", "Eta distribution", 26,-1.3, 1.3);
fHistEtaK= new TH1F("fHistEtaK", "EtaK distribution", 26,-1.3, 1.3);
- fptKMC= new TH1F("fptKMC", "P_{T}Kaon generated",47, gPt7Comb );
+ fptKMC= new TH1F("fptKMC", "P_{T}Kaon generated",300, 0.0, 15.0 );
fMultiplMC= new TH1F("fMultiplMC", " charge particle multipl",100, 0.0,2500.);
fESDMult= new TH1F("fESDMult", "charge multipliESD",100, 0.0,100.);
frad= new TH1F("frad", "radius K ESD recon",100,0.,1000.);
fradMC= new TH1F("fradMC", "radius K generated",100,0.,1000.);
- fKinkKaon= new TH1F("fKinkKaon", "P_{T}Kaon kinks identi", 47, gPt7Comb );
- fKinkKaonBg= new TH1F("fKinkKaonBg", "P_{T}Kaon kinks backgr",47 , gPt7Comb );
+ fKinkKaon= new TH1F("fKinkKaon", "P_{T}Kaon kinks identi", 300, 0.0, 15.0 );
+ fKinkKaonBg= new TH1F("fKinkKaonBg", "P_{T}Kaon kinks backgr",300, 0.0, 15.0 );
//fM1kaon= new TH1F("fM1kaon","Invar m(kaon) from kink->mu+netrino decay",180,0.1, 1.0);
fM1kaon= new TH1F("fM1kaon","Invar m(kaon) from kink->mu+netrino decay",600,0.1, 0.7);
- fgenPtEtR= new TH1F("fgenPtEtR", "P_{T}Kaon distribution", 47, gPt7Comb );
- fPtKink= new TH1F("fPtKink", "P_{T}Kaon Kink bution",47, gPt7Comb );
+ fgenPtEtR= new TH1F("fgenPtEtR", "P_{T}Kaon distribution", 300, 0.0, 15.0 );
+ //fPtKink= new TH1F("fPtKink", "P_{T}Kaon Kink bution",47, gPt7Comb );
+ fPtKink= new TH1F("fPtKink", "P_{T}Kaon Kink bution",300, 0.0, 15.0 );
fcodeH = new TH2F("fcodeH", "code vrs dcode dist. kinks,K",100,0.,2500.,100,0.,2500.);
fdcodeH = new TH2F("fdcodeH", "code vrs dcode dist. kinks,K",100,0.,2500.,100,0.,2500.);
fAngMomK= new TH2F("fAngMomK","Decay angle vrs Mother Mom,K",100,0.0,10.0,80,0.,80.);
fZvYv= new TH2F("fZvYv","Yv-Zv main vtx",60,-0.5,0.5, 60, -15., 15.);
fXvYv= new TH2F("fXvYv","Xv-Yv main vtx", 60,-1.5,1.5, 60, -1.5, 1.5);
fPtPrKink=new TH1F("fPtPrKink","pt of ESD kaonKink tracks",300, 0.0,15.0);
- fgenPtEtRP= new TH1F("fgenPtEtRP", "P_{T}Kaon distribution positive", 47, gPt7Comb );
- fgenPtEtRN= new TH1F("fgenPtEtRN", "P_{T}Kaon distribution negative", 47, gPt7Comb );
- fkinkKaonP= new TH1F("fKinkKaonP", "P_{T}Kaon distribution positive", 47, gPt7Comb );
- fkinkKaonN= new TH1F("fKinkKaonN", "P_{T}Kaon distribution negative", 47, gPt7Comb );
+ fgenPtEtRP= new TH1F("fgenPtEtRP", "P_{T}Kaon distribution positive", 300, 0.0, 15.0 );
+ fgenPtEtRN= new TH1F("fgenPtEtRN", "P_{T}Kaon distribution negative", 300, 0.0, 15.0 );
+ fkinkKaonP= new TH1F("fKinkKaonP", "P_{T}Kaon distribution positive", 300, 0.0, 15.0 );
+ fkinkKaonN= new TH1F("fKinkKaonN", "P_{T}Kaon distribution negative", 300, 0.0, 15.0 );
frapidESDK= new TH1F("frapidESDK", "rapidity distribution", 26,-1.3, 1.3);
frapidKMC = new TH1F("frapidKMC ", "rapidity distri MC ",26,-1.3, 1.3);
- fPtKPlMC= new TH1F("fPtKPlMC", "P_{T}Kaon Pos generated", 47, gPt7Comb );
- fPtKMnMC= new TH1F("fPtKMnMC", "P_{T}Kaon Minusgenerated",47 , gPt7Comb );
- fHistPtKaoP= new TH1F("fHistPtKaoP", "P_{T}Kaon Pos ESD", 47, gPt7Comb );
- fHistPtKaoN= new TH1F("fHistPtKaoN", "P_{T}Kaon Neg ESD", 47, gPt7Comb );
- fHiPtKPDGP= new TH1F("fHiPtKPDGP", "P_{T}Kaon Pos ESD", 47, gPt7Comb );
- fHiPtKPDGN= new TH1F("fHiPtKPDGN", "P_{T}Kaon neg ESD", 47, gPt7Comb );
- fKinKBGP = new TH1F("fKinKBGP ", "P_{T}Kaon Pos ESD", 47, gPt7Comb );
- fKinKBGN= new TH1F("fKinKBGN", "P_{T}Kaon neg ESD", 47, gPt7Comb );
+ fPtKPlMC= new TH1F("fPtKPlMC", "P_{T}Kaon Pos generated", 300, 0.0, 15.0 );
+ fPtKMnMC= new TH1F("fPtKMnMC", "P_{T}Kaon Minusgenerated",300, 0.0, 15.0 );
+ fHistPtKaoP= new TH1F("fHistPtKaoP", "P_{T}Kaon Pos ESD", 300, 0.0, 15.0 );
+ fHistPtKaoN= new TH1F("fHistPtKaoN", "P_{T}Kaon Neg ESD", 300, 0.0, 15.0 );
+ fHiPtKPDGP= new TH1F("fHiPtKPDGP", "P_{T}Kaon Pos ESD", 300, 0.0, 15.0 );
+ fHiPtKPDGN= new TH1F("fHiPtKPDGN", "P_{T}Kaon neg ESD", 300, 0.0, 15.0 );
+ fKinKBGP = new TH1F("fKinKBGP ", "P_{T}Kaon Pos ESD", 300, 0.0, 15.0 );
+ //fKinKBGN= new TH1F("fKinKBGN", "P_{T}Kaon neg ESD", 47, gPt7Comb );
+ fKinKBGN= new TH1F("fKinKBGN", "P_{T}Kaon neg ESD",300, 0.0, 15.0 );
fQtKMu= new TH1F("fQtKMu", "Q_{T} distribution K to mu ",100, 0.0,.300);
fQtKPi= new TH1F("fQtKPi", "Q_{T} distribution K to pi",100, 0.0,.300);
fQtKEl= new TH1F("fQtKEl", "Q_{T} distribution K to elec",100, 0.0,.300);
- fFakepipi = new TH1F("fFakepipi", "P_{T}fake pipi ",47 , gPt7Comb );
- fFakeKPi = new TH1F("fFakeKPi", "P_{T}fake Kpi ", 47, gPt7Comb );
+ fFakepipi = new TH1F("fFakepipi", "P_{T}fake pipi ", 300, 0.0, 15.0 );
+ fFakeKPi = new TH1F("fFakeKPi", "P_{T}fake Kpi ", 300, 0.0, 15.0 );
fDCAkink = new TH1F("fDCAkink", "DCA kink vetrex ",50, 0.0,1.0);
fDCAkinkBG = new TH1F("fDCAkinkBG", "DCA kink vetrex ",50, 0.0,1.0);
fPosiKink= new TH2F("fPosiKink", "Y vrx kink Vrex ",100, -300.0,300.0,100, -300, 300.);
fQtKElMC= new TH1F("fQtKElMC", "Q_{T} distribution K to elec MC",100, 0.0,.300);
fQtK3PiP= new TH1F("fQtK3PiP", "Q_{T} distribution K to 3pi ",100, 0.0,.300);
fQtK3PiM= new TH1F("fQtK3PiM", "Q_{T} distribution K to 3pi ",100, 0.0,.300);
- fmaxAngMomKmu= new TH2F("fmaxAngMomKmu","Decay angle vrs Mother Mom,Kmu",100,0.0,10.0,80,0.,80.);
+ fmaxAngMomKmu= new TH2F("fmaxAngMomKmu","Decay angle vrs Mother Mom,Kmu",100,0.0,10.0,120,0.,120.);
fPosiKinKBgZX= new TH2F("fPosiKinKBgZX", "X vrx Z kink Vrexbg ",100, -20.0,20.0,100, 0., 300.);
fPosiKinKBgXY= new TH2F("fPosiKinKBgXY", "Y vrx X kink Vrexbg ",100, -300.0,300.0,100, -300, 300.);
fMinvPi= new TH1F("fMinvPi","Invar m(kaon) from kink-> decay",100,0.0, 1.2);
Double_t etracKMC= TMath::Sqrt(particle->P() *particle->P() + 0.493677 *0.493677 );
Double_t rapidiKMC = 0.5 * (TMath::Log( (etracKMC +particle->Pz())/( etracKMC-particle->Pz() )) ) ;
- if ( TMath::Abs( rapidiKMC) > 0.7) continue; //
+ //if ( TMath::Abs( rapidiKMC) > 0.7) continue; //
+ if ( TMath::Abs( rapidiKMC) > fRapiK ) continue; //
frapidKMC ->Fill(rapidiKMC) ; //18/feb rapiddistr of PDG kink ESD kaons
void SetNClusterCut(Int_t lowCluster){fLowCluster=lowCluster;}
void SetQtCut(Float_t lowQt){fLowQt=lowQt;}
+ void SetYKRange(Float_t RapidityK){fRapiK=RapidityK;}
private:
TH1F *fHistPtESD; //!Pt spectrum of all ESD inside eta, Pt cuts
Int_t fKinkRadLow;
Int_t fLowCluster;
Float_t fLowQt;
+ Float_t fRapiK;
AliESDtrackCuts* fCutsMul;
--- /dev/null
+/**************************************************************************
+ * Authors: Martha Spyropoulou-Stassinaki and the members
+ * of the Greek group at Physics Department of Athens University
+ * Paraskevi Ganoti and Anastasia Belogianni
+ **************************************************************************/
+//-----------------------------------------------------------------
+// AliAnalysisKinkESDatION class
+// Example of an analysis task for kink topology study in Pb-Pb collisions
+// Kaons from kink topology are 'identified' in this code
+//-----------------------------------------------------------------
+
+#include "TChain.h"
+#include "TTree.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TH3F.h"
+#include "TH1D.h"
+#include "TH2D.h"
+#include "TParticle.h"
+#include <TVector3.h>
+#include "TF1.h"
+#include "AliAnalysisTask.h"
+#include "AliAnalysisManager.h"
+#include "AliVEvent.h"
+#include "AliESDEvent.h"
+#include "AliMCEvent.h"
+#include "AliAnalysisKinkESDatION.h"
+#include "AliStack.h"
+#include "AliESDpid.h"
+#include "AliPID.h"
+#include "AliESDkink.h"
+#include "AliESDtrack.h"
+#include "AliPhysicsSelectionTask.h"
+#include "AliInputEventHandler.h"
+#include "AliESDInputHandler.h"
+#include "AliAnalysisManager.h"
+#include "AliVEvent.h"
+#include "AliESDtrackCuts.h"
+#include "AliCentrality.h"
+#include "AliPIDResponse.h"
+// #include "AliTPCpidESD.h"
+
+ClassImp(AliAnalysisKinkESDatION)
+
+
+//________________________________________________________________________
+AliAnalysisKinkESDatION::AliAnalysisKinkESDatION(const char *name)
+ : AliAnalysisTaskSE(name), fHistPtESD(0),fHistPt(0),fHistQtAll(0),fHistQt1(0),fHistQt2(0)
+ , fHistPtKaon(0),fHistPtKPDG(0),fHistEta(0),fHistEtaK(0),fptKMC(0),fMultiplMC(0),fESDMult(0),frad(0),
+ fKinkKaon(0),fKinKRbn(0), fKinkKaonBg(0), fM1kaon(0), fPtKink(0), fptKink(0),
+ fAngMomK(0),fAngMomPi(0), fAngMomKC(0), fMultESDK(0), fMultMCK(0),
+ fSignPtNcl(0), fSignPtEta(0), fEtaNcl(0), fSignPt(0), fChi2NclTPC(0), fRatChi2Ncl(0), fRadiusNcl(0), fTPCSgnlP(0),
+ fTPCSgnlPa(0), fRpr(0),fZpr(0), fdcatoVxXY(0), fKinkMothDau(0),
+ fZvXv(0),fZvYv(0), fXvYv(0), fPtPrKink(0), fHistPtKaoP(0), fHistPtKaoN(0),frapiKESD(0), flifetime(), fradLK(0),
+ fradPtRpDt(0), fInvMuNuAll(0), fQtInvM(0),
+ fDCAkink(0), fPosiKink(0), fPosiKinkK(0),fPosiKinKXZ(0), fPosiKinKYZ(0), fQtMothP(0),
+ fKinkKPt05(0), fKinkKPt510(0), fKinkKPt1020(0), fKinkKPt2030(0), fKinkKPt3040(0),
+ fKinkKPt4050(0), fKinkKPt5060(0), fKinkKPt6070(0), fKinkKPt7080(0), fKinkKPt8090(0),
+ fKinkMul05(0), fKinkMul510(0), fKinkMul1020(0), fKinkMul2030(0), fKinkMul3040(0),
+ fKinkMul4050(0), fKinkMul5060(0), fKinkMul6070(0), fKinkMul7080(0), fKinkMul8090(0),
+ fRadiusNclAll(0), fRadiusNclK(0), fRadiusNclClean(0), fRatioCrossedRows(0),fRatioCrossedRowsKink(0),
+ f1(0), f2(0),
+ fListOfHistos(0) ,fMaxDCAtoVtxCut(0), fPIDResponse(0)
+
+{
+ // Constructor
+
+ // Define input and output slots here
+ // Input slot #0 works with a TChain
+ // DefineInput(0, TChain::Class());
+ DefineOutput(1, TList::Class());
+}
+
+//________________________________________________________________________
+void AliAnalysisKinkESDatION::UserCreateOutputObjects()
+{
+ // Create histograms
+ // Called once
+
+ fMaxDCAtoVtxCut=new AliESDtrackCuts("fMaxDCA", "fMaxDCA");
+ fMaxDCAtoVtxCut->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
+ fMaxDCAtoVtxCut->SetMaxChi2TPCConstrainedGlobal(36);
+
+ f1=new TF1("f1","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",1.1,10.0);
+ f1->SetParameter(0,0.493677);
+ f1->SetParameter(1,0.9127037);
+ f1->SetParameter(2,TMath::Pi());
+
+
+ f2=new TF1("f2","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",0.1,10.0);
+ f2->SetParameter(0,0.13957018);
+ f2->SetParameter(1,0.2731374);
+ f2->SetParameter(2,TMath::Pi());
+ //Open file 1= CAF
+ //OpenFile(1);
+ // Double_t gPt[31] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8,0.9,1.0,
+ // 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,1.7,1.8,1.9, 2.0,
+ // 2.2, 2.4, 2.6, 2.8, 3.0, 3.3, 3.6,3.9, 4.2, 4.5, 4.8};
+ Double_t gPt7[43] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8,0.9,1.0,
+ 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,1.7,1.8,1.9, 2.0,
+ 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7,2.8, 2.9, 3.0,
+ 3.2, 3.4, 3.6, 3.8, 4.0, 4.4, 4.8,5.2, 5.6, 6.0, 7.0, 8.0,10.0 };
+ Double_t gPtK0[45] = {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8,0.9,1.0,
+ 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,1.7,1.8,1.9, 2.0,
+ 2.2, 2.4, 2.6, 2.8, 3.0, 3.3, 3.6, 3.9,
+ 4.2, 4.4,5.0, 5.4, 5.9, 6.5, 7.0,7.5, 8.0,8.5, 9.2, 10., 11., 12., 13.5,15.0 }; // David K0
+
+ Double_t gPt7TOF[47] = { 0.2,0.25, 0.3,0.35, 0.4,0.45, 0.5,0.55, 0.6,0.65, 0.7,0.75, 0.8, 0.85, 0.9, 0.95, 1.0,
+ 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,1.7,1.8,1.9, 2.0,
+ 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7,2.8, 2.9, 3.0,
+ 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8,5.0 };// TOF Barbara
+
+ fHistPtESD = new TH1F("fHistPtESD", "P_{T} distribution",100, 0.0,10.0);
+ //fHistPtESD->GetXaxis()->SetTitle("P_{T} (GeV/c)");
+ //fHistPtESD->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");
+ //fHistPtESD->SetMarkerStyle(kFullCircle);
+ fHistPt = new TH1F("fHistPt", "P_{T} distribution",100, 0.0,10.0);
+ fHistQtAll = new TH1F("fHistQtAll", "Q_{T} distr All Kinks ",100, 0.0,.300);
+ fHistQt1= new TH1F("fHistQt1", "Q_{T} distribution",100, 0.0,.300);
+ fHistQt2= new TH1F("fHistQt2", "Q_{T} distribution",100, 0.0,.300);
+ fHistPtKaon = new TH1F("fHistPtKaon", "P_{T}Kaon distribution",150, 0.0,15.0);
+ fHistPtKPDG = new TH1F("fHistPtKPDG", "P_{T}Kaon distribution",150, 0.0,15.0);
+ fHistEta= new TH1F("fHistEta", "Eta distribution", 26,-1.3, 1.3);
+ fHistEtaK= new TH1F("fHistEtaK", "EtaK distribution", 26,-1.3, 1.3);
+ fptKMC= new TH1F("fptKMC", "P_{T}Kaon generated",100, 0.0,10.0);
+ fMultiplMC= new TH1F("fMultiplMC", "charge multiplicity MC",100, 0.5,4000.5);
+ fESDMult= new TH1F("fESDMult", "charge multipliESD", 100, 0.5,4000.5);
+ frad= new TH1F("frad", "radius K generated",100, 0.,1000.0);
+ fKinkKaon= new TH1F("fKinkKaon", "P_{T}Kaon kinks identi",150, 0.0,15.0);
+ fKinKRbn= new TH1F("fKinKRbn", "p_{t}Kaon kinks identi[GeV/c],Entries",44,gPtK0);
+ fKinkKaonBg= new TH1F("fKinkKaonBg", "P_{T}Kaon kinks backgr",150, 0.0,15.0);
+ fM1kaon= new TH1F("fM1kaon","Invar m(kaon) from kink->mu+netrino decay",80,0.0, 0.8);
+ fPtKink= new TH1F("fPtKink", "P_{T}Kaon Kink bution",150, 0.0,15.0);
+ fptKink= new TH1F("fptKink", "P_{T}Kaon Kink bution", 42, gPt7 );
+ fAngMomK= new TH2F("fAngMomK","Decay angle vrs Mother Mom,K",100,0.0,10.0,80,0.,80.);
+ fAngMomPi= new TH2F("fAngMomPi","Decay angle vrs Mother Mom,Pi",100,0.0,10.0,80,0.,80.);
+ fAngMomKC= new TH2F("fAngMomKC","Decay angle vrs Mother Mom,K",100,0.0,10.0,80,0.,80.);
+ fMultESDK=new TH1F("fMultESDK", "charge multipliESD kaons",100, 0.5,4000.5);
+ fMultMCK=new TH1F("fMultMCK", "charge multipli MC kaons",100, 0.5,4000.5);
+ fSignPtNcl= new TH2F("fSignPtNcl","SignPt vrs Ncl,K",100,-5.,5.0,90,0.,180.);
+ fSignPtEta= new TH2F("fSignPtEta","SignPt vrs Eta,K",100,-5.0,5.0,30,-.75,.75);
+ fEtaNcl= new TH2F("fEtaNcl","Eta vrs nclust,K",30,-.75,.75, 90,0, 180);
+ fSignPt= new TH1F("fSignPt","SignPt ,K",100,-5.0,5.0);
+ fChi2NclTPC= new TH2F("fChi2NclTPC","Chi2vrs nclust,K",100,0.,500., 90,0, 180);
+ fRatChi2Ncl= new TH1F("fRatChi2Ncl","Ratio chi2/nclusters in TPC,K",50,0.0,5.0);
+ fRadiusNcl = new TH2F("fRadiusNcl","kink radius vrs Nclust, Dau",75,100.,250., 90,0, 180);
+ fTPCSgnlP = new TH2F("fTPCSgnlP","TPC signal de/dx Mom,K",200,0.0,20.0,100,0.,300.);
+ fTPCSgnlPa= new TH2F("fTPCSgnlPa","TPC signal de/dx Mom,K",200,0.0,20.,100, 0.,300.);
+ fRpr = new TH1D("fRpr", "rad distribution PID pr",50,0.0, 2.5);
+ fZpr = new TH1D("fZpr", "z distribution PID pr ",80,-20.,20.);
+ fdcatoVxXY = new TH1D("fdcatoVxXY", "dca distribution PID ",80,-4.,4.);
+ fKinkMothDau= new TH2F("fKinkMothDau","TPC kink Moth Daugh ,K",50,0.0,2.5,50, 0., 2.5);
+ fZvXv= new TH2F("fZvXv","Xv-Zv main vtx",60,-0.5,0.5,60, -15., 15.0);
+ fZvYv= new TH2F("fZvYv","Yv-Zv main vtx",60,-0.5,0.5, 60, -15., 15.);
+ fXvYv= new TH2F("fXvYv","Xv-Yv main vtx", 60,-1.5,1.5, 60, -1.5, 1.5);
+ fPtPrKink=new TH1F("fPtPrKink","pt of ESD kaonKink tracks", 46, gPt7TOF);
+ fHistPtKaoP = new TH1F("fHistPtKaoP", "P_{T}KaonP distribution",150, 0.0,15.0);
+ fHistPtKaoN = new TH1F("fHistPtKaoN", "P_{T}KaonN distribution",150, 0.0,15.0);
+
+ frapiKESD=new TH1F("frapiKESD","rapid Kdistribution", 26,-1.3, 1.3);
+ flifetime= new TH1F("flifetime", "ct study of K-kinks",100,0.,1000.);
+ fradLK= new TH1F("fradLK", "perscentile in Pb-Pb10",100,0,100);
+ fradPtRpDt=new TH3F("fradPtRpDt","rad pt rap dat",28,100.,240., 20, 0., 5., 20, -1., 1. );
+ fInvMuNuAll= new TH1F("fInvMuNuAll", " Inv Mass MuNu all kink",80,0.,0.8);
+ fQtInvM= new TH2F("fQtInvM", "Q_{T} Versus Inv MuNu ",80, 0., 0.80 , 100 , 0., 0.300);
+ fDCAkink = new TH1F("fDCAkink ", "DCA kink vetrex ",50, 0.0,1.0);
+
+ fPosiKink= new TH2F("fPosiKink", "Y vrx kink Vrex ",100, -300.0,300.0,100, -300, 300.);
+ fPosiKinkK= new TH2F("fPosiKinkK", "Y vrx kink VrexK ",100, -300.0,300.0,100, -300, 300.);
+ fPosiKinKXZ= new TH2F("fPosiKinKXZ", "Y vrx kink VrexK ",100, -300.0,300.0,100, -300, 300.);
+ fPosiKinKYZ= new TH2F("fPosiKinKYZ", "Y vrx kink VrexK ",100, -300.0,300.0,100, -300, 300.);
+ fQtMothP = new TH2F("fQtMothP", " Qt vrs Mother P", 100, 0., 5.0,100, 0.,0.300);
+ fKinkKPt05 = new TH1F("fKinkKPt05", "P_{T}Kaon kinks identi centra0",150, 0, 15. );
+ fKinkKPt510 = new TH1F("fKinkKPt510", "P_{T}Kaon kinks identi central5",150, 0, 15. );
+ fKinkKPt1020 = new TH1F("fKinkKPt1020", "P_{T}Kaon kinks identi centra10",150, 0., 15.0 );
+ fKinkKPt2030 = new TH1F("fKinkKPt2030", "P_{T}Kaon kinks identi centra20", 150, 0., 15.0 );
+ fKinkKPt3040 = new TH1F("fKinkKPt3040", "P_{T}Kaon kinks identi centra30",150, 0., 15.0 );
+ fKinkKPt4050 = new TH1F("fKinkKPt4050", "P_{T}Kaon kinks identi centra40",150, 0., 15.0 );
+ fKinkKPt5060 = new TH1F("fKinkKPt5060", "P_{T}Kaon kinks identi centra50",150, 0., 15.0 );
+ fKinkKPt6070 = new TH1F("fKinkKPt6070", "P_{T}Kaon kinks identi centra60",150, 0., 15.0 );
+ fKinkKPt7080 = new TH1F("fKinkKPt7080", "P_{T}Kaon kinks identi centra70",150, 0., 15.0 );
+ fKinkKPt8090 = new TH1F("fKinkKPt8090", "P_{T}Kaon kinks identi centra80",150, 0., 15.0 );
+ fKinkMul05 = new TH1F("fKinkMul05", "charge Multipl kink-Kaons centr05",100, 2000.5, 12000.5 );
+ fKinkMul510 = new TH1F("fKinkMul510","charge Multipl kink-Kaons centr0510",100, 2000.5,12000.5 );
+ fKinkMul1020 = new TH1F("fKinkMul1020", "charge Multipl kink-Kaons centr1020",100, 0.5, 10000.5 );
+ fKinkMul2030 = new TH1F("fKinkMul2030", " charge Multipl kink-Kaons centr1020",100, 2000.5, 7000.5);
+ fKinkMul3040 = new TH1F("fKinkMul3040", "charge Multipl kink-Kaons centr1020",100, 0.5, 5000.5 );
+ fKinkMul4050 = new TH1F("fKinkMul4050", "charge Multipl kink-Kaons centr1020",100, 0.5, 5000.5 );
+ fKinkMul5060 = new TH1F("fKinkMul5060", " charge Multipl kink-Kaons centr1020",100, 0.5, 5000.5 );
+ fKinkMul6070 = new TH1F("fKinkMul6070", "charge Multipl kink-Kaons centr1020",100, 0.5, 5000.5 );
+ fKinkMul7080 = new TH1F("fKinkMul7080", "charge Multipl kink-Kaons centr1020",100, 0.5, 5000.5 );
+ fKinkMul8090 = new TH1F("fKinkMul8090", "charge Multipl kink-Kaons centr1020",100, 0.5, 5000.5 );
+ fRadiusNclAll = new TH2F("fRadiusNclAll","kink radius vrs Nclust,K",75,100.,250., 90,0, 180);
+ fRadiusNclK = new TH2F("fRadiusNclK","kink radius vrs Nclust,K",75,100.,250., 90,0, 180);
+ fRadiusNclClean = new TH2F("fRadiusNclClean","kink radius vrs Nclust,K",75,100.,250., 90,0, 180);
+fRatioCrossedRows = new TH1F("fRatioCrossedRows","Ratio crossed rows in TPC",20,0.0,1.0);
+ fRatioCrossedRowsKink = new TH1F("fRatioCrossedRowsKink","Ratio crossed rows in TPC for kinks",20,0.0,1.0);
+
+
+ fListOfHistos=new TList();
+ fListOfHistos->SetOwner();
+
+ fListOfHistos->Add(fHistPtESD);
+ fListOfHistos->Add(fHistPt);
+ fListOfHistos->Add(fHistQtAll);
+ fListOfHistos->Add(fHistQt1);
+ fListOfHistos->Add(fHistQt2);
+ fListOfHistos->Add(fHistPtKaon);
+ fListOfHistos->Add(fHistPtKPDG);
+ fListOfHistos->Add(fHistEta);
+ fListOfHistos->Add(fHistEtaK);
+ fListOfHistos->Add(fptKMC);
+ fListOfHistos->Add(fMultiplMC);
+ fListOfHistos->Add(fESDMult);
+ fListOfHistos->Add(frad);
+ fListOfHistos->Add(fKinkKaon);
+ fListOfHistos->Add(fKinKRbn);
+ fListOfHistos->Add(fKinkKaonBg);
+ fListOfHistos->Add(fM1kaon);
+ fListOfHistos->Add(fPtKink);
+ fListOfHistos->Add(fptKink);
+ fListOfHistos->Add(fAngMomK);
+ fListOfHistos->Add(fAngMomPi);
+ fListOfHistos->Add(fAngMomKC);
+ fListOfHistos->Add(fMultESDK);
+ fListOfHistos->Add(fMultMCK);
+ fListOfHistos->Add(fSignPtNcl);
+ fListOfHistos->Add(fSignPtEta);
+ fListOfHistos->Add(fEtaNcl);
+ fListOfHistos->Add(fSignPt);
+ fListOfHistos->Add(fChi2NclTPC);
+ fListOfHistos->Add(fRatChi2Ncl);
+ fListOfHistos->Add(fRadiusNcl);
+ fListOfHistos->Add(fTPCSgnlP);
+ fListOfHistos->Add(fTPCSgnlPa);
+ fListOfHistos->Add(fRpr);
+ fListOfHistos->Add(fZpr);
+ fListOfHistos->Add(fdcatoVxXY);
+ fListOfHistos->Add(fKinkMothDau);
+ fListOfHistos->Add(fZvXv);
+ fListOfHistos->Add(fZvYv);
+ fListOfHistos->Add(fXvYv);
+ fListOfHistos->Add(fPtPrKink);
+ fListOfHistos->Add(fHistPtKaoP);
+ fListOfHistos->Add(fHistPtKaoN);
+ fListOfHistos->Add(frapiKESD);
+ fListOfHistos->Add(flifetime);
+ fListOfHistos->Add(fradLK);
+ fListOfHistos->Add(fradPtRpDt);
+ fListOfHistos->Add(fInvMuNuAll);
+ fListOfHistos->Add(fQtInvM);
+ fListOfHistos->Add(fDCAkink);
+ fListOfHistos->Add(fPosiKink);
+ fListOfHistos->Add(fPosiKinkK);
+ fListOfHistos->Add(fPosiKinKXZ);
+ fListOfHistos->Add(fPosiKinKYZ);
+ fListOfHistos->Add(fQtMothP);
+ fListOfHistos->Add(fKinkKPt05);
+ fListOfHistos->Add(fKinkKPt510);
+ fListOfHistos->Add(fKinkKPt1020);
+ fListOfHistos->Add(fKinkKPt2030);
+ fListOfHistos->Add(fKinkKPt3040);
+ fListOfHistos->Add(fKinkKPt4050);
+ fListOfHistos->Add(fKinkKPt5060);
+ fListOfHistos->Add(fKinkKPt6070);
+ fListOfHistos->Add(fKinkKPt7080);
+ fListOfHistos->Add(fKinkKPt8090);
+ fListOfHistos->Add(fKinkMul05);
+ fListOfHistos->Add(fKinkMul510);
+ fListOfHistos->Add(fKinkMul1020);
+ fListOfHistos->Add(fKinkMul2030);
+ fListOfHistos->Add(fKinkMul3040);
+ fListOfHistos->Add(fKinkMul4050);
+ fListOfHistos->Add(fKinkMul5060);
+ fListOfHistos->Add(fKinkMul6070);
+ fListOfHistos->Add(fKinkMul7080);
+ fListOfHistos->Add(fKinkMul8090);
+ fListOfHistos->Add(fRadiusNclAll);
+ fListOfHistos->Add(fRadiusNclK);
+ fListOfHistos->Add(fRadiusNclClean);
+ fListOfHistos->Add(fRatioCrossedRows);
+ fListOfHistos->Add(fRatioCrossedRowsKink);
+
+
+ PostData(1, fListOfHistos);
+}
+
+//________________________________________________________________________
+void AliAnalysisKinkESDatION::UserExec(Option_t *)
+{
+ // Main loop
+ // Called for each event
+
+ // Process MC truth, therefore we receive the AliAnalysisManager and ask it for the AliMCEventHandler
+ // This handler can return the current MC event
+
+ AliVEvent *event = InputEvent();
+ if (!event) {
+ Printf("ERROR: Could not retrieve event");
+ return;
+ }
+
+ AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
+ if (!esd) {
+ Printf("ERROR: Could not retrieve esd");
+ return;
+ }
+
+//
+ fMultMCK->Fill(esd->GetNumberOfTracks());
+//
+///*
+// ==================check of Physics selection?
+ Bool_t isSelected =
+// ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB;
+((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kCentral;// 10/3/14
+
+ if ( isSelected ==kFALSE) return; //
+
+ Int_t nESDTracks = esd->GetNumberOfTracks();
+ fMultiplMC->Fill(nESDTracks);
+//*/
+//
+
+ AliCentrality *esdCentrality = esd->GetCentrality();
+//
+
+//
+
+ Float_t percent= esdCentrality->GetCentralityPercentile("V0M");
+// Printf("percentntile:%i", percent);
+ fradLK->Fill(percent ); //
+ if ( percent >= .0 && percent < 5.) fKinkMul05 -> Fill ( nESDTracks ); // percent 0-5
+ if ( percent >= 5. && percent < 10.) fKinkMul510->Fill( nESDTracks ); // percent 5-10
+ if ( percent >= 10. && percent < 20.) fKinkMul1020->Fill( nESDTracks ); // percent 10-20
+ if ( percent >= 20. && percent < 30.) fKinkMul2030->Fill( nESDTracks ); // percent 20-30
+ if ( percent >= 30. && percent < 40.) fKinkMul3040->Fill( nESDTracks ); // percent 30-40
+ if ( percent >= 40. && percent < 50.) fKinkMul4050->Fill( nESDTracks ); // percent 40-50
+ if ( percent >= 50. && percent < 60.) fKinkMul5060->Fill( nESDTracks ); // percent 50-60
+ if ( percent >= 60. && percent < 70.) fKinkMul6070->Fill( nESDTracks ); // percent 60-70
+ if ( percent >= 70. && percent < 80.) fKinkMul7080->Fill( nESDTracks ); // percent 70-80
+ if ( percent >= 80. && percent < 90.) fKinkMul8090->Fill( nESDTracks ); // percent 80-90
+
+// if ( centrality >=0 ) fMultESDK->Fill( percent);
+
+//
+
+ const AliESDVertex *vertex=GetEventVertex(esd); // 22/8
+ if(!vertex) return;
+//
+ Double_t vpos[3];
+ vertex->GetXYZ(vpos);
+ fZpr->Fill(vpos[2]);
+ if (TMath::Abs( vpos[2] ) > 10. ) return; // main vertex selection
+
+
+
+ Double_t vtrack[3], ptrack[3];
+
+
+ // Int_t nESDTracK = 0;
+
+ Int_t nGoodTracks = esd->GetNumberOfTracks();
+ fESDMult->Fill(nGoodTracks);
+//================================================================
+// apo Eftihi
+ if(!fPIDResponse) {
+ AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler* inputHandler =
+(AliInputEventHandler*)(man->GetInputEventHandler());
+ fPIDResponse = inputHandler->GetPIDResponse();
+ }
+
+ Double_t nsigmall = 100.0;
+ Double_t nsigma = 100.0;
+ // Double_t nsigmaPion =-100.0;
+// Double_t nsigmaPi=-100.0;
+
+//
+ Float_t nprimTrk =0.;
+// track loop
+ for (Int_t iTracks = 0; iTracks < esd->GetNumberOfTracks(); iTracks++) {
+
+ AliESDtrack* track = esd->GetTrack(iTracks);
+ if (!track) {
+ Printf("ERROR: Could not receive track %d", iTracks);
+ continue;
+ }
+
+ fHistPt->Fill(track->Pt());
+
+
+ // edw ypologizontai ta sigmas
+ // nsigma = TMath::Abs(fESDpid->NumberOfSigmasTPC(track,AliPID::kKaon));
+
+
+
+// sigmas
+ nsigmall = (fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon));
+// nsigma = TMath::Abs(fESDpid->NumberOfSigmasTPC(track,AliPID::kKaon));
+ // nsigmall = (fESDpid->NumberOfSigmasTPC(track,AliPID::kKaon));
+ nsigma = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon));
+
+//==================================
+ Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
+ Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;
+ if (track->GetTPCNclsF()>0) {
+ ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC / track->GetTPCNclsF();
+ fRatioCrossedRows->Fill(ratioCrossedRowsOverFindableClustersTPC);
+ }
+
+ fHistPt->Fill(track->Pt());
+
+
+
+ // Int_t tpcNClMoth = track->GetTPCclustersIter1(0); // 28/4/2010
+ Int_t tpcNCl = track->GetTPCclusters(0); // 25/1/2010
+ Double_t tpcSign = track->GetSign(); // 25/1/2010
+
+ Int_t label = track->GetLabel();
+ label = TMath::Abs(label);
+
+
+ UInt_t status=track->GetStatus();
+
+ if((status&AliESDtrack::kITSrefit)==0) continue;
+ if((status&AliESDtrack::kTPCrefit)==0) continue;
+ if((track->GetTPCchi2()/track->GetTPCclusters(0))>4.0) continue; //
+
+ Double_t extCovPos[15];
+ track->GetExternalCovariance(extCovPos);
+
+
+ track->GetXYZ(vtrack);
+ fXvYv->Fill(vtrack[0],vtrack[1]);
+ fZvYv->Fill(vtrack[0],vtrack[2]);
+ fZvXv->Fill(vtrack[1],vtrack[2]);
+
+// track momentum
+ track->GetPxPyPz(ptrack);
+
+ TVector3 trackMom(ptrack[0],ptrack[1],ptrack[2]);
+
+ Double_t etracK= TMath::Sqrt(trackMom.Mag()*trackMom.Mag() + 0.493677 *0.493677 ); // kaon energy
+ Double_t rapiditK = 0.5 * (TMath::Log( (etracK + ptrack[2] ) / ( etracK - ptrack[2]) )) ; // kaon rapidity
+
+ Double_t trackEta=trackMom.Eta();
+// Double_t trMoment=trackMom.Mag();
+ Double_t trackPt = track->Pt();
+
+
+
+ Float_t bpos[2];
+ Float_t bCovpos[3];
+ track->GetImpactParameters(bpos,bCovpos);
+
+ if (bCovpos[0]<=0 || bCovpos[2]<=0) {
+ Printf("Estimated b resolution lower or equal zero!");
+ bCovpos[0]=0; bCovpos[2]=0;
+ }
+
+ Float_t dcaToVertexXYpos = bpos[0];
+// Float_t dcaToVertexZpos = bpos[1];
+
+ // fRpr->Fill(dcaToVertexZpos);
+ fRpr ->Fill(dcaToVertexXYpos);
+ // === if((dcaToVertexXYpos>0.3)||(dcaToVertexZpos>2.5)) continue; // allagi-dokini 3/6
+
+ if (!fMaxDCAtoVtxCut->AcceptTrack(track)) continue;
+
+
+// count nprimTrk ????
+
+ nprimTrk++ ;
+//
+ // cut on eta
+ // xwris tea cut 25/3 if( (TMath::Abs(trackEta )) > 0.9 ) continue;
+
+ fHistPtESD->Fill(track->Pt());
+
+ // Add Kink analysis
+
+ Int_t indexKinkPos=track->GetKinkIndex(0);
+
+ if ( indexKinkPos >0 ) fHistPtESD->Fill(track->Pt());
+// loop on kinks
+ if(indexKinkPos<0){ ////mother kink
+ fPtKink->Fill(track->Pt()); /// pt from track
+
+ // select kink class
+
+ AliESDkink *kink=esd->GetKink(TMath::Abs(indexKinkPos)-1);
+ fRatioCrossedRowsKink->Fill(ratioCrossedRowsOverFindableClustersTPC);
+
+//
+ // DCA kink
+ Double_t Dist2 = kink->GetDistance();
+ fDCAkink->Fill( Dist2 );
+//
+ Int_t ESDLabeld = kink->GetLabel(1);
+//
+
+
+ const TVector3 vposKink(kink->GetPosition());
+ fPosiKink ->Fill( vposKink[0], vposKink[1] );
+
+// 24/3
+// if ( vposKink[2] < -160. ) continue; // cut for background
+//
+// Double_t lengthK = TMath::Sqrt( vposKink[0]*vposKink[0] + vposKink[1]*vposKink[1] + vposKink[2]*vposKink[2] ) ;
+ // Double_t dxKink = vpos[0]-vposKink[0], dyKink=vpos[1]-vposKink[1], dzKink=vpos[2]-vposKink[2];
+ Double_t dzKink=vpos[2]-vposKink[2];
+ // Double_t lifeKink= TMath::Sqrt( dxKink*dxKink + dyKink*dyKink + dzKink*dzKink ) ;
+//
+ Double_t tanLamda = track->GetTgl(); // 25/6/2010
+
+ // Double_t lifeKink= (TMath::Abs( dzKink ))*( TMath::Sqrt(1.+ tanLamda*tanLamda) ) / tanLamda ;
+ Double_t lifeKink= (TMath::Abs( dzKink ))*( TMath::Sqrt(1.+ tanLamda*tanLamda) ) / (TMath::Abs( tanLamda)) ;
+ const TVector3 motherMfromKink(kink->GetMotherP());
+ const TVector3 daughterMKink(kink->GetDaughterP());
+
+ Float_t qT=kink->GetQt();
+ // Float_t motherPt=motherMfromKink.Pt();
+ // Float_t etaMother=motherMfromKink.Eta();
+
+ fHistQtAll->Fill(qT) ; // Qt distr
+
+ // fptKink->Fill(motherMfromKink.Pt()); /// pt from kink
+
+ Float_t kinkAngle=TMath::RadToDeg()*kink->GetAngle(2);
+
+// Rapidity Cut
+ // if( (TMath::Abs(etaMother)) > 0.9 ) continue;
+ if( (TMath::Abs(rapiditK )) > 0.5 ) continue;
+// Pt cut
+ if ( (track->Pt())<.200)continue;
+
+// fake kinks, small Qt and small kink angle
+ fQtMothP->Fill( track->P(), qT);
+
+// if(qT<0.012) continue; // remove fake kinks
+ if ( qT> 0.04) fHistQt1 ->Fill(qT) ; // Qt distr , without pions and BG
+
+
+ fHistEta->Fill(trackEta) ; // Eta distr of PDG kink ESD kaons
+ fHistQt2->Fill(qT); // PDG ESD kaons
+
+// maximum decay angle at a given mother momentum
+ Double_t maxDecAngKmu=f1->Eval(track->P() ,0.,0.,0.);
+ Double_t maxDecAngpimu=f2->Eval( track->P(), 0.,0.,0.);
+//
+// 31/1/010 if( motherMfromKink.Mag() < daughterMKink.Mag() ) continue;
+//remove the double taracks
+ // 28/4/2010 if( (kinkAngle<1.) ) continue;
+ if( (kinkAngle<2.) ) continue;
+ // if(qT<0.012) continue; // remove fake kinks
+ // BG ?????==============
+ if ( TMath::Abs(vposKink[2]) > 225. ) continue ;
+ // if ( TMath::Abs(vposKink[2]) < 0.5 ) continue ;
+
+ fKinkKaonBg->Fill(track->Pt());
+ fAngMomPi->Fill( track->P(), kinkAngle);
+ // fRadiusNclAll->Fill( (kink->GetR()) ,(track->GetTPCclusters(0) ) ) ;
+ // 2/12 test fRadiusNclAll->Fill( (kink->GetR()) ,(track->GetNcls(1) ) ) ;
+//
+// invariant mass of mother track decaying to mu
+ Float_t energyDaughterMu=TMath::Sqrt(daughterMKink.Mag()*daughterMKink.Mag()+0.105658*0.105658);
+ Float_t p1XM= motherMfromKink.Px();
+ Float_t p1YM= motherMfromKink.Py();
+ Float_t p1ZM= motherMfromKink.Pz();
+ Float_t p2XM= daughterMKink.Px();
+ Float_t p2YM= daughterMKink.Py();
+ Float_t p2ZM= daughterMKink.Pz();
+ Float_t p3Daughter=TMath::Sqrt(((p1XM-p2XM)*(p1XM-p2XM))+((p1YM-p2YM)*(p1YM-p2YM))+((p1ZM-p2ZM)*(p1ZM-p2ZM)));
+ Double_t invariantMassKmu= TMath::Sqrt((energyDaughterMu+p3Daughter)*(energyDaughterMu+p3Daughter)-motherMfromKink.Mag()*motherMfromKink.Mag());
+ fQtInvM -> Fill ( invariantMassKmu, qT);
+ fInvMuNuAll->Fill(invariantMassKmu);
+ // Float_t ptKink=TMath::Sqrt(p1XM*p1XM + p1YM*p1YM);
+
+ if( ( kink->GetR()> 110 ) && ( kink->GetR() < 220 ) ) {
+ if (qT>0.04) fAngMomKC->Fill(track->P(), kinkAngle);
+ // 2/10 if (qT>0.12) fAngMomKC->Fill(track->P(), kinkAngle);
+ if ( qT>0.04) fM1kaon->Fill(invariantMassKmu);
+ // if ( qT > 0.12)
+ if ( qT > 0.04)
+ fRadiusNclAll->Fill( (kink->GetR()) ,(track->GetTPCclusters(0) ) ) ; // mother's clusters
+ // fRadiusNcl->Fill( (kink->GetR()) ,(track->GetTPCclusters(0) ) ) ;
+// try for daughters ncl
+ if ( label = ESDLabeld ) fRadiusNcl->Fill( (kink->GetR()) ,(track->GetNcls(1) ) ); // Dau's clusters;
+ }
+ if( ( tpcNCl<20) ) continue;
+ Int_t tpcNClHigh = -51.67+ (11./12.) *( kink->GetR() ) ;
+ if ( tpcNCl > tpcNClHigh) continue;
+
+ Int_t tpcNClMin = -85.5 + (65./95.) *( kink->GetR() ) ;
+ if ( tpcNCl < tpcNClMin ) continue;
+
+// if( ( ( track->GetTPCclusters(0) ) / (kink->GetR() ) ) > 0.63 ) continue;
+ // if( ( ( track->GetTPCclusters(0) ) / (kink->GetR() ) ) < 0.20 ) continue;
+
+//
+ fHistPtKPDG->Fill(track->Pt()); // ALL KAONS (pdg) inside ESD kink sample
+ fRadiusNclK->Fill( (kink->GetR()) ,(track->GetTPCclusters(0) ) ) ;
+
+ //fM1kaon->Fill(invariantMassKmu);
+
+ // frad->Fill(kink->GetR()); // kink
+// kaon selection from kinks
+ // if((kinkAngle>maxDecAngpimu)&&(qT>0.04)&&(qT<0.30)&&((kink->GetR()>=120.)&&(kink->GetR()<=200.))&&(TMath::Abs(etaMother)<0.9)&&(invariantMassKmu<0.6)){
+//---------------------------------
+ if((kinkAngle>maxDecAngpimu)&&(qT>0.12)&&(qT<0.30)&&((kink->GetR()>=110.)&&(kink->GetR()<=220.))&&(TMath::Abs(rapiditK)<0.5)&&(invariantMassKmu<0.8)){
+//-----------------------
+ // 16/10 if((kinkAngle>maxDecAngpimu)&&(qT>0.04)&&(qT<0.30)&&((kink->GetR()>=120.)&&(kink->GetR()<=210.))&&(TMath::Abs(rapiditK)<0.7)&&(invariantMassKmu<0.6)){
+// if((kinkAngle>maxDecAngpimu)&&(qT>0.04)&&(qT<0.30)&&((kink->GetR()>=133.)&&(kink->GetR()<=179.))&&(TMath::Abs(rapiditK)<0.5)&&(invariantMassKmu<0.6)){ // STAR
+
+ if( (kinkAngle<maxDecAngpimu*1.1) ) continue;
+ if ( (kinkAngle>maxDecAngKmu*.98) && ( track->P() >1.1 )) continue; ///5/5/2010
+ // fAngMomKC->Fill(motherMfromKink.Mag(), kinkAngle);
+
+ // fAngMomKC->Fill(track->P(), kinkAngle);
+
+ // fTPCSgnlPa->Fill( trMoment ,(track->GetTPCsignal() ) ) ;
+ fTPCSgnlPa->Fill( track->GetInnerParam()->GetP() ,(track->GetTPCsignal() ) ) ;
+//
+
+ if ( nsigma > 3.5) continue;
+ // if ( nsigma > 4.0) continue;
+ // fMultESDK->Fill(nGoodTracks);
+ fHistPtKaon->Fill(track->Pt()); //all PID kink-kaon
+ if(tpcSign >0.) fHistPtKaoP->Fill( track->Pt() ) ; //all PID kink-kaon
+ if ( tpcSign <0.) fHistPtKaoN->Fill( track->Pt() ) ; //all PID kink-kaon
+// percentile centrality
+ if ( percent >= .0 && percent < 5.) fKinkKPt05 -> Fill ( track->Pt() ); // percent 0-5
+ if ( percent >= 5. && percent < 10.) fKinkKPt510->Fill( track->Pt() ); // percent 5-10
+ if ( percent >= 10. && percent < 20.) fKinkKPt1020->Fill( track->Pt() ); // percent 10-20
+ if ( percent >= 20. && percent < 30.) fKinkKPt2030->Fill( track->Pt() ); // percent 20-30
+ if ( percent >= 30. && percent < 40.) fKinkKPt3040->Fill( track->Pt() ); // percent 30-40
+ if ( percent >= 40. && percent < 50.) fKinkKPt4050->Fill( track->Pt() ); // percent 40-50
+ if ( percent >= 50. && percent < 60.) fKinkKPt5060->Fill( track->Pt() ); // percent 50-60
+ if ( percent >= 60. && percent < 70.) fKinkKPt6070->Fill( track->Pt() ); // percent 60-70
+ if ( percent >= 70. && percent < 80.) fKinkKPt7080->Fill( track->Pt() ); // percent 70-80
+ if ( percent >= 80. && percent < 90.) fKinkKPt8090->Fill( track->Pt() ); // percent 80-90
+//
+ frad->Fill(kink->GetR()); // kink
+ //frad->Fill(lengthK ); // kink
+ // fradLK->Fill(lifeKink ); // kink
+ fHistEtaK->Fill(trackEta);
+ frapiKESD ->Fill(rapiditK); // rapidityof kaons
+
+ Float_t signPt= tpcSign*trackPt;
+ //fSignPtNcl->Fill( signPt , tpcNCl );
+ fSignPtNcl->Fill( signPt , tpcNCl ); /// 28/4/2010
+ fSignPtEta->Fill( signPt , rapiditK );
+ fEtaNcl->Fill( rapiditK, tpcNCl );
+ fSignPt->Fill( signPt );
+ fChi2NclTPC->Fill( (track->GetTPCchi2() ) , tpcNCl );
+ fRatChi2Ncl-> Fill ( (track->GetTPCchi2()/track->GetTPCclusters(0) )) ;
+ fdcatoVxXY->Fill(dcaToVertexXYpos);
+ //if( ( (trMoment<0.4)&&(track->GetTPCsignal()<60) )||( (trMoment<0.6 )&&(track->GetTPCsignal()<50 )) )
+ // fRadiusNcl->Fill( (kink->GetR()) ,(track->GetTPCclusters(0) ) ) ;
+ // if( ( (trMoment<0.4)&&(track->GetTPCsignal()<60) )||( (trMoment<0.6 )&&(track->GetTPCsignal()<50 )) )
+ fKinkMothDau->Fill(track->P(),daughterMKink.Mag());
+ // fEtaNcl->Fill( trackEta, tpcNCl );
+ // Double_t tpcdedx=100000.* TMath::Abs( track->GetTPCsignal());
+ // fTPCSgnlP->Fill( track->P() ,tpcdedx ) ;
+ // fTPCSgnlP->Fill(track->P(), (track->GetTPCsignal() ) ) ;
+ fTPCSgnlP->Fill(track->GetInnerParam()->GetP(), (track->GetTPCsignal() ) ) ;
+ fRadiusNclClean ->Fill( (kink->GetR()) ,(track->GetTPCclusters(0) ) ) ;
+//
+ flifetime->Fill(( lifeKink*.493667 ) /track->P() ) ;
+ // 15/7 flifetime->Fill(( lifeKink*.493667 ) /track->Pt() ) ;
+//
+ fKinkKaon->Fill(track->Pt());
+//
+
+ fKinKRbn->Fill(track->Pt());
+ fptKMC ->Fill( track->Pt() );
+ fradPtRpDt->Fill( kink->GetR(), 1./track->Pt(), rapiditK);
+ fAngMomK->Fill( track->P(), kinkAngle);
+ fPosiKinkK->Fill( vposKink[0], vposKink[1] );
+ fPosiKinKXZ->Fill( vposKink[0], vposKink[2] );
+ fPosiKinKYZ->Fill( vposKink[1], vposKink[2] );
+
+ } // kink selection
+
+
+ } //End Kink Information
+
+
+ } //track loop
+ // fMultESDK->Fill(nprimTrk);
+
+// } // close persent 11 may 2011
+
+ PostData(1, fListOfHistos);
+
+}
+
+//________________________________________________________________________
+void AliAnalysisKinkESDatION::Terminate(Option_t *)
+{
+ // Draw result to the screen
+ // Called once at the end of the query
+
+}
+//*
+
+const AliESDVertex* AliAnalysisKinkESDatION::GetEventVertex(const AliESDEvent* esd) const
+ // Get the vertex from the ESD and returns it if the vertex is valid
+
+{
+ // Get the vertex
+
+// const AliESDVertex* vertex = esd->GetPrimaryVertex();
+ const AliESDVertex* vertex = esd->GetPrimaryVertexTracks();
+
+ if((vertex->GetStatus()==kTRUE)) return vertex;
+ else
+ {
+ vertex = esd->GetPrimaryVertexSPD();
+ if((vertex->GetStatus()==kTRUE)&&(vertex->GetNContributors()>0)) return vertex;
+ else
+ return 0;
+ }
+}
--- /dev/null
+#ifndef ALIANALYSISKINKESDatION_H
+#define ALIANALYSISKINKESDatION_H
+
+/* See cxx source for full Copyright notice */
+
+//-----------------------------------------------------------------
+// AliAnalysisKinkESDatION class
+// This task is an example of an analysis task
+// for kink topology study in Pb-Pb collisions
+// Authors: Martha Spyropoulou-Stassinaki
+// and members of the Greek group at the
+// Physics Department of Athens University
+// mspyrop@phys.uoa.gr
+//-----------------------------------------------------------------
+//class AliTPCPIDResponse;
+class AliPIDResponse;
+class AliESDVertex;
+class AliESDtrack;
+class TF1;
+class TH1F;
+class TH2F;
+class TH3F;
+class TH1D;
+class TH2D;
+class TList;
+class AliESDtrackCuts;
+class AliPhysicsSelection;
+
+
+#include "AliAnalysisTaskSE.h"
+
+class AliAnalysisKinkESDatION : public AliAnalysisTaskSE {
+ public:
+ // AliAnalysisKinkESDatION();
+ AliAnalysisKinkESDatION(const char *name = "AliAnalysisKinkESDatION");
+ virtual ~AliAnalysisKinkESDatION() {}
+
+ virtual void UserCreateOutputObjects();
+ virtual void UserExec(Option_t *option);
+ virtual void Terminate(Option_t *);
+
+// 3/6 Float_t GetSigmaToVertex(AliESDtrack* esdTrack) const;
+ const AliESDVertex *GetEventVertex(const AliESDEvent* esd) const;
+
+ private:
+ TH1F *fHistPtESD; //Pt spectrum of all ESD inside eta, Pt cuts
+ TH1F *fHistPt; //Pt spectrum of all ESD tracks
+ TH1F *fHistQtAll; //Qt spectrum of all kinks
+ TH1F *fHistQt1; //Qt spectrum of Kaon selected sample
+ TH1F *fHistQt2; //Qt spectrum in Qt region of kaons
+ TH1F *fHistPtKaon; //Pt Kaon spectrum of clean sample
+ TH1F *fHistPtKPDG; //Pt Kaon spectrum , confirmed by PDG,inside kaon Qt region
+ TH1F *fHistEta; //Eta spectrum of all kinks
+ TH1F *fHistEtaK; //Eta spectrum of kaons selected by kink topology
+ TH1F *fptKMC; //Pt Kaon spectrum MC, inside eta and pt cuts
+ TH1F *fMultiplMC; //charge multipl MC
+ TH1F *fESDMult; //ESD charged mult
+ TH1F *frad; //radius of kinks, MC , inside the eta nad Pt cuts
+ TH1F *fKinkKaon; //Pt of PDG Kaons inside the selcted ones by the KInk topology
+ TH1F *fKinKRbn; //Pt of PDG Kaons inside the selcted ones by the KInk topology
+ TH1F *fKinkKaonBg; //Pt of the BG inside the kink-Kaon identified spectrum
+ TH1F *fM1kaon; //inv mass of kink-tracks taken as kaons decaying to mu + neutrino
+ TH1F *fPtKink; //Pt spectrum of all kinks from track bank
+ TH1F *fptKink; //Pt spectrum of all kinks from kink bank
+ TH2F *fAngMomK; // Decay angle vrs Mother Mom for pdg kaons
+ TH2F *fAngMomPi; // Decay angle vrs Mother Mom for pdg pions
+ TH2F *fAngMomKC; //Decay angle vrs Mother Mom for pdg kaons, inside the selected sample
+ TH1F *fMultESDK; //ESD charged mult
+ TH1F *fMultMCK; //MC K charged mult
+ TH2F *fSignPtNcl;//signPt vrs number of clusters in TPC for kaons from kink sele sample
+ TH2F *fSignPtEta;//signPt vrs Eta in TPC for kaons from kink sele sample
+ TH2F *fEtaNcl;//Eta vrs Nclu in TPC for kaons from kink sele sample
+ TH1F *fSignPt;//signPt in TPC for kaons from kink sele sample
+ TH2F *fChi2NclTPC;//chi2 vrs TPC Nclusters for kaons from kink sele sample
+ TH1F *fRatChi2Ncl;// Ratio chi2/ Ncl TPC for kaons from kink sele sample
+ TH2F *fRadiusNcl;//kink Radius Ncl TPC for kaons from kink sele sample
+ TH2F *fTPCSgnlP;//kink Radius Ncl TPC for kaons from kink sele sample
+ TH2F *fTPCSgnlPa;//kink Radius Ncl TPC for kink sele sample
+ TH1D *fRpr; // Radius of VTX at Y , X plane
+ TH1D *fZpr; //Z distrio of main vertex
+ TH1D *fdcatoVxXY; //dca to Vertex XY distrio
+ TH2F *fKinkMothDau; //Mother vrs Daughter
+ TH2F *fZvXv; //two dime of Z vrs X of vtx main
+ TH2F *fZvYv; // two dime of Z vrs Y of vtx main
+ TH2F *fXvYv; // two dime of X vrs Y of main tracks vtx main
+ TH1F *fPtPrKink; // pt of Primary PDG kaons inside the selected ones by the kink topology
+ TH1F *fHistPtKaoP; //Pt Kaon spectrum of clean sample pos
+ TH1F *fHistPtKaoN; //Pt Kaon spectrum of clean sample neg
+ TH1F *frapiKESD;// rapidi K
+ TH1F *flifetime;//radius of kinks, MC , inside the eta nad Pt cuts
+ TH1F *fradLK;//Length of kinks, MC , inside the eta nad Pt cuts
+ TH3F *fradPtRpDt;//radius of kinks, MC , inside the eta nad Pt cuts
+ TH1F *fInvMuNuAll;//radius of kinks, MC , inside the eta nad Pt cuts
+ TH2F *fQtInvM;//
+ TH1F *fDCAkink;//!MC dcs kink
+ TH2F *fPosiKink;//!MC position kink
+ TH2F *fPosiKinkK;//!MC position kink
+ TH2F *fPosiKinKXZ;//!MC position kink
+ TH2F *fPosiKinKYZ;//!MC position kink
+ TH2F *fQtMothP;//!qt vrs p mother
+ TH1F *fKinkKPt05; //Pt of Kaons selcted centrality 0-5
+ TH1F *fKinkKPt510; //Pt of Kaons Selcted centrality 5-10
+ TH1F *fKinkKPt1020; //Pt of aons selcted centrality 10-20
+ TH1F *fKinkKPt2030; //Pt of Kaons selcted with centrality 20-30
+ TH1F *fKinkKPt3040; //Pt of Kaons selcted inside centrality 30-40
+ TH1F *fKinkKPt4050; //Pt of Kaons selcted inside centrality 40-50
+ TH1F *fKinkKPt5060; //Pt of Kaons selcted inside centrality 50-60
+ TH1F *fKinkKPt6070; //Pt of Kaons selcted inside centrality 60-70
+ TH1F *fKinkKPt7080; //Pt of Kaons selcted inside centrality 70-80
+ TH1F *fKinkKPt8090; //Pt of Kaons selcted inside centrality 80-90
+ TH1F *fKinkMul05; //Pt of Kaons selcted centrality 0-5
+ TH1F *fKinkMul510; //Pt of Kaons Selcted centrality 5-10
+ TH1F *fKinkMul1020; //Pt of aons selcted centrality 10-20
+ TH1F *fKinkMul2030; //Pt of Kaons selcted with centrality 20-30
+ TH1F *fKinkMul3040; //Pt of Kaons selcted inside centrality 30-40
+ TH1F *fKinkMul4050; //Pt of Kaons selcted inside centrality 40-50
+ TH1F *fKinkMul5060; //Pt of Kaons selcted inside centrality 50-60
+ TH1F *fKinkMul6070; //Pt of Kaons selcted inside centrality 60-70
+ TH1F *fKinkMul7080; //Pt of Kaons selcted inside centrality 70-80
+ TH1F *fKinkMul8090; //Pt of Kaons selcted inside centrality 80-90
+ TH2F *fRadiusNclAll;//kink Radius Ncl TPC for kaons from kink sele sample
+ TH2F *fRadiusNclK;//kink Radius Ncl TPC for kaons from kink sele sample
+ TH2F *fRadiusNclClean;//kink Radius Ncl TPC for kaons from kink sele sample
+ TH1F *fRatioCrossedRows;//kink
+ TH1F *fRatioCrossedRowsKink;//kink
+
+ TF1 *f1;
+ TF1 *f2;
+ TList *fListOfHistos; // list of histos
+ AliESDtrackCuts* fMaxDCAtoVtxCut;
+ AliPIDResponse *fPIDResponse; //! PID response object
+
+ AliAnalysisKinkESDatION(const AliAnalysisKinkESDatION&); // not implemented
+ AliAnalysisKinkESDatION& operator=(const AliAnalysisKinkESDatION&); // not implemented
+
+ ClassDef(AliAnalysisKinkESDatION, 1); // example of analysis
+};
+
+#endif
--- /dev/null
+#include "TCanvas.h"
+#include "TVector3.h"
+#include "TLorentzVector.h"
+#include "TMath.h"
+#include "TF1.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TH3.h"
+#include "TList.h"
+#include "TParticle.h"
+
+#include "AliVParticle.h"
+#include "AliESDEvent.h"
+#include "AliESDkink.h"
+#include "AliESDpid.h"
+#include "AliPID.h"
+#include "AliStack.h"
+
+#include "AliAnalysisTask.h"
+#include "AliInputEventHandler.h"
+#include "AliESDInputHandler.h"
+#include "AliPIDResponse.h"
+#include "AliAnalysisManager.h"
+#include "AliESDtrackCuts.h"
+
+#include "AliAnalysisPionKinksESD.h"
+
+ClassImp(AliAnalysisPionKinksESD)
+
+//________________________________________________________________________
+AliAnalysisPionKinksESD::AliAnalysisPionKinksESD(const char *name)
+:AliAnalysisTaskSE(name),
+fMaxKinkAngKmu(0),
+fMaxKinkAngPimu(0), //functions
+
+hMult(0),
+hAcceptedMult(0),
+hMultPS(0),
+hvtx(0),
+hvtxy(0),
+hvtyz(0),
+hvtxz(0),
+hMultPSV(0),
+hPtAll(0),
+hEtaAll(0),
+hTrackPos(0),
+hTrackPosxy(0),
+hTrackPosyz(0),
+hTrackPosxz(0),
+//hTPCchi2clusters(0),
+//hdcaToVertexXY(0),
+//hdcaToVertexZ(0),
+hMultPrim(0),
+hPtPrim(0),
+hEtaPrim(0),
+hPrimTrackPos(0),
+hPrimTrackPosxy(0),
+hPrimTrackPosyz(0),
+hPrimTrackPosxz(0),
+hPt(0),
+hEta(0),
+//hRapidity(0),
+hPtKink(0),
+hEtaKink(0),
+hRapidityKink(0),
+hPmP(0),
+hKinkPosRTPCclusters1(0),
+hKinkPosRTPCclusters2(0),
+hQt(0),
+hKinkAngle(0),
+hDCAkink(0),
+hPmKinkAng(0),
+hKinkPosXY(0),
+hKinkPosZY(0),
+hKinkPosZR(0),
+hKinkPosR(0),
+hKinkPosZ(0),
+hPmd(0),
+hMinvPimu(0),
+hdEdx(0),
+hPtPosRSelected(0),
+hPtZSelected(0),
+hPtAngSelected(0),
+hPtPmSelected(0),
+hPtGoodKink(0),
+hEtaGoodKink(0),
+hRapidityGoodKink(0),
+hQtGoodKink(0),
+hPmGoodKinkAng(0),
+hPmdGoodKink(0),
+hdEdxGoodKink(0),
+hPtQtSelected(0),
+hPtMaxAngSelected(0),
+hPtRTPCclustersSelected(0),
+hRTPCclustersRTPCclustersSelected(0),
+hPtSelected(0),
+hEtaSelected(0),
+hRapiditySelected(0),
+hQtSelected(0),
+hKinkAngleSelected(0),
+hDCAkinkSelected(0),
+hPmKinkAngSelected(0),
+hKinkPosXYSelected(0),
+hKinkPosZRSelected(0),
+hKinkPosRSelected(0),
+hPmdSelected(0),
+hMinvPimuSelected(0),
+hdEdxSelected(0),
+hPtPiSelected(0),
+hEtaPiSelected(0),
+hRapidityPiSelected(0),
+hQtPiSelected(0),
+hKinkAnglePiSelected(0),
+hDCAkinkPiSelected(0),
+hPmKinkAngPiSelected(0),
+hKinkPosRTPCclusters1PiSelected(0),
+hKinkPosRTPCclusters2PiSelected(0),
+hKinkPosXYPiSelected(0),
+hKinkPosZRPiSelected(0),
+hKinkPosRPiSelected(0),
+hKinkPosZPiSelected(0),
+hPmPPiSelected(0),
+hPmdPiSelected(0),
+hMinvPimuPiSelected(0),
+hdEdxPiSelected(0),
+hPtPiSelectedPlus(0),
+hEtaPiSelectedPlus(0),
+hRapidityPiSelectedPlus(0),
+hQtPiSelectedPlus(0),
+hKinkAnglePiSelectedPlus(0),
+hDCAkinkPiSelectedPlus(0),
+hPmKinkAngPiSelectedPlus(0),
+hKinkPosXYPiSelectedPlus(0),
+hKinkPosZRPiSelectedPlus(0),
+hPmdPiSelectedPlus(0),
+hMinvPimuPiSelectedPlus(0),
+hdEdxPiSelectedPlus(0),
+hPtPiSelectedMinus(0),
+hEtaPiSelectedMinus(0),
+hRapidityPiSelectedMinus(0),
+hQtPiSelectedMinus(0),
+hKinkAnglePiSelectedMinus(0),
+hDCAkinkPiSelectedMinus(0),
+hPmKinkAngPiSelectedMinus(0),
+hKinkPosXYPiSelectedMinus(0),
+hKinkPosZRPiSelectedMinus(0),
+hPmdPiSelectedMinus(0),
+hMinvPimuPiSelectedMinus(0),
+hdEdxPiSelectedMinus(0), // reconstruction histograms
+fListOfHistos(0),
+fLowMulcut(-1), fUpMulcut(-1),
+cLowPt(0), cRapidityLim(0),
+cLowR(0), cUpR(0),
+cLowZ(0), cUpZ(0),
+cLowKinkAngle(0),
+cLowQt(0), cUpQt(0),
+cLowInvMass(0), cUpInvMass(0),
+cSigmaCut(0),
+cPdgKaon(321), cPdgPion(211), cPdgMuon(13), cPdgElectron(11),
+cKaonMass(0), cPionMass(0), cMuonMass(0), cElectronMass(0),
+nBinsMult(0), hLowMult(0), hUpMult(0),
+nBinsPt(0), hLowPt(0), hUpPt(0),
+nBinsEta(0), hLowEta(0), hUpEta(0),
+nBinsQt(0), hLowQt(0), hUpQt(0),
+nBinsR(0), hLowR(0), hUpR(0),
+nBinsZ(0), hLowZ(0), hUpZ(0),
+nBinsXY(0), hLowXY(0), hUpXY(0),
+nBinsAngle(0), hLowAngle(0), hUpAngle(0),
+nBinsZV(0), hLowZV(0), hUpZV(0),
+nBinsXYV(0), hLowXYV(0), hUpXYV(0),
+nBinsInvMass(0), hLowInvMass(0), hUpInvMass(0),
+nBinsdEdx(0), hLowdEdx(0), hUpdEdx(0), fPIDResponse(0),
+fMaxDCAtoVtxCut(0), fTrackCuts(0)
+
+{
+//Multiplicity bins
+fMaxDCAtoVtxCut=new AliESDtrackCuts("fMaxDCAtoVtxCut","fMaxDCAtoVtxCut");
+fMaxDCAtoVtxCut->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
+fMaxDCAtoVtxCut->SetMaxChi2TPCConstrainedGlobal(36);
+
+fTrackCuts = new AliESDtrackCuts("Multiplicity bins","Multiplicity bins");
+fTrackCuts->SetMinNClustersTPC(70);
+fTrackCuts->SetMaxChi2PerClusterTPC(4);
+fTrackCuts->SetAcceptKinkDaughters(kFALSE);
+fTrackCuts->SetRequireTPCRefit(kTRUE);
+fTrackCuts->SetRequireITSRefit(kTRUE);
+fTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
+fTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
+fTrackCuts->SetMaxDCAToVertexZ(2);
+fTrackCuts->SetDCAToVertex2D(kFALSE);
+fTrackCuts->SetRequireSigmaToVertex(kFALSE);
+fTrackCuts->SetEtaRange(-0.8,+0.8);
+fTrackCuts->SetPtRange(0.15, 1e10);
+
+//DefineOutput(0, TList::Class());
+DefineOutput(1, TList::Class());
+}
+
+//________________________________________________________________________
+void AliAnalysisPionKinksESD::UserCreateOutputObjects() {
+fListOfHistos=new TList();
+
+//maximum kink angle for kaons to muons
+fMaxKinkAngKmu=new TF1("fMaxKinkAngKmu","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",1.1,10.0);
+fMaxKinkAngKmu->SetParameter(0,cKaonMass);
+fMaxKinkAngKmu->SetParameter(1,0.9127037);
+fMaxKinkAngKmu->SetParameter(2,TMath::Pi());
+
+//maximum kink angle for pions to muons
+fMaxKinkAngPimu=new TF1("fMaxKinkAngPimu","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",0.1,10.0);
+fMaxKinkAngPimu->SetParameter(0,cPionMass);
+fMaxKinkAngPimu->SetParameter(1,0.2731374);
+fMaxKinkAngPimu->SetParameter(2,TMath::Pi());
+
+//Create histograms
+TH1::SetDefaultSumw2();
+TH2::SetDefaultSumw2();
+
+
+//Reconstruction histograms
+hMult = new TH1F("hMult", "Multiplicity (unbiased); Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hAcceptedMult = new TH1F("hAcceptedMult", "Multiplicity (biased); Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hMultPS = new TH1F("hMultPS", "Multiplicity after physics selection; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hvtx = new TH3F("hvtx", "Reconstructed primary vertex position; x axis; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hvtxy = new TH2F("hvtxy", "Reconstructed primary vertex position in x-y plane; x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV);
+hvtyz = new TH2F("hvtyz", "Reconstructed primary vertex position in y-z plane; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hvtxz = new TH2F("hvtxz", "Reconstructed primary vertex position in x-z plane; x axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hMultPSV = new TH1F("hMultPSV", "Multiplicity after physics selection & vertex cut; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hPtAll = new TH1F("hPtAll", "Transverse momentum of all tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaAll = new TH1F("hEtaAll", "Pseudorapidity of all tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hTrackPos = new TH3F("hTrackPos", "Generetion position of all reconstructed tracks", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hTrackPosxy = new TH2F("hTrackPosxy", "Generetion position of all reconstructed tracks in x-y plane; x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV);
+hTrackPosyz = new TH2F("hTrackPosyz", "Generetion position of all reconstructed tracks in y-z plane; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hTrackPosxz = new TH2F("hTrackPosxz", "Generetion position of all reconstructed tracks in x-z plane; x axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+//hTPCchi2clusters = new TH1F("hTPCchi2clusters", "#chi^{2}/Number of TPC clusters; #chi^{2}; TPC clusters)", 100, 0.0, 2.0);//
+//hdcaToVertexXY = new TH1F("hdcaToVertexXY", "Track to vertex impact parameter in x-y plane; DCA_{z} (cm); dN/d(DCA_{z})", 100, 0.0, 2.0);//
+//hdcaToVertexZ = new TH1F("hdcaToVertexZ", "Track to vertex impact parameter in z axis; DCA_{z} (cm); dN/d(DCA_{z})", 100, 0.0, 2.0);//
+hMultPrim = new TH1F("hMultPrim", "ESD primary - supposed tracks multiplicity; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hPtPrim = new TH1F("hPtPrim", "Transverse momentum of primary - supposed ESD tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPrim = new TH1F("hEtaPrim", "Pseudorapidity of primary - supposed ESD tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hPrimTrackPos = new TH3F("hPrimTrackPos", "Generetion position of selected tracks (DCA and quality cuts)", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hPrimTrackPosxy = new TH2F("hPrimTrackPosxy", "Generetion position of selected tracks in x-y plane (DCA and quality cuts); x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV);
+hPrimTrackPosyz = new TH2F("hPrimTrackPosyz", "Generetion position of selected tracks in y-z plane (DCA and quality cuts); y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hPrimTrackPosxz = new TH2F("hPrimTrackPosxz", "Generetion position of selected tracks in x-z plane (DCA and quality cuts); x axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hPt = new TH1F("hPt", "Transverse momentum of selected ESD tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEta = new TH1F("hEta", "Pseudorapidity of selected ESD tracks; n; Number of tracks dN/dn", nBinsEta, hLowEta, hUpEta);
+//hRapidity = new TH1F("hRapidity", "Rapidity of selected ESD tracks; n; Number of tracks dN/dn", nBinsEta, hLowEta, hUpEta);
+hPtKink = new TH1F("hPtKink", "Mother's transverse momentum for all ESD kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaKink = new TH1F("hEtaKink", "Mother's pseudorapidity for all ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityKink = new TH1F("hRapidityKink", "Mother's rapidity for all ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hPmP = new TH2F("hPmP", "Mother's momentum as calculated by kink and by track; P_{kink}; P_{track}", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hKinkPosRTPCclusters1 = new TH1F("hKinkPosRTPCclusters1", " ;kinkposR; tpc clusters",100,0,1);
+hKinkPosRTPCclusters2 = new TH2F("hKinkPosRTPCclusters2", " ;kinkposR; tpc clusters",nBinsR, hLowR, hUpR,100,0,200 );
+hQt = new TH1F("hQt", "Daughter's transverse momentum in mother's frame for all ESD kinks; q_{T} (GeV/c); dN/dq_{T}", nBinsQt, hLowQt, hUpQt);
+hKinkAngle = new TH1F("hKinkAngle", "Kink angle for all ESD kinks; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkink = new TH1F("hDCAkink", "DCA between the two kink tracks; DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAng = new TH2F("hPmKinkAng", "k, p_(GeV/c); #theta (#circ); d^{2}N/dpd#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXY = new TH2F("hKinkPosXY", "X-Y Position of all kinks; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZY = new TH2F("hKinkPosZY", "z vs y position of kinks (DCA, quality, p_{T} & y cuts); z (cm); y (cm)", nBinsZ, hLowZ, hUpZ, nBinsXY, hLowXY, hUpXY);
+hKinkPosZR = new TH2F("hKinkPosZR", "Z vs radius of all kinks position; Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
+hKinkPosR = new TH1F("hKinkPosR", "Position radius of all ESD kinks; R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hKinkPosZ = new TH1F("hKinkPosZ", "z position of kinks (DCA, quality, p_{T} & y cuts); z (cm); dN/dz", nBinsZ, -1, 1);
+hPmd = new TH2F("hPmd", "ESD mother vs daughter momentum magnitude; Mother's P (GeV/c); Daughter's P (GeV/c)", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimu = new TH1F("hMinvPimu", "Invariant mass of ESD pions decaying to muons; m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
+hdEdx = new TH2F("hdEdx", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hPtPosRSelected = new TH1F("hPtPosRSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y & R cuts); R (cm); dN/dR", nBinsPt, hLowPt, hUpPt);
+hPtZSelected = new TH1F("hPtZSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R & z cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hPtAngSelected = new TH1F("hPtAngSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z & #theta cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hPtPmSelected = new TH1F("hPtPmSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta & p_{track}/p{kink} cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hPtGoodKink = new TH1F("hPtGoodKink", "Mother's transverse momentum for real ESD kinks (realistic PID); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaGoodKink = new TH1F("hEtaGoodKink", "Mother's pseudorapidity for real ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityGoodKink = new TH1F("hRapidityGoodKink", "Mother's rapidity for real ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtGoodKink = new TH1F("hQtGoodKink", "Daughter's transverse momentum in mother's frame for real ESD kinks (realistic PID); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hPmGoodKinkAng = new TH2F("hPmGoodKinkAng", "Mother's momentum magnitude vs kink angle for real ESD kinks (realistic PID); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hPmdGoodKink = new TH2F("hPmdGoodKink", "Mother vs daughter momentum magnitude for real ESD kinks (realistic PID); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hdEdxGoodKink = new TH2F("hdEdxGoodKink", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hPtQtSelected = new TH1F("hPtQtSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink} & q^{T} cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hPtMaxAngSelected = new TH1F("hPtMaxAngSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T} & #theta_{max} cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hPtRTPCclustersSelected = new TH1F("hPtRTPCclustersSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T}, #theta_{max} & R/TPC clusters cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hRTPCclustersRTPCclustersSelected = new TH2F("hRTPCclustersRTPCclustersSelected", "Number of TPC clusters vs radius for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T}, #theta_{max} & R/TPC clusters cuts); R (cm); number of TPC clusters", nBinsR, hLowR, hUpR, 100, 0, 200);
+hPtSelected = new TH1F("hPtSelected", "Mother's transverse momentum for selected kinks (all cuts except dE/dx); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaSelected = new TH1F("hEtaSelected", "Mother's pseudorapidity for selected kinks (all cuts except dE/dx); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapiditySelected = new TH1F("hRapiditySelected", "Mother's rapidity for selected kinks (all cuts except dE/dx); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtSelected = new TH1F("hQtSelected", "Daughter's transverse momentum in mother's frame for selected kinks (all cuts except dE/dx); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hKinkAngleSelected = new TH1F("hKinkAngleSelected", "Kink angle of selected kinks (all cuts except dE/dx); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkinkSelected = new TH1F("hDCAkinkSelected", "DCA; DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAngSelected = new TH2F("hPmKinkAngSelected", "Mother's momentum magnitude vs kink angle for selected kinks (all cuts except dE/dx); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXYSelected = new TH2F("hKinkPosXYSelected", "X-Y Position ; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRSelected = new TH2F("hKinkPosZRSelected", "Z vs radius of selected kinks (all cuts except dE/dx); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
+hKinkPosRSelected = new TH1F("hKinkPosRSelected", "Position radius of selected kinks (all cuts except dE/dx); R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hPmdSelected = new TH2F("hPmdSelected", "Mother vs daughter momentum magnitude for selected kinks (all cuts except dE/dx); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimuSelected = new TH1F("hMinvPimuSelected", "Invariant mass for #pi^{#pm} decaying to #mu^{#pm} for selected kinks (all cuts except dE/dx); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
+hdEdxSelected = new TH2F("hdEdxSelected", "dE/dx vs mother's momentum for selected kinks (all cuts except dE/dx); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hPtPiSelected = new TH1F("hPtPiSelected", "Mother's transverse momentum for selected kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPiSelected = new TH1F("hEtaPiSelected", "Mother's pseudorapidity for selected kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityPiSelected = new TH1F("hRapidityPiSelected", "Mother's rapidity for selected kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtPiSelected = new TH1F("hQtPiSelected", "Daughter's transverse momentum in mother's frame for selected kinks (all cuts); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hKinkAnglePiSelected = new TH1F("hKinkAnglePiSelected", "Kink angle of selected kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkinkPiSelected = new TH1F("hDCAkinkPiSelected", "DCA; DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAngPiSelected = new TH2F("hPmKinkAngPiSelected", "Mother's momentum magnitude vs kink angle for selected kinks (all cuts); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosRTPCclusters1PiSelected = new TH1F("hKinkPosRTPCclusters1PiSelected", " ;kinkposR; tpc clusters",100,0,1);
+hKinkPosRTPCclusters2PiSelected = new TH2F("hKinkPosRTPCclusters2PiSelected", " ;kinkposR; tpc clusters",nBinsR, hLowR, hUpR,100,0,200 );
+hKinkPosXYPiSelected = new TH2F("hKinkPosXYPiSelected", "X-Y Position ; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRPiSelected = new TH2F("hKinkPosZRPiSelected", "Z vs radius of selected kinks (all cuts); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
+hKinkPosRPiSelected = new TH1F("hKinkPosRPiSelected", "Position radius of selected kinks (all cuts); R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hKinkPosZPiSelected = new TH1F("hKinkPosZPiSelected", "z position of selected kinks (all cuts); R (cm); dN/dR", nBinsZ, hLowZ, hUpZ);
+hPmPPiSelected = new TH2F("hPmPPiSelected", "Mother's momentum as calculated by kink and by track of selected kinks (all cuts); R (cm); dN/dR", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hPmdPiSelected = new TH2F("hPmdPiSelected", "Mother vs daughter momentum magnitude for selected kinks (all cuts); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimuPiSelected = new TH1F("hMinvPimuPiSelected", "Invariant mass for #pi^{#pm} decaying to #mu^{#pm} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
+hdEdxPiSelected = new TH2F("hdEdxPiSelected", "dE/dx vs mother's momentum for selected kinks (all cuts); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hPtPiSelectedPlus = new TH1F("hPtPiSelectedPlus", "Mother's transverse momentum for selected positive kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPiSelectedPlus = new TH1F("hEtaPiSelectedPlus", "Mother's pseudorapidity for selected positive kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityPiSelectedPlus = new TH1F("hRapidityPiSelectedPlus", "Mother's rapidity for selected positive kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtPiSelectedPlus = new TH1F("hQtKselectedPlus", "Daughter's transverse momentum in mother's frame for selected positive kinks (all cuts); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hKinkAnglePiSelectedPlus = new TH1F("hKinkAnglePiSelectedPlus", "Kink angle for selected positive kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkinkPiSelectedPlus = new TH1F("hDCAkinkPiSelectedPlus", "DCA for selected positive kinks (all cuts); DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAngPiSelectedPlus = new TH2F("hPmKinkAngPiSelectedPlus", "Mother's momentum magnitude vs kink angle for selected positive kinks (all cuts); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXYPiSelectedPlus = new TH2F("hKinkPosXYPiSelectedPlus", "X-Y Position of selected positive kinks (all cuts); X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRPiSelectedPlus = new TH2F("hKinkPosZRPiSelectedPlus", "Z vs radius of selected positive kinks (all cuts); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ,nBinsR, hLowR, hUpR);
+hPmdPiSelectedPlus = new TH2F("hPmdPiSelectedPlus", "Mother vs daughter momentum magnitude for selected positive kinks (all cuts); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimuPiSelectedPlus = new TH1F("hMinvPimuPiSelectedPlus", "Invariant mass for #pi^{+} decaying to #mu^{+} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm",nBinsInvMass, hLowInvMass, hUpInvMass);
+hdEdxPiSelectedPlus = new TH2F("hdEdxPiSelectedPlus", "dE/dx vs mother's momentum for selected positive kinks (all cuts); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+
+hPtPiSelectedMinus = new TH1F("hPtPiSelectedMinus", "Mother's transverse momentum for selected negative kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPiSelectedMinus = new TH1F("hEtaPiSelectedMinus", "Mother's pseudorapidity for selected negative kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityPiSelectedMinus = new TH1F("hRapidityPiSelectedMinus", "Mother's rapidity for selected negative kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtPiSelectedMinus = new TH1F("hQtPiSelectedMinus", "Daughter's transverse momentum in mother's frame for selected negative kinks (all cuts); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hKinkAnglePiSelectedMinus = new TH1F("hKinkAnglePiSelectedMinus", "Kink angle for selected negative kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkinkPiSelectedMinus = new TH1F("hDCAkinkPiSelectedMinus", "DCA for selected negative kinks (all cuts); DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAngPiSelectedMinus = new TH2F("hPmKinkAngPiSelectedMinus", "Mother's momentum magnitude vs kink angle for selected negative kinks (all cuts); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXYPiSelectedMinus = new TH2F("hKinkPosXYPiSelectedMinus", "X-Y Position for selected negative kinks (all cuts); X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRPiSelectedMinus = new TH2F("hKinkPosZRPiSelectedMinus", "Z vs radius for selected negative kinks (all cuts); Z (cm); R (cm)",nBinsZ, hLowZ, hUpZ,nBinsR, hLowR, hUpR);
+hPmdPiSelectedMinus = new TH2F("hPmdPiSelectedMinus", "Mother vs daughter momentum magnitude for selected negative kinks (all cuts); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimuPiSelectedMinus = new TH1F("hMinvPimuPiSelectedMinus", "Invariant mass for #pi^{-} decaying to #mu^{-} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
+hdEdxPiSelectedMinus = new TH2F("hdEdxPiSelectedMinus", "dE/dx vs mother's momentum for selected negative kinks (all cuts); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+
+
+fListOfHistos->Add(hMult);
+fListOfHistos->Add(hAcceptedMult);
+fListOfHistos->Add(hMultPS);
+fListOfHistos->Add(hvtx);
+fListOfHistos->Add(hvtxy);
+fListOfHistos->Add(hvtyz);
+fListOfHistos->Add(hvtxz);
+fListOfHistos->Add(hMultPSV);
+fListOfHistos->Add(hPtAll);
+fListOfHistos->Add(hEtaAll);
+fListOfHistos->Add(hTrackPos);
+fListOfHistos->Add(hTrackPosxy);
+fListOfHistos->Add(hTrackPosyz);
+fListOfHistos->Add(hTrackPosxz);
+//fListOfHistos->Add(hTPCchi2clusters);
+//fListOfHistos->Add(hdcaToVertexXY);
+//fListOfHistos->Add(hdcaToVertexZ);
+fListOfHistos->Add(hMultPrim);
+fListOfHistos->Add(hPtPrim);
+fListOfHistos->Add(hEtaPrim);
+fListOfHistos->Add(hPrimTrackPos);
+fListOfHistos->Add(hPrimTrackPosxy);
+fListOfHistos->Add(hPrimTrackPosyz);
+fListOfHistos->Add(hPrimTrackPosxz);
+fListOfHistos->Add(hPt);
+fListOfHistos->Add(hEta);
+//fListOfHistos->Add(hRapidity);
+fListOfHistos->Add(hPtKink);
+fListOfHistos->Add(hEtaKink);
+fListOfHistos->Add(hRapidityKink);
+fListOfHistos->Add(hPmP);
+fListOfHistos->Add(hKinkPosRTPCclusters1);
+fListOfHistos->Add(hKinkPosRTPCclusters2);
+fListOfHistos->Add(hQt);
+fListOfHistos->Add(hKinkAngle);
+fListOfHistos->Add(hDCAkink);
+fListOfHistos->Add(hPmKinkAng);
+fListOfHistos->Add(hKinkPosXY);
+fListOfHistos->Add(hKinkPosZY);
+fListOfHistos->Add(hKinkPosZR);
+fListOfHistos->Add(hKinkPosR);
+fListOfHistos->Add(hKinkPosZ);
+fListOfHistos->Add(hPmd);
+fListOfHistos->Add(hMinvPimu);
+fListOfHistos->Add(hdEdx);
+fListOfHistos->Add(hPtPosRSelected);
+fListOfHistos->Add(hPtZSelected);
+fListOfHistos->Add(hPtAngSelected);
+fListOfHistos->Add(hPtPmSelected);
+fListOfHistos->Add(hPtGoodKink);
+fListOfHistos->Add(hEtaGoodKink);
+fListOfHistos->Add(hRapidityGoodKink);
+fListOfHistos->Add(hQtGoodKink);
+fListOfHistos->Add(hPmGoodKinkAng);
+fListOfHistos->Add(hPmdGoodKink);
+fListOfHistos->Add(hdEdxGoodKink);
+fListOfHistos->Add(hPtQtSelected);
+fListOfHistos->Add(hPtMaxAngSelected);
+fListOfHistos->Add(hPtRTPCclustersSelected);
+fListOfHistos->Add(hRTPCclustersRTPCclustersSelected);
+fListOfHistos->Add(hPtSelected);
+fListOfHistos->Add(hEtaSelected);
+fListOfHistos->Add(hRapiditySelected);
+fListOfHistos->Add(hQtSelected);
+fListOfHistos->Add(hKinkAngleSelected);
+fListOfHistos->Add(hDCAkinkSelected);
+fListOfHistos->Add(hPmKinkAngSelected);
+fListOfHistos->Add(hKinkPosXYSelected);
+fListOfHistos->Add(hKinkPosZRSelected);
+fListOfHistos->Add(hKinkPosRSelected);
+fListOfHistos->Add(hPmdSelected);
+fListOfHistos->Add(hMinvPimuSelected);
+fListOfHistos->Add(hdEdxSelected);
+fListOfHistos->Add(hPtPiSelected);
+fListOfHistos->Add(hEtaPiSelected);
+fListOfHistos->Add(hRapidityPiSelected);
+fListOfHistos->Add(hQtPiSelected);
+fListOfHistos->Add(hKinkAnglePiSelected);
+fListOfHistos->Add(hDCAkinkPiSelected);
+fListOfHistos->Add(hPmKinkAngPiSelected);
+fListOfHistos->Add(hKinkPosRTPCclusters1PiSelected);
+fListOfHistos->Add(hKinkPosRTPCclusters2PiSelected);
+fListOfHistos->Add(hKinkPosXYPiSelected);
+fListOfHistos->Add(hKinkPosZRPiSelected);
+fListOfHistos->Add(hKinkPosRPiSelected);
+fListOfHistos->Add(hKinkPosZPiSelected);
+fListOfHistos->Add(hPmPPiSelected);
+fListOfHistos->Add(hPmdPiSelected);
+fListOfHistos->Add(hMinvPimuPiSelected);
+fListOfHistos->Add(hdEdxPiSelected);
+
+fListOfHistos->Add(hPtPiSelectedPlus);
+fListOfHistos->Add(hEtaPiSelectedPlus);
+fListOfHistos->Add(hRapidityPiSelectedPlus);
+fListOfHistos->Add(hQtPiSelectedPlus);
+fListOfHistos->Add(hKinkAnglePiSelectedPlus);
+fListOfHistos->Add(hDCAkinkPiSelectedPlus);
+fListOfHistos->Add(hPmKinkAngPiSelectedPlus);
+fListOfHistos->Add(hKinkPosXYPiSelectedPlus);
+fListOfHistos->Add(hKinkPosZRPiSelectedPlus);
+fListOfHistos->Add(hPmdPiSelectedPlus);
+fListOfHistos->Add(hMinvPimuPiSelectedPlus);
+fListOfHistos->Add(hdEdxPiSelectedPlus);
+
+fListOfHistos->Add(hPtPiSelectedMinus);
+fListOfHistos->Add(hEtaPiSelectedMinus);
+fListOfHistos->Add(hRapidityPiSelectedMinus);
+fListOfHistos->Add(hQtPiSelectedMinus);
+fListOfHistos->Add(hKinkAnglePiSelectedMinus);
+fListOfHistos->Add(hDCAkinkPiSelectedMinus);
+fListOfHistos->Add(hPmKinkAngPiSelectedMinus);
+fListOfHistos->Add(hKinkPosXYPiSelectedMinus);
+fListOfHistos->Add(hKinkPosZRPiSelectedMinus);
+fListOfHistos->Add(hPmdPiSelectedMinus);
+fListOfHistos->Add(hMinvPimuPiSelectedMinus);
+fListOfHistos->Add(hdEdxPiSelectedMinus);
+
+fListOfHistos->SetOwner(kTRUE);
+PostData(1, fListOfHistos);
+}
+
+//________________________________________________________________________
+void AliAnalysisPionKinksESD::UserExec(Option_t *) {
+ AliVEvent *event = InputEvent();
+ if (!event) {
+ Printf("ERROR: Could not retrieve event");
+ return;
+ }
+
+ AliESDEvent* esdEvent = dynamic_cast<AliESDEvent*>(event);
+ if (!esdEvent) {
+ Printf("ERROR: Could not retrieve esd");
+ return;
+ }
+
+
+//------------------------ Data Multiplicity unbiased --------------------------//
+ Int_t NTracks = esdEvent->GetNumberOfTracks(); //number of ESD tracks
+ hMult->Fill(NTracks);
+
+//----------------------------- Accepted Multiplicity -----------------------------//
+ Float_t NAcceptedTracks = fTrackCuts->CountAcceptedTracks(esdEvent);
+ if(fLowMulcut>-1) {
+ if(NAcceptedTracks<fLowMulcut) return;
+ }
+ if(fUpMulcut>-1) {
+ if(NAcceptedTracks>fUpMulcut) return;
+ }
+ hAcceptedMult->Fill(NAcceptedTracks); //to check if the multiplicity limits are ok
+
+
+
+//----------------------------- Physics selection ------------------------------//
+ Bool_t IsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB;
+ if ( IsSelected ==kFALSE) return;
+
+//--------------- Data Multiplicity after Physics selection --------------------//
+ hMultPS->Fill(NTracks);
+
+//------------------------------------ Vertex ----------------------------------//
+ const AliESDVertex* vtx = GetEventVertex(esdEvent); //ESD primary vertex
+ if (!vtx) return;
+
+ Double_t vtxpos[3]; //vertex position vector
+ vtx->GetXYZ(vtxpos);
+ hvtx->Fill(vtxpos[0], vtxpos[1], vtxpos[2]); //ESD primary vertex position (x-y-z)
+ hvtxy->Fill(vtxpos[0], vtxpos[1]);
+ hvtyz->Fill(vtxpos[1], vtxpos[2]);
+ hvtxz->Fill(vtxpos[0], vtxpos[2]);
+
+ if (TMath::Abs(vtxpos[2])>10.) return;
+
+//-------------------- Data Multiplicity after vertex cut -----------------------//
+ hMultPSV->Fill(NTracks);
+
+//------------------------------- dE/dx parameters -----------------------------//
+ if(!fPIDResponse) {
+ AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler* inputHandler = (AliInputEventHandler*)(man->GetInputEventHandler());
+ fPIDResponse = inputHandler->GetPIDResponse();
+ }
+
+//------------------------- Reconstructed data Analysis -----------------------//
+ for (Int_t iData = 0; iData<NTracks; iData++) { //loop on all ESD tracks
+ AliESDtrack *ESDtrack = esdEvent->GetTrack(iData);
+ if (!ESDtrack) {
+ Printf("ERROR: Could not receive ESD track %d", iData);
+ continue;
+ }
+
+ Double_t Pt = ESDtrack->Pt();
+ Double_t Eta = ESDtrack->Eta();
+
+ hPtAll->Fill(Pt);
+ hEtaAll->Fill(Eta);
+ //hRapidityAll->Fill(Rapidity(ESDtrack));
+
+ Double_t TrackPos[3]; //starting position of ESD tracks (x-y-z)
+ ESDtrack->GetXYZ(TrackPos);
+ hTrackPos->Fill(TrackPos[0],TrackPos[1],TrackPos[2]);
+ hTrackPosxy->Fill(TrackPos[0], TrackPos[1]);
+ hTrackPosyz->Fill(TrackPos[1], TrackPos[2]);
+ hTrackPosxz->Fill(TrackPos[0], TrackPos[2]);
+
+ if ((IsPrimaryTrack(ESDtrack) == kFALSE) || (IsGoodTrack(ESDtrack) == kFALSE)) continue; //reject bad & secondary tracks
+ hMultPrim->Fill(NTracks);
+ hPtPrim->Fill(Pt);
+ hEtaPrim->Fill(Eta);
+ //hRapidityPrim->Fill(Rapidity(ESDtrack));
+
+ hPrimTrackPos->Fill(TrackPos[0],TrackPos[1],TrackPos[2]); //starting position of primary - supposed ESD tracks (x-y-z)
+ hPrimTrackPosxy->Fill(TrackPos[0], TrackPos[1]);
+ hPrimTrackPosyz->Fill(TrackPos[1], TrackPos[2]);
+ hPrimTrackPosxz->Fill(TrackPos[0], TrackPos[2]);
+
+ if (Pt<cLowPt) continue;
+
+ hPt->Fill(Pt);
+ hEta->Fill(Eta);
+ //hRapidity->Fill(fuRapidity(ESDtrack));
+
+ Int_t KinkIndex = ESDtrack->GetKinkIndex(0); //kink index (1st component is negative if the track is a kink candidate)
+ if (KinkIndex>=0) continue; //kink selection
+
+ Double_t Rapidity = fuRapidity(ESDtrack);
+ if (TMath::Abs(Rapidity)>cRapidityLim) continue;
+
+ Double_t dEdx = ESDtrack->GetTPCsignal();
+ Double_t NTPCclusters = ESDtrack->GetTPCclusters(0);
+
+ AliESDkink *kink = esdEvent->GetKink(TMath::Abs(KinkIndex)-1);
+
+ const TVector3 KinkPos(kink->GetPosition());
+ Double_t KinkPosR = kink->GetR(); //kink's position radius
+ Double_t KinkDistance = kink->GetDistance();
+ Double_t Qt = kink->GetQt(); //daughter's transverse momentum in mother's frame
+ Double_t KinkAngle =TMath::RadToDeg()*kink->GetAngle(2); //kink angle in mother frame (3rd component is angle in rads)
+
+ const TVector3 PMother(kink->GetMotherP()); //ESD mother's momentum
+ Double_t Pmx = PMother.Px();
+ Double_t Pmy = PMother.Py();
+ Double_t Pmz = PMother.Pz();
+ Double_t Pm = PMother.Mag(); //ESD mother's momentum magnitude
+ Double_t PTrack[3];
+ ESDtrack->GetPxPyPz(PTrack);
+ TVector3 Pvector3(PTrack[0], PTrack[1], PTrack[2]);
+ Double_t P = Pvector3.Mag();
+ Double_t PTPC = ESDtrack->GetInnerParam()->GetP();
+
+ const TVector3 PDaughter(kink->GetDaughterP()); //ESD daughter's momentum
+ Double_t Pdx = PDaughter.Px();
+ Double_t Pdy = PDaughter.Py();
+ Double_t Pdz = PDaughter.Pz();
+ Double_t Pd = PDaughter.Mag(); //ESD daugter's momentum magnitude
+ Double_t Edmu = TMath::Sqrt(TMath::Power(Pd,2)+TMath::Power(cMuonMass,2)); //ESD muon daughter's energy
+
+ Double_t DP = TMath::Sqrt((Pmx-Pdx)*(Pmx-Pdx)+(Pmy-Pdy)*(Pmy-Pdy)+(Pmz-Pdz)*(Pmz-Pdz)); //transferred momentum magnitude
+ Double_t MinvPimu = TMath::Sqrt((Edmu+DP)*(Edmu+DP)-TMath::Power(Pm,2)); //pion mother's invariant mass when decaying to muon
+ Double_t MaxKinkAngPimu=fMaxKinkAngPimu->Eval(P,0.,0.,0.); //maximum decay angle in lab frame for a pion decaying to muon
+
+ hPtKink->Fill(Pt);
+ hEtaKink->Fill(Eta);
+ hRapidityKink->Fill(Rapidity);
+ hPmP->Fill(Pm,P);
+ hKinkPosRTPCclusters1->Fill(NTPCclusters/KinkPosR);
+ hKinkPosRTPCclusters2->Fill(KinkPosR, NTPCclusters);
+ hQt->Fill(Qt);
+ hKinkAngle->Fill(KinkAngle);
+ hDCAkink->Fill(KinkDistance);
+ hPmKinkAng->Fill(P, KinkAngle);
+ hKinkPosXY->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZY->Fill(KinkPos[2],KinkPos[1]);
+ hKinkPosZR->Fill(KinkPos[2],KinkPosR);
+ hKinkPosR->Fill(KinkPosR);
+ hKinkPosZ->Fill(KinkPos[2]);
+ hPmd->Fill(Pm,Pd);
+ hMinvPimu->Fill(MinvPimu);
+ hdEdx->Fill(PTPC, dEdx);
+
+ if ((KinkPosR<cLowR)||(KinkPosR>cUpR)) continue; //selection of kinks that are detected in the main region of TPC
+
+ hPtPosRSelected->Fill(Pt);
+
+ if ((TMath::Abs(KinkPos[2])<cLowZ) || (TMath::Abs(KinkPos[2])>cUpZ)) continue;
+ hPtZSelected->Fill(Pt);
+
+
+ if (KinkAngle<cLowKinkAngle) continue;
+ hPtAngSelected->Fill(Pt);
+
+ if ((Pm/P<0.7) || (1.3<Pm/P)) continue;
+ hPtPmSelected->Fill(Pt);
+
+ if (Qt<cLowQt)continue;
+
+ //Good Kinks
+ hPtGoodKink->Fill(Pt);
+ hEtaGoodKink->Fill(Eta);
+ hRapidityGoodKink->Fill(Rapidity);
+ hQtGoodKink->Fill(Qt);
+ hPmGoodKinkAng->Fill(P, KinkAngle);
+ hPmdGoodKink->Fill(Pm,Pd);
+ hdEdxGoodKink->Fill(PTPC, dEdx);
+
+ //------------------------ realistic PID from physical criteria --------------------//
+
+ if (Qt>cUpQt) continue;
+ hPtQtSelected->Fill(Pt);
+
+ if (KinkAngle>(MaxKinkAngPimu*1.1)) continue;
+ hPtMaxAngSelected->Fill(Pt);
+
+
+// if ( ((NTPCclusters/KinkPosR)>0.63) || ((NTPCclusters/KinkPosR)<0.20) ) //good TPC tracks selection
+ Double_t tpcNClHigh = -51.67+ (11./12.)*KinkPosR;
+ Double_t tpcNClMin = -85.5 + (65./95.)*KinkPosR;
+ if ( (NTPCclusters>tpcNClHigh) || (NTPCclusters<tpcNClMin) ) continue;//good TPC tracks selection
+// if ( (NTPCclusters>((11/12)*KinkPosR-51.67)) || (NTPCclusters<((65/95)*KinkPosR-85.5)) ) continue;
+ hPtRTPCclustersSelected->Fill(Pt);
+ hRTPCclustersRTPCclustersSelected->Fill(KinkPosR,NTPCclusters);
+
+ if ((MinvPimu>cUpInvMass) || (MinvPimu<cLowInvMass)) continue;
+
+ //selected
+ hPtSelected->Fill(Pt);
+ hEtaSelected->Fill(Eta);
+ hRapiditySelected->Fill(Rapidity);
+ hQtSelected->Fill(Qt);
+ hKinkAngleSelected->Fill(KinkAngle);
+ hDCAkinkSelected->Fill(KinkDistance);
+ hPmKinkAngSelected->Fill(P, KinkAngle);
+ hKinkPosXYSelected->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRSelected->Fill(KinkPos[2],KinkPosR);
+ hKinkPosRSelected->Fill(KinkPosR);
+ hPmdSelected->Fill(Pm,Pd);
+ hMinvPimuSelected->Fill(MinvPimu);
+ hdEdxSelected->Fill(PTPC, dEdx);
+
+
+ Double_t NSigmaTPC = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(ESDtrack, AliPID::kPion));
+ if (NSigmaTPC>cSigmaCut) continue;
+ Double_t Sign = ESDtrack->GetSign();
+
+ // dEdx selected
+ hPtPiSelected->Fill(Pt);
+ hEtaPiSelected->Fill(Eta);
+ hRapidityPiSelected->Fill(Rapidity);
+ hQtPiSelected->Fill(Qt);
+ hKinkAnglePiSelected->Fill(KinkAngle);
+ hDCAkinkPiSelected->Fill(KinkDistance);
+ hPmKinkAngPiSelected->Fill(P, KinkAngle);
+ hKinkPosRTPCclusters1PiSelected->Fill(NTPCclusters/KinkPosR);
+ hKinkPosRTPCclusters2PiSelected->Fill(KinkPosR, NTPCclusters);
+ hKinkPosXYPiSelected->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRPiSelected->Fill(KinkPos[2],KinkPosR);
+ hKinkPosRPiSelected->Fill(KinkPosR);
+ hKinkPosZPiSelected->Fill(KinkPos[2]);
+ hPmPPiSelected->Fill(Pm,P);
+ hPmdPiSelected->Fill(Pm,Pd);
+ hMinvPimuPiSelected->Fill(MinvPimu);
+ hdEdxPiSelected->Fill(PTPC, dEdx);
+
+ if (Sign>0) {
+ hPtPiSelectedPlus->Fill(Pt);
+ hEtaPiSelectedPlus->Fill(Eta);
+ hRapidityPiSelectedPlus->Fill(Rapidity);
+ hQtPiSelectedPlus->Fill(Qt);
+ hKinkAnglePiSelectedPlus->Fill(KinkAngle);
+ hDCAkinkPiSelectedPlus->Fill(KinkDistance);
+ hPmKinkAngPiSelectedPlus->Fill(P, KinkAngle);
+ hKinkPosXYPiSelectedPlus->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRPiSelectedPlus->Fill(KinkPos[2],KinkPosR);
+ hPmdPiSelectedPlus->Fill(Pm,Pd);
+ hMinvPimuPiSelectedPlus->Fill(MinvPimu);
+ hdEdxPiSelectedPlus->Fill(PTPC, dEdx);
+
+
+ } else if (Sign<0) {
+ hPtPiSelectedMinus->Fill(Pt);
+ hEtaPiSelectedMinus->Fill(Eta);
+ hRapidityPiSelectedMinus->Fill(Rapidity);
+ hQtPiSelectedMinus->Fill(Qt);
+ hKinkAnglePiSelectedMinus->Fill(KinkAngle);
+ hDCAkinkPiSelectedMinus->Fill(KinkDistance);
+ hPmKinkAngPiSelectedMinus->Fill(P, KinkAngle);
+ hKinkPosXYPiSelectedMinus->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRPiSelectedMinus->Fill(KinkPos[2],KinkPosR);
+ hPmdPiSelectedMinus->Fill(Pm,Pd);
+ hMinvPimuPiSelectedMinus->Fill(MinvPimu);
+ hdEdxPiSelectedMinus->Fill(PTPC, dEdx);
+
+ }
+ } //end of ESD track loop
+ PostData(1, fListOfHistos);
+}
+
+
+//________________________________________________________________________
+void AliAnalysisPionKinksESD::Terminate(Option_t *) {
+}
+
+//_________________________________________________________________________
+const AliESDVertex* AliAnalysisPionKinksESD::GetEventVertex(AliESDEvent* esd) { //Gets ESD vertex and returns it if it is valid
+ const AliESDVertex* vertex = esd->GetPrimaryVertexTracks();
+ if(vertex->GetStatus()==kTRUE) return vertex;
+ else {
+ vertex = esd->GetPrimaryVertexSPD();
+ if((vertex->GetStatus()==kTRUE)&&(vertex->GetNContributors()>0)) return vertex;
+ else return 0;
+ }
+}
+
+//________________________________________________________________________
+Double_t AliAnalysisPionKinksESD::Energy(AliESDtrack* track) const { //calculates the energy for a pion track
+ Double_t TrackMom[3];
+ track->GetPxPyPz(TrackMom);
+ TVector3 P(TrackMom[0], TrackMom[1], TrackMom[2]);
+ //Double_t EnergyK = TMath::Sqrt(P.Mag()*P.Mag()+0.493677*0.493677); //kaon's energy
+ Double_t EnergyPi = TMath::Sqrt(P.Mag()*P.Mag()+0.13957018*0.13957018); //pion's energy
+ return EnergyPi;
+}
+
+
+//________________________________________________________________________
+Double_t AliAnalysisPionKinksESD::fuRapidity(AliESDtrack* track) const { //calculates the rapidity for a track
+ Double_t TrackMom[3];
+ track->GetPxPyPz(TrackMom);
+ TVector3 P(TrackMom[0], TrackMom[1], TrackMom[2]);
+ Double_t RapidityK = 0.5*(TMath::Log((Energy(track)+P[2])/(Energy(track)-P[2])));
+ return RapidityK;
+}
+
+
+//________________________________________________________________________
+Bool_t AliAnalysisPionKinksESD::IsGoodTrack(AliESDtrack* ESDtrack) const { //Checks if a track is acceptable as good
+ UInt_t status = ESDtrack->GetStatus();
+ if ((status&AliESDtrack::kITSrefit)==0) return kFALSE; //cut tracks that cannot be reconstructed by ITS only
+ if ((status&AliESDtrack::kTPCrefit)==0) return kFALSE; //cut tracks that cannot be reconstructed by TPC only
+
+ Double_t NTPCclusters = ESDtrack->GetTPCclusters(0);
+ Double_t TPCchi2 = ESDtrack->GetTPCchi2();
+ if (NTPCclusters<20) return kFALSE;
+ //if (NTPCclusters<30) return kFALSE; // cut sta 30 gia syst
+
+ //hTPCchi2clusters->Fill(TPCchi2/NTPCclusters);//histo to check???????
+ if (TPCchi2/NTPCclusters>3.8) return kFALSE; //cut tracks of bad quality fit with the contributing clusters
+
+ /*Double_t ExtCov[15]; //external covariances matrix
+ ESDtrack->GetExternalCovariance(ExtCov);
+ if(ExtCov[0]>2) return kFALSE; //sigma(y^2)
+ if(ExtCov[2]>2) return kFALSE; //sigma(z^2)
+ if(ExtCov[5]>0.5) return kFALSE; //sigma(sinphi^2)
+ if(ExtCov[9]>0.5) return kFALSE; //sigma(tanlamda^2)
+ if(ExtCov[14]>2) return kFALSE; //sigma(1/Pt^2)*/
+
+ return kTRUE;
+}
+
+//________________________________________________________________________
+Bool_t AliAnalysisPionKinksESD::IsPrimaryTrack(AliESDtrack* ESDtrack) const { //Checks if a track is acceptable as a primary
+ Float_t ImpParam[2]; //DCA to vertex, 0->in x-y plane, 1->in z
+ Float_t ImpParamCov[3]; //covariances of DCA to vertex
+ ESDtrack->GetImpactParameters(ImpParam,ImpParamCov);
+ //hdcaToVertexXY->Fill(ImpParam[0]);
+ //hdcaToVertexZ->Fill(ImpParam[1]);
+ if (ImpParamCov[0]<=0 || ImpParamCov[2]<=0) {
+ AliDebug (1, "Estimated DCA covariance lower or equal zero!");
+ ImpParamCov[0]=0; ImpParamCov[2]=0;
+ }
+
+ //if((TMath::Abs(ImpParam[0])>0.3) || (TMath::Abs((ImpParam[1])>2.5))) return kFALSE; //absolute DCA cut
+ if (!fMaxDCAtoVtxCut->AcceptTrack(ESDtrack)) return kFALSE;
+ else return kTRUE;
+}
+
--- /dev/null
+#ifndef AliAnalysisPionKinksESD_h
+#define AliAnalysisPionKinksESD_h
+
+
+class AliESDEvent;
+class TF1;
+class TH1;
+class TH2;
+class TH3;
+class TParticle;
+class TParticle;
+class AliESDtrackCuts;
+class AliPhysicsSelection;
+class AliPIDResponse;
+
+#include "AliAnalysisTaskSE.h"
+
+class AliAnalysisPionKinksESD : public AliAnalysisTaskSE {
+ public:
+ AliAnalysisPionKinksESD(const char *name = "AliAnalysisPionKinksESD");
+ virtual ~AliAnalysisPionKinksESD() {}
+
+ virtual void UserCreateOutputObjects();
+ virtual void UserExec(Option_t *option);
+ virtual void Terminate(Option_t *);
+
+ const AliESDVertex *GetEventVertex(AliESDEvent* esd);
+ Double_t Energy(AliESDtrack* track) const;
+ Double_t fuRapidity(AliESDtrack* track) const;
+ Bool_t IsGoodTrack(AliESDtrack* ESDTrack) const;
+ Bool_t IsPrimaryTrack(AliESDtrack* ESDTrack) const;
+
+ // Set limits & cuts
+ void SetMulCut(Int_t low, Int_t up){fLowMulcut=low; fUpMulcut=up;}
+ void SetPtCut(Double_t PtCut){cLowPt=PtCut;}
+ void SetRapidityLimits(Double_t RapidityLim){cRapidityLim=RapidityLim;}
+ void SetRadiusRange(Double_t LowR, Double_t UpR){cLowR=LowR; cUpR=UpR;}
+ void SetZRange(Double_t LowZ, Double_t UpZ){cLowZ=LowZ; cUpZ=UpZ;}
+ void SetKinkAngleCut(Double_t LowAngle){cLowKinkAngle=LowAngle;}
+ void SetQtRange(Double_t LowQt, Double_t UpQt){cLowQt=LowQt; cUpQt=UpQt;}
+ void SetInvMassRange(Double_t LowInvMass, Double_t UpInvMass){cLowInvMass=LowInvMass; cUpInvMass=UpInvMass;}
+ void SetSigmaCut(Double_t SigmaCut){cSigmaCut=SigmaCut;}
+ void SetPdgCodes(Int_t kaon, Int_t pion, Int_t muon, Int_t electron){cPdgKaon=kaon; cPdgPion=pion; cPdgMuon=muon; cPdgElectron=electron;}
+ void SetMasses(Double_t KaonMass, Double_t PionMass, Double_t MuonMass, Double_t ElectronMass){cKaonMass=KaonMass; cPionMass=PionMass; cMuonMass=MuonMass; cElectronMass=ElectronMass;}
+
+ // Set histos limits
+ void SetMultHistos(Int_t BinsMult, Int_t LowMult, Int_t UpMult){nBinsMult=BinsMult; hLowPt=LowMult; hUpMult=UpMult;}
+ void SetPtHistos(Int_t BinsPt, Double_t LowPt, Double_t UpPt){nBinsPt=BinsPt; hLowPt=LowPt; hUpPt=UpPt;}
+ void SetEtaHistos(Int_t BinsEta, Double_t LowEta, Double_t UpEta){nBinsEta=BinsEta; hLowEta=LowEta; hUpEta=UpEta;}
+ void SetQtHistos(Int_t BinsQt, Double_t LowQt, Double_t UpQt){nBinsQt=BinsQt; hLowQt=LowQt; hUpQt=UpQt;}
+ void SetRHistos(Int_t BinsR, Double_t LowR, Double_t UpR){nBinsR=BinsR; hLowR=LowR; hUpR=UpR;}
+ void SetZHistos(Int_t BinsZ, Double_t LowZ, Double_t UpZ){nBinsZ=BinsZ; hLowZ=LowZ; hUpZ=UpZ;}
+ void SetXYHistos(Int_t BinsXY, Double_t LowXY, Double_t UpXY){nBinsXY=BinsXY; hLowXY=LowXY; hUpXY=UpXY;}
+ void SetAngleHistos(Int_t BinsAngle, Double_t LowAngle, Double_t UpAngle){nBinsAngle=BinsAngle; hLowAngle=LowAngle; hUpAngle=UpAngle;}
+ void SetZVHistos(Int_t BinsZV, Double_t LowZV, Double_t UpZV){nBinsZV=BinsZV; hLowZV=LowZV; hUpZV=UpZV;}
+ void SetXYVHistos(Int_t BinsXYV, Double_t LowXYV, Double_t UpXYV){nBinsXYV=BinsXYV; hLowXYV=LowXYV; hUpXYV=UpXYV;}
+ void SetInvMassHistos(Int_t BinsInvMass, Double_t LowInvMass, Double_t UpInvMass){nBinsInvMass=BinsInvMass; hLowInvMass=LowInvMass; hUpInvMass=UpInvMass;}
+ void SetdEdxHistos(Int_t BinsdEdx, Double_t LowdEdx, Double_t UpdEdx){nBinsdEdx=BinsdEdx; hLowdEdx=LowdEdx; hUpdEdx=UpdEdx;}
+ private:
+ TF1* fMaxKinkAngKmu;
+ TF1* fMaxKinkAngPimu;
+
+
+ TH1F* hMult;
+ TH1F* hAcceptedMult;
+ TH1F* hMultPS;
+ TH3F* hvtx;
+ TH2F* hvtxy;
+ TH2F* hvtyz;
+ TH2F* hvtxz;
+ TH1F* hMultPSV;
+ TH1F* hPtAll;
+ TH1F* hEtaAll;
+ TH3F* hTrackPos;
+ TH2F* hTrackPosxy;
+ TH2F* hTrackPosyz;
+ TH2F* hTrackPosxz;
+ //TH1F* hTPCchi2clusters;
+ //TH1F* hdcaToVertexXY;
+ //TH1F* hdcaToVertexZ;
+ TH1F* hMultPrim;
+ TH1F* hPtPrim;
+ TH1F* hEtaPrim;
+ TH3F* hPrimTrackPos;
+ TH2F* hPrimTrackPosxy;
+ TH2F* hPrimTrackPosyz;
+ TH2F* hPrimTrackPosxz;
+ TH1F* hPt;
+ TH1F* hEta;
+ //TH1F* hRapidity;
+ TH1F* hPtKink;
+ TH1F* hEtaKink;
+ TH1F* hRapidityKink;
+ TH2F* hPmP;
+ TH1F* hKinkPosRTPCclusters1;
+ TH2F* hKinkPosRTPCclusters2;
+ TH1F* hQt;
+ TH1F* hKinkAngle;
+ TH1F* hDCAkink;
+ TH2F* hPmKinkAng;
+ TH2F* hKinkPosXY;
+ TH2F* hKinkPosZY;
+ TH2F* hKinkPosZR;
+ TH1F* hKinkPosR;
+ TH1F* hKinkPosZ;
+ TH2F* hPmd;
+ TH1F* hMinvPimu;
+ TH2F* hdEdx;
+ TH1F* hPtPosRSelected;
+ TH1F* hPtZSelected;
+ TH1F* hPtAngSelected;
+ TH1F* hPtPmSelected;
+ TH1F* hPtGoodKink;
+ TH1F* hEtaGoodKink;
+ TH1F* hRapidityGoodKink;
+ TH1F* hQtGoodKink;
+ TH2F* hPmGoodKinkAng;
+ TH2F* hPmdGoodKink;
+ TH2F* hdEdxGoodKink;
+ TH1F* hPtQtSelected;
+ TH1F* hPtMaxAngSelected;
+ TH1F* hPtRTPCclustersSelected;
+ TH2F* hRTPCclustersRTPCclustersSelected;
+ TH1F* hPtSelected;
+ TH1F* hEtaSelected;
+ TH1F* hRapiditySelected;
+ TH1F* hQtSelected;
+ TH1F* hKinkAngleSelected;
+ TH1F* hDCAkinkSelected;
+ TH2F* hPmKinkAngSelected;
+ TH2F* hKinkPosXYSelected;
+ TH2F* hKinkPosZRSelected;
+ TH1F* hKinkPosRSelected;
+ TH2F* hPmdSelected;
+ TH1F* hMinvPimuSelected;
+ TH2F* hdEdxSelected;
+ TH1F* hPtPiSelected;
+ TH1F* hEtaPiSelected;
+ TH1F* hRapidityPiSelected;
+ TH1F* hQtPiSelected;
+ TH1F* hKinkAnglePiSelected;
+ TH1F* hDCAkinkPiSelected;
+ TH2F* hPmKinkAngPiSelected;
+ TH1F* hKinkPosRTPCclusters1PiSelected;
+ TH2F* hKinkPosRTPCclusters2PiSelected;
+ TH2F* hKinkPosXYPiSelected;
+ TH2F* hKinkPosZRPiSelected;
+ TH1F* hKinkPosRPiSelected;
+ TH1F* hKinkPosZPiSelected;
+ TH2F* hPmPPiSelected;
+ TH2F* hPmdPiSelected;
+ TH1F* hMinvPimuPiSelected;
+ TH2F* hdEdxPiSelected;
+
+ TH1F* hPtPiSelectedPlus; //plus
+ TH1F* hEtaPiSelectedPlus;
+ TH1F* hRapidityPiSelectedPlus;
+ TH1F* hQtPiSelectedPlus;
+ TH1F* hKinkAnglePiSelectedPlus;
+ TH1F* hDCAkinkPiSelectedPlus;
+ TH2F* hPmKinkAngPiSelectedPlus;
+ TH2F* hKinkPosXYPiSelectedPlus;
+ TH2F* hKinkPosZRPiSelectedPlus;
+ TH2F* hPmdPiSelectedPlus;
+ TH1F* hMinvPimuPiSelectedPlus;
+ TH2F* hdEdxPiSelectedPlus;
+ TH1F* hPtPiSelectedMinus;//minus
+ TH1F* hEtaPiSelectedMinus;
+ TH1F* hRapidityPiSelectedMinus;
+ TH1F* hQtPiSelectedMinus;
+ TH1F* hKinkAnglePiSelectedMinus;
+ TH1F* hDCAkinkPiSelectedMinus;
+ TH2F* hPmKinkAngPiSelectedMinus;
+ TH2F* hKinkPosXYPiSelectedMinus;
+ TH2F* hKinkPosZRPiSelectedMinus;
+ TH2F* hPmdPiSelectedMinus;
+ TH1F* hMinvPimuPiSelectedMinus;
+ TH2F* hdEdxPiSelectedMinus; // reconstruction histograms
+
+ TList* fListOfHistos;
+
+ // Limits and cuts
+ Int_t fLowMulcut;
+ Int_t fUpMulcut;
+
+ Double_t cLowPt;
+ Double_t cRapidityLim;
+ Double_t cLowR, cUpR;
+ Double_t cLowZ, cUpZ;
+ Double_t cLowKinkAngle;
+ Double_t cLowQt, cUpQt;
+ Double_t cLowInvMass, cUpInvMass;
+ Double_t cSigmaCut;
+ Int_t cPdgKaon, cPdgPion, cPdgMuon, cPdgElectron;
+ Double_t cKaonMass, cPionMass, cMuonMass, cElectronMass;
+
+ // Histos limits
+ Int_t nBinsMult, hLowMult, hUpMult;
+ Int_t nBinsPt;
+ Double_t hLowPt, hUpPt;
+ Int_t nBinsEta;
+ Double_t hLowEta, hUpEta;
+ Int_t nBinsQt;
+ Double_t hLowQt, hUpQt;
+ Int_t nBinsR;
+ Double_t hLowR, hUpR;
+ Int_t nBinsZ;
+ Double_t hLowZ, hUpZ;
+ Int_t nBinsXY;
+ Double_t hLowXY, hUpXY;
+ Int_t nBinsAngle;
+ Double_t hLowAngle, hUpAngle;
+ Int_t nBinsZV;
+ Double_t hLowZV, hUpZV;
+ Int_t nBinsXYV;
+ Double_t hLowXYV, hUpXYV;
+ Int_t nBinsInvMass;
+ Double_t hLowInvMass, hUpInvMass;
+ Int_t nBinsdEdx;
+ Double_t hLowdEdx, hUpdEdx;
+
+ AliPIDResponse *fPIDResponse; //! PID response object
+ AliESDtrackCuts* fMaxDCAtoVtxCut;
+ AliESDtrackCuts* fTrackCuts;
+
+
+ AliAnalysisPionKinksESD(const AliAnalysisPionKinksESD&);
+ AliAnalysisPionKinksESD& operator=(const AliAnalysisPionKinksESD&);
+
+ ClassDef(AliAnalysisPionKinksESD, 1);
+};
+#endif
+
+
--- /dev/null
+/**************************************************************************
+ * Authors: Eftychios Cheiladakis, for his Master Thesis *
+ * at the Physics Department of Athens University *
+ * under the supervision of Prof. Martha Spyropoulou-Stassinaki *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+//-----------------------------------------------------------------
+// AliAnalysisPionKinksESDMC class
+// Example of an analysis task for kink topology study
+// pions from kink topology are 'identified' in this code
+//-----------------------------------------------------------------
+
+#include "TCanvas.h"
+#include "TVector3.h"
+#include "TLorentzVector.h"
+#include "TMath.h"
+#include "TF1.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TH3.h"
+#include "TList.h"
+#include "TParticle.h"
+
+#include "AliMCEvent.h"
+#include "AliVParticle.h"
+#include "AliMCParticle.h"
+#include "AliESDEvent.h"
+#include "AliESDkink.h"
+#include "AliESDpid.h"
+#include "AliPID.h"
+#include "AliStack.h"
+
+#include "AliAnalysisTask.h"
+#include "AliInputEventHandler.h"
+#include "AliESDInputHandler.h"
+#include "AliPIDResponse.h"
+#include "AliAnalysisManager.h"
+#include "AliMCEventHandler.h"
+#include "AliESDtrackCuts.h"
+
+#include "AliAnalysisPionKinksMCESD.h"
+
+ClassImp(AliAnalysisPionKinksMCESD)
+
+//________________________________________________________________________
+AliAnalysisPionKinksMCESD::AliAnalysisPionKinksMCESD(const char *name)
+:AliAnalysisTaskSE(name),
+fMaxKinkAngKmu(0),
+fMaxKinkAngPimu(0), //functions
+hMCMult(0),
+hMCMultPrim(0),
+hMCPtAll(0),
+hMCEtaAll(0),
+hMCPtPrim(0),
+hMCEtaPrim(0),
+hMCPt(0),
+hMCEta(0),
+hMCPdg(0),
+hMCMultPiPlus(0),
+hMCPtPiPlus(0),
+hMCEtaPiPlus(0),
+hMCRapidityPiPlus(0),
+hMCNDaughtersPlus(0),
+hMCRadPiDauPlus(0),
+hMCKinkPosZPlus(0),
+hMCUIDPiDauPlus(0),
+hMCPdgPiNonDecayedPlus(0),
+hMCPdgPiDauPlus(0),
+hMCQtPlus(0),
+hMCKinkAnglePlus(0),
+hMCPKinkAngPlus(0),
+hMCPdgCodemdPlus(0),
+hMCPtmdPlus(0),
+hMCPtPimuonPlus(0),
+hMCEtaPimuonPlus(0),
+hMCRapidityPimuonPlus(0),
+hMCQtPimuonPlus(0),
+hMCPKinkAngPimuonPlus(0),
+hMCPtPiotherPlus(0),
+hMCEtaPiotherPlus(0),
+hMCRapidityPiotherPlus(0),
+hMCQtPiotherPlus(0),
+hMCPKinkAngPiotherPlus(0),
+hMCMultPiMinus(0),
+hMCPtPiMinus(0),
+hMCEtaPiMinus(0),
+hMCRapidityPiMinus(0),
+hMCNDaughtersMinus(0),
+hMCRadPiDauMinus(0),
+hMCKinkPosZMinus(0),
+hMCUIDPiDauMinus(0),
+hMCPdgPiNonDecayedMinus(0),
+hMCPdgPiDauMinus(0),
+hMCQtMinus(0),
+hMCKinkAngleMinus(0),
+hMCPKinkAngMinus(0),
+hMCPdgCodemdMinus(0),
+hMCPtmdMinus(0),
+hMCPtPimuonMinus(0),
+hMCEtaPimuonMinus(0),
+hMCRapidityPimuonMinus(0),
+hMCQtPimuonMinus(0),
+hMCPKinkAngPimuonMinus(0),
+hMCPtPiotherMinus(0),
+hMCEtaPiotherMinus(0),
+hMCRapidityPiotherMinus(0),
+hMCQtPiotherMinus(0),
+hMCPKinkAngPiotherMinus(0),//MC histograms
+hMult(0),
+hAcceptedMult(0),
+hMultPS(0),
+hvtx(0),
+hvtxy(0),
+hvtyz(0),
+hvtxz(0),
+hMultPSV(0),
+hPtAll(0),
+hEtaAll(0),
+hTrackPos(0),
+hTrackPosxy(0),
+hTrackPosyz(0),
+hTrackPosxz(0),
+//hTPCchi2clusters(0),
+//hdcaToVertexXY(0),
+//hdcaToVertexZ(0),
+hMultPrim(0),
+hPtPrim(0),
+hEtaPrim(0),
+hPrimTrackPos(0),
+hPrimTrackPosxy(0),
+hPrimTrackPosyz(0),
+hPrimTrackPosxz(0),
+hPt(0),
+hEta(0),
+//hRapidity(0),
+hPtKink(0),
+hEtaKink(0),
+hRapidityKink(0),
+hPmP(0),
+hKinkPosRTPCclusters1(0),
+hKinkPosRTPCclusters2(0),
+hQt(0),
+hKinkAngle(0),
+hDCAkink(0),
+hPmKinkAng(0),
+hKinkPosXY(0),
+hKinkPosZY(0),
+hKinkPosZR(0),
+hKinkPosR(0),
+hKinkPosZ(0),
+hKinkPosZMCKinkPosZ(0),
+hPdgCodemd(0),
+hPmd(0),
+hMinvPimu(0),
+hUIDKinkDau(0),
+hdEdx(0),
+hPtKinkFake(0),
+hEtaKinkFake(0),
+hRapidityKinkFake(0),
+hPmPFake(0),
+hKinkPosRTPCclusters1Fake(0),
+hKinkPosRTPCclusters2Fake(0),
+hQtFake(0),
+hKinkAngleFake(0),
+hDCAkinkFake(0),
+hPmKinkAngFake(0),
+hKinkPosXYFake(0),
+hKinkPosZYFake(0),
+hKinkPosZRFake(0),
+hKinkPosRFake(0),
+hKinkPosZFake(0),
+hKinkPosZMCKinkPosZFake(0),
+hPdgCodemdFake(0),
+hPmdFake(0),
+hMinvPimuFake(0),
+hUIDKinkDauFake(0),
+hdEdxFake(0),
+hPtPosRSelected(0),
+hPdgCodemdZRejected(0),
+hPtZSelected(0),
+hPdgCodemdAngRejected(0),
+hPtAngSelected(0),
+hPdgCodemdPmRejected(0),
+hPtPmSelected(0),
+hPdgCodemdQtLowRejected(0),
+hPtGoodKink(0),
+hEtaGoodKink(0),
+hRapidityGoodKink(0),
+hQtGoodKink(0),
+hPmGoodKinkAng(0),
+hPdgCodemdGoodKink(0),
+hPmdGoodKink(0),
+hUIDGoodKinkDau(0),
+hdEdxGoodKink(0),
+hUIDPiDauPlus(0),
+hMultPiPlus(0),
+hPtPiPlus(0),
+hEtaPiPlus(0),
+hRapidityPiPlus(0),
+hQtPiPlus(0),
+hKinkAnglePiPlus(0),
+hPmKinkAngPiPlus(0),
+hKinkPosXYPiPlus(0),
+hKinkPosZRPiPlus(0),
+hKinkPosRPiPlus(0),
+hDCAkinkPiPlus(0),
+hPdgCodemdPiPlus(0),
+hPmdPiPlus(0),
+hdEdxPiPlus(0),
+hQtPimuPlus(0),
+hPmKinkAngPimuPlus(0),
+hQtPiotherPlus(0),
+hPmKinkAngPiotherPlus(0),
+hPdgCodemdPiotherPlus(0),
+hUIDPiDauMinus(0),
+hMultPiMinus(0),
+hPtPiMinus(0),
+hEtaPiMinus(0),
+hRapidityPiMinus(0),
+hQtPiMinus(0),
+hKinkAnglePiMinus(0),
+hPmKinkAngPiMinus(0),
+hKinkPosXYPiMinus(0),
+hKinkPosZRPiMinus(0),
+hKinkPosRPiMinus(0),
+hDCAkinkPiMinus(0),
+hPdgCodemdPiMinus(0),
+hPmdPiMinus(0),
+hdEdxPiMinus(0),
+hQtPimuMinus(0),
+hPmKinkAngPimuMinus(0),
+hQtPiotherMinus(0),
+hPmKinkAngPiotherMinus(0),
+hPdgCodemdPiotherMinus(0),
+hPdgCodemdQtRejected(0),
+hPtQtSelected(0),
+hPdgCodemdMaxAngRejected(0),
+hPtMaxAngSelected(0),
+hPdgCodemdRTPCclustersRejected(0),
+hPtRTPCclustersSelected(0),
+hRTPCclustersRTPCclustersSelected(0),
+hPdgCodemdMinvRejected(0),
+hPtSelected(0),
+hEtaSelected(0),
+hRapiditySelected(0),
+hQtSelected(0),
+hKinkAngleSelected(0),
+hDCAkinkSelected(0),
+hPmKinkAngSelected(0),
+hKinkPosXYSelected(0),
+hKinkPosZRSelected(0),
+hKinkPosRSelected(0),
+hPdgCodemdSelected(0),
+hPmdSelected(0),
+hMinvPimuSelected(0),
+hUIDKinkDauSelected(0),
+hdEdxSelected(0),
+hPtSelectedFake(0),
+hEtaSelectedFake(0),
+hRapiditySelectedFake(0),
+hQtSelectedFake(0),
+hKinkAngleSelectedFake(0),
+hDCAkinkSelectedFake(0),
+hPmKinkAngSelectedFake(0),
+hKinkPosXYSelectedFake(0),
+hKinkPosZRSelectedFake(0),
+hKinkPosRSelectedFake(0),
+hPmdSelectedFake(0),
+hMinvPimuSelectedFake(0),
+hdEdxSelectedFake(0),
+hPdgCodemddEdxRejected(0),
+hPtPiSelected(0),
+hEtaPiSelected(0),
+hRapidityPiSelected(0),
+hQtPiSelected(0),
+hKinkAnglePiSelected(0),
+hDCAkinkPiSelected(0),
+hPmKinkAngPiSelected(0),
+hKinkPosRTPCclusters1PiSelected(0),
+hKinkPosRTPCclusters2PiSelected(0),
+hKinkPosXYPiSelected(0),
+hKinkPosZRPiSelected(0),
+hKinkPosRPiSelected(0),
+hKinkPosZPiSelected(0),
+hPmPPiSelected(0),
+hPdgCodemdPiSelected(0),
+hPmdPiSelected(0),
+hMinvPimuPiSelected(0),
+hUIDKinkDauPiSelected(0),
+hdEdxPiSelected(0),
+hPtPiSelectedPlus(0),
+hEtaPiSelectedPlus(0),
+hRapidityPiSelectedPlus(0),
+hQtPiSelectedPlus(0),
+hKinkAnglePiSelectedPlus(0),
+hDCAkinkPiSelectedPlus(0),
+hPmKinkAngPiSelectedPlus(0),
+hKinkPosXYPiSelectedPlus(0),
+hKinkPosZRPiSelectedPlus(0),
+hPdgCodemdPiSelectedPlus(0),
+hPmdPiSelectedPlus(0),
+hMinvPimuPiSelectedPlus(0),
+hUIDPiDaumuSelectedPlus(0),
+hdEdxPiSelectedPlus(0),
+hPtPrimPiKinksPlus(0),
+hEtaPrimPiKinksPlus(0),
+hRapidityPrimPiKinksPlus(0),
+hPtSecondPiKinksPlus(0),
+hEtaSecondPiKinksPlus(0),
+hRapiditySecondPiKinksPlus(0),
+hPtNonPiKinksPlus(0),
+hEtaNonPiKinksPlus(0),
+hRapidityNonPiKinksPlus(0),
+hPdgCodemdNonPiKinksPlus(0),
+hPtPiSelectedMinus(0),
+hEtaPiSelectedMinus(0),
+hRapidityPiSelectedMinus(0),
+hQtPiSelectedMinus(0),
+hKinkAnglePiSelectedMinus(0),
+hDCAkinkPiSelectedMinus(0),
+hPmKinkAngPiSelectedMinus(0),
+hKinkPosXYPiSelectedMinus(0),
+hKinkPosZRPiSelectedMinus(0),
+hPdgCodemdPiSelectedMinus(0),
+hPmdPiSelectedMinus(0),
+hMinvPimuPiSelectedMinus(0),
+hUIDPiDaumuSelectedMinus(0),
+hdEdxPiSelectedMinus(0),
+hPtPrimPiKinksMinus(0),
+hEtaPrimPiKinksMinus(0),
+hRapidityPrimPiKinksMinus(0),
+hPtSecondPiKinksMinus(0),
+hEtaSecondPiKinksMinus(0),
+hRapiditySecondPiKinksMinus(0),
+hPtNonPiKinksMinus(0),
+hEtaNonPiKinksMinus(0),
+hRapidityNonPiKinksMinus(0),
+hPdgCodemdNonPiKinksMinus(0),// reconstruction histograms
+fListOfHistos(0),
+fLowMulcut(-1), fUpMulcut(-1),
+cLowPt(0), cRapidityLim(0),
+cLowR(0), cUpR(0),
+cLowZ(0), cUpZ(0),
+cLowKinkAngle(0),
+cLowQt(0), cUpQt(0),
+cLowInvMass(0), cUpInvMass(0),
+cSigmaCut(0),
+cPdgKaon(321), cPdgPion(211), cPdgMuon(13), cPdgElectron(11),
+cKaonMass(0), cPionMass(0), cMuonMass(0), cElectronMass(0),
+nBinsMult(0), hLowMult(0), hUpMult(0),
+nBinsPt(0), hLowPt(0), hUpPt(0),
+nBinsEta(0), hLowEta(0), hUpEta(0),
+nBinsQt(0), hLowQt(0), hUpQt(0),
+nBinsPdg(0), hLowPdg(0), hUpPdg(0),
+nBinsPdg2(0), hLowPdg2(0), hUpPdg2(0),
+nBinsUID(0), hLowUID(0), hUpUID(0),
+nBinsR(0), hLowR(0), hUpR(0),
+nBinsZ(0), hLowZ(0), hUpZ(0),
+nBinsXY(0), hLowXY(0), hUpXY(0),
+nBinsAngle(0), hLowAngle(0), hUpAngle(0),
+nBinsZV(0), hLowZV(0), hUpZV(0),
+nBinsXYV(0), hLowXYV(0), hUpXYV(0),
+nBinsInvMass(0), hLowInvMass(0), hUpInvMass(0),
+nBinsdEdx(0), hLowdEdx(0), hUpdEdx(0), fPIDResponse(0),
+fMaxDCAtoVtxCut(0), fTrackCuts(0)
+
+{
+//Multiplicity bins
+fMaxDCAtoVtxCut=new AliESDtrackCuts("fMaxDCAtoVtxCut","fMaxDCAtoVtxCut");
+fMaxDCAtoVtxCut->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
+fMaxDCAtoVtxCut->SetMaxChi2TPCConstrainedGlobal(36);
+
+fTrackCuts = new AliESDtrackCuts("Multiplicity bins","Multiplicity bins");
+fTrackCuts->SetMinNClustersTPC(70);
+fTrackCuts->SetMaxChi2PerClusterTPC(4);
+fTrackCuts->SetAcceptKinkDaughters(kFALSE);
+fTrackCuts->SetRequireTPCRefit(kTRUE);
+fTrackCuts->SetRequireITSRefit(kTRUE);
+fTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
+fTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
+fTrackCuts->SetMaxDCAToVertexZ(2);
+fTrackCuts->SetDCAToVertex2D(kFALSE);
+fTrackCuts->SetRequireSigmaToVertex(kFALSE);
+fTrackCuts->SetEtaRange(-0.8,+0.8);
+fTrackCuts->SetPtRange(0.15, 1e10);
+
+//DefineOutput(0, TList::Class());
+DefineOutput(1, TList::Class());
+}
+
+//________________________________________________________________________
+void AliAnalysisPionKinksMCESD::UserCreateOutputObjects() {
+fListOfHistos=new TList();
+
+//maximum kink angle for kaons to muons
+fMaxKinkAngKmu=new TF1("fMaxKinkAngKmu","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",1.1,10.0);
+fMaxKinkAngKmu->SetParameter(0,cKaonMass);
+fMaxKinkAngKmu->SetParameter(1,0.9127037);
+fMaxKinkAngKmu->SetParameter(2,TMath::Pi());
+
+//maximum kink angle for pions to muons
+fMaxKinkAngPimu=new TF1("fMaxKinkAngPimu","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",0.1,10.0);
+fMaxKinkAngPimu->SetParameter(0,cPionMass);
+fMaxKinkAngPimu->SetParameter(1,0.2731374);
+fMaxKinkAngPimu->SetParameter(2,TMath::Pi());
+
+//Create histograms
+TH1::SetDefaultSumw2();
+TH2::SetDefaultSumw2();
+
+//MC histograms
+hMCMult = new TH1F("hMCMult", "MC multiplicity; Number of tracks; Number of events", 100, 0.0, 2000);
+hMCMultPrim = new TH1F("hMCMultPrim", "MC primary tracks multiplicity; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hMCPtAll = new TH1F("hMCPtAll", "Transverse momentum of all MC tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hMCEtaAll = new TH1F("hMCEtaAll", "Pseudorapidity of all MC tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCPtPrim = new TH1F("hMCPtPrim", "Transverse momentum of primary MC tracks; p_{T} (GeV/c); dN/dp_{T}",nBinsPt, hLowPt, hUpPt);
+hMCEtaPrim = new TH1F("hMCEtaPrim", "Pseudorapidity of primary MC tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCPt = new TH1F("hMCPt", "Transverse momentum of selected MC tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hMCEta = new TH1F("hMCEta", "Pseudorapidity of selected MC tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCPdg = new TH1F("hMCPdg", "Pdg code of selected MC tracks; Pdg code; Number of particles", nBinsPdg, hLowPdg, hUpPdg);
+hMCMultPiPlus = new TH1F("hMCMultPiPlus", "MC pion multiplicity; Number of pion tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hMCPtPiPlus = new TH1F("hMCPtPiPlus", "Transverse momentum of selected MC pions; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hMCEtaPiPlus = new TH1F("hMCEtaPiPlus", "Pseudorapidity of selected MC piaons; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCRapidityPiPlus = new TH1F("hMCRapidityPiPlus", "Pseudorapidity of selected MC pions; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCNDaughtersPlus = new TH1F("hMCNDaughtersPlus", "Number of daughters; number of daughers; number of pions", 10,0,10);
+hMCRadPiDauPlus = new TH1F("hMCRadPiDauPlus", "Radius of MC daughter generation position; R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hMCKinkPosZPlus = new TH1F("hMCKinkPosZPlus", "z position of MC daughter generation vertex; z (cm); dN/dz", 100, 0.0, 500.0);
+hMCUIDPiDauPlus = new TH1F("hMCUIDPiDauPlus", "UID (method of production) of MC pion daughters; UID (method of production); Number of particles", 21, 0.0, 20);
+hMCPdgPiNonDecayedPlus = new TH1F("hMCPdgPiNonDecayedPlus", "Pdg code of MC pion non-decayed products; Pdg code; Number of particles", nBinsPdg, hLowPdg, hUpPdg);
+hMCPdgPiDauPlus = new TH1F("hMCPdgPiDauPlus", "Pdg code of MC pion daughters; Pdg code; Number of particles", nBinsPdg, hLowPdg, hUpPdg);
+hMCQtPlus = new TH1F("hMCQtPlus", "Daughter's transverse momentum in mother's frame for MC pion daughters; q_{T} (GeV/c); dN/dq_{T}", nBinsQt, hLowQt, hUpQt);
+hMCKinkAnglePlus = new TH1F("hMCKinkAnglePlus", "MC angle between pion mother's and daughter's momentum; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hMCPKinkAngPlus = new TH2F("hMCPKinkAngPlus", "MC mother's P vs kink angle; P (GeV/c); #theta (#circ); dN/d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hMCPdgCodemdPlus = new TH2F("hMCPdgCodemdPlus", "MC mother vs daughter pdg code; Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hMCPtmdPlus = new TH2F("hMCPtmdPlus", "MC mother vs daughter transverse momentum; Mother's p_{T} (GeV/c); Daughter's p_{T} (GeV/c)", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMCPtPimuonPlus = new TH1F("hMCPtPimuonPlus", "Transverse momentum of selected pions MC decaying to muons; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hMCEtaPimuonPlus = new TH1F("hMCEtaPimuonPlus", "Pseudorapidity; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCRapidityPimuonPlus = new TH1F("hMCRapidityPimuonPlus", "Rapidity of selected MC tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCQtPimuonPlus = new TH1F("hMCQtPimuonPlus", "MC daughter's (muon) transverse momentum in mother's (pion) frame; q_{T} (GeV/c); dN/dq_{T}", nBinsQt, hLowQt, hUpQt);
+hMCPKinkAngPimuonPlus = new TH1F("hMCPKinkAngPimuonPlus", "MC angle between pion mother's and muon daughter's momentum; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hMCPtPiotherPlus = new TH1F("hMCPtPiotherPlus", "Transverse momentum of selected pions MC not decaying to muons; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hMCEtaPiotherPlus = new TH1F("hMCEtaPiotherPlus", "Pseudorapidity; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCRapidityPiotherPlus = new TH1F("hMCRapidityPiotherPlus", "Rapidity of selected MC tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCQtPiotherPlus = new TH1F("hMCQtPiotherPlus", "MC daughter's (muon) transverse momentum in mother's (pion) frame; q_{T} (GeV/c); dN/dq_{T}", nBinsQt, hLowQt, hUpQt);
+hMCPKinkAngPiotherPlus = new TH1F("hMCPKinkAngPiotherPlus", "MC angle between pion mother's and non-muon daughter's momentum; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hMCMultPiMinus = new TH1F("hMCMultPiMinus", "MC pion multiplicity; Number of pion tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hMCPtPiMinus = new TH1F("hMCPtPiMinus", "Transverse momentum of selected MC pions; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hMCEtaPiMinus = new TH1F("hMCEtaPiMinus", "Pseudorapidity of selected MC pions; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCRapidityPiMinus = new TH1F("hMCRapidityPiMinus", "Pseudorapidity of selected MC pions; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCNDaughtersMinus = new TH1F("hMCNDaughtersMinus", "Number of daughters; number of daughers; number of pions", 10,0,10);
+hMCRadPiDauMinus = new TH1F("hMCRadPiDauMinus", "Radius of MC daughter generation position; R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hMCKinkPosZMinus = new TH1F("hMCKinkPosZMinus", "z position of MC daughter generation vertex; z (cm); dN/dz", 100, 0.0, 500.0);
+hMCUIDPiDauMinus = new TH1F("hMCUIDPiDauMinus", "UID (method of production) of MC pion daughters; UID (method of production); Number of particles", 21, 0.0, 20);
+hMCPdgPiNonDecayedMinus = new TH1F("hMCPdgPiNonDecayedMinus", "Pdg code of MC pion non-decayed products; Pdg code; Number of particles", nBinsPdg, hLowPdg, hUpPdg);
+hMCPdgPiDauMinus = new TH1F("hMCPdgPiDauMinus", "Pdg code of MC pion daughters; Pdg code; Number of particles", nBinsPdg, hLowPdg, hUpPdg);
+hMCQtMinus = new TH1F("hMCQtMinus", "Daughter's transverse momentum in mother's frame for MC pion daughters; q_{T} (GeV/c); dN/dq_{T}", nBinsQt, hLowQt, hUpQt);
+hMCKinkAngleMinus = new TH1F("hMCKinkAngleMinus", "MC angle between pion mother's and daughter's momentum; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hMCPKinkAngMinus = new TH2F("hMCPKinkAngMinus", "MC mother's P vs kink angle; P (GeV/c); #theta (#circ); dN/d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hMCPdgCodemdMinus = new TH2F("hMCPdgCodemdMinus", "MC mother vs daughter pdg code; Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hMCPtmdMinus = new TH2F("hMCPtmdMinus", "MC mother vs daughter transverse momentum; Mother's p_{T} (GeV/c); Daughter's p_{T} (GeV/c)", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMCPtPimuonMinus = new TH1F("hMCPtPimuonMinus", "Transverse momentum of selected pions MC decaying to muons; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hMCEtaPimuonMinus = new TH1F("hMCEtaPimuonMinus", "Pseudorapidity; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCRapidityPimuonMinus = new TH1F("hMCRapidityPimuonMinus", "Rapidity of selected MC tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCQtPimuonMinus = new TH1F("hMCQtPimuonMinus", "MC daughter's (muon) transverse momentum in mother's (pion) frame; q_{T} (GeV/c); dN/dq_{T}", nBinsQt, hLowQt, hUpQt);
+hMCPKinkAngPimuonMinus = new TH1F("hMCPKinkAngPimuonMinus", "MC angle betweenpion mother's and muon daughter's momentum; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hMCPtPiotherMinus = new TH1F("hMCPtPiotherMinus", "Transverse momentum of selected pions MC not decaying to muons; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hMCEtaPiotherMinus = new TH1F("hMCEtaPiotherMinus", "Pseudorapidity; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCRapidityPiotherMinus = new TH1F("hMCRapidityPiotherMinus", "Rapidity of selected MC tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hMCQtPiotherMinus = new TH1F("hMCQtPiotherMinus", "MC daughter's (muon) transverse momentum in mother's (pion) frame; q_{T} (GeV/c); dN/dq_{T}", nBinsQt, hLowQt, hUpQt);
+hMCPKinkAngPiotherMinus = new TH1F("hMCPKinkAngPiotherMinus", "MC angle betweenpion mother's and non-muon daughter's momentum; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+
+
+//Reconstruction histograms
+hMult = new TH1F("hMult", "Multiplicity (unbiased); Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hAcceptedMult = new TH1F("hAcceptedMult", "Multiplicity (biased); Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hMultPS = new TH1F("hMultPS", "Multiplicity after physics selection; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hvtx = new TH3F("hvtx", "Reconstructed primary vertex position; x axis; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hvtxy = new TH2F("hvtxy", "Reconstructed primary vertex position in x-y plane; x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV);
+hvtyz = new TH2F("hvtyz", "Reconstructed primary vertex position in y-z plane; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hvtxz = new TH2F("hvtxz", "Reconstructed primary vertex position in x-z plane; x axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hMultPSV = new TH1F("hMultPSV", "Multiplicity after physics selection & vertex cut; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hPtAll = new TH1F("hPtAll", "Transverse momentum of all tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaAll = new TH1F("hEtaAll", "Pseudorapidity of all tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hTrackPos = new TH3F("hTrackPos", "Generetion position of all reconstructed tracks", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hTrackPosxy = new TH2F("hTrackPosxy", "Generetion position of all reconstructed tracks in x-y plane; x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV);
+hTrackPosyz = new TH2F("hTrackPosyz", "Generetion position of all reconstructed tracks in y-z plane; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hTrackPosxz = new TH2F("hTrackPosxz", "Generetion position of all reconstructed tracks in x-z plane; x axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+//hTPCchi2clusters = new TH1F("hTPCchi2clusters", "#chi^{2}/Number of TPC clusters; #chi^{2}; TPC clusters)", 100, 0.0, 2.0);//
+//hdcaToVertexXY = new TH1F("hdcaToVertexXY", "Track to vertex impact parameter in x-y plane; DCA_{z} (cm); dN/d(DCA_{z})", 100, 0.0, 2.0);//
+//hdcaToVertexZ = new TH1F("hdcaToVertexZ", "Track to vertex impact parameter in z axis; DCA_{z} (cm); dN/d(DCA_{z})", 100, 0.0, 2.0);//
+hMultPrim = new TH1F("hMultPrim", "ESD primary - supposed tracks multiplicity; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
+hPtPrim = new TH1F("hPtPrim", "Transverse momentum of primary - supposed ESD tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPrim = new TH1F("hEtaPrim", "Pseudorapidity of primary - supposed ESD tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hPrimTrackPos = new TH3F("hPrimTrackPos", "Generetion position of selected tracks (DCA and quality cuts)", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hPrimTrackPosxy = new TH2F("hPrimTrackPosxy", "Generetion position of selected tracks in x-y plane (DCA and quality cuts); x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV);
+hPrimTrackPosyz = new TH2F("hPrimTrackPosyz", "Generetion position of selected tracks in y-z plane (DCA and quality cuts); y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hPrimTrackPosxz = new TH2F("hPrimTrackPosxz", "Generetion position of selected tracks in x-z plane (DCA and quality cuts); x axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
+hPt = new TH1F("hPt", "Transverse momentum of selected ESD tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEta = new TH1F("hEta", "Pseudorapidity of selected ESD tracks; n; Number of tracks dN/dn", nBinsEta, hLowEta, hUpEta);
+//hRapidity = new TH1F("hRapidity", "Rapidity of selected ESD tracks; n; Number of tracks dN/dn", nBinsEta, hLowEta, hUpEta);
+hPtKink = new TH1F("hPtKink", "Mother's transverse momentum for all ESD kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaKink = new TH1F("hEtaKink", "Mother's pseudorapidity for all ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityKink = new TH1F("hRapidityKink", "Mother's rapidity for all ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hPmP = new TH2F("hPmP", "Mother's momentum as calculated by kink and by track; P_{kink}; P_{track}", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hKinkPosRTPCclusters1 = new TH1F("hKinkPosRTPCclusters1", " ;kinkposR; tpc clusters",100,0,1);
+hKinkPosRTPCclusters2 = new TH2F("hKinkPosRTPCclusters2", " ;kinkposR; tpc clusters",nBinsR, hLowR, hUpR,100,0,200 );
+hQt = new TH1F("hQt", "Daughter's transverse momentum in mother's frame for all ESD kinks; q_{T} (GeV/c); dN/dq_{T}", nBinsQt, hLowQt, hUpQt);
+hKinkAngle = new TH1F("hKinkAngle", "Kink angle for all ESD kinks; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkink = new TH1F("hDCAkink", "DCA between the two kink tracks; DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAng = new TH2F("hPmKinkAng", "k, p_(GeV/c); #theta (#circ); d^{2}N/dpd#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXY = new TH2F("hKinkPosXY", "X-Y Position of all kinks; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZY = new TH2F("hKinkPosZY", "z vs y position of kinks (DCA, quality, p_{T} & y cuts); z (cm); y (cm)", nBinsZ, hLowZ, hUpZ, nBinsXY, hLowXY, hUpXY);
+hKinkPosZR = new TH2F("hKinkPosZR", "Z vs radius of all kinks position; Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
+hKinkPosR = new TH1F("hKinkPosR", "Position radius of all ESD kinks; R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hKinkPosZ = new TH1F("hKinkPosZ", "z position of kinks (DCA, quality, p_{T} & y cuts); z (cm); dN/dz", nBinsZ, -1, 1);
+hKinkPosZMCKinkPosZ = new TH2F("hKinkPosZMCKinkPosZ", "Reconstructed vs generated z position of kinks (DCA, quality, p_{T} & y cuts); z (cm); dN/dz", nBinsZ, hLowZ, hUpZ, nBinsZ, hLowZ, hUpZ);
+hPdgCodemd = new TH2F("hPdgCodemd", "Mother vs daughter pdg code for all ESD kinks; Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPmd = new TH2F("hPmd", "ESD mother vs daughter momentum magnitude; Mother's P (GeV/c); Daughter's P (GeV/c)", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimu = new TH1F("hMinvPimu", "Invariant mass of ESD pions decaying to muons; m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
+hUIDKinkDau = new TH1F("hUIDKinkDau", "UID (method of production) of all ESD pion kink daughters (perfect PID); UID (method of production); Number of particles", 21, 0.0, 20);
+hdEdx = new TH2F("hdEdx", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hPtKinkFake = new TH1F("hPtKinkFake", "Mother's transverse momentum for all fake kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaKinkFake = new TH1F("hEtaKinkFake", "Mother's pseudorapidity for all fake kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityKinkFake = new TH1F("hRapidityKinkFake", "Mother's rapidity for all fake kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hPmPFake = new TH2F("hPmPFake", "Mother's momentum magnitude calculated from kink vs calculated from track for all fake kinks; p_{kink} (GeV/c); p_{track} (GeV/c)", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hKinkPosRTPCclusters1Fake = new TH1F("hKinkPosRTPCclusters1Fake", " ;kinkposR; tpc clusters",100,0,1);
+hKinkPosRTPCclusters2Fake = new TH2F("hKinkPosRTPCclusters2Fake", " ;kinkposR; tpc clusters",nBinsR, hLowR, hUpR,100,0,200 );
+hQtFake = new TH1F("hQtFake", "Daughter's transverse momentum in mother's frame for all fake kinks; q_{T} (GeV/c); dN/dq_{T}", nBinsQt, hLowQt, hUpQt);
+hKinkAngleFake = new TH1F("hKinkAngleFake", "Kink angle for all fake kinks; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkinkFake = new TH1F("hDCAkinkFake", "DCA between the two fake kink tracks; DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAngFake = new TH2F("hPmKinkAngFake", "k, p_(GeV/c); #theta (#circ); d^{2}N/dpd#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXYFake = new TH2F("hKinkPosXYFake", "X-Y Position of all fake kinks; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZYFake = new TH2F("hKinkPosZYFake", "z vs y position of fake kinks (DCA, quality, p_{T} & y cuts); z (cm); y (cm)", nBinsZ, hLowZ, hUpZ, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRFake = new TH2F("hKinkPosZRFake", "Z vs radius of all fake kinks position; Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
+hKinkPosRFake = new TH1F("hKinkPosRFake", "Position radius of all fake kinks; R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hKinkPosZFake = new TH1F("hKinkPosZFake", "z position of fake kinks (DCA, quality, p_{T} & y cuts); z (cm); dN/dz", nBinsZ, -1, 1);
+hKinkPosZMCKinkPosZFake = new TH2F("hKinkPosZMCKinkPosZFake", "Reconstructed vs generated z position of fake kinks (DCA, quality, p_{T} & y cuts); z (cm); dN/dz", nBinsZ, hLowZ, hUpZ, nBinsZ, hLowZ, hUpZ);
+hPdgCodemdFake = new TH2F("hPdgCodemdFake", "Mother vs daughter pdg code for fakes; Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPmdFake = new TH2F("hPmdFake", "ESD mother vs daughter momentum magnitude (fake kinks); Mother's P (GeV/c); Daughter's P (GeV/c)", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimuFake = new TH1F("hMinvPimuFake", "Invariant mass of ESD pions decaying to muons (fake kinks); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
+hUIDKinkDauFake = new TH1F("hUIDKinkDauFake", "UID (method of production) of all ESD pion kink daughters (perfect PID); UID (method of production); Number of particles", 21, 0.0, 20);
+hdEdxFake = new TH2F("hdEdxFake", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hPtPosRSelected = new TH1F("hPtPosRSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y & R cuts); R (cm); dN/dR", nBinsPt, hLowPt, hUpPt);
+hPdgCodemdZRejected = new TH2F("hPdgCodemdZRejected", "Mother's vs daughter's pdg code for rejected kinks (DCA, quality, p_{T}, y, R & z cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPtZSelected = new TH1F("hPtZSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R & z cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hPdgCodemdAngRejected = new TH2F("hPdgCodemdAngRejected", "Mother's vs daughter's pdg code for rejected kinks (DCA, quality, p_{T}, y, R, z & #theta cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPtAngSelected = new TH1F("hPtAngSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z & #theta cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hPdgCodemdPmRejected = new TH2F("hPdgCodemdPmRejected", "Mother's vs daughter's pdg code for rejected kinks (DCA, quality, p_{T}, y, R, z, #theta & p_{track}/p{kink} cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPtPmSelected = new TH1F("hPtPmSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta & p_{track}/p{kink} cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hPdgCodemdQtLowRejected = new TH2F("hPdgCodemdQtLowRejected", "Mother's vs daughter's pdg code for rejected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink} & low q_{T} cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPtGoodKink = new TH1F("hPtGoodKink", "Mother's transverse momentum for real ESD kinks (realistic PID); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaGoodKink = new TH1F("hEtaGoodKink", "Mother's pseudorapidity for real ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityGoodKink = new TH1F("hRapidityGoodKink", "Mother's rapidity for real ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtGoodKink = new TH1F("hQtGoodKink", "Daughter's transverse momentum in mother's frame for real ESD kinks (realistic PID); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hPmGoodKinkAng = new TH2F("hPmGoodKinkAng", "Mother's momentum magnitude vs kink angle for real ESD kinks (realistic PID); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hPdgCodemdGoodKink = new TH2F("hPdgCodemdGoodKink", "Mother vs daughter pdg code for real ESD kinks; Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPmdGoodKink = new TH2F("hPmdGoodKink", "Mother vs daughter momentum magnitude for real ESD kinks (realistic PID); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hUIDGoodKinkDau = new TH1F("hUIDGoodKinkDau", "UID (method of production); UID (method of production); Number of particles", 21, 0.0, 20);
+hdEdxGoodKink = new TH2F("hdEdxGoodKink", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hUIDPiDauPlus = new TH1F("hUIDPiDauPlus", "UID (method of production) of all ESD pion kink daughters (perfect PID); UID (method of production); Number of particles", 21, 0.0, 20);
+hMultPiPlus = new TH1F("hMultPiPlus", "ESD pion multiplicity in selected TPC area; Number of pions; Number of events", 100, 0.0, 200.0);
+hPtPiPlus = new TH1F("hPtPiPlus", "Mother's transverse momentum for ESD pion kinks (perfect PID); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPiPlus = new TH1F("hEtaPiPlus", "Mother's pseudorapidity for ESD pion kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityPiPlus = new TH1F("hRapidityPiPlus", "Mother's rapidity for ESD pion kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtPiPlus = new TH1F("hQtPiPlus", "Daughter's transverse momentum in mother's frame for ESD pion kinks (perfect PID); q_{T} (GeV/c); dN/dq_{T}", 100, 0.0, 0.1);
+hKinkAnglePiPlus = new TH1F("hKinkAnglePiPlus", "Kink angle of ESD pion kinks (perfect PID); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hPmKinkAngPiPlus = new TH2F("hPmKinkAngPiPlus", "Mother's momentum magnitude vs kink angle for ESD pion kinks (perfect PID); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXYPiPlus = new TH2F("hKinkPosXYPiPlus", "X-Y Position ; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRPiPlus = new TH2F("hKinkPosZRPiPlus", "Z vs radius of all fake kinks position; Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
+hKinkPosRPiPlus = new TH1F("hKinkPosRPiPlus", "Position radius of all fake kinks; R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hDCAkinkPiPlus = new TH1F("hDCAkinkPiPlus", "DCA; DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPdgCodemdPiPlus = new TH2F("hPdgCodemdPiPlus", "Mother vs daughter pdg code for pi kinks; Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPmdPiPlus = new TH2F("hPmdPiPlus", "Mother vs daughter momentum magnitude for pi kinks (realistic PID); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hdEdxPiPlus = new TH2F("hdEdxPiPlus", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hQtPimuPlus = new TH1F("hQtPimuPlus", "Daughter's transverse momentum in mother's frame for ESD pion to muon kinks (perfect PID); q_{T} (GeV/c); dN/dq_{T}", 100, 0.0, 0.1);
+hPmKinkAngPimuPlus = new TH2F("hPmKinkAngPimuPlus", "Mother's momentum magnitude vs kink angle for ESD pion to muon kinks (perfect PID); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hQtPiotherPlus = new TH1F("hQtPiotherPlus", "Daughter's transverse momentum in mother's frame for ESD pion to other (not muon) kinks (perfect PID); q_{T} (GeV/c); dN/dq_{T}", 100, 0.0, 0.1);
+hPmKinkAngPiotherPlus = new TH2F("hPmKinkAngPiotherPlus", "Mother's momentum magnitude vs kink angle for ESD pion to other (not muon) kinks (perfect PID); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hPdgCodemdPiotherPlus = new TH2F("hPdgCodemdPiotherPlus", "Mother vs daughter pdg code for ESD pion to other (not muon) kinks (perfect PID); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hUIDPiDauMinus = new TH1F("hUIDPiDauMinus", "UID (method of production) of all ESD pion kink daughters (perfect PID); UID (method of production); Number of particles", 21, 0.0, 20);
+hMultPiMinus = new TH1F("hMultPiMinus", "ESD pion multiplicity in selected TPC area; Number of pions; Number of events", 100, 0.0, 200.0);
+hPtPiMinus = new TH1F("hPtPiMinus", "Mother's transverse momentum for ESD pion kinks (perfect PID); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPiMinus = new TH1F("hEtaPiMinus", "Mother's pseudorapidity for ESD pion kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityPiMinus = new TH1F("hRapidityPiMinus", "Mother's rapidity for ESD pion kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtPiMinus = new TH1F("hQtPiMinus", "Daughter's transverse momentum in mother's frame for ESD pion kinks (perfect PID); q_{T} (GeV/c); dN/dq_{T}", 100, 0.0, 0.1);
+hKinkAnglePiMinus = new TH1F("hKinkAnglePiMinus", "Kink angle of ESD pion kinks (perfect PID); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hPmKinkAngPiMinus = new TH2F("hPmKinkAngPiMinus", "Mother's momentum magnitude vs kink angle for ESD pion kinks (perfect PID); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXYPiMinus = new TH2F("hKinkPosXYPiMinus", "X-Y Position ; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRPiMinus = new TH2F("hKinkPosZRPiMinus", "Z vs radius of all fake kinks position; Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
+hKinkPosRPiMinus = new TH1F("hKinkPosRPiMinus", "Position radius of all fake kinks; R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hDCAkinkPiMinus = new TH1F("hDCAkinkPiMinus", "DCA; DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPdgCodemdPiMinus = new TH2F("hPdgCodemdPiMinus", "Mother vs daughter pdg code for pi kinks; Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPmdPiMinus = new TH2F("hPmdPiMinus", "Mother vs daughter momentum magnitude for pi kinks (realistic PID); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hdEdxPiMinus = new TH2F("hdEdxPiMinus", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hQtPimuMinus = new TH1F("hQtPimuMinus", "Daughter's transverse momentum in mother's frame for ESD pion to muon kinks (perfect PID); q_{T} (GeV/c); dN/dq_{T}", 100, 0.0, 0.1);
+hPmKinkAngPimuMinus = new TH2F("hPmKinkAngPimuMinus", "Mother's momentum magnitude vs kink angle for ESD pion to muon kinks (perfect PID); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hQtPiotherMinus = new TH1F("hQtPiotherMinus", "Daughter's transverse momentum in mother's frame for ESD pion to other (not muon) kinks (perfect PID); q_{T} (GeV/c); dN/dq_{T}", 100, 0.0, 0.1);
+hPmKinkAngPiotherMinus = new TH2F("hPmKinkAngPiotherMinus", "Mother's momentum magnitude vs kink angle for ESD pion to other (not muon) kinks (perfect PID); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hPdgCodemdPiotherMinus = new TH2F("hPdgCodemdPiotherMinus", "Mother vs daughter pdg code for ESD pion to other (not muon) kinks (perfect PID); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPdgCodemdQtRejected = new TH2F("hPdgCodemdQtRejected", "Mother's vs daughter's pdg code for rejected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink} & q^{T} cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPtQtSelected = new TH1F("hPtQtSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink} & q^{T} cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hPdgCodemdMaxAngRejected = new TH2F("hPdgCodemdMaxAngRejected", "Mother's vs daughter's pdg code for rejected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T} & #theta_{max} cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPtMaxAngSelected = new TH1F("hPtMaxAngSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T} & #theta_{max} cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hPdgCodemdRTPCclustersRejected = new TH2F("hPdgCodemdRTPCclustersRejected", "Mother's vs daughter's pdg code for rejected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T}, #theta_{max} & R/TPC clusters cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPtRTPCclustersSelected = new TH1F("hPtRTPCclustersSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T}, #theta_{max} & R/TPC clusters cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hRTPCclustersRTPCclustersSelected = new TH2F("hRTPCclustersRTPCclustersSelected", "Number of TPC clusters vs radius for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T}, #theta_{max} & R/TPC clusters cuts) R (cm); number of TPC clusters", nBinsR, hLowR, hUpR, 100, 0, 200);
+hPdgCodemdMinvRejected = new TH2F("hPdgCodemdMinvRejected", "Mother's vs daughter's pdg code for rejected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T}, #theta_{max}, R/TPC clusters & m_{inv} cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPtSelected = new TH1F("hPtSelected", "Mother's transverse momentum for selected kinks (all cuts except dE/dx); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaSelected = new TH1F("hEtaSelected", "Mother's pseudorapidity for selected kinks (all cuts except dE/dx); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapiditySelected = new TH1F("hRapiditySelected", "Mother's rapidity for selected kinks (all cuts except dE/dx); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtSelected = new TH1F("hQtSelected", "Daughter's transverse momentum in mother's frame for selected kinks (all cuts except dE/dx); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hKinkAngleSelected = new TH1F("hKinkAngleSelected", "Kink angle of selected kinks (all cuts except dE/dx); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkinkSelected = new TH1F("hDCAkinkSelected", "DCA; DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAngSelected = new TH2F("hPmKinkAngSelected", "Mother's momentum magnitude vs kink angle for selected kinks (all cuts except dE/dx); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXYSelected = new TH2F("hKinkPosXYSelected", "X-Y Position ; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRSelected = new TH2F("hKinkPosZRSelected", "Z vs radius of selected kinks (all cuts except dE/dx); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
+hKinkPosRSelected = new TH1F("hKinkPosRSelected", "Position radius of selected kinks (all cuts except dE/dx); R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hPdgCodemdSelected = new TH2F("hPdgCodemdSelected", "Mother vs daughter pdg code for selected kinks (all cuts except dE/dx); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPmdSelected = new TH2F("hPmdSelected", "Mother vs daughter momentum magnitude for selected kinks (all cuts except dE/dx); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimuSelected = new TH1F("hMinvPimuSelected", "Invariant mass for #pi^{#pm} decaying to #mu^{#pm} for selected kinks (all cuts except dE/dx); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
+hUIDKinkDauSelected = new TH1F("hUIDKinkDauSelected", "UID (method of production); UID (method of production); Number of particles", 100, 0.0, 20);
+hdEdxSelected = new TH2F("hdEdxSelected", "dE/dx vs mother's momentum for selected kinks (all cuts except dE/dx); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hPtSelectedFake = new TH1F("hPtSelectedFake", "Mother's transverse momentum for fake kinks (all cuts except dE/dx); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaSelectedFake = new TH1F("hEtaSelectedFake", "Mother's pseudorapidity for fake kinks (all cuts except dE/dx); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapiditySelectedFake = new TH1F("hRapiditySelectedFake", "Mother's rapidity ffor fake kinks (all cuts except dE/dx); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtSelectedFake = new TH1F("hQtSelectedFake", "Daughter's transverse momentum in mother's frame ffor fake kinks (all cuts except dE/dx); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hKinkAngleSelectedFake = new TH1F("hKinkAngleSelectedFake", "Kink angle of fake kinks (all cuts except dE/dx); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkinkSelectedFake = new TH1F("hDCAkinkSelectedFake", "Kink DCA for fake kinks (all cuts except dE/dx); DCA; Number of kinks", 100, 0.0, 2.0);
+hPmKinkAngSelectedFake = new TH2F("hPmKinkAngSelectedFake", "Mother's momentum magnitude vs kink angle for fake kinks (all cuts except dE/dx); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXYSelectedFake = new TH2F("hKinkPosXYSelectedFake", "X-Y Position for fake kinks (all cuts except dE/dx); X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRSelectedFake = new TH2F("hKinkPosZRSelectedFake", "Z vs radius of fake kinks (all cuts except dE/dx); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
+hKinkPosRSelectedFake = new TH1F("hKinkPosRSelectedFake", "Position radius of fake kinks (all cuts except dE/dx); R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hPmdSelectedFake = new TH2F("hPmdSelectedFake", "Mother vs daughter momentum magnitude for fake kinks (all cuts except dE/dx); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimuSelectedFake = new TH1F("hMinvPimuSelectedFake", "Invariant mass for #pi^{#pm} decaying to #mu^{#pm} for selected kinks (all cuts) for fake kinks (all cuts except dE/dx); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
+hdEdxSelectedFake = new TH2F("hdEdxSelectedFake", "dE/dx vs mother's momentum for fake kinks (all cuts except dE/dx); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hPdgCodemddEdxRejected = new TH2F("hPdgCodemddEdxRejected", "Mother's vs daughter's pdg code for rejected kinks (all cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPtPiSelected = new TH1F("hPtPiSelected", "Mother's transverse momentum for selected kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPiSelected = new TH1F("hEtaPiSelected", "Mother's pseudorapidity for selected kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityPiSelected = new TH1F("hRapidityPiSelected", "Mother's rapidity for selected kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtPiSelected = new TH1F("hQtPiSelected", "Daughter's transverse momentum in mother's frame for selected kinks (all cuts); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hKinkAnglePiSelected = new TH1F("hKinkAnglePiSelected", "Kink angle of selected kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkinkPiSelected = new TH1F("hDCAkinkPiSelected", "DCA; DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAngPiSelected = new TH2F("hPmKinkAngPiSelected", "Mother's momentum magnitude vs kink angle for selected kinks (all cuts); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosRTPCclusters1PiSelected = new TH1F("hKinkPosRTPCclusters1PiSelected", " ;kinkposR; tpc clusters",100,0,1);
+hKinkPosRTPCclusters2PiSelected = new TH2F("hKinkPosRTPCclusters2PiSelected", " ;kinkposR; tpc clusters",nBinsR, hLowR, hUpR,100,0,200 );
+hKinkPosXYPiSelected = new TH2F("hKinkPosXYPiSelected", "X-Y Position ; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRPiSelected = new TH2F("hKinkPosZRPiSelected", "Z vs radius of selected kinks (all cuts); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
+hKinkPosRPiSelected = new TH1F("hKinkPosRPiSelected", "Position radius of selected kinks (all cuts); R (cm); dN/dR", nBinsR, hLowR, hUpR);
+hKinkPosZPiSelected = new TH1F("hKinkPosZPiSelected", "z position of selected kinks (all cuts); R (cm); dN/dR", nBinsZ, hLowZ, hUpZ);
+hPmPPiSelected = new TH2F("hPmPPiSelected", "Mother's momentum as calculated by kink and by track of selected kinks (all cuts); R (cm); dN/dR", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hPdgCodemdPiSelected = new TH2F("hPdgCodemdPiSelected", "Mother vs daughter pdg code for selected kinks (all cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPmdPiSelected = new TH2F("hPmdPiSelected", "Mother vs daughter momentum magnitude for selected kinks (all cuts); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimuPiSelected = new TH1F("hMinvPimuPiSelected", "Invariant mass for #pi^{#pm} decaying to #mu^{#pm} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
+hUIDKinkDauPiSelected = new TH1F("hUIDKinkDauPiSelected", "UID (method of production); UID (method of production); Number of particles", 100, 0.0, 20);
+hdEdxPiSelected = new TH2F("hdEdxPiSelected", "dE/dx vs mother's momentum for selected kinks (all cuts); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+
+hPtPiSelectedPlus = new TH1F("hPtPiSelectedPlus", "Mother's transverse momentum for selected positive kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPiSelectedPlus = new TH1F("hEtaPiSelectedPlus", "Mother's pseudorapidity for selected positive kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityPiSelectedPlus = new TH1F("hRapidityPiSelectedPlus", "Mother's rapidity for selected positive kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtPiSelectedPlus = new TH1F("hQtPiSelectedPlus", "Daughter's transverse momentum in mother's frame for selected positive kinks (all cuts); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hKinkAnglePiSelectedPlus = new TH1F("hKinkAnglePiSelectedPlus", "Kink angle for selected positive kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkinkPiSelectedPlus = new TH1F("hDCAkinkPiSelectedPlus", "DCA for selected positive kinks (all cuts); DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAngPiSelectedPlus = new TH2F("hPmKinkAngPiSelectedPlus", "Mother's momentum magnitude vs kink angle for selected positive kinks (all cuts); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXYPiSelectedPlus = new TH2F("hKinkPosXYPiSelectedPlus", "X-Y Position of selected positive kinks (all cuts); X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRPiSelectedPlus = new TH2F("hKinkPosZRPiSelectedPlus", "Z vs radius of selected positive kinks (all cuts); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ,nBinsR, hLowR, hUpR);
+hPdgCodemdPiSelectedPlus = new TH2F("hPdgCodemdPiSelectedPlus", "Mother vs daughter pdg code for selected positive kinks (all cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPmdPiSelectedPlus = new TH2F("hPmdPiSelectedPlus", "Mother vs daughter momentum magnitude for selected positive kinks (all cuts); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimuPiSelectedPlus = new TH1F("hMinvPimuPiSelectedPlus", "Invariant mass for #pi^{+} decaying to #mu^{+} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm",nBinsInvMass, hLowInvMass, hUpInvMass);
+hUIDPiDaumuSelectedPlus = new TH1F("hUIDPiDaumuSelectedPlus", "UID (method of production) of selected positive kinks (all cuts); UID (method of production); Number of particles", 100, 0.0, 20);
+hdEdxPiSelectedPlus = new TH2F("hdEdxPiSelectedPlus", "dE/dx vs mother's momentum for selected positive kinks (all cuts); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hPtPrimPiKinksPlus = new TH1F("hPtPrimPiKinksPlus", "Mother's transverse momentum for selected real #pi^{+} primary kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPrimPiKinksPlus = new TH1F("hEtaPrimPiKinksPlus", "Mother's pseudorapidity for selected real #pi^{+} primary kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityPrimPiKinksPlus = new TH1F("hRapidityPrimPiKinksPlus", "Mother's rapidity for selected real #pi^{+} primary kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hPtSecondPiKinksPlus = new TH1F("hPtSecondPiKinksPlus", "Mother's transverse momentum for selected real #pi^{+} secondary kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaSecondPiKinksPlus = new TH1F("hEtaSecondPiKinksPlus", "Mother's pseudorapidity for selected real #pi^{+} secondary kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapiditySecondPiKinksPlus = new TH1F("hRapiditySecondPiKinksPlus", "Mother's rapidity for selected real #pi^{+} secondary kinks; y; dN/dy", nBinsEta, hLowEta, hUpEta);
+hPtNonPiKinksPlus = new TH1F("hPtNonPiKinksPlus", "Mother's transverse momentum for selected non #pi^{+} kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaNonPiKinksPlus = new TH1F("hEtaNonPiKinksPlus", "Mother's pseudorapidity for selected non #pi^{+} kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityNonPiKinksPlus = new TH1F("hRapidityNonPiKinksPlus", "Mother's rapidity for selected non #pi^{+} kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hPdgCodemdNonPiKinksPlus = new TH2F("hPdgCodemdNonPiKinksPlus", "Mother vs daughter pdg code for selected non #pi^{+} kinks; Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+
+hPtPiSelectedMinus = new TH1F("hPtPiSelectedMinus", "Mother's transverse momentum for selected negative kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPiSelectedMinus = new TH1F("hEtaPiSelectedMinus", "Mother's pseudorapidity for selected negative kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityPiSelectedMinus = new TH1F("hRapidityPiSelectedMinus", "Mother's rapidity for selected negative kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hQtPiSelectedMinus = new TH1F("hQtPiSelectedMinus", "Daughter's transverse momentum in mother's frame for selected negative kinks (all cuts); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
+hKinkAnglePiSelectedMinus = new TH1F("hKinkAnglePiSelectedMinus", "Kink angle for selected negative kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
+hDCAkinkPiSelectedMinus = new TH1F("hDCAkinkPiSelectedMinus", "DCA for selected negative kinks (all cuts); DCA(cm); Number of kinks", 100, 0.0, 2.0);
+hPmKinkAngPiSelectedMinus = new TH2F("hPmKinkAngPiSelectedMinus", "Mother's momentum magnitude vs kink angle for selected negative kinks (all cuts); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
+hKinkPosXYPiSelectedMinus = new TH2F("hKinkPosXYPiSelectedMinus", "X-Y Position for selected negative kinks (all cuts); X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
+hKinkPosZRPiSelectedMinus = new TH2F("hKinkPosZRPiSelectedMinus", "Z vs radius for selected negative kinks (all cuts); Z (cm); R (cm)",nBinsZ, hLowZ, hUpZ,nBinsR, hLowR, hUpR);
+hPdgCodemdPiSelectedMinus = new TH2F("hPdgCodemdPiSelectedMinus", "Mother vs daughter pdg code for selected negative kinks (all cuts); Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+hPmdPiSelectedMinus = new TH2F("hPmdPiSelectedMinus", "Mother vs daughter momentum magnitude for selected negative kinks (all cuts); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
+hMinvPimuPiSelectedMinus = new TH1F("hMinvPimuPiSelectedMinus", "Invariant mass for #pi^{-} decaying to #mu^{-} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
+hUIDPiDaumuSelectedMinus = new TH1F("hUIDPiDaumuSelectedMinus", "UID (method of production) of selected negative kinks (all cuts); UID (method of production); Number of particles", 100, 0.0, 20);
+hdEdxPiSelectedMinus = new TH2F("hdEdxPiSelectedMinus", "dE/dx vs mother's momentum for selected negative kinks (all cuts); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
+hPtPrimPiKinksMinus = new TH1F("hPtPrimPiKinksMinus", "Mother's transverse momentum for selected real #pi^{-} primary kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaPrimPiKinksMinus = new TH1F("hEtaPrimPiKinksMinus", "Mother's pseudorapidity for selected real #pi^{-} primary kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityPrimPiKinksMinus = new TH1F("hRapidityPrimPiKinksMinus", "Mother's rapidity for selected real #pi^{-} primary kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hPtSecondPiKinksMinus = new TH1F("hPtSecondPiKinksMinus", "Mother's transverse momentum for selected real #pi^{-} secondary kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaSecondPiKinksMinus = new TH1F("hEtaSecondPiKinksMinus", "Mother's pseudorapidity for selected real #pi^{-} secondary kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapiditySecondPiKinksMinus = new TH1F("hRapiditySecondPiKinksMinus", "Mother's rapidity for selected real #pi^{-} secondary kinks; y; dN/dy", nBinsEta, hLowEta, hUpEta);
+hPtNonPiKinksMinus = new TH1F("hPtNonPiKinksMinus", "Mother's transverse momentum for selected non #pi^{-} kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
+hEtaNonPiKinksMinus = new TH1F("hEtaNonPiKinksMinus", "Mother's pseudorapidity for selected non #pi^{-} kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hRapidityNonPiKinksMinus = new TH1F("hRapidityNonPiKinksMinus", "Mother's rapidity for selected non #pi^{-} kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
+hPdgCodemdNonPiKinksMinus = new TH2F("hPdgCodemdNonPiKinksMinus", "Mother vs daughter pdg code for selected non #pi^{-} kinks; Mother's pdg code; Daughter's pdg code", nBinsPdg, hLowPdg, hUpPdg, nBinsPdg, hLowPdg, hUpPdg);
+
+
+
+fListOfHistos->Add(hMCMult);
+fListOfHistos->Add(hMCMultPrim);
+fListOfHistos->Add(hMCPtAll);
+fListOfHistos->Add(hMCEtaAll);
+fListOfHistos->Add(hMCPtPrim);
+fListOfHistos->Add(hMCEtaPrim);
+fListOfHistos->Add(hMCPt);
+fListOfHistos->Add(hMCEta);
+fListOfHistos->Add(hMCPdg);
+fListOfHistos->Add(hMCMultPiPlus);
+fListOfHistos->Add(hMCPtPiPlus);
+fListOfHistos->Add(hMCEtaPiPlus);
+fListOfHistos->Add(hMCRapidityPiPlus);
+fListOfHistos->Add(hMCNDaughtersPlus);
+fListOfHistos->Add(hMCRadPiDauPlus);
+fListOfHistos->Add(hMCKinkPosZPlus);
+fListOfHistos->Add(hMCUIDPiDauPlus);
+fListOfHistos->Add(hMCPdgPiNonDecayedPlus);
+fListOfHistos->Add(hMCPdgPiDauPlus);
+fListOfHistos->Add(hMCQtPlus);
+fListOfHistos->Add(hMCKinkAnglePlus);
+fListOfHistos->Add(hMCPKinkAngPlus);
+fListOfHistos->Add(hMCPdgCodemdPlus);
+fListOfHistos->Add(hMCPtmdPlus);
+fListOfHistos->Add(hMCPtPimuonPlus);
+fListOfHistos->Add(hMCEtaPimuonPlus);
+fListOfHistos->Add(hMCRapidityPimuonPlus);
+fListOfHistos->Add(hMCQtPimuonPlus);
+fListOfHistos->Add(hMCPKinkAngPimuonPlus);
+fListOfHistos->Add(hMCPtPiotherPlus);
+fListOfHistos->Add(hMCEtaPiotherPlus);
+fListOfHistos->Add(hMCRapidityPiotherPlus);
+fListOfHistos->Add(hMCQtPiotherPlus);
+fListOfHistos->Add(hMCPKinkAngPiotherPlus);
+fListOfHistos->Add(hMCMultPiMinus);
+fListOfHistos->Add(hMCPtPiMinus);
+fListOfHistos->Add(hMCEtaPiMinus);
+fListOfHistos->Add(hMCRapidityPiMinus);
+fListOfHistos->Add(hMCNDaughtersMinus);
+fListOfHistos->Add(hMCRadPiDauMinus);
+fListOfHistos->Add(hMCKinkPosZMinus);
+fListOfHistos->Add(hMCUIDPiDauMinus);
+fListOfHistos->Add(hMCPdgPiNonDecayedMinus);
+fListOfHistos->Add(hMCPdgPiDauMinus);
+fListOfHistos->Add(hMCQtMinus);
+fListOfHistos->Add(hMCKinkAngleMinus);
+fListOfHistos->Add(hMCPKinkAngMinus);
+fListOfHistos->Add(hMCPdgCodemdMinus);
+fListOfHistos->Add(hMCPtmdMinus);
+fListOfHistos->Add(hMCPtPimuonMinus);
+fListOfHistos->Add(hMCEtaPimuonMinus);
+fListOfHistos->Add(hMCRapidityPimuonMinus);
+fListOfHistos->Add(hMCQtPimuonMinus);
+fListOfHistos->Add(hMCPKinkAngPimuonMinus);
+fListOfHistos->Add(hMCPtPiotherMinus);
+fListOfHistos->Add(hMCEtaPiotherMinus);
+fListOfHistos->Add(hMCRapidityPiotherMinus);
+fListOfHistos->Add(hMCQtPiotherMinus);
+fListOfHistos->Add(hMCPKinkAngPiotherMinus);
+
+fListOfHistos->Add(hMult);
+fListOfHistos->Add(hAcceptedMult);
+fListOfHistos->Add(hMultPS);
+fListOfHistos->Add(hvtx);
+fListOfHistos->Add(hvtxy);
+fListOfHistos->Add(hvtyz);
+fListOfHistos->Add(hvtxz);
+fListOfHistos->Add(hMultPSV);
+fListOfHistos->Add(hPtAll);
+fListOfHistos->Add(hEtaAll);
+fListOfHistos->Add(hTrackPos);
+fListOfHistos->Add(hTrackPosxy);
+fListOfHistos->Add(hTrackPosyz);
+fListOfHistos->Add(hTrackPosxz);
+//fListOfHistos->Add(hTPCchi2clusters);
+//fListOfHistos->Add(hdcaToVertexXY);
+//fListOfHistos->Add(hdcaToVertexZ);
+fListOfHistos->Add(hMultPrim);
+fListOfHistos->Add(hPtPrim);
+fListOfHistos->Add(hEtaPrim);
+fListOfHistos->Add(hPrimTrackPos);
+fListOfHistos->Add(hPrimTrackPosxy);
+fListOfHistos->Add(hPrimTrackPosyz);
+fListOfHistos->Add(hPrimTrackPosxz);
+fListOfHistos->Add(hPt);
+fListOfHistos->Add(hEta);
+//fListOfHistos->Add(hRapidity);
+fListOfHistos->Add(hPtKink);
+fListOfHistos->Add(hEtaKink);
+fListOfHistos->Add(hRapidityKink);
+fListOfHistos->Add(hPmP);
+fListOfHistos->Add(hKinkPosRTPCclusters1);
+fListOfHistos->Add(hKinkPosRTPCclusters2);
+fListOfHistos->Add(hQt);
+fListOfHistos->Add(hKinkAngle);
+fListOfHistos->Add(hDCAkink);
+fListOfHistos->Add(hPmKinkAng);
+fListOfHistos->Add(hKinkPosXY);
+fListOfHistos->Add(hKinkPosZY);
+fListOfHistos->Add(hKinkPosZR);
+fListOfHistos->Add(hKinkPosR);
+fListOfHistos->Add(hKinkPosZ);
+fListOfHistos->Add(hKinkPosZMCKinkPosZ);
+fListOfHistos->Add(hPdgCodemd);
+fListOfHistos->Add(hPmd);
+fListOfHistos->Add(hMinvPimu);
+fListOfHistos->Add(hUIDKinkDau);
+fListOfHistos->Add(hdEdx);
+fListOfHistos->Add(hPtKinkFake);
+fListOfHistos->Add(hEtaKinkFake);
+fListOfHistos->Add(hRapidityKinkFake);
+fListOfHistos->Add(hPmPFake);
+fListOfHistos->Add(hKinkPosRTPCclusters1Fake);
+fListOfHistos->Add(hKinkPosRTPCclusters2Fake);
+fListOfHistos->Add(hQtFake);
+fListOfHistos->Add(hKinkAngleFake);
+fListOfHistos->Add(hDCAkinkFake);
+fListOfHistos->Add(hPmKinkAngFake);
+fListOfHistos->Add(hKinkPosXYFake);
+fListOfHistos->Add(hKinkPosZYFake);
+fListOfHistos->Add(hKinkPosZRFake);
+fListOfHistos->Add(hKinkPosRFake);
+fListOfHistos->Add(hKinkPosZFake);
+fListOfHistos->Add(hKinkPosZMCKinkPosZFake);
+fListOfHistos->Add(hPdgCodemdFake);
+fListOfHistos->Add(hPmdFake);
+fListOfHistos->Add(hMinvPimuFake);
+fListOfHistos->Add(hUIDKinkDauFake);
+fListOfHistos->Add(hdEdxFake);
+fListOfHistos->Add(hPtPosRSelected);
+fListOfHistos->Add(hPdgCodemdZRejected);
+fListOfHistos->Add(hPtZSelected);
+fListOfHistos->Add(hPdgCodemdAngRejected);
+fListOfHistos->Add(hPtAngSelected);
+fListOfHistos->Add(hPdgCodemdPmRejected);
+fListOfHistos->Add(hPtPmSelected);
+fListOfHistos->Add(hPdgCodemdQtLowRejected);
+fListOfHistos->Add(hPtGoodKink);
+fListOfHistos->Add(hEtaGoodKink);
+fListOfHistos->Add(hRapidityGoodKink);
+fListOfHistos->Add(hQtGoodKink);
+fListOfHistos->Add(hPmGoodKinkAng);
+fListOfHistos->Add(hPdgCodemdGoodKink);
+fListOfHistos->Add(hPmdGoodKink);
+fListOfHistos->Add(hUIDGoodKinkDau);
+fListOfHistos->Add(hdEdxGoodKink);
+fListOfHistos->Add(hUIDPiDauPlus);
+fListOfHistos->Add(hMultPiPlus);
+fListOfHistos->Add(hPtPiPlus);
+fListOfHistos->Add(hEtaPiPlus);
+fListOfHistos->Add(hRapidityPiPlus);
+fListOfHistos->Add(hQtPiPlus);
+fListOfHistos->Add(hKinkAnglePiPlus);
+fListOfHistos->Add(hPmKinkAngPiPlus);
+fListOfHistos->Add(hKinkPosXYPiPlus);
+fListOfHistos->Add(hKinkPosZRPiPlus);
+fListOfHistos->Add(hKinkPosRPiPlus);
+fListOfHistos->Add(hDCAkinkPiPlus);
+fListOfHistos->Add(hPdgCodemdPiPlus);
+fListOfHistos->Add(hPmdPiPlus);
+fListOfHistos->Add(hdEdxPiPlus);
+fListOfHistos->Add(hQtPimuPlus);
+fListOfHistos->Add(hPmKinkAngPimuPlus);
+fListOfHistos->Add(hQtPiotherPlus);
+fListOfHistos->Add(hPmKinkAngPiotherPlus);
+fListOfHistos->Add(hPdgCodemdPiotherPlus);
+fListOfHistos->Add(hUIDPiDauMinus);
+fListOfHistos->Add(hMultPiMinus);
+fListOfHistos->Add(hPtPiMinus);
+fListOfHistos->Add(hEtaPiMinus);
+fListOfHistos->Add(hRapidityPiMinus);
+fListOfHistos->Add(hQtPiMinus);
+fListOfHistos->Add(hKinkAnglePiMinus);
+fListOfHistos->Add(hPmKinkAngPiMinus);
+fListOfHistos->Add(hKinkPosXYPiMinus);
+fListOfHistos->Add(hKinkPosZRPiMinus);
+fListOfHistos->Add(hKinkPosRPiMinus);
+fListOfHistos->Add(hDCAkinkPiMinus);
+fListOfHistos->Add(hPdgCodemdPiMinus);
+fListOfHistos->Add(hPmdPiMinus);
+fListOfHistos->Add(hdEdxPiMinus);
+fListOfHistos->Add(hQtPimuMinus);
+fListOfHistos->Add(hPmKinkAngPimuMinus);
+fListOfHistos->Add(hQtPiotherMinus);
+fListOfHistos->Add(hPmKinkAngPiotherMinus);
+fListOfHistos->Add(hPdgCodemdPiotherMinus);
+fListOfHistos->Add(hPdgCodemdQtRejected);
+fListOfHistos->Add(hPtQtSelected);
+fListOfHistos->Add(hPdgCodemdMaxAngRejected);
+fListOfHistos->Add(hPtMaxAngSelected);
+fListOfHistos->Add(hPdgCodemdRTPCclustersRejected);
+fListOfHistos->Add(hPtRTPCclustersSelected);
+fListOfHistos->Add(hRTPCclustersRTPCclustersSelected);
+fListOfHistos->Add(hPdgCodemdMinvRejected);
+fListOfHistos->Add(hPtSelected);
+fListOfHistos->Add(hEtaSelected);
+fListOfHistos->Add(hRapiditySelected);
+fListOfHistos->Add(hQtSelected);
+fListOfHistos->Add(hKinkAngleSelected);
+fListOfHistos->Add(hDCAkinkSelected);
+fListOfHistos->Add(hPmKinkAngSelected);
+fListOfHistos->Add(hKinkPosXYSelected);
+fListOfHistos->Add(hKinkPosZRSelected);
+fListOfHistos->Add(hKinkPosRSelected);
+fListOfHistos->Add(hPdgCodemdSelected);
+fListOfHistos->Add(hPmdSelected);
+fListOfHistos->Add(hMinvPimuSelected);
+fListOfHistos->Add(hUIDKinkDauSelected);
+fListOfHistos->Add(hdEdxSelected);
+fListOfHistos->Add(hPtSelectedFake);
+fListOfHistos->Add(hEtaSelectedFake);
+fListOfHistos->Add(hRapiditySelectedFake);
+fListOfHistos->Add(hQtSelectedFake);
+fListOfHistos->Add(hKinkAngleSelectedFake);
+fListOfHistos->Add(hDCAkinkSelectedFake);
+fListOfHistos->Add(hPmKinkAngSelectedFake);
+fListOfHistos->Add(hKinkPosXYSelectedFake);
+fListOfHistos->Add(hKinkPosZRSelectedFake);
+fListOfHistos->Add(hKinkPosRSelectedFake);
+fListOfHistos->Add(hPmdSelectedFake);
+fListOfHistos->Add(hMinvPimuSelectedFake);
+fListOfHistos->Add(hdEdxSelectedFake);
+fListOfHistos->Add(hPdgCodemddEdxRejected);
+fListOfHistos->Add(hPtPiSelected);
+fListOfHistos->Add(hEtaPiSelected);
+fListOfHistos->Add(hRapidityPiSelected);
+fListOfHistos->Add(hQtPiSelected);
+fListOfHistos->Add(hKinkAnglePiSelected);
+fListOfHistos->Add(hDCAkinkPiSelected);
+fListOfHistos->Add(hPmKinkAngPiSelected);
+fListOfHistos->Add(hKinkPosRTPCclusters1PiSelected);
+fListOfHistos->Add(hKinkPosRTPCclusters2PiSelected);
+fListOfHistos->Add(hKinkPosXYPiSelected);
+fListOfHistos->Add(hKinkPosZRPiSelected);
+fListOfHistos->Add(hKinkPosRPiSelected);
+fListOfHistos->Add(hKinkPosZPiSelected);
+fListOfHistos->Add(hPmPPiSelected);
+fListOfHistos->Add(hPdgCodemdPiSelected);
+fListOfHistos->Add(hPmdPiSelected);
+fListOfHistos->Add(hMinvPimuPiSelected);
+fListOfHistos->Add(hUIDKinkDauPiSelected);
+fListOfHistos->Add(hdEdxPiSelected);
+
+fListOfHistos->Add(hPtPiSelectedPlus);
+fListOfHistos->Add(hEtaPiSelectedPlus);
+fListOfHistos->Add(hRapidityPiSelectedPlus);
+fListOfHistos->Add(hQtPiSelectedPlus);
+fListOfHistos->Add(hKinkAnglePiSelectedPlus);
+fListOfHistos->Add(hDCAkinkPiSelectedPlus);
+fListOfHistos->Add(hPmKinkAngPiSelectedPlus);
+fListOfHistos->Add(hKinkPosXYPiSelectedPlus);
+fListOfHistos->Add(hKinkPosZRPiSelectedPlus);
+fListOfHistos->Add(hPdgCodemdPiSelectedPlus);
+fListOfHistos->Add(hPmdPiSelectedPlus);
+fListOfHistos->Add(hMinvPimuPiSelectedPlus);
+fListOfHistos->Add(hUIDPiDaumuSelectedPlus);
+fListOfHistos->Add(hdEdxPiSelectedPlus);
+fListOfHistos->Add(hPtPrimPiKinksPlus);
+fListOfHistos->Add(hEtaPrimPiKinksPlus);
+fListOfHistos->Add(hRapidityPrimPiKinksPlus);
+fListOfHistos->Add(hPtSecondPiKinksPlus);
+fListOfHistos->Add(hEtaSecondPiKinksPlus);
+fListOfHistos->Add(hRapiditySecondPiKinksPlus);
+fListOfHistos->Add(hPtNonPiKinksPlus);
+fListOfHistos->Add(hEtaNonPiKinksPlus);
+fListOfHistos->Add(hRapidityNonPiKinksPlus);
+fListOfHistos->Add(hPdgCodemdNonPiKinksPlus);
+
+fListOfHistos->Add(hPtPiSelectedMinus);
+fListOfHistos->Add(hEtaPiSelectedMinus);
+fListOfHistos->Add(hRapidityPiSelectedMinus);
+fListOfHistos->Add(hQtPiSelectedMinus);
+fListOfHistos->Add(hKinkAnglePiSelectedMinus);
+fListOfHistos->Add(hDCAkinkPiSelectedMinus);
+fListOfHistos->Add(hPmKinkAngPiSelectedMinus);
+fListOfHistos->Add(hKinkPosXYPiSelectedMinus);
+fListOfHistos->Add(hKinkPosZRPiSelectedMinus);
+fListOfHistos->Add(hPdgCodemdPiSelectedMinus);
+fListOfHistos->Add(hPmdPiSelectedMinus);
+fListOfHistos->Add(hMinvPimuPiSelectedMinus);
+fListOfHistos->Add(hUIDPiDaumuSelectedMinus);
+fListOfHistos->Add(hdEdxPiSelectedMinus);
+fListOfHistos->Add(hPtPrimPiKinksMinus);
+fListOfHistos->Add(hEtaPrimPiKinksMinus);
+fListOfHistos->Add(hRapidityPrimPiKinksMinus);
+fListOfHistos->Add(hPtSecondPiKinksMinus);
+fListOfHistos->Add(hEtaSecondPiKinksMinus);
+fListOfHistos->Add(hRapiditySecondPiKinksMinus);
+fListOfHistos->Add(hPtNonPiKinksMinus);
+fListOfHistos->Add(hEtaNonPiKinksMinus);
+fListOfHistos->Add(hRapidityNonPiKinksMinus);
+fListOfHistos->Add(hPdgCodemdNonPiKinksMinus);
+
+fListOfHistos->SetOwner(kTRUE);
+PostData(1, fListOfHistos);
+}
+
+//________________________________________________________________________
+void AliAnalysisPionKinksMCESD::UserExec(Option_t *) {
+ AliVEvent *event = InputEvent();
+ if (!event) {
+ Printf("ERROR: Could not retrieve event");
+ return;
+ }
+
+ AliMCEvent* mcEvent = MCEvent();
+ if (!mcEvent) {
+ Printf("ERROR: Could not retrieve MC event");
+ return;
+ }
+ AliESDEvent* esdEvent = dynamic_cast<AliESDEvent*>(event);
+ if (!esdEvent) {
+ Printf("ERROR: Could not retrieve esd");
+ return;
+ }
+
+
+//------------------------------ MC Multiplicity unbiased------------------------//
+ AliStack* MCstack = mcEvent->Stack(); //stack of MC events
+ Int_t MCNTracks = mcEvent->GetNumberOfTracks();
+// Int_t MCNTracks2 = MCstack->GetNtrack();
+ hMCMult->Fill(MCNTracks);
+ Int_t MCNPrimTracks = MCstack->GetNprimary();
+ //Printf("There are %d number of primary tracks in this Monte Carlo event", MCNPrimTracks);
+ hMCMultPrim->Fill(MCNPrimTracks);
+
+//------------------------ Data Multiplicity unbiased --------------------------//
+ Int_t NTracks = esdEvent->GetNumberOfTracks(); //number of ESD tracks
+ hMult->Fill(NTracks);
+
+//----------------------------- Accepted Multiplicity -----------------------------//
+ Float_t NAcceptedTracks = fTrackCuts->CountAcceptedTracks(esdEvent);
+ if(fLowMulcut>-1) {
+ if(NAcceptedTracks<fLowMulcut) return;
+ }
+ if(fUpMulcut>-1) {
+ if(NAcceptedTracks>fUpMulcut) return;
+ }
+ hAcceptedMult->Fill(NAcceptedTracks); //to check if the multiplicity limits are ok
+
+
+//-------------------------------- MC data Analysis -----------------------------//
+ for (Int_t iMC = 0; iMC < MCNTracks; iMC++) { //loop on all accepted MC tracks
+ TParticle* MCparticle = MCstack->Particle(iMC);
+ if (!MCparticle) {
+ Printf("ERROR: Could not receive MC particle %d", iMC);
+ continue;
+ }
+
+ Double_t MCPt = MCparticle->Pt();
+ Double_t MCP = MCparticle->P();
+ Double_t MCEta = MCparticle->Eta();
+ hMCPtAll->Fill(MCPt);
+ hMCEtaAll->Fill(MCEta);
+
+ if (!MCstack->IsPhysicalPrimary(iMC)) continue;
+ hMCPtPrim->Fill(MCPt);
+ hMCEtaPrim->Fill(MCEta);
+
+ if (MCPt<cLowPt) continue;
+
+ hMCPt->Fill(MCPt);
+ hMCEta->Fill(MCEta);
+
+ Int_t MCPdg = MCparticle->GetPdgCode();
+ hMCPdg->Fill(MCPdg);
+
+ if (MCPdg==cPdgPion) { //positive pion selection
+ Double_t MCRapidity = GetMCRapidity(MCparticle);
+ if (TMath::Abs(MCRapidity)>cRapidityLim) continue;
+ hMCMultPiPlus->Fill(iMC); //MC pion multiplicity
+ hMCPtPiPlus->Fill(MCPt);
+ hMCEtaPiPlus->Fill(MCEta);
+ hMCRapidityPiPlus->Fill(MCRapidity);
+
+ Int_t MCNDaughtersPlus = MCparticle->GetNDaughters();
+ hMCNDaughtersPlus->Fill(MCNDaughtersPlus);
+ Int_t FirstDPlus = MCparticle->GetFirstDaughter(); //first daughter's label
+ Int_t LastDPlus = MCparticle->GetLastDaughter(); //last daughter's label
+ if ((FirstDPlus>MCNTracks)||(LastDPlus>MCNTracks)) continue;
+
+
+ for (Int_t iMCdPlus=FirstDPlus; iMCdPlus<=LastDPlus; iMCdPlus++) { //loop on pion daughters
+ if (iMCdPlus<0) continue; //debug
+ TParticle* MCdaughterPlus = MCstack->Particle(iMCdPlus);
+
+ Double_t RdPlus = MCdaughterPlus->R(); //position radius of daughter's generation vertex
+ hMCRadPiDauPlus->Fill(RdPlus);
+
+ Double_t MCKinkPosZPlus = MCdaughterPlus->Vz();
+ hMCKinkPosZPlus->Fill(MCKinkPosZPlus);
+
+ if ((TMath::Abs(MCKinkPosZPlus)<cLowZ) || (TMath::Abs(MCKinkPosZPlus)>cUpZ)) continue;
+
+ if ((RdPlus<cLowR) || (RdPlus>cUpR)) continue; //selection of daughters that where generated in TPC
+
+ Int_t dcodePlus = MCdaughterPlus->GetPdgCode();
+
+ UInt_t MCDauUIDPlus = MCdaughterPlus->GetUniqueID(); //daughter's unique id (= method of production)
+ hMCUIDPiDauPlus->Fill(MCDauUIDPlus);
+
+ if (MCDauUIDPlus!=4) { //selection of decayed daughters
+ hMCPdgPiNonDecayedPlus->Fill(dcodePlus);
+ continue;
+ }
+
+ hMCPdgPiDauPlus->Fill(TMath::Abs(dcodePlus));
+
+ Double_t MCPtdPlus = MCdaughterPlus->Pt(); //daughter's transverse momentum in lab frame
+ Double_t MCQtPlus = MCPQt(mcEvent, iMC, MCdaughterPlus); //daughter's transverse momentum in mother's frame (Qt)
+ Double_t MCKinkAnglePlus2 = fuMCKinkAngle(mcEvent, iMC, MCdaughterPlus, kTRUE); //kink angle in degrees
+ Double_t MCMaxKinkAngPimuPlus=fMaxKinkAngPimu->Eval(MCP,0.,0.,0.); //maximum decay angle in lab for pion decaying to muon
+
+ // if (MCKinkAnglePlus2>(MCMaxKinkAngPimuPlus*1.1)) continue;
+ if (MCKinkAnglePlus2>(MCMaxKinkAngPimuPlus)) continue;
+
+ hMCQtPlus->Fill(MCQtPlus);
+ hMCKinkAnglePlus->Fill(MCKinkAnglePlus2);
+ hMCPKinkAngPlus->Fill(MCP,MCKinkAnglePlus2);
+ hMCPdgCodemdPlus->Fill(TMath::Abs(MCPdg),TMath::Abs(dcodePlus));
+ hMCPtmdPlus->Fill(MCPt, MCPtdPlus);
+
+ if ((MCQtPlus<cLowQt) || (MCQtPlus>cUpQt) || (MCKinkAnglePlus2<cLowKinkAngle)) continue;
+
+ if (dcodePlus==-cPdgMuon) { //muon daughters selection
+ hMCPtPimuonPlus->Fill(MCPt);
+ hMCEtaPimuonPlus->Fill(MCEta);
+ hMCRapidityPimuonPlus->Fill(MCRapidity);
+ hMCQtPimuonPlus->Fill(MCQtPlus);
+ hMCPKinkAngPimuonPlus->Fill(MCKinkAnglePlus2);
+ } else {hMCPtPiotherPlus->Fill(MCPt);
+ hMCEtaPiotherPlus->Fill(MCEta);
+ hMCRapidityPiotherPlus->Fill(MCRapidity);
+ hMCQtPiotherPlus->Fill(MCQtPlus);
+ hMCPKinkAngPiotherPlus->Fill(MCKinkAnglePlus2);
+ }
+ } //end of pion daughters' loop
+ } else if (MCPdg==-cPdgPion) { //negative pion selection
+ Double_t MCRapidity = GetMCRapidity(MCparticle);
+ if (TMath::Abs(MCRapidity)>cRapidityLim) continue;
+ hMCMultPiMinus->Fill(iMC); //MC pion multiplicity
+ hMCPtPiMinus->Fill(MCPt);
+ hMCEtaPiMinus->Fill(MCEta);
+ hMCRapidityPiMinus->Fill(MCRapidity);
+
+ Int_t MCNDaughtersMinus = MCparticle->GetNDaughters();
+ hMCNDaughtersMinus->Fill(MCNDaughtersMinus);
+ Int_t FirstDMinus = MCparticle->GetFirstDaughter(); //first daughter's label
+ Int_t LastDMinus = MCparticle->GetLastDaughter(); //last daughter's label
+ if ((FirstDMinus>MCNTracks)||(LastDMinus>MCNTracks)) continue;
+
+ for (Int_t iMCdMinus=FirstDMinus; iMCdMinus<=LastDMinus; iMCdMinus++) { //loop on pion daughters
+ if (iMCdMinus<0) continue; //debug
+ TParticle* MCdaughterMinus = MCstack->Particle(iMCdMinus);
+
+ Double_t RdMinus = MCdaughterMinus->R(); //position radius of daughter's generation vertex
+ hMCRadPiDauMinus->Fill(RdMinus);
+
+ Double_t MCKinkPosZMinus = MCdaughterMinus->Vz();
+ hMCKinkPosZMinus->Fill(MCKinkPosZMinus);
+
+ if ((TMath::Abs(MCKinkPosZMinus)<cLowZ) || (TMath::Abs(MCKinkPosZMinus)>cUpZ)) continue;
+
+ if ((RdMinus<cLowR) || (RdMinus>cUpR)) continue; //selection of daughters that where generated in TPC
+
+ Int_t dcodeMinus = MCdaughterMinus->GetPdgCode();
+
+ UInt_t MCDauUIDMinus = MCdaughterMinus->GetUniqueID(); //daughter's unique id (= method of production)
+ hMCUIDPiDauMinus->Fill(MCDauUIDMinus);
+
+ if (MCDauUIDMinus!=4) { //selection of decayed daughters
+ hMCPdgPiNonDecayedMinus->Fill(dcodeMinus);
+ continue;
+ }
+
+ hMCPdgPiDauMinus->Fill(TMath::Abs(dcodeMinus));
+
+
+ Double_t MCPtdMinus = MCdaughterMinus->Pt(); //daughter's transverse momentum in lab frame
+ Double_t MCQtMinus = MCPQt(mcEvent, iMC, MCdaughterMinus); //daughter's transverse momentum in mother's frame (Qt)
+ Double_t MCKinkAngleMinus2 = fuMCKinkAngle(mcEvent, iMC, MCdaughterMinus, kTRUE); //kink angle in degrees
+ Double_t MCMaxKinkAngPimuMinus=fMaxKinkAngPimu->Eval(MCP,0.,0.,0.); //maximum decay angle in lab for pion decaying to muon
+
+ if (MCKinkAngleMinus2>(MCMaxKinkAngPimuMinus*1.1)) continue;
+
+ hMCQtMinus->Fill(MCQtMinus);
+ hMCKinkAngleMinus->Fill(MCKinkAngleMinus2);
+ hMCPKinkAngMinus->Fill(MCP,MCKinkAngleMinus2);
+ hMCPdgCodemdMinus->Fill(TMath::Abs(MCPdg),TMath::Abs(dcodeMinus));
+ hMCPtmdMinus->Fill(MCPt, MCPtdMinus);
+
+ if ((MCQtMinus<cLowQt) || (MCQtMinus>cUpQt) || (MCKinkAngleMinus2<cLowKinkAngle)) continue;
+
+ if (dcodeMinus==cPdgMuon) { //muon daughters selection
+ hMCPtPimuonMinus->Fill(MCPt);
+ hMCEtaPimuonMinus->Fill(MCEta);
+ hMCRapidityPimuonMinus->Fill(MCRapidity);
+ hMCQtPimuonMinus->Fill(MCQtMinus);
+ hMCPKinkAngPimuonMinus->Fill(MCKinkAngleMinus2);
+ } else {hMCPtPiotherMinus->Fill(MCPt);///////////////////////////
+ hMCEtaPiotherMinus->Fill(MCEta);
+ hMCRapidityPiotherMinus->Fill(MCRapidity);
+ hMCQtPiotherMinus->Fill(MCQtMinus);
+ hMCPKinkAngPiotherMinus->Fill(MCKinkAngleMinus2);
+ }
+ } //end of pion daughters' loop
+ }
+
+ } // end of MC tracks loop
+
+
+
+//----------------------------- Physics selection ------------------------------//
+ Bool_t IsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB;
+ if ( IsSelected ==kFALSE) return;
+
+//--------------- Data Multiplicity after Physics selection --------------------//
+ hMultPS->Fill(NTracks);
+
+//------------------------------------ Vertex ----------------------------------//
+ const AliESDVertex* vtx = GetEventVertex(esdEvent); //ESD primary vertex
+ if (!vtx) return;
+
+ Double_t vtxpos[3]; //vertex position vector
+ vtx->GetXYZ(vtxpos);
+ hvtx->Fill(vtxpos[0], vtxpos[1], vtxpos[2]); //ESD primary vertex position (x-y-z)
+ hvtxy->Fill(vtxpos[0], vtxpos[1]);
+ hvtyz->Fill(vtxpos[1], vtxpos[2]);
+ hvtxz->Fill(vtxpos[0], vtxpos[2]);
+
+ if (TMath::Abs(vtxpos[2])>10.) return;
+
+//-------------------- Data Multiplicity after vertex cut -----------------------//
+ hMultPSV->Fill(NTracks);
+
+//------------------------------- dE/dx parameters -----------------------------//
+ if(!fPIDResponse) {
+ AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler* inputHandler = (AliInputEventHandler*)(man->GetInputEventHandler());
+ fPIDResponse = inputHandler->GetPIDResponse();
+ }
+
+//------------------------- Reconstructed data Analysis -----------------------//
+ for (Int_t iData = 0; iData<NTracks; iData++) { //loop on all ESD tracks
+ AliESDtrack *ESDtrack = esdEvent->GetTrack(iData);
+ if (!ESDtrack) {
+ Printf("ERROR: Could not receive ESD track %d", iData);
+ continue;
+ }
+
+ Double_t Pt = ESDtrack->Pt();
+ Double_t Eta = ESDtrack->Eta();
+
+ hPtAll->Fill(Pt);
+ hEtaAll->Fill(Eta);
+ //hRapidityAll->Fill(Rapidity(ESDtrack));
+
+ Double_t TrackPos[3]; //starting position of ESD tracks (x-y-z)
+ ESDtrack->GetXYZ(TrackPos);
+ hTrackPos->Fill(TrackPos[0],TrackPos[1],TrackPos[2]);
+ hTrackPosxy->Fill(TrackPos[0], TrackPos[1]);
+ hTrackPosyz->Fill(TrackPos[1], TrackPos[2]);
+ hTrackPosxz->Fill(TrackPos[0], TrackPos[2]);
+
+ if ((IsPrimaryTrack(ESDtrack) == kFALSE) || (IsGoodTrack(ESDtrack) == kFALSE)) continue; //reject bad & secondary tracks
+ hMultPrim->Fill(NTracks);
+ hPtPrim->Fill(Pt);
+ hEtaPrim->Fill(Eta);
+ //hRapidityPrim->Fill(Rapidity(ESDtrack));
+
+ hPrimTrackPos->Fill(TrackPos[0],TrackPos[1],TrackPos[2]); //starting position of primary - supposed ESD tracks (x-y-z)
+ hPrimTrackPosxy->Fill(TrackPos[0], TrackPos[1]);
+ hPrimTrackPosyz->Fill(TrackPos[1], TrackPos[2]);
+ hPrimTrackPosxz->Fill(TrackPos[0], TrackPos[2]);
+
+ if (Pt<cLowPt) continue;
+
+ hPt->Fill(Pt);
+ hEta->Fill(Eta);
+ //hRapidity->Fill(fuRapidity(ESDtrack));
+
+ Int_t KinkIndex = ESDtrack->GetKinkIndex(0); //kink index (1st component is negative if the track is a kink candidate)
+ if (KinkIndex>=0) continue; //kink selection
+
+ Double_t Rapidity = fuRapidity(ESDtrack);
+ if (TMath::Abs(Rapidity)>cRapidityLim) continue;
+
+ Double_t dEdx = ESDtrack->GetTPCsignal();
+ Double_t NTPCclusters = ESDtrack->GetTPCclusters(0);
+
+ AliESDkink *kink = esdEvent->GetKink(TMath::Abs(KinkIndex)-1);
+
+ Int_t Label1 = kink->GetLabel(0); //mother's track MC label (first component is mother)
+ Int_t Label2 = kink->GetLabel(1); //daughter's track MC label (second component is daughter)
+ if (Label1>MCNTracks) continue;
+ if (Label2>MCNTracks) continue;
+
+ const TVector3 KinkPos(kink->GetPosition());
+ Double_t KinkPosR = kink->GetR(); //kink's position radius
+ Double_t KinkDistance = kink->GetDistance();
+ Double_t Qt = kink->GetQt(); //daughter's transverse momentum in mother's frame
+ Double_t KinkAngle =TMath::RadToDeg()*kink->GetAngle(2); //kink angle in mother frame (3rd component is angle in rads)
+
+ const TVector3 PMother(kink->GetMotherP()); //ESD mother's momentum
+ Double_t Pmx = PMother.Px();
+ Double_t Pmy = PMother.Py();
+ Double_t Pmz = PMother.Pz();
+ Double_t Pm = PMother.Mag(); //ESD mother's momentum magnitude
+ Double_t PTrack[3];
+ ESDtrack->GetPxPyPz(PTrack);
+ TVector3 Pvector3(PTrack[0], PTrack[1], PTrack[2]);
+ Double_t P = Pvector3.Mag();
+ Double_t PTPC = ESDtrack->GetInnerParam()->GetP();
+
+ const TVector3 PDaughter(kink->GetDaughterP()); //ESD daughter's momentum
+ Double_t Pdx = PDaughter.Px();
+ Double_t Pdy = PDaughter.Py();
+ Double_t Pdz = PDaughter.Pz();
+ Double_t Pd = PDaughter.Mag(); //ESD daugter's momentum magnitude
+ Double_t Edmu = TMath::Sqrt(TMath::Power(Pd,2)+TMath::Power(cMuonMass,2)); //ESD muon daughter's energy
+
+ Double_t DP = TMath::Sqrt((Pmx-Pdx)*(Pmx-Pdx)+(Pmy-Pdy)*(Pmy-Pdy)+(Pmz-Pdz)*(Pmz-Pdz)); //transferred momentum magnitude
+ Double_t MinvPimu = TMath::Sqrt((Edmu+DP)*(Edmu+DP)-TMath::Power(Pm,2)); //pion mother's invariant mass when decaying to muon
+ Double_t MaxKinkAngPimu=fMaxKinkAngPimu->Eval(P,0.,0.,0.); //maximum decay angle in lab frame for a pion decaying to muon
+
+ TParticle *particle1 = MCstack->Particle(TMath::Abs(kink->GetLabel(0))); //mother MC particle object
+ TParticle *particle2 = MCstack->Particle(TMath::Abs(kink->GetLabel(1))); //daughter MC particle object
+
+ Int_t code1 = particle1->GetPdgCode(); //mother's pdg code obtained from MC mother object
+ Int_t code2 = particle2->GetPdgCode(); //daughter's pdg code obtained from MC daughter object
+
+ UInt_t DauUID = particle2->GetUniqueID(); //ESD daughter's unique id (method of production)
+
+ Double_t MCKinkPosZ = particle2->Vz();
+
+ hPtKink->Fill(Pt);
+ hEtaKink->Fill(Eta);
+ hRapidityKink->Fill(Rapidity);
+ hPmP->Fill(Pm,P);
+ hKinkPosRTPCclusters1->Fill(NTPCclusters/KinkPosR);
+ hKinkPosRTPCclusters2->Fill(KinkPosR, NTPCclusters);
+ hQt->Fill(Qt);
+ hKinkAngle->Fill(KinkAngle);
+ hDCAkink->Fill(KinkDistance);
+ hPmKinkAng->Fill(P, KinkAngle);
+ hKinkPosXY->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZY->Fill(KinkPos[2],KinkPos[1]);
+ hKinkPosZR->Fill(KinkPos[2],KinkPosR);
+ hKinkPosR->Fill(KinkPosR);
+ hKinkPosZ->Fill(KinkPos[2]);
+ hKinkPosZMCKinkPosZ->Fill(KinkPos[2], MCKinkPosZ);
+ hPdgCodemd->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ hPmd->Fill(Pm,Pd);
+ hMinvPimu->Fill(MinvPimu);
+ hUIDKinkDau->Fill(DauUID);
+ hdEdx->Fill(PTPC, dEdx);
+
+ if ( (IsRealPionKink(kink, MCstack) == kFALSE) || (Label1>MCNPrimTracks) ) {
+ hPtKinkFake->Fill(Pt);
+ hEtaKinkFake->Fill(Eta);
+ hRapidityKinkFake->Fill(Rapidity);
+ hPmPFake->Fill(Pm,P);
+ hKinkPosRTPCclusters1Fake->Fill(NTPCclusters/KinkPosR);
+ hKinkPosRTPCclusters2Fake->Fill(KinkPosR,NTPCclusters);
+ hQtFake->Fill(Qt);
+ hKinkAngleFake->Fill(KinkAngle);
+ hDCAkinkFake->Fill(KinkDistance);
+ hPmKinkAngFake->Fill(P, KinkAngle);
+ hKinkPosXYFake->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZYFake->Fill(KinkPos[2],KinkPos[1]);
+ hKinkPosZRFake->Fill(KinkPos[2],KinkPosR);
+ hKinkPosRFake->Fill(KinkPosR);
+ hKinkPosZFake->Fill(KinkPos[2]);
+ hKinkPosZMCKinkPosZFake->Fill(KinkPos[2], MCKinkPosZ);
+ hPdgCodemdFake->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ hPmdFake->Fill(Pm,Pd);
+ hMinvPimuFake->Fill(MinvPimu);
+ hUIDKinkDauFake->Fill(DauUID);
+ hdEdxFake->Fill(PTPC, dEdx);
+ }
+
+ if ((KinkPosR<cLowR)||(KinkPosR>cUpR)) continue; //selection of kinks that are detected in the main region of TPC
+
+ hPtPosRSelected->Fill(Pt);
+
+ if ((TMath::Abs(KinkPos[2])<0.5) || (TMath::Abs(KinkPos[2])>225)){
+ hPdgCodemdZRejected->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ continue;
+ }
+ hPtZSelected->Fill(Pt);
+
+
+ if (KinkAngle<cLowKinkAngle) { //reject fake kinks (with very small kink angle)
+ hPdgCodemdAngRejected->Fill(TMath::Abs(code1), TMath::Abs(code2));
+ continue;
+ }
+ hPtAngSelected->Fill(Pt);
+
+ if ((Pm/P<0.7) || (1.3<Pm/P)) {
+ hPdgCodemdPmRejected->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ continue;
+ }//good tracks check mother track and kink if near
+ hPtPmSelected->Fill(Pt);
+
+ if (Qt<cLowQt) { //pion kinks Qt cuts
+ hPdgCodemdQtLowRejected->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ continue;
+ }
+
+ //Good Kinks
+ hPtGoodKink->Fill(Pt);
+ hEtaGoodKink->Fill(Eta);
+ hRapidityGoodKink->Fill(Rapidity);
+ hQtGoodKink->Fill(Qt);
+ hPmGoodKinkAng->Fill(P, KinkAngle);
+ hPdgCodemdGoodKink->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ hPmdGoodKink->Fill(Pm,Pd);
+ hUIDGoodKinkDau->Fill(DauUID);
+ hdEdxGoodKink->Fill(PTPC, dEdx);
+
+
+
+ //---------------------- perfect PID from pdg code -------------------------//
+
+ if (code1==cPdgPion) { //selection of pion plus kinks
+ hUIDPiDauPlus->Fill(DauUID);
+ if ((Label1<=MCNPrimTracks) && (DauUID==4)) { //select primary pions that decay
+ hMultPiPlus->Fill(NTracks);
+ hPtPiPlus->Fill(Pt);
+ hEtaPiPlus->Fill(Eta);
+ hRapidityPiPlus->Fill(Rapidity);
+ hQtPiPlus->Fill(Qt);
+ hKinkAnglePiPlus->Fill(KinkAngle);
+ hPmKinkAngPiPlus->Fill(P, KinkAngle);
+ hKinkPosXYPiPlus->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRPiPlus->Fill(KinkPos[2],KinkPosR);
+ hKinkPosRPiPlus->Fill(KinkPosR);
+ hDCAkinkPiPlus->Fill(KinkDistance);
+ hPdgCodemdPiPlus->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ hPmdPiPlus->Fill(Pm,Pd);
+ hdEdxPiPlus->Fill(PTPC, dEdx);
+
+ if (code2==-cPdgMuon) { //selection of muon daughters
+ hQtPimuPlus->Fill(Qt);
+ hPmKinkAngPimuPlus->Fill(P, KinkAngle);
+ } else { //other daughters?
+ hQtPiotherPlus->Fill(Qt);
+ hPmKinkAngPiotherPlus->Fill(P, KinkAngle);
+ hPdgCodemdPiotherPlus->Fill(TMath::Abs(code1), TMath::Abs(code2));
+ }
+ }
+ } else if (code1==-cPdgPion) {
+ hUIDPiDauMinus->Fill(DauUID);
+ if ((Label1<=MCNPrimTracks) && (DauUID==4)) { //select primary pions that decay
+ hMultPiMinus->Fill(NTracks);
+ hPtPiMinus->Fill(Pt);
+ hEtaPiMinus->Fill(Eta);
+ hRapidityPiMinus->Fill(Rapidity);
+ hQtPiMinus->Fill(Qt);
+ hKinkAnglePiMinus->Fill(KinkAngle);
+ hPmKinkAngPiMinus->Fill(P, KinkAngle);
+ hKinkPosXYPiMinus->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRPiMinus->Fill(KinkPos[2],KinkPosR);
+ hKinkPosRPiMinus->Fill(KinkPosR);
+ hDCAkinkPiMinus->Fill(KinkDistance);
+ hPdgCodemdPiMinus->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ hPmdPiMinus->Fill(Pm,Pd);
+ hdEdxPiMinus->Fill(PTPC, dEdx);
+
+ if (code2==cPdgMuon) { //selection of muon daughters
+ hQtPimuMinus->Fill(Qt);
+ hPmKinkAngPimuMinus->Fill(P, KinkAngle);
+ } else { //other daughters?
+ hQtPiotherMinus->Fill(Qt);
+ hPmKinkAngPiotherMinus->Fill(P, KinkAngle);
+ hPdgCodemdPiotherMinus->Fill(TMath::Abs(code1), TMath::Abs(code2));
+ }
+ }
+ }// end of pion selection
+
+
+ //------------------------ realistic PID from physical criteria --------------------//
+
+
+
+ if (Qt>cUpQt){ //pion kinks Qt cuts
+ hPdgCodemdQtRejected->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ continue;
+ }
+ hPtQtSelected->Fill(Pt);
+
+ if (KinkAngle>(MaxKinkAngPimu*1.1)) { //pion kink angle cuts
+ hPdgCodemdMaxAngRejected->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ continue;
+ }
+ hPtMaxAngSelected->Fill(Pt);
+
+// if ( ((NTPCclusters/KinkPosR)>0.63) || ((NTPCclusters/KinkPosR)<0.20) ) { //good TPC tracks selection
+ Double_t tpcNClHigh = -51.67+ (11./12.)*KinkPosR;
+ Double_t tpcNClMin = -85.5 + (65./95.)*KinkPosR;
+ if ( (NTPCclusters>tpcNClHigh) || (NTPCclusters<tpcNClMin) ){ //good TPC tracks selection
+ hPdgCodemdRTPCclustersRejected->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ continue;
+ }
+ hPtRTPCclustersSelected->Fill(Pt);
+ hRTPCclustersRTPCclustersSelected->Fill(KinkPosR,NTPCclusters);
+
+ if ((MinvPimu>cUpInvMass) || (MinvPimu<cLowInvMass)) { //pion kinks invariant mass cuts
+ hPdgCodemdMinvRejected->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ continue;
+ }
+
+
+/////////////////selected without dE/dx cut
+ hPtSelected->Fill(Pt);
+ hEtaSelected->Fill(Eta);
+ hRapiditySelected->Fill(Rapidity);
+ hQtSelected->Fill(Qt);
+ hKinkAngleSelected->Fill(KinkAngle);
+ hDCAkinkSelected->Fill(KinkDistance);
+ hPmKinkAngSelected->Fill(P, KinkAngle);
+ hKinkPosXYSelected->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRSelected->Fill(KinkPos[2],KinkPosR);
+ hKinkPosRSelected->Fill(KinkPosR);
+ hPdgCodemdSelected->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ hPmdSelected->Fill(Pm,Pd);
+ hMinvPimuSelected->Fill(MinvPimu);
+ hUIDKinkDauSelected->Fill(DauUID);
+ hdEdxSelected->Fill(PTPC, dEdx);
+ if ( (IsRealPionKink(kink, MCstack) == kFALSE) || (Label1>MCNPrimTracks) ) {
+ hPtSelectedFake->Fill(Pt);
+ hEtaSelectedFake->Fill(Eta);
+ hRapiditySelectedFake->Fill(Rapidity);
+ hQtSelectedFake->Fill(Qt);
+ hKinkAngleSelectedFake->Fill(KinkAngle);
+ hDCAkinkSelectedFake->Fill(KinkDistance);
+ hPmKinkAngSelectedFake->Fill(P, KinkAngle);
+ hKinkPosXYSelectedFake->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRSelectedFake->Fill(KinkPos[2],KinkPosR);
+ hKinkPosRSelectedFake->Fill(KinkPosR);
+ hPmdSelectedFake->Fill(Pm,Pd);
+ hMinvPimuSelectedFake->Fill(MinvPimu);
+ hdEdxSelectedFake->Fill(PTPC, dEdx);
+ }
+
+
+ Double_t NSigmaTPC = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(ESDtrack, AliPID::kPion));
+ if (NSigmaTPC>cSigmaCut) { // dE/dx cut
+ hPdgCodemddEdxRejected->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ continue;
+ }
+
+ Double_t Sign = ESDtrack->GetSign();
+
+///////////////// dEdx selected
+ hPtPiSelected->Fill(Pt);
+ hEtaPiSelected->Fill(Eta);
+ hRapidityPiSelected->Fill(Rapidity);
+ hQtPiSelected->Fill(Qt);
+ hKinkAnglePiSelected->Fill(KinkAngle);
+ hDCAkinkPiSelected->Fill(KinkDistance);
+ hPmKinkAngPiSelected->Fill(P, KinkAngle);
+ hKinkPosRTPCclusters1PiSelected->Fill(NTPCclusters/KinkPosR);
+ hKinkPosRTPCclusters2PiSelected->Fill(KinkPosR, NTPCclusters);
+ hKinkPosXYPiSelected->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRPiSelected->Fill(KinkPos[2],KinkPosR);
+ hKinkPosRPiSelected->Fill(KinkPosR);
+ hKinkPosZPiSelected->Fill(KinkPos[2]);
+ hPmPPiSelected->Fill(Pm,P);
+ hPdgCodemdPiSelected->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ hPmdPiSelected->Fill(Pm,Pd);
+ hMinvPimuPiSelected->Fill(MinvPimu);
+ hUIDKinkDauPiSelected->Fill(DauUID);
+ hdEdxPiSelected->Fill(PTPC, dEdx);
+
+ if (Sign>0) {
+ hPtPiSelectedPlus->Fill(Pt);
+ hEtaPiSelectedPlus->Fill(Eta);
+ hRapidityPiSelectedPlus->Fill(Rapidity);
+ hQtPiSelectedPlus->Fill(Qt);
+ hKinkAnglePiSelectedPlus->Fill(KinkAngle);
+ hDCAkinkPiSelectedPlus->Fill(KinkDistance);
+ hPmKinkAngPiSelectedPlus->Fill(P, KinkAngle);
+ hKinkPosXYPiSelectedPlus->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRPiSelectedPlus->Fill(KinkPos[2],KinkPosR);
+ hPdgCodemdPiSelectedPlus->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ hPmdPiSelectedPlus->Fill(Pm,Pd);
+ hMinvPimuPiSelectedPlus->Fill(MinvPimu);
+ hUIDPiDaumuSelectedPlus->Fill(DauUID);
+ hdEdxPiSelectedPlus->Fill(PTPC, dEdx);
+
+//------------------- contamination of results of realistic PID ----------------//
+ if (IsRealPionKink(kink, MCstack) == kTRUE) { //real pion kinks
+ if (Label1<=MCNPrimTracks) { //primaries
+ hPtPrimPiKinksPlus->Fill(Pt);
+ hEtaPrimPiKinksPlus->Fill(Eta);
+ hRapidityPrimPiKinksPlus->Fill(Rapidity);
+ } else { //secondary real kinks
+ hPtSecondPiKinksPlus->Fill(Pt);
+ hEtaSecondPiKinksPlus->Fill(Eta);
+ hRapiditySecondPiKinksPlus->Fill(Rapidity);
+ }
+ } else { //fakes
+ hPtNonPiKinksPlus->Fill(Pt);
+ hEtaNonPiKinksPlus->Fill(Eta);
+ hRapidityNonPiKinksPlus->Fill(Rapidity);
+ hPdgCodemdNonPiKinksPlus->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ }
+
+ } else if (Sign<0) {
+ hPtPiSelectedMinus->Fill(Pt);
+ hEtaPiSelectedMinus->Fill(Eta);
+ hRapidityPiSelectedMinus->Fill(Rapidity);
+ hQtPiSelectedMinus->Fill(Qt);
+ hKinkAnglePiSelectedMinus->Fill(KinkAngle);
+ hDCAkinkPiSelectedMinus->Fill(KinkDistance);
+ hPmKinkAngPiSelectedMinus->Fill(P, KinkAngle);
+ hKinkPosXYPiSelectedMinus->Fill(KinkPos[0],KinkPos[1]);
+ hKinkPosZRPiSelectedMinus->Fill(KinkPos[2],KinkPosR);
+ hPdgCodemdPiSelectedMinus->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ hPmdPiSelectedMinus->Fill(Pm,Pd);
+ hMinvPimuPiSelectedMinus->Fill(MinvPimu);
+ hUIDPiDaumuSelectedMinus->Fill(DauUID);
+ hdEdxPiSelectedMinus->Fill(PTPC, dEdx);
+
+//------------------- contamination of results of realistic PID ----------------//
+ if (IsRealPionKink(kink, MCstack) == kTRUE) { //real pion kinks
+ if (Label1<=MCNPrimTracks) { //primaries
+ hPtPrimPiKinksMinus->Fill(Pt);
+ hEtaPrimPiKinksMinus->Fill(Eta);
+ hRapidityPrimPiKinksMinus->Fill(Rapidity);
+ } else { //secondary real kinks
+ hPtSecondPiKinksMinus->Fill(Pt);
+ hEtaSecondPiKinksMinus->Fill(Eta);
+ hRapiditySecondPiKinksMinus->Fill(Rapidity);
+ }
+ } else { //fakes
+ hPtNonPiKinksMinus->Fill(Pt);
+ hEtaNonPiKinksMinus->Fill(Eta);
+ hRapidityNonPiKinksMinus->Fill(Rapidity);
+ hPdgCodemdNonPiKinksMinus->Fill(TMath::Abs(code1),TMath::Abs(code2));
+ }
+ }
+ } //end of ESD track loop
+ PostData(1, fListOfHistos);
+}
+
+
+//________________________________________________________________________
+void AliAnalysisPionKinksMCESD::Terminate(Option_t *) {
+}
+
+//_________________________________________________________________________
+const AliESDVertex* AliAnalysisPionKinksMCESD::GetEventVertex(AliESDEvent* esd) { //Gets ESD vertex and returns it if it is valid
+ const AliESDVertex* vertex = esd->GetPrimaryVertexTracks();
+ if(vertex->GetStatus()==kTRUE) return vertex;
+ else {
+ vertex = esd->GetPrimaryVertexSPD();
+ if((vertex->GetStatus()==kTRUE)&&(vertex->GetNContributors()>0)) return vertex;
+ else return 0;
+ }
+}
+
+//________________________________________________________________________
+Double_t AliAnalysisPionKinksMCESD::Energy(AliESDtrack* track) const { //calculates the energy for a pion track
+ Double_t TrackMom[3];
+ track->GetPxPyPz(TrackMom);
+ TVector3 P(TrackMom[0], TrackMom[1], TrackMom[2]);
+ //Double_t EnergyK = TMath::Sqrt(P.Mag()*P.Mag()+0.493677*0.493677); //kaon's energy
+ Double_t EnergyPi = TMath::Sqrt(P.Mag()*P.Mag()+0.13957018*0.13957018); //pion's energy
+ return EnergyPi;
+}
+
+//________________________________________________________________________
+Double_t AliAnalysisPionKinksMCESD::GetMCRapidity(TParticle* particle) const { //calculates the rapidity of a track
+ TVector3 P(particle->Px(),particle->Py(),particle->Pz());
+ Double_t MCRapidity = 0.5*(TMath::Log(((particle->Energy())+P[2])/((particle->Energy())-P[2])));
+ return MCRapidity;
+}
+
+//________________________________________________________________________
+Double_t AliAnalysisPionKinksMCESD::fuRapidity(AliESDtrack* track) const { //calculates the rapidity for a track
+ Double_t TrackMom[3];
+ track->GetPxPyPz(TrackMom);
+ TVector3 P(TrackMom[0], TrackMom[1], TrackMom[2]);
+ Double_t RapidityPi = 0.5*(TMath::Log((Energy(track)+P[2])/(Energy(track)-P[2])));
+ return RapidityPi;
+}
+
+//________________________________________________________________________
+Double_t AliAnalysisPionKinksMCESD::MCPQt(AliMCEvent* mcEvent, Int_t iMC, TParticle* MCdaughter) const {
+ TVector3 DecayMomentumPi(0,0,0); //mother's momentum when it decays
+ TClonesArray* trArray=0;
+ TParticle* tempParticle=0;
+ if (mcEvent->GetParticleAndTR(iMC, tempParticle, trArray) != -1) {
+ AliTrackReference* MCtrackReference = static_cast<AliTrackReference*>(trArray->Last());
+ DecayMomentumPi.SetXYZ(MCtrackReference->Px(), MCtrackReference->Py(), MCtrackReference->Pz());
+ } else return 0;
+
+ const TVector3 MCP3d(MCdaughter->Px(), MCdaughter->Py(), MCdaughter->Pz()); //daughter's momentum when producedframe
+ Double_t MCQt = MCP3d.Perp(DecayMomentumPi); //daughter's transverse momentum in mother's frame (Qt)
+ return MCQt;
+}
+
+//________________________________________________________________________
+Double_t AliAnalysisPionKinksMCESD::fuMCKinkAngle(AliMCEvent* mcEvent, Int_t iMC, TParticle* MCdaughter, Bool_t degrees) const {
+ Double_t MCQt=MCPQt(mcEvent, iMC, MCdaughter);
+ Double_t MCKinkAngle = TMath::ASin(MCQt/(MCdaughter->P())); //kink angle in rads
+ if (degrees==kFALSE) {
+ return MCKinkAngle;
+ } else {
+ MCKinkAngle = TMath::RadToDeg()*MCKinkAngle; //kink angle in degrees
+ return MCKinkAngle;
+ }
+}
+
+//________________________________________________________________________
+Bool_t AliAnalysisPionKinksMCESD::IsGoodTrack(AliESDtrack* ESDtrack) const { //Checks if a track is acceptable as good
+ UInt_t status = ESDtrack->GetStatus();
+ if ((status&AliESDtrack::kITSrefit)==0) return kFALSE; //cut tracks that cannot be reconstructed by ITS only
+ if ((status&AliESDtrack::kTPCrefit)==0) return kFALSE; //cut tracks that cannot be reconstructed by TPC only
+
+ Double_t NTPCclusters = ESDtrack->GetTPCclusters(0);
+ Double_t TPCchi2 = ESDtrack->GetTPCchi2();
+ if (NTPCclusters<20) return kFALSE;
+ //if (NTPCclusters<30) return kFALSE; // cut sta 30 gia syst
+
+ //hTPCchi2clusters->Fill(TPCchi2/NTPCclusters);//histo to check???????
+ if (TPCchi2/NTPCclusters>3.8) return kFALSE; //cut tracks of bad quality fit with the contributing clusters
+
+ /*Double_t ExtCov[15]; //external covariances matrix
+ ESDtrack->GetExternalCovariance(ExtCov);
+ if(ExtCov[0]>2) return kFALSE; //sigma(y^2)
+ if(ExtCov[2]>2) return kFALSE; //sigma(z^2)
+ if(ExtCov[5]>0.5) return kFALSE; //sigma(sinphi^2)
+ if(ExtCov[9]>0.5) return kFALSE; //sigma(tanlamda^2)
+ if(ExtCov[14]>2) return kFALSE; //sigma(1/Pt^2)*/
+
+ return kTRUE;
+}
+
+//________________________________________________________________________
+Bool_t AliAnalysisPionKinksMCESD::IsPrimaryTrack(AliESDtrack* ESDtrack) const { //Checks if a track is acceptable as a primary
+ Float_t ImpParam[2]; //DCA to vertex, 0->in x-y plane, 1->in z
+ Float_t ImpParamCov[3]; //covariances of DCA to vertex
+ ESDtrack->GetImpactParameters(ImpParam,ImpParamCov);
+ //hdcaToVertexXY->Fill(ImpParam[0]);
+ //hdcaToVertexZ->Fill(ImpParam[1]);
+ if (ImpParamCov[0]<=0 || ImpParamCov[2]<=0) {
+ AliDebug (1, "Estimated DCA covariance lower or equal zero!");
+ ImpParamCov[0]=0; ImpParamCov[2]=0;
+ }
+
+ //if((TMath::Abs(ImpParam[0])>0.3) || (TMath::Abs((ImpParam[1])>2.5))) return kFALSE; //absolute DCA cut
+ if (!fMaxDCAtoVtxCut->AcceptTrack(ESDtrack)) return kFALSE;
+ else return kTRUE;
+}
+
+
+//________________________________________________________________________
+Bool_t AliAnalysisPionKinksMCESD::IsRealPionKink(AliESDkink* kink, AliStack* MCstack) const { //checks if a reconstructed kink is a pion kink
+ Int_t Label1 = kink->GetLabel(0); //mother's track MC label (first component is mother)
+ Int_t Label2 = kink->GetLabel(1); //daughter's track MC label (second component is daughter)
+ //if (Label1>MCNTracks) return kFALSE;
+ //if (Label2>MCNTracks) return kFALSE;
+
+ TParticle *particle1 = MCstack->Particle(TMath::Abs(Label1)); //mother MC particle object
+ TParticle *particle2 = MCstack->Particle(TMath::Abs(Label2)); //daughter MC particle object
+
+ Int_t code1 = particle1->GetPdgCode(); //mother's pdg code obtained from MC mother object
+ Int_t code2 = particle2->GetPdgCode(); //daughter's pdg code obtained from MC daughter object
+
+ UInt_t UID = particle2->GetUniqueID(); //ESD daughter's unique id (method of production)
+ if (UID!=4) return kFALSE;
+
+ if( (code1==cPdgPion) && (code2==-cPdgMuon) ){
+ return kTRUE;
+ } else if ( (code1==-cPdgPion) && (code2==cPdgMuon) ){
+ return kTRUE;
+ } else {
+ return kFALSE;
+ }
+}
+
--- /dev/null
+#ifndef AliAnalysisPionKinksMCESD_h
+#define AliAnalysisPionKinksMCESD_h
+
+
+/* See cxx source for full Copyright notice */
+
+//-----------------------------------------------------------------
+// AliAnalysisPionKinksMCESD class
+// This task is an example of an analysis task
+// for kink topology Study
+// Authors: Eftychios Cheiladakis, under the supervision
+// of Martha's Spyropoulou-Stassinaki
+// Physics Department of Athens University
+//------------------------------------------------------------------
+class AliESDEvent;
+class TF1;
+class TH1;
+class TH2;
+class TH3;
+class TParticle;
+class TParticle;
+class AliESDtrackCuts;
+class AliPhysicsSelection;
+class AliPIDResponse;
+
+#include "AliAnalysisTaskSE.h"
+
+class AliAnalysisPionKinksMCESD : public AliAnalysisTaskSE {
+ public:
+ AliAnalysisPionKinksMCESD(const char *name = "AliAnalysisPionKinksMCESD");
+ virtual ~AliAnalysisPionKinksMCESD() {}
+
+ virtual void UserCreateOutputObjects();
+ virtual void UserExec(Option_t *option);
+ virtual void Terminate(Option_t *);
+
+ const AliESDVertex *GetEventVertex(AliESDEvent* esd);
+ Double_t Energy(AliESDtrack* track) const;
+ Double_t GetMCRapidity(TParticle* particle) const;
+ Double_t fuRapidity(AliESDtrack* track) const;
+ Double_t MCPQt(AliMCEvent* mcEvent, Int_t iMC, TParticle* MCdaughter) const;
+ Double_t fuMCKinkAngle(AliMCEvent* mcEvent, Int_t iMC, TParticle* MCdaughter, Bool_t degrees) const;
+ Bool_t IsGoodTrack(AliESDtrack* ESDTrack) const;
+ Bool_t IsPrimaryTrack(AliESDtrack* ESDTrack) const;
+ Bool_t IsRealPionKink(AliESDkink* kink, AliStack* MCstack) const;
+
+ // Set limits & cuts
+ void SetMulCut(Int_t low, Int_t up){fLowMulcut=low; fUpMulcut=up;}
+ void SetPtCut(Double_t PtCut){cLowPt=PtCut;}
+ void SetRapidityLimits(Double_t RapidityLim){cRapidityLim=RapidityLim;}
+ void SetRadiusRange(Double_t LowR, Double_t UpR){cLowR=LowR; cUpR=UpR;}
+ void SetZRange(Double_t LowZ, Double_t UpZ){cLowZ=LowZ; cUpZ=UpZ;}
+ void SetKinkAngleCut(Double_t LowAngle){cLowKinkAngle=LowAngle;}
+ void SetQtRange(Double_t LowQt, Double_t UpQt){cLowQt=LowQt; cUpQt=UpQt;}
+ void SetInvMassRange(Double_t LowInvMass, Double_t UpInvMass){cLowInvMass=LowInvMass; cUpInvMass=UpInvMass;}
+ void SetSigmaCut(Double_t SigmaCut){cSigmaCut=SigmaCut;}
+ void SetPdgCodes(Int_t kaon, Int_t pion, Int_t muon, Int_t electron){cPdgKaon=kaon; cPdgPion=pion; cPdgMuon=muon; cPdgElectron=electron;}
+ void SetMasses(Double_t KaonMass, Double_t PionMass, Double_t MuonMass, Double_t ElectronMass){cKaonMass=KaonMass; cPionMass=PionMass; cMuonMass=MuonMass; cElectronMass=ElectronMass;}
+
+ // Set histos limits
+ void SetMultHistos(Int_t BinsMult, Int_t LowMult, Int_t UpMult){nBinsMult=BinsMult; hLowPt=LowMult; hUpMult=UpMult;}
+ void SetPtHistos(Int_t BinsPt, Double_t LowPt, Double_t UpPt){nBinsPt=BinsPt; hLowPt=LowPt; hUpPt=UpPt;}
+ void SetEtaHistos(Int_t BinsEta, Double_t LowEta, Double_t UpEta){nBinsEta=BinsEta; hLowEta=LowEta; hUpEta=UpEta;}
+ void SetQtHistos(Int_t BinsQt, Double_t LowQt, Double_t UpQt){nBinsQt=BinsQt; hLowQt=LowQt; hUpQt=UpQt;}
+ void SetPdgHistos(Int_t BinsPdg, Double_t LowPdg, Double_t UpPdg){nBinsPdg=BinsPdg; hLowPdg=LowPdg; hUpPdg=UpPdg;}
+ void SetPdg2Histos(Int_t BinsPdg2, Double_t LowPdg2, Double_t UpPdg2){nBinsPdg2=BinsPdg2; hLowPdg2=LowPdg2; hUpPdg2=UpPdg2;}
+ void SetUIDHistos(Int_t BinsUID, Double_t LowUID, Double_t UpUID){nBinsUID=BinsUID; hLowUID=LowUID; hUpUID=UpUID;}
+ void SetRHistos(Int_t BinsR, Double_t LowR, Double_t UpR){nBinsR=BinsR; hLowR=LowR; hUpR=UpR;}
+ void SetZHistos(Int_t BinsZ, Double_t LowZ, Double_t UpZ){nBinsZ=BinsZ; hLowZ=LowZ; hUpZ=UpZ;}
+ void SetXYHistos(Int_t BinsXY, Double_t LowXY, Double_t UpXY){nBinsXY=BinsXY; hLowXY=LowXY; hUpXY=UpXY;}
+ void SetAngleHistos(Int_t BinsAngle, Double_t LowAngle, Double_t UpAngle){nBinsAngle=BinsAngle; hLowAngle=LowAngle; hUpAngle=UpAngle;}
+ void SetZVHistos(Int_t BinsZV, Double_t LowZV, Double_t UpZV){nBinsZV=BinsZV; hLowZV=LowZV; hUpZV=UpZV;}
+ void SetXYVHistos(Int_t BinsXYV, Double_t LowXYV, Double_t UpXYV){nBinsXYV=BinsXYV; hLowXYV=LowXYV; hUpXYV=UpXYV;}
+ void SetInvMassHistos(Int_t BinsInvMass, Double_t LowInvMass, Double_t UpInvMass){nBinsInvMass=BinsInvMass; hLowInvMass=LowInvMass; hUpInvMass=UpInvMass;}
+ void SetdEdxHistos(Int_t BinsdEdx, Double_t LowdEdx, Double_t UpdEdx){nBinsdEdx=BinsdEdx; hLowdEdx=LowdEdx; hUpdEdx=UpdEdx;}
+ private:
+ TF1* fMaxKinkAngKmu;
+ TF1* fMaxKinkAngPimu;
+
+ TH1F* hMCMult;
+ TH1F* hMCMultPrim;
+ TH1F* hMCPtAll;
+ TH1F* hMCEtaAll;
+ TH1F* hMCPtPrim;
+ TH1F* hMCEtaPrim;
+ TH1F* hMCPt;
+ TH1F* hMCEta;
+ TH1F* hMCPdg;
+ TH1F* hMCMultPiPlus;
+ TH1F* hMCPtPiPlus;
+ TH1F* hMCEtaPiPlus;
+ TH1F* hMCRapidityPiPlus;
+ TH1F* hMCNDaughtersPlus;
+ TH1F* hMCRadPiDauPlus;
+ TH1F* hMCKinkPosZPlus;
+ TH1F* hMCUIDPiDauPlus;
+ TH1F* hMCPdgPiNonDecayedPlus;
+ TH1F* hMCPdgPiDauPlus;
+ TH1F* hMCQtPlus;
+ TH1F* hMCKinkAnglePlus;
+ TH2F* hMCPKinkAngPlus;
+ TH2F* hMCPdgCodemdPlus;
+ TH2F* hMCPtmdPlus;
+ TH1F* hMCPtPimuonPlus;
+ TH1F* hMCEtaPimuonPlus;
+ TH1F* hMCRapidityPimuonPlus;
+ TH1F* hMCQtPimuonPlus;
+ TH1F* hMCPKinkAngPimuonPlus;
+ TH1F* hMCPtPiotherPlus;
+ TH1F* hMCEtaPiotherPlus;
+ TH1F* hMCRapidityPiotherPlus;
+ TH1F* hMCQtPiotherPlus;
+ TH1F* hMCPKinkAngPiotherPlus;
+ TH1F* hMCMultPiMinus;
+ TH1F* hMCPtPiMinus;
+ TH1F* hMCEtaPiMinus;
+ TH1F* hMCRapidityPiMinus;
+ TH1F* hMCNDaughtersMinus;
+ TH1F* hMCRadPiDauMinus;
+ TH1F* hMCKinkPosZMinus;
+ TH1F* hMCUIDPiDauMinus;
+ TH1F* hMCPdgPiNonDecayedMinus;
+ TH1F* hMCPdgPiDauMinus;
+ TH1F* hMCQtMinus;
+ TH1F* hMCKinkAngleMinus;
+ TH2F* hMCPKinkAngMinus;
+ TH2F* hMCPdgCodemdMinus;
+ TH2F* hMCPtmdMinus;
+ TH1F* hMCPtPimuonMinus;
+ TH1F* hMCEtaPimuonMinus;
+ TH1F* hMCRapidityPimuonMinus;
+ TH1F* hMCQtPimuonMinus;
+ TH1F* hMCPKinkAngPimuonMinus;
+ TH1F* hMCPtPiotherMinus;
+ TH1F* hMCEtaPiotherMinus;
+ TH1F* hMCRapidityPiotherMinus;
+ TH1F* hMCQtPiotherMinus;
+ TH1F* hMCPKinkAngPiotherMinus;
+
+ TH1F* hMult;
+ TH1F* hAcceptedMult;
+ TH1F* hMultPS;
+ TH3F* hvtx;
+ TH2F* hvtxy;
+ TH2F* hvtyz;
+ TH2F* hvtxz;
+ TH1F* hMultPSV;
+ TH1F* hPtAll;
+ TH1F* hEtaAll;
+ TH3F* hTrackPos;
+ TH2F* hTrackPosxy;
+ TH2F* hTrackPosyz;
+ TH2F* hTrackPosxz;
+ //TH1F* hTPCchi2clusters;
+ //TH1F* hdcaToVertexXY;
+ //TH1F* hdcaToVertexZ;
+ TH1F* hMultPrim;
+ TH1F* hPtPrim;
+ TH1F* hEtaPrim;
+ TH3F* hPrimTrackPos;
+ TH2F* hPrimTrackPosxy;
+ TH2F* hPrimTrackPosyz;
+ TH2F* hPrimTrackPosxz;
+ TH1F* hPt;
+ TH1F* hEta;
+ //TH1F* hRapidity;
+ TH1F* hPtKink;
+ TH1F* hEtaKink;
+ TH1F* hRapidityKink;
+ TH2F* hPmP;
+ TH1F* hKinkPosRTPCclusters1;
+ TH2F* hKinkPosRTPCclusters2;
+ TH1F* hQt;
+ TH1F* hKinkAngle;
+ TH1F* hDCAkink;
+ TH2F* hPmKinkAng;
+ TH2F* hKinkPosXY;
+ TH2F* hKinkPosZY;
+ TH2F* hKinkPosZR;
+ TH1F* hKinkPosR;
+ TH1F* hKinkPosZ;
+ TH2F* hKinkPosZMCKinkPosZ;
+ TH2F* hPdgCodemd;
+ TH2F* hPmd;
+ TH1F* hMinvPimu;
+ TH1F* hUIDKinkDau;
+ TH2F* hdEdx;
+ TH1F* hPtKinkFake;
+ TH1F* hEtaKinkFake;
+ TH1F* hRapidityKinkFake;
+ TH2F* hPmPFake;
+ TH1F* hKinkPosRTPCclusters1Fake;
+ TH2F* hKinkPosRTPCclusters2Fake;
+ TH1F* hQtFake;
+ TH1F* hKinkAngleFake;
+ TH1F* hDCAkinkFake;
+ TH2F* hPmKinkAngFake;
+ TH2F* hKinkPosXYFake;
+ TH2F* hKinkPosZYFake;
+ TH2F* hKinkPosZRFake;
+ TH1F* hKinkPosRFake;
+ TH1F* hKinkPosZFake;
+ TH2F* hKinkPosZMCKinkPosZFake;
+ TH2F* hPdgCodemdFake;
+ TH2F* hPmdFake;
+ TH1F* hMinvPimuFake;
+ TH1F* hUIDKinkDauFake;
+ TH2F* hdEdxFake;
+ TH1F* hPtPosRSelected;
+ TH2F* hPdgCodemdZRejected;
+ TH1F* hPtZSelected;
+ TH2F* hPdgCodemdAngRejected;
+ TH1F* hPtAngSelected;
+ TH2F* hPdgCodemdPmRejected;
+ TH1F* hPtPmSelected;
+ TH2F* hPdgCodemdQtLowRejected;
+ TH1F* hPtGoodKink;
+ TH1F* hEtaGoodKink;
+ TH1F* hRapidityGoodKink;
+ TH1F* hQtGoodKink;
+ TH2F* hPmGoodKinkAng;
+ TH2F* hPdgCodemdGoodKink;
+ TH2F* hPmdGoodKink;
+ TH1F* hUIDGoodKinkDau;
+ TH2F* hdEdxGoodKink;
+ TH1F* hUIDPiDauPlus;
+ TH1F* hMultPiPlus;
+ TH1F* hPtPiPlus;
+ TH1F* hEtaPiPlus;
+ TH1F* hRapidityPiPlus;
+ TH1F* hQtPiPlus;
+ TH1F* hKinkAnglePiPlus;
+ TH2F* hPmKinkAngPiPlus;
+ TH2F* hKinkPosXYPiPlus;
+ TH2F* hKinkPosZRPiPlus;
+ TH1F* hKinkPosRPiPlus;
+ TH1F* hDCAkinkPiPlus;
+ TH2F* hPdgCodemdPiPlus;
+ TH2F* hPmdPiPlus;
+ TH2F* hdEdxPiPlus;
+ TH1F* hQtPimuPlus;
+ TH2F* hPmKinkAngPimuPlus;
+ TH1F* hQtPiotherPlus;
+ TH2F* hPmKinkAngPiotherPlus;
+ TH2F* hPdgCodemdPiotherPlus;
+ TH1F* hUIDPiDauMinus;
+ TH1F* hMultPiMinus;
+ TH1F* hPtPiMinus;
+ TH1F* hEtaPiMinus;
+ TH1F* hRapidityPiMinus;
+ TH1F* hQtPiMinus;
+ TH1F* hKinkAnglePiMinus;
+ TH2F* hPmKinkAngPiMinus;
+ TH2F* hKinkPosXYPiMinus;
+ TH2F* hKinkPosZRPiMinus;
+ TH1F* hKinkPosRPiMinus;
+ TH1F* hDCAkinkPiMinus;
+ TH2F* hPdgCodemdPiMinus;
+ TH2F* hPmdPiMinus;
+ TH2F* hdEdxPiMinus;
+ TH1F* hQtPimuMinus;
+ TH2F* hPmKinkAngPimuMinus;
+ TH1F* hQtPiotherMinus;
+ TH2F* hPmKinkAngPiotherMinus;
+ TH2F* hPdgCodemdPiotherMinus;
+ TH2F* hPdgCodemdQtRejected;
+ TH1F* hPtQtSelected;
+ TH2F* hPdgCodemdMaxAngRejected;
+ TH1F* hPtMaxAngSelected;
+ TH2F* hPdgCodemdRTPCclustersRejected;
+ TH1F* hPtRTPCclustersSelected;
+ TH2F* hRTPCclustersRTPCclustersSelected;
+ TH2F* hPdgCodemdMinvRejected;
+ TH1F* hPtSelected;
+ TH1F* hEtaSelected;
+ TH1F* hRapiditySelected;
+ TH1F* hQtSelected;
+ TH1F* hKinkAngleSelected;
+ TH1F* hDCAkinkSelected;
+ TH2F* hPmKinkAngSelected;
+ TH2F* hKinkPosXYSelected;
+ TH2F* hKinkPosZRSelected;
+ TH1F* hKinkPosRSelected;
+ TH2F* hPdgCodemdSelected;
+ TH2F* hPmdSelected;
+ TH1F* hMinvPimuSelected;
+ TH1F* hUIDKinkDauSelected;
+ TH2F* hdEdxSelected;
+ TH1F* hPtSelectedFake;
+ TH1F* hEtaSelectedFake;
+ TH1F* hRapiditySelectedFake;
+ TH1F* hQtSelectedFake;
+ TH1F* hKinkAngleSelectedFake;
+ TH1F* hDCAkinkSelectedFake;
+ TH2F* hPmKinkAngSelectedFake;
+ TH2F* hKinkPosXYSelectedFake;
+ TH2F* hKinkPosZRSelectedFake;
+ TH1F* hKinkPosRSelectedFake;
+ TH2F* hPmdSelectedFake;
+ TH1F* hMinvPimuSelectedFake;
+ TH2F* hdEdxSelectedFake;
+ TH2F* hPdgCodemddEdxRejected;
+ TH1F* hPtPiSelected;
+ TH1F* hEtaPiSelected;
+ TH1F* hRapidityPiSelected;
+ TH1F* hQtPiSelected;
+ TH1F* hKinkAnglePiSelected;
+ TH1F* hDCAkinkPiSelected;
+ TH2F* hPmKinkAngPiSelected;
+ TH1F* hKinkPosRTPCclusters1PiSelected;
+ TH2F* hKinkPosRTPCclusters2PiSelected;
+ TH2F* hKinkPosXYPiSelected;
+ TH2F* hKinkPosZRPiSelected;
+ TH1F* hKinkPosRPiSelected;
+ TH1F* hKinkPosZPiSelected;
+ TH2F* hPmPPiSelected;
+ TH2F* hPdgCodemdPiSelected;
+ TH2F* hPmdPiSelected;
+ TH1F* hMinvPimuPiSelected;
+ TH1F* hUIDKinkDauPiSelected;
+ TH2F* hdEdxPiSelected;
+
+ TH1F* hPtPiSelectedPlus; //plus
+ TH1F* hEtaPiSelectedPlus;
+ TH1F* hRapidityPiSelectedPlus;
+ TH1F* hQtPiSelectedPlus;
+ TH1F* hKinkAnglePiSelectedPlus;
+ TH1F* hDCAkinkPiSelectedPlus;
+ TH2F* hPmKinkAngPiSelectedPlus;
+ TH2F* hKinkPosXYPiSelectedPlus;
+ TH2F* hKinkPosZRPiSelectedPlus;
+ TH2F* hPdgCodemdPiSelectedPlus;
+ TH2F* hPmdPiSelectedPlus;
+ TH1F* hMinvPimuPiSelectedPlus;
+ TH1F* hUIDPiDaumuSelectedPlus;
+ TH2F* hdEdxPiSelectedPlus;
+ TH1F* hPtPrimPiKinksPlus;
+ TH1F* hEtaPrimPiKinksPlus;
+ TH1F* hRapidityPrimPiKinksPlus;
+ TH1F* hPtSecondPiKinksPlus;
+ TH1F* hEtaSecondPiKinksPlus;
+ TH1F* hRapiditySecondPiKinksPlus;
+ TH1F* hPtNonPiKinksPlus;
+ TH1F* hEtaNonPiKinksPlus;
+ TH1F* hRapidityNonPiKinksPlus;
+ TH2F* hPdgCodemdNonPiKinksPlus;
+ TH1F* hPtPiSelectedMinus;//minus
+ TH1F* hEtaPiSelectedMinus;
+ TH1F* hRapidityPiSelectedMinus;
+ TH1F* hQtPiSelectedMinus;
+ TH1F* hKinkAnglePiSelectedMinus;
+ TH1F* hDCAkinkPiSelectedMinus;
+ TH2F* hPmKinkAngPiSelectedMinus;
+ TH2F* hKinkPosXYPiSelectedMinus;
+ TH2F* hKinkPosZRPiSelectedMinus;
+ TH2F* hPdgCodemdPiSelectedMinus;
+ TH2F* hPmdPiSelectedMinus;
+ TH1F* hMinvPimuPiSelectedMinus;
+ TH1F* hUIDPiDaumuSelectedMinus;
+ TH2F* hdEdxPiSelectedMinus;
+ TH1F* hPtPrimPiKinksMinus;
+ TH1F* hEtaPrimPiKinksMinus;
+ TH1F* hRapidityPrimPiKinksMinus;
+ TH1F* hPtSecondPiKinksMinus;
+ TH1F* hEtaSecondPiKinksMinus;
+ TH1F* hRapiditySecondPiKinksMinus;
+ TH1F* hPtNonPiKinksMinus;
+ TH1F* hEtaNonPiKinksMinus;
+ TH1F* hRapidityNonPiKinksMinus;
+ TH2F* hPdgCodemdNonPiKinksMinus;// reconstruction histograms
+
+ TList* fListOfHistos;
+
+ // Limits and cuts
+ Int_t fLowMulcut;
+ Int_t fUpMulcut;
+
+ Double_t cLowPt;
+ Double_t cRapidityLim;
+ Double_t cLowR, cUpR;
+ Double_t cLowZ, cUpZ;
+ Double_t cLowKinkAngle;
+ Double_t cLowQt, cUpQt;
+ Double_t cLowInvMass, cUpInvMass;
+ Double_t cSigmaCut;
+ Int_t cPdgKaon, cPdgPion, cPdgMuon, cPdgElectron;
+ Double_t cKaonMass, cPionMass, cMuonMass, cElectronMass;
+
+ // Histos limits
+ Int_t nBinsMult, hLowMult, hUpMult;
+ Int_t nBinsPt;
+ Double_t hLowPt, hUpPt;
+ Int_t nBinsEta;
+ Double_t hLowEta, hUpEta;
+ Int_t nBinsQt;
+ Double_t hLowQt, hUpQt;
+ Int_t nBinsPdg;
+ Double_t hLowPdg, hUpPdg;
+ Int_t nBinsPdg2;
+ Double_t hLowPdg2, hUpPdg2;
+ Int_t nBinsUID;
+ Double_t hLowUID, hUpUID;
+ Int_t nBinsR;
+ Double_t hLowR, hUpR;
+ Int_t nBinsZ;
+ Double_t hLowZ, hUpZ;
+ Int_t nBinsXY;
+ Double_t hLowXY, hUpXY;
+ Int_t nBinsAngle;
+ Double_t hLowAngle, hUpAngle;
+ Int_t nBinsZV;
+ Double_t hLowZV, hUpZV;
+ Int_t nBinsXYV;
+ Double_t hLowXYV, hUpXYV;
+ Int_t nBinsInvMass;
+ Double_t hLowInvMass, hUpInvMass;
+ Int_t nBinsdEdx;
+ Double_t hLowdEdx, hUpdEdx;
+
+ AliPIDResponse *fPIDResponse; //! PID response object
+ AliESDtrackCuts* fMaxDCAtoVtxCut;
+ AliESDtrackCuts* fTrackCuts;
+
+
+ AliAnalysisPionKinksMCESD(const AliAnalysisPionKinksMCESD&);
+ AliAnalysisPionKinksMCESD& operator=(const AliAnalysisPionKinksMCESD&);
+
+ ClassDef(AliAnalysisPionKinksMCESD, 1);
+};
+#endif
+
+
--- /dev/null
+AliAnalysisTaskJetSpectraAOD* AddTaskJetSpectraAOD(
+ Bool_t mc=kFALSE,
+ Double_t CentCutMin=0,
+ Double_t CentCutMax=100,
+ Double_t QvecCutMin=0,
+ Double_t QvecCutMax=100,
+ Double_t EtaMin=-0.9,
+ Double_t EtaMax=0.9,
+ Double_t pt=50.,
+ Double_t ptTofMatch=.6,
+ UInt_t trkbit=1,
+ Double_t DCA=100000,
+ UInt_t minNclsTPC=70,
+ TString opt="",
+ //jet settings
+ Float_t jetParameterR = 0.4,
+ UInt_t filterMask = 272,
+ Float_t ptJetMin = 0.15){
+
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr)
+ {
+ ::Error("AddAliAnalysisTaskJetSpectraAOD", "No analysis manager to connect to.");
+ return NULL;
+ }
+
+ // Check the analysis type using the event handlers connected to the analysis manager.
+ //==============================================================================
+ if (!mgr->GetInputEventHandler())
+ {
+ ::Error("AliAnalysisTaskJetSpectraAOD", "This task requires an input event handler");
+ return NULL;
+ }
+
+ TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+ if(type.Contains("ESD"))
+ {
+ ::Error("AliAnalysisTaskJetSpectraAOD", "This task requires to run on AOD");
+ return NULL;
+ }
+
+ AliSpectraAODTrackCuts * trcuts = new AliSpectraAODTrackCuts(Form("TrackCuts%s",opt.Data()));
+ trcuts->SetDCA(DCA);
+ trcuts->SetTrackBits(trkbit);
+ trcuts->SetPt(pt);
+ trcuts->SetPtTOFMatching(ptTofMatch);
+ trcuts->SetEta(EtaMin,EtaMax);
+ trcuts->SetMinTPCcls(minNclsTPC);
+ trcuts->PrintCuts();
+
+ AliSpectraAODEventCuts * evcuts = new AliSpectraAODEventCuts(Form("EventCuts%s",opt.Data()));
+ evcuts->SetQVectorCut(QvecCutMin,QvecCutMax);
+ evcuts->SetCentralityCutMax(CentCutMax);
+ evcuts->SetCentralityCutMin(CentCutMin);
+ if(mc==1)evcuts->SetIsMC(kTRUE);
+ evcuts->PrintCuts();
+
+
+ AliAnalysisTaskJetSpectraAOD *task = new AliAnalysisTaskJetSpectraAOD(Form("TaskAODSpectraCent%.0fto%.0f_QVec%.1fto%.1f_Eta%.1fto%.1f_TrBit%d%s",
+ CentCutMin,
+ CentCutMax,
+ QvecCutMin,
+ QvecCutMax,
+ EtaMin,
+ EtaMax,
+ trkbit,
+ opt.Data()));
+ task->SetEventCuts(evcuts);
+ task->SetTrackCuts(trcuts);
+ if(mc==1)task->SetIsMC(kTRUE);
+
+ //jet settings
+ task->SetFilterMask(filterMask);
+ task->SetJetPtMin(ptJetMin);
+
+ Float_t EtaJetMin = EtaMin + jetParameterR;
+ Float_t EtaJetMax = EtaMax - jetParameterR;
+ task->SetEtaJet(EtaJetMin,EtaJetMax);
+
+ TString outputFileName = AliAnalysisManager::GetCommonFileName();
+
+ TString typeofdata=mc?"MC":"Data";
+
+ outputFileName += Form(":SpectraESE_%s%s",typeofdata.Data(),opt.Data());
+
+ cout<<"outputFileName: "<<outputFileName<<endl;
+ AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
+ AliAnalysisDataContainer *coutputpt1 = mgr->CreateContainer(Form("chist%s",opt.Data()), TList::Class(), AliAnalysisManager::kOutputContainer,outputFileName);
+ AliAnalysisDataContainer *coutputpt2 = mgr->CreateContainer(Form("cvcut%s",opt.Data()), AliSpectraAODEventCuts::Class(), AliAnalysisManager::kOutputContainer,outputFileName);
+ AliAnalysisDataContainer *coutputpt3 = mgr->CreateContainer(Form("ctcut%s",opt.Data()), AliSpectraAODTrackCuts::Class(), AliAnalysisManager::kOutputContainer, outputFileName);
+ mgr->AddTask(task);
+
+ mgr->ConnectInput(task, 0, cinput);
+ mgr->ConnectOutput(task, 1, coutputpt1);
+ mgr->ConnectOutput(task, 2, coutputpt2);
+ mgr->ConnectOutput(task, 3, coutputpt3);
+
+ return task;
+}
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+//-----------------------------------------------------------------
+// AliAnalysisTaskJetSpectraAOD class
+//-----------------------------------------------------------------
+
+#include "TChain.h"
+#include "TTree.h"
+#include "TLegend.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "THnSparse.h"
+#include "TCanvas.h"
+#include "AliAnalysisTask.h"
+#include "AliAnalysisManager.h"
+#include "AliVTrack.h"
+#include "AliAODMCParticle.h"
+#include "AliVParticle.h"
+#include "AliAODEvent.h"
+#include "AliAODTrack.h"
+#include "AliAODInputHandler.h"
+#include "AliAnalysisTaskJetSpectraAOD.h"
+#include "AliAnalysisTaskESDfilter.h"
+#include "AliAnalysisDataContainer.h"
+#include "AliCentrality.h"
+#include "TProof.h"
+#include "AliVEvent.h"
+#include "AliStack.h"
+#include <TMCProcess.h>
+
+#include "AliSpectraAODTrackCuts.h"
+#include "AliSpectraAODEventCuts.h"
+
+//jet include
+#include "AliAODHandler.h"
+#include "AliAODJetEventBackground.h"
+#include "AliAODJet.h"
+#include "AliAnalysisHelperJetTasks.h"
+
+#include <iostream>
+
+using namespace std;
+
+ClassImp(AliAnalysisTaskJetSpectraAOD)
+
+//________________________________________________________________________
+AliAnalysisTaskJetSpectraAOD::AliAnalysisTaskJetSpectraAOD(const char *name) : AliAnalysisTaskSE(name),
+ fAOD(0),
+ fIsMC(0),
+ fEventCuts(0),
+ fTrackCuts(0),
+ fVZEROside(0),
+ fOutput(0),
+ fAODJets(0),
+ fJetBranchName(""),
+ fListJets(0),
+ fBackgroundBranch(""),
+ fOfflineTrgMask(AliVEvent::kMB),
+ fFilterMask(0),
+ fJetPtMin(0x0),
+ fJetEtaMin(0x0),
+ fJetEtaMax(0x0),
+ fLeadPtMin(0x0),
+ fnCentBins(20),
+ fnQvecBins(20),
+ fnptLeadBins(4),
+ fIsQvecCalibMode(0),
+ fQvecUpperLim(100),
+ fIsQvecCut(0),
+ fQvecMin(0),
+ fQvecMax(100),
+ fHistEvtSelection(0x0),
+ fDebug(0),
+ fMinNcontributors(0),
+ fRejectPileup(0)
+{
+ // Default constructor
+
+ DefineInput(0, TChain::Class());
+ DefineOutput(1, TList::Class());
+ DefineOutput(2, AliSpectraAODEventCuts::Class());
+ DefineOutput(3, AliSpectraAODTrackCuts::Class());
+
+}
+
+//________________________________________________________________________
+AliAnalysisTaskJetSpectraAOD::~AliAnalysisTaskJetSpectraAOD()
+{
+ delete fListJets;
+}
+//________________________________________________________________________
+//________________________________________________________________________
+void AliAnalysisTaskJetSpectraAOD::UserCreateOutputObjects()
+{
+ Printf("\n\n\n\n\n\n In CreateOutput Object:");
+
+ fOutput = new TList();
+ fOutput->SetOwner();
+ fOutput->SetName("chistpt");
+
+ fListJets = new TList;
+
+ if (!fTrackCuts) AliFatal("Track Cuts should be set in the steering macro");
+ if (!fEventCuts) AliFatal("Event Cuts should be set in the steering macro");
+
+ // binning common to all the THn
+ const Double_t ptBins[] = {0.15,5.,10.,15.,20.,25.,30.,35.,40.,50.,75.,100.,150.,200.};
+ const Int_t nptBins=13;
+
+ //dimensions of THnSparse for jets
+ const Int_t nvarjet=6;
+ // pt_raw pt_corr cent Q vec rho pt_lead
+ Int_t binsHistRealJet[nvarjet] = { nptBins, nptBins, fnCentBins, fnQvecBins, 40., fnptLeadBins};
+ Double_t xminHistRealJet[nvarjet] = { 0., 0., 0., 0., 0., 0.};
+ Double_t xmaxHistRealJet[nvarjet] = { 200., 200., 100., fQvecUpperLim, 200., 20.};
+ THnSparseF* NSparseHistJet = new THnSparseF("NSparseHistJet","NSparseHistJet",nvarjet,binsHistRealJet,xminHistRealJet,xmaxHistRealJet);
+ NSparseHistJet->GetAxis(0)->SetTitle("#it{p}_{T,raw}");
+ NSparseHistJet->GetAxis(0)->SetName("pT_raw");
+ NSparseHistJet->SetBinEdges(0,ptBins);
+ NSparseHistJet->GetAxis(1)->SetTitle("#it{p}_{T,corr}");
+ NSparseHistJet->GetAxis(1)->SetName("pT_corr");
+ NSparseHistJet->SetBinEdges(1,ptBins);
+ NSparseHistJet->GetAxis(2)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
+ NSparseHistJet->GetAxis(2)->SetName(Form("%s_cent",fEventCuts->GetCentralityMethod().Data()));
+ NSparseHistJet->GetAxis(3)->SetTitle("Q vec");
+ NSparseHistJet->GetAxis(3)->SetName("Q_vec");
+ NSparseHistJet->GetAxis(4)->SetTitle("rho");
+ NSparseHistJet->GetAxis(4)->SetName("rho");
+ NSparseHistJet->GetAxis(5)->SetTitle("#it{p}_{T,lead}");
+ NSparseHistJet->GetAxis(5)->SetName("pT_lead");
+ fOutput->Add(NSparseHistJet);
+
+ //dimensions of THnSparse for the normalization
+ const Int_t nvarev=3;
+ // cent Q vec rho
+ Int_t binsHistRealEv[nvarev] = { fnCentBins, fnQvecBins, 40.};
+ Double_t xminHistRealEv[nvarev] = { 0., 0., 0.};
+ Double_t xmaxHistRealEv[nvarev] = { 100., fQvecUpperLim, 200.};
+ THnSparseF* NSparseHistEv = new THnSparseF("NSparseHistEv","NSparseHistEv",nvarev,binsHistRealEv,xminHistRealEv,xmaxHistRealEv);
+ NSparseHistEv->GetAxis(0)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
+ NSparseHistEv->GetAxis(0)->SetName(Form("%s_cent",fEventCuts->GetCentralityMethod().Data()));
+ NSparseHistEv->GetAxis(1)->SetTitle("Q vec");
+ NSparseHistEv->GetAxis(1)->SetName("Q_vec");
+ NSparseHistEv->GetAxis(2)->SetTitle("rho");
+ NSparseHistEv->GetAxis(2)->SetName("rho");
+ fOutput->Add(NSparseHistEv);
+
+// TH1F* fHistTest = new TH1F("fHistTest","fHistTest",nptBins-1,ptBins);
+// fOutput->Add(fHistTest);
+
+ fHistEvtSelection = new TH1I("fHistEvtSelection", "event selection", 6, -0.5, 7.5);
+ fHistEvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
+ fHistEvtSelection->GetXaxis()->SetBinLabel(2,"events IN");
+ fHistEvtSelection->GetXaxis()->SetBinLabel(3,"event selection (rejected)");
+ fHistEvtSelection->GetXaxis()->SetBinLabel(4,"centrality (rejected)");
+ fHistEvtSelection->GetXaxis()->SetBinLabel(5,"multiplicity (rejected)");
+ fHistEvtSelection->GetXaxis()->SetBinLabel(6,"ESE (rejected)");
+ fOutput->Add(fHistEvtSelection);
+
+ PostData(1, fOutput );
+ PostData(2, fEventCuts);
+ PostData(3, fTrackCuts);
+
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskJetSpectraAOD::UserExec(Option_t *)
+{
+
+ // check for jet branches
+ if(!strlen(fJetBranchName.Data())){
+ AliError("Jet branch name not set.");
+ return;
+ }
+
+ // main event loop
+ fAOD = dynamic_cast<AliAODEvent*>(fInputEvent);
+ if (!fAOD) {
+ AliWarning("ERROR: AliAODEvent not available \n");
+ return;
+ }
+
+ if (strcmp(fAOD->ClassName(), "AliAODEvent"))
+ {
+ AliFatal("Not processing AODs");
+ }
+
+ TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
+ if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
+ fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
+ }
+
+ /* -- event selection -- */
+ fHistEvtSelection->Fill(1); // number of events before event selection
+
+ //jet service task event selection.
+ Bool_t selected=kTRUE;
+ selected = AliAnalysisHelperJetTasks::Selected();
+ if(!selected){
+ // no selection by the service task, we continue
+ PostData(1,fOutput);
+ PostData(2, fEventCuts);
+ PostData(3, fTrackCuts);
+ return;}
+
+ // physics selection: this is now redundant, all should appear as accepted after service task selection
+ AliInputEventHandler* inputHandler = (AliInputEventHandler*)
+ ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
+ //std::cout<<inputHandler->IsEventSelected()<<" "<<fOfflineTrgMask<<std::endl;
+ if(!(inputHandler->IsEventSelected() & fOfflineTrgMask)){
+ if(fDebug) Printf(" Trigger Selection: event REJECTED ... ");
+ fHistEvtSelection->Fill(2);
+ PostData(1,fOutput);
+ PostData(2, fEventCuts);
+ PostData(3, fTrackCuts);
+ return;
+ }
+
+ AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
+ Int_t nTracksPrim = primVtx->GetNContributors();
+
+ if (fDebug) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
+ if(nTracksPrim < fMinNcontributors){
+ if (fDebug) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
+ fHistEvtSelection->Fill(3);
+ PostData(1,fOutput);
+ PostData(2, fEventCuts);
+ PostData(3, fTrackCuts);
+ return;
+ }
+
+ TString primVtxName(primVtx->GetName());
+
+ if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
+ if (fDebug) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
+ fHistEvtSelection->Fill(4);
+ PostData(1,fOutput);
+ PostData(2, fEventCuts);
+ PostData(3, fTrackCuts);
+ return;
+ }
+
+ if(fRejectPileup && AliAnalysisHelperJetTasks::IsPileUp()){
+ if (fDebug) Printf("%s:%d SPD pileup: event REJECTED...",(char*)__FILE__,__LINE__);
+ fHistEvtSelection->Fill(5);
+ PostData(1,fOutput);
+ PostData(2, fEventCuts);
+ PostData(3, fTrackCuts);
+ return;
+ }
+
+ //ESE event cuts
+ if(!fEventCuts->IsSelected(fAOD,fTrackCuts)){
+ if (fDebug) Printf("%s:%d ESE Event selection: event REJECTED...",(char*)__FILE__,__LINE__);
+ fHistEvtSelection->Fill(6);
+ PostData(1,fOutput);
+ PostData(2, fEventCuts);
+ PostData(3, fTrackCuts);
+ return;
+ }
+
+ if (fDebug) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
+ fHistEvtSelection->Fill(0.);
+ // accepted events
+ // -- end event selection --
+
+
+ Double_t Qvec=0.;//in case of MC we save space in the memory
+ if(!fIsMC){
+ if(fIsQvecCalibMode){
+ if(fVZEROside==0)Qvec=fEventCuts->GetqV0A();
+ else if (fVZEROside==1)Qvec=fEventCuts->GetqV0C();
+ }
+ else Qvec=fEventCuts->GetQvecPercentile(fVZEROside);
+ }
+
+ if(fIsQvecCut && (Qvec<fQvecMin || Qvec>fQvecMax) ) return;
+
+ Double_t Cent=fEventCuts->GetCent();
+
+ // get background
+ AliAODJetEventBackground* externalBackground = 0;
+ if(fAODJets && !externalBackground && fBackgroundBranch.Length()){
+ externalBackground = (AliAODJetEventBackground*)(fAODJets->FindListObject(fBackgroundBranch.Data()));
+ if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch.Data());;
+ }
+
+ Float_t rho = 0;
+ if(externalBackground)rho = externalBackground->GetBackground(0); //default schema
+
+ // fetch jets
+ TClonesArray *aodJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fJetBranchName.Data()));
+ if(!aodJets){
+ AliError(Form("no jet branch \"%s\" found, in the AODs are:", fJetBranchName.Data()));
+ if(fAOD){
+ Printf("Input AOD >>>>");
+ fAOD->Print();
+ }
+ return;
+ }
+
+ fListJets->Clear();
+ for (Int_t iJet = 0; iJet < aodJets->GetEntriesFast(); iJet++) {
+ AliAODJet *jet = dynamic_cast<AliAODJet*>((*aodJets)[iJet]);
+ if (jet) fListJets->Add(jet);
+ }
+
+
+
+ for(Int_t i=0; i<fListJets->GetEntries(); ++i){
+ AliAODJet* jet = (AliAODJet*)(fListJets->At(i));
+
+ if((jet->Eta()<fJetEtaMin)||(jet->Eta()>fJetEtaMax)) continue;
+
+ Double_t ptJet = jet->Pt();
+
+ Double_t areaJet = jet->EffectiveAreaCharged();
+
+ Double_t ptcorr = ptJet-rho*areaJet;
+
+ Double_t varJet[6];
+ varJet[0]=jet->Pt();
+ varJet[1]=(Double_t)ptcorr;
+ varJet[2]=(Double_t)Cent;
+ varJet[3]=(Double_t)Qvec;
+ varJet[4]=(Double_t)rho;
+
+ AliVParticle *leadTrack = LeadingTrackFromJetRefs(jet);
+ if(fLeadPtMin>0 && leadTrack->Pt()<fLeadPtMin)continue;
+
+ varJet[5]=(Double_t)leadTrack->Pt();
+
+ ((THnSparseF*)fOutput->FindObject("NSparseHistJet"))->Fill(varJet);//jet loop
+ }
+
+
+// //track loop
+// for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) { //FIXME loop on aod track... should be on jet tracks???
+// AliAODTrack* track = fAOD->GetTrack(iTracks);
+// // if(!(track->TestFilterBit(1024)))continue;
+// if (!fTrackCuts->IsSelected(track,kTRUE)) continue;
+//
+// TH1F* h=(TH1F*)fOutput->FindObject("fHistTest");h->Fill(track->Pt());
+//
+// } // end loop on tracks
+
+ Double_t varEv[3];
+ varEv[0]=Cent;
+ varEv[1]=Qvec;
+ varEv[2]=rho;
+ ((THnSparseF*)fOutput->FindObject("NSparseHistEv"))->Fill(varEv);//event loop
+
+ PostData(1,fOutput);
+ PostData(2, fEventCuts);
+ PostData(3, fTrackCuts);
+ //Printf("............. end of Exec");
+
+}
+
+//_________________________________________________________________
+AliVParticle *AliAnalysisTaskJetSpectraAOD::LeadingTrackFromJetRefs(AliAODJet* jet){
+ if(!jet)return 0;
+ TRefArray *refs = jet->GetRefTracks();
+ if(!refs) return 0;
+ AliVParticle *leading = 0;
+ Float_t fMaxPt = 0;
+ for(int i = 0;i<refs->GetEntriesFast();i++){
+ AliVParticle *tmp = dynamic_cast<AliVParticle*>(refs->At(i));
+ if(!tmp)continue;
+ if(tmp->Pt()>fMaxPt){
+ leading = tmp;
+ fMaxPt = tmp->Pt();
+ }
+ }
+ return leading;
+}
+
+//_________________________________________________________________
+void AliAnalysisTaskJetSpectraAOD::Terminate(Option_t *)
+{
+ // Terminate
+ printf("AliAnalysisTaskJetSpectraAOD: Terminate() \n");
+}
+
+//jet
+void AliAnalysisTaskJetSpectraAOD::SetBranchNames(const TString &branch)
+{
+ fJetBranchName = branch;
+}
+
+void AliAnalysisTaskJetSpectraAOD::SetRecBackgroundBranch(const TString &bckbranch)
+{
+ fBackgroundBranch = bckbranch;
+}
--- /dev/null
+#ifndef ALIANALYSISTASKJETSPECTRAAOD_H
+#define ALIANALYSISTASKJETSPECTRAAOD_H
+
+class TH1F;
+class TH2F;
+class AliAODEvent;
+class AliSpectraAODTrackCuts;
+class AliSpectraAODEventCuts;
+class AliHelperPID;
+class AliAODJet;
+
+#include "AliAnalysisTaskSE.h"
+
+class AliAnalysisTaskJetSpectraAOD : public AliAnalysisTaskSE
+{
+ public:
+
+ // constructors
+ AliAnalysisTaskJetSpectraAOD() : AliAnalysisTaskSE(),
+ fAOD(0),
+ fIsMC(0),
+ fEventCuts(0),
+ fTrackCuts(0),
+ fVZEROside(0),
+ fOutput(0),
+ fAODJets(0),
+ fJetBranchName(""),
+ fListJets(0),
+ fBackgroundBranch(""),
+ fOfflineTrgMask(AliVEvent::kMB),
+ fFilterMask(0),
+ fJetPtMin(0),
+ fJetEtaMin(0x0),
+ fJetEtaMax(0x0),
+ fLeadPtMin(0x0),
+ fnCentBins(20),
+ fnQvecBins(20),
+ fnptLeadBins(4),
+ fIsQvecCalibMode(0),
+ fQvecUpperLim(100),
+ fIsQvecCut(0),
+ fQvecMin(0),
+ fQvecMax(100),
+ fHistEvtSelection(0x0),
+ fDebug(0),
+ fMinNcontributors(0),
+ fRejectPileup(0)
+ {}
+ AliAnalysisTaskJetSpectraAOD(const char *name);
+ virtual ~AliAnalysisTaskJetSpectraAOD();
+
+ void SetIsMC(Bool_t isMC = kFALSE) {fIsMC = isMC; }
+ Bool_t GetIsMC() const { return fIsMC;}
+
+ AliSpectraAODTrackCuts * GetTrackCuts() { return fTrackCuts; }
+ AliSpectraAODEventCuts * GetEventCuts() { return fEventCuts; }
+ TList * GetOutputList() { return fOutput; }
+
+ void SetTrackCuts(AliSpectraAODTrackCuts * tc) { fTrackCuts = tc; }
+ void SetEventCuts(AliSpectraAODEventCuts * vc) { fEventCuts = vc; }
+ void SetnCentBins(Int_t val) { fnCentBins = val; }
+ void SetnQvecBins(Int_t val) { fnQvecBins = val; }
+ void SetnPtLeadBins(Int_t val) { fnptLeadBins = val; }
+ void SetQvecCalibMode(Bool_t mode) { fIsQvecCalibMode = mode; }
+ void SetQvecUpperLimit(Double_t val) { fQvecUpperLim = val; }
+ void SetDebugMode (Bool_t val) { fDebug = val; }
+
+ //jet getter
+ void GetBranchNames(TString &branch) const { branch = fJetBranchName; }
+ void GetBackgroundBranchNames(TString &branch) const { branch = fBackgroundBranch; }
+ Float_t GetJetPtMin() const { return fJetPtMin; }
+ Float_t GetJetEtaMin() const { return fJetEtaMin; }
+ Float_t GetJetEtaMax() const { return fJetEtaMax; }
+ //jet setter
+ void SetBranchNames(const TString &branch);
+ void SetRecBackgroundBranch(const TString &bckbranch);
+ void SetOfflineTrgMask(AliVEvent::EOfflineTriggerTypes mask) { fOfflineTrgMask = mask; }
+ void SetFilterMask(UInt_t i){fFilterMask = i;}
+ void SetJetPtMin(Float_t pt) { fJetPtMin = pt; }
+ void SetEtaJet(Float_t etamin,Float_t etamax) { fJetEtaMin = etamin; fJetEtaMax = etamax; }
+
+ void SetVZEROside(Int_t side = 0) {fVZEROside = side; }
+ Int_t GetVZEROside() const { return fVZEROside;}
+
+ void SetQvecCut(Bool_t qcut) { fIsQvecCut = qcut; }
+ void SetQvecCutLimits(Float_t qmin,Float_t qmax) { fQvecMin = qmin; fQvecMax = qmax; }
+
+ AliVParticle *LeadingTrackFromJetRefs(AliAODJet* jet);
+ void SetleadingTrackPtMin(Double_t val) { fLeadPtMin = val;}
+
+
+ void SetMinNcontributors(Int_t val) {fMinNcontributors = val;}
+ void SetPileupRejection(Bool_t val) {fRejectPileup = val;}
+
+ void UserCreateOutputObjects();
+ void UserExec(Option_t *option);
+ void Terminate(Option_t *);
+
+ private:
+
+ AliAODEvent *fAOD; //! AOD object
+ Bool_t fIsMC;// true if processing MC
+ AliSpectraAODEventCuts * fEventCuts; // Event Cuts
+ AliSpectraAODTrackCuts * fTrackCuts; // Track Cuts
+
+ Int_t fVZEROside; // 0: VZERO-A 1: VZERO-C
+
+ TList * fOutput; // output list
+
+ //jet
+ AliAODEvent * fAODJets; //! AOD jet object
+ TString fJetBranchName; // name of jet branches to compare
+ TList * fListJets; //! jet lists
+ TString fBackgroundBranch;
+
+ AliVEvent::EOfflineTriggerTypes fOfflineTrgMask; // mask of offline trigs
+
+ UInt_t fFilterMask; // filter bit for slecected tracks
+ Float_t fJetPtMin; // minimum jet pT
+ Float_t fJetEtaMin; // lower bound on eta for found jets
+ Float_t fJetEtaMax; // upper bound on eta for found jets
+ Float_t fLeadPtMin; // leading track pt min.
+
+ Int_t fnCentBins; // number of bins for the centrality axis
+ Int_t fnQvecBins; // number of bins for the q vector axis
+ Int_t fnptLeadBins; // number of bins for the pt of leading particle axis
+ Bool_t fIsQvecCalibMode; // calib mode for Qvector percentile
+ Double_t fQvecUpperLim; // Upper limit for Qvector
+
+ Bool_t fIsQvecCut; // Q-vec cut switch
+ Double_t fQvecMin; // lower bound for Qvec
+ Double_t fQvecMax; // upper bound for Qvec
+
+ TH1I *fHistEvtSelection; //! event selection statistic
+ Bool_t fDebug;
+ Int_t fMinNcontributors;
+ Bool_t fRejectPileup;
+
+ AliAnalysisTaskJetSpectraAOD(const AliAnalysisTaskJetSpectraAOD&);
+ AliAnalysisTaskJetSpectraAOD& operator=(const AliAnalysisTaskJetSpectraAOD&);
+
+ ClassDef(AliAnalysisTaskJetSpectraAOD, 2);
+};
+
+#endif
fnQvecBins(100),
fnNchBins(200),
fIsQvecCalibMode(0),
- fQvecUpperLim(100)
+ fQvecUpperLim(100),
+ fIsAOD160(1),
+ fnDCABins(60),
+ fDCAmin(-3),
+ fDCAmax(3)
{
// Default constructor
DefineInput(0, TChain::Class());
const Int_t nptBins=34;
//dimensions of THnSparse for tracks
- const Int_t nvartrk=7;
- // pt cent Q vec IDrec IDgen isph y
- Int_t binsHistRealTrk[nvartrk] = { nptBins, fnCentBins, fnQvecBins, 4, 3, 2, 2};
- Double_t xminHistRealTrk[nvartrk] = { 0., 0., 0., -.5, -0.5, -0.5, -0.5};
- Double_t xmaxHistRealTrk[nvartrk] = { 10., 100., fQvecUpperLim, 3.5, 2.5, 1.5, 0.5};
+ const Int_t nvartrk=9;
+ // pt cent Q vec IDrec IDgen isph y DCA issec
+ Int_t binsHistRealTrk[nvartrk] = { nptBins, fnCentBins, fnQvecBins, 4, 3, 2, 2, fnDCABins, 2};
+ Double_t xminHistRealTrk[nvartrk] = { 0., 0., 0., -.5, -0.5, -0.5, -0.5, fDCAmin, 0.5};
+ Double_t xmaxHistRealTrk[nvartrk] = { 10., 100., fQvecUpperLim, 3.5, 2.5, 1.5, 0.5, fDCAmax, 2.5};
THnSparseF* NSparseHistTrk = new THnSparseF("NSparseHistTrk","NSparseHistTrk",nvartrk,binsHistRealTrk,xminHistRealTrk,xmaxHistRealTrk);
NSparseHistTrk->GetAxis(0)->SetTitle("#it{p}_{T,rec}");
NSparseHistTrk->GetAxis(0)->SetName("pT_rec");
NSparseHistTrk->GetAxis(5)->SetName("isph");
NSparseHistTrk->GetAxis(6)->SetTitle("y");
NSparseHistTrk->GetAxis(6)->SetName("y");
+ NSparseHistTrk->GetAxis(7)->SetTitle("dca");
+ NSparseHistTrk->GetAxis(7)->SetName("dca");
+ NSparseHistTrk->GetAxis(8)->SetTitle("issec");
+ NSparseHistTrk->GetAxis(8)->SetName("issec");
fOutput->Add(NSparseHistTrk);
//dimensions of THnSparse for stack
Double_t y= track->Y(fHelperPID->GetMass((AliHelperParticleSpecies_t)IDrec));
Int_t IDgen=kSpUndefined;//set if MC
Int_t isph=-999;
- //Int_t iswd=-999;
+// Int_t iswd=-999;
+ Int_t issec=-999;
if (arrayMC) {
AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(track->GetLabel()));
IDgen=fHelperPID->GetParticleSpecies(partMC);
isph=partMC->IsPhysicalPrimary();
//iswd=partMC->IsSecondaryFromWeakDecay();//FIXME not working on old productions - removed Apr 8th 2014
+
+ if(fIsAOD160){// enabled for new ADO160 only
+ if(partMC->IsSecondaryFromWeakDecay()) issec=1.;
+ if(partMC->IsSecondaryFromMaterial()) issec=2.;
+
+ }
}
+ /*** DCA ***/
+ Double_t dcaxy = -999.;
+
+ Double_t p[2];
+ if(GetDCA(track,p)){ dcaxy=p[0]; }
+
//pt cent Q vec IDrec IDgen isph y
- Double_t varTrk[7];
+ Double_t varTrk[9];
varTrk[0]=track->Pt();
varTrk[1]=Cent;
varTrk[2]=Qvec;
varTrk[4]=(Double_t)IDgen;
varTrk[5]=(Double_t)isph;
varTrk[6]=y;
+ varTrk[7]=dcaxy;
+ varTrk[8]=issec;
((THnSparseF*)fOutput->FindObject("NSparseHistTrk"))->Fill(varTrk);//track loop
//for nsigma PID fill double counting of ID
PostData(4, fHelperPID);
}
+//_________________________________________________________________
+Bool_t AliAnalysisTaskSpectraAllChAOD::GetDCA(const AliAODTrack* trk, Double_t * p){
+
+ //AliAODTrack::DCA(): for newest AOD fTrack->DCA() always gives -999. This should fix.
+ //FIXME should update EventCuts?
+ //FIXME add track->GetXYZ(p) method
+
+ double xyz[3],cov[3];
+
+ if (!trk->GetXYZ(xyz)) { // dca is not stored
+ AliExternalTrackParam etp;
+ etp.CopyFromVTrack(trk);
+ AliVEvent* ev = (AliVEvent*)trk->GetEvent();
+ if (!ev) {/*printf("Event is not connected to the track\n");*/ return kFALSE;}
+ if (!etp.PropagateToDCA(ev->GetPrimaryVertex(), ev->GetMagneticField(),999,xyz,cov)) return kFALSE; // failed, track is too far from vertex
+ }
+ p[0] = xyz[0];
+ p[1] = xyz[1];
+ return kTRUE;
+
+}
+
//_________________________________________________________________
void AliAnalysisTaskSpectraAllChAOD::Terminate(Option_t *)
{
fnQvecBins(40),
fnNchBins(200),
fIsQvecCalibMode(0),
- fQvecUpperLim(100)
+ fQvecUpperLim(100),
+ fIsAOD160(1),
+ fnDCABins(60),
+ fDCAmin(-3),
+ fDCAmax(3)
{}
AliAnalysisTaskSpectraAllChAOD(const char *name);
virtual ~AliAnalysisTaskSpectraAllChAOD() {
void SetQvecCalibMode(Bool_t mode) { fIsQvecCalibMode = mode; }
void SetQvecUpperLimit(Double_t val) { fQvecUpperLim = val; }
+ void SetIsAOD160(Bool_t aod) { fIsAOD160 = aod; }
+ void SetnDCABin(Int_t val) { fnDCABins = val; }
+ void SetDCAmin(Double_t val) { fDCAmin = val; }
+ void SetDCAmax(Double_t val) { fDCAmax = val; }
+ Bool_t GetDCA(const AliAODTrack* trk, Double_t * p);
+
private:
AliAODEvent * fAOD; //! AOD object
Int_t fnNchBins; // number of bins for the Nch axis
Bool_t fIsQvecCalibMode; //calib mode for Qvector percentile
Double_t fQvecUpperLim; //Upper limit for Qvector
+ Bool_t fIsAOD160; // enable DCA for AOD160
+ Int_t fnDCABins; // number of bins for DCA axis
+ Double_t fDCAmin; // min DCA value
+ Double_t fDCAmax; // max DCA value
AliAnalysisTaskSpectraAllChAOD(const AliAnalysisTaskSpectraAllChAOD&);
AliAnalysisTaskSpectraAllChAOD& operator=(const AliAnalysisTaskSpectraAllChAOD&);
- ClassDef(AliAnalysisTaskSpectraAllChAOD, 7);
+ ClassDef(AliAnalysisTaskSpectraAllChAOD, 8);
};
#endif
+#if !defined (__CINT__) || (defined(__MAKECINT__))
+#include <iostream>
+#include "TH1.h"
+#include "TVirtualFitter.h"
+#include "TMath.h"
+#include "TFile.h"
+#include "TF1.h"
+#include "TCanvas.h"
+#include "TROOT.h"
+#include "TRandom.h"
+
+#endif
+using namespace std;
/* definition of the fields in the histogram returned */
enum EValue_t {
kYield = 1,
kMeanSysLo
};
+
+void YieldMean_IntegralMean(TH1 *hdata, TH1 *hlo, TH1 *hhi, Double_t &integral, Double_t &mean,Bool_t printinfo=kFALSE);
+TH1* YieldMean_LowExtrapolationHisto(TH1 *h, TF1 *f, Double_t min, Double_t binwidth = 0.01);
+TH1 * YieldMean_HighExtrapolationHisto(TH1 *h, TF1 *f, Double_t max, Double_t binwidth = 0.1);
+TH1 * YieldMean_ReturnRandom(TH1 *hin);
+TH1 * YieldMean_ReturnCoherentRandom(TH1 *hin);
+TH1 *YieldMean_ReturnExtremeHisto(TH1 *hin, Float_t sign = 1.);
+TH1 *YieldMean_ReturnExtremeHardHisto(TH1 *hin);
+TH1 *YieldMean_ReturnExtremeSoftHisto(TH1 *hin);
+TH1 * YieldMean_ReturnExtremeLowHisto(TH1 *hin);
+
+TH1 * YieldMean_ReturnExtremeHighHisto(TH1 *hin);
+
+
+
+
TH1 *
YieldMean(TH1 *hstat, TH1 *hsys, TF1 *f = NULL, Double_t min = 0., Double_t max = 10., Double_t loprecision = 0.01, Double_t hiprecision = 0.1, Option_t *opt = "0q",TString logfilename="log.root")
{
/*
* measure the central value
*/
-
- do Int_t fitres = htot->Fit(f, opt);
+ Int_t fitres;
+ Int_t trials = 0;
+ trials = 0;
+ do {
+ fitres = htot->Fit(f, opt);
+ Printf("Trial: %d", trials++);
+ if(trials > 10) {
+ Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
+ break;
+ }
+ }
while (fitres != 0);
TFile* filewithfits=TFile::Open(logfilename.Data(),"UPDATE");
htot->Write();
*/
/* fit with stat error */
- do Int_t fitres = hstat->Fit(f, opt);
+ trials = 0;
+ do {
+ fitres = hstat->Fit(f, opt);
+ Printf("Trial: %d", trials++);
+ if(trials > 10) {
+ Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
+ break;
+ }
+ }
while (fitres != 0);
hlo = YieldMean_LowExtrapolationHisto(hstat, f, min, loprecision);
hhi = YieldMean_HighExtrapolationHisto(hstat, f, max, hiprecision);
delete hrnd;
delete hrndlo;
delete hrndhi;
- }
+ }
/* random generation with integration (fine) */
TH1 *hIntegral = new TH1F("hIntegral", "", 100,
hIntegral_tmp->GetMean() - 10. * hIntegral_tmp->GetRMS(),
*/
TH1 *hhigh = YieldMean_ReturnExtremeHighHisto(hsys);
- do Int_t fitres = hhigh->Fit(f, opt);
+ trials = 0;
+ do {
+ fitres = hhigh->Fit(f, opt);
+ Printf("Trial: %d", trials++);
+ if(trials > 10) {
+ Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
+ break;
+ }
+ }
while (fitres != 0);
hlo = YieldMean_LowExtrapolationHisto(hhigh, f, min, loprecision);
hhi = YieldMean_HighExtrapolationHisto(hhigh, f, max, hiprecision);
*/
TH1 *hhard = YieldMean_ReturnExtremeHardHisto(hsys);
- do Int_t fitres = hhard->Fit(f, opt);
+ trials = 0;
+ do {
+ fitres = hhard->Fit(f, opt);
+ Printf("Trial: %d", trials++);
+ if(trials > 10) {
+ Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
+ break;
+ }
+ }
while (fitres != 0);
hlo = YieldMean_LowExtrapolationHisto(hhard, f, min, loprecision);
hhi = YieldMean_HighExtrapolationHisto(hhard, f, max, hiprecision);
*/
TH1 *hlow = YieldMean_ReturnExtremeLowHisto(hsys);
- do Int_t fitres = hlow->Fit(f, opt);
+ trials = 0;
+ do {
+ fitres = hlow->Fit(f, opt);
+ Printf("Trial: %d", trials++);
+ if(trials > 10) {
+ Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
+ break;
+ }
+ }
while (fitres != 0);
hlo = YieldMean_LowExtrapolationHisto(hlow, f, min, loprecision);
hhi = YieldMean_HighExtrapolationHisto(hlow, f, max, hiprecision);
*/
TH1 *hsoft = YieldMean_ReturnExtremeSoftHisto(hsys);
- do Int_t fitres = hsoft->Fit(f, opt);
+ trials = 0;
+ do {
+ fitres = hsoft->Fit(f, opt);
+ Printf("Trial: %d", trials++);
+ if(trials > 10) {
+ Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
+ break;
+ }
+ }
while (fitres != 0);
hlo = YieldMean_LowExtrapolationHisto(hsoft, f, min, loprecision);
hhi = YieldMean_HighExtrapolationHisto(hsoft, f, max, hiprecision);
}
TH1 *
-YieldMean_LowExtrapolationHisto(TH1 *h, TF1 *f, Double_t min, Double_t binwidth = 0.01)
+YieldMean_LowExtrapolationHisto(TH1 *h, TF1 *f, Double_t min, Double_t binwidth)
{
/* find lowest edge in histo */
Int_t binlo;
}
TH1 *
-YieldMean_HighExtrapolationHisto(TH1 *h, TF1 *f, Double_t max, Double_t binwidth = 0.1)
+YieldMean_HighExtrapolationHisto(TH1 *h, TF1 *f, Double_t max, Double_t binwidth)
{
/* find highest edge in histo */
Int_t binhi;
break;
}
}
-
+ if(max<hi) {
+ Printf("Warning! You should probably set a higher max value (Max = %f, hi = %f)", max, hi);
+ }
Int_t nbins = (max - hi) / binwidth;
TH1 *hhi = new TH1F("hhi", "", nbins, hi, max);
}
TH1 *
-YieldMean_ReturnExtremeHisto(TH1 *hin, Float_t sign = 1.)
+YieldMean_ReturnExtremeHisto(TH1 *hin, Float_t sign)
{
Double_t ptlow, pthigh;
for (Int_t ibin = 0; ibin < hin->GetNbinsX(); ibin++) {
return hmax;
}
-YieldMean_IntegralMean(TH1 *hdata, TH1 *hlo, TH1 *hhi, Double_t &integral, Double_t &mean,Bool_t printinfo=kFALSE)
+void YieldMean_IntegralMean(TH1 *hdata, TH1 *hlo, TH1 *hhi, Double_t &integral, Double_t &mean,Bool_t printinfo)
{
/*
* compute integrals
*/
-
+
Double_t cont, err, width, cent;
Double_t I = 0., IX = 0., Ierr = 0., IXerr = 0., Ilerr = 0., IXlerr = 0.;
Double_t M = 0., Merr = 0., Mlerr = 0., C;
I += cont;
IX += cont * cent;
}
+
dataonly=I;
/* integrate low */
for (Int_t ibin = 0; ibin < hlo->GetNbinsX(); ibin++) {
fkSaveV0Tree ( kFALSE ),
fkSaveCascadeTree ( kTRUE ),
fkRunVertexers ( kTRUE ),
+ fkSkipEventSelection( kFALSE ),
//---> Variables for fTreeEvent
fAmplitude_V0A (0),
fAmplitude_V0C (0),
fkSaveV0Tree ( kFALSE ),
fkSaveCascadeTree ( kTRUE ),
fkRunVertexers ( kTRUE ),
+ fkSkipEventSelection( kFALSE ),
//---> Variables for fTreeEvent
fAmplitude_V0A (0),
fAmplitude_V0C (0),
//Info from AliCentrality (not necessarily 'centrality' per se)
fTreeEvent->Branch("fCentrality_V0A",&fCentrality_V0A,"fCentrality_V0A/F");
fTreeEvent->Branch("fCentrality_V0C",&fCentrality_V0C,"fCentrality_V0C/F");
- fTreeEvent->Branch("fCentrality_V0M",&fCentrality_V0A,"fCentrality_V0M/F");
+ fTreeEvent->Branch("fCentrality_V0M",&fCentrality_V0M,"fCentrality_V0M/F");
fTreeEvent->Branch("fCentrality_V0AEq",&fCentrality_V0AEq,"fCentrality_V0AEq/F");
fTreeEvent->Branch("fCentrality_V0CEq",&fCentrality_V0CEq,"fCentrality_V0CEq/F");
- fTreeEvent->Branch("fCentrality_V0MEq",&fCentrality_V0AEq,"fCentrality_V0MEq/F");
+ fTreeEvent->Branch("fCentrality_V0MEq",&fCentrality_V0MEq,"fCentrality_V0MEq/F");
//Official GetReferenceMultiplicity
fTreeEvent->Branch("fRefMultEta5",&fRefMultEta5,"fRefMultEta5/I");
Bool_t isSelected = 0;
isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
- //Standard Min-Bias Selection
+ //Standard Min-Bias Selection - always do this!
if ( ! isSelected ) {
PostData(1, fListHist);
PostData(2, fTreeEvent);
lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
//Only accept if Tracking or SPD vertex is fine
- if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() ){
+ if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() && !fkSkipEventSelection ){
AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
PostData(1, fListHist);
PostData(2, fTreeEvent);
fHistEventCounter -> Fill(2.5);
//Always do Primary Vertex Selection
- if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0) {
+ if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0 && !fkSkipEventSelection ) {
AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
PostData(1, fListHist);
PostData(2, fTreeEvent);
// Check if this isn't pileup
//------------------------------------------------
- if(lESDevent->IsPileupFromSPDInMultBins() ){
+ if(lESDevent->IsPileupFromSPDInMultBins() && !fkSkipEventSelection ){
// minContributors=3, minZdist=0.8, nSigmaZdist=3., nSigmaDiamXY=2., nSigmaDiamZ=5.
//-> see http://alisoft.cern.ch/viewvc/trunk/STEER/AliESDEvent.h?root=AliRoot&r1=41914&r2=42199&pathrev=42199
AliWarning("Pb / Event tagged as pile-up by SPD... return !");
fAmplitude_V0A = multV0ACorr;
fAmplitude_V0C = multV0CCorr;
- // Equalized signals // From AliCentralitySelectionTask
- for(Int_t iCh = 4; iCh < 7; ++iCh) {
+ // Equalized signals // From AliCentralitySelectionTask // Updated
+ for(Int_t iCh = 32; iCh < 64; ++iCh) {
Double_t mult = lESDevent->GetVZEROEqMultiplicity(iCh);
multV0AEq += mult;
}
- for(Int_t iCh = 0; iCh < 3; ++iCh) {
+ for(Int_t iCh = 0; iCh < 32; ++iCh) {
Double_t mult = lESDevent->GetVZEROEqMultiplicity(iCh);
multV0CEq += mult;
}
//Event-level fill
fTreeEvent->Fill() ;
+ //STOP HERE if skipping event selections (no point in doing the rest...)
+ if( fkSkipEventSelection ){
+ PostData(1, fListHist);
+ PostData(2, fTreeEvent);
+ PostData(3, fTreeV0);
+ PostData(4, fTreeCascade);
+ return;
+ }
+
//------------------------------------------------
//------------------------------------------------
//---------------------------------------------------------------------------------------
//Task Configuration: Meant to enable quick re-execution of vertexer if needed
void SetRunVertexers ( Bool_t lRunVertexers = kTRUE) { fkRunVertexers = lRunVertexers; }
+//---------------------------------------------------------------------------------------
+ //Task Configuration: Skip Event Selections after trigger (VZERO test)
+ void SetSkipEventSelection ( Bool_t lSkipEventSelection = kTRUE) { fkSkipEventSelection = lSkipEventSelection; }
//---------------------------------------------------------------------------------------
//Setters for the V0 Vertexer Parameters
void SetV0VertexerMaxChisquare ( Double_t lParameter ){ fV0VertexerSels[0] = lParameter; }
//Objects Controlling Task Behaviour: has to be streamed!
Bool_t fkRunVertexers; // if true, re-run vertexer with loose cuts *** only for CASCADES! ***
+ Bool_t fkSkipEventSelection; // if true, will only perform TRIGGER selection (currently kMB, to change)
Double_t fV0VertexerSels[7]; // Array to store the 7 values for the different selections V0 related
Double_t fCascadeVertexerSels[8]; // Array to store the 8 values for the different selections Casc. related
//Info from AliCentrality (not necessarily 'centrality' per se)
fTreeEvent->Branch("fCentrality_V0A",&fCentrality_V0A,"fCentrality_V0A/F");
fTreeEvent->Branch("fCentrality_V0C",&fCentrality_V0C,"fCentrality_V0C/F");
- fTreeEvent->Branch("fCentrality_V0M",&fCentrality_V0A,"fCentrality_V0M/F");
+ fTreeEvent->Branch("fCentrality_V0M",&fCentrality_V0M,"fCentrality_V0M/F");
fTreeEvent->Branch("fCentrality_V0AEq",&fCentrality_V0AEq,"fCentrality_V0AEq/F");
fTreeEvent->Branch("fCentrality_V0CEq",&fCentrality_V0CEq,"fCentrality_V0CEq/F");
- fTreeEvent->Branch("fCentrality_V0MEq",&fCentrality_V0AEq,"fCentrality_V0MEq/F");
+ fTreeEvent->Branch("fCentrality_V0MEq",&fCentrality_V0MEq,"fCentrality_V0MEq/F");
//Official GetReferenceMultiplicity
fTreeEvent->Branch("fRefMultEta5",&fRefMultEta5,"fRefMultEta5/I");
--- /dev/null
+AliEPSelectionTask *AddTaskEventplane(Bool_t useEtaGap=kTRUE,Float_t etaGap=0.4,Bool_t posTPC=kFALSE,TString containername = "EPStat")
+{
+ // Macro to connect an event plane selection task to an existing analysis manager.
+
+ if(useEtaGap && posTPCAOD){
+ ::Error("AddTaskEventplane", "eta-splitting of events and one side of TPC not possible at same time!");
+ return NULL;
+ }
+
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ ::Error("AddTaskEventplane", "No analysis manager to connect to.");
+ return NULL;
+ }
+ // Check the analysis type using the event handlers connected to the analysis manager.
+ //==============================================================================
+ if (!mgr->GetInputEventHandler()) {
+ ::Error("AddTaskEventplane", "This task requires an input event handler");
+ return NULL;
+ }
+ TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+
+ AliEPSelectionTask *eventplaneTask = new AliEPSelectionTask("EventplaneSelection");
+ eventplaneTask->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kSemiCentral | AliVEvent::kCentral);
+
+ if (inputDataType == "AOD"){
+ eventplaneTask->SetInput("AOD");
+ }
+ eventplaneTask->SetTrackType("TPC");
+ eventplaneTask->SetUsePtWeight();
+ eventplaneTask->SetUsePhiWeight();
+ eventplaneTask->SetSaveTrackContribution();
+
+ if(useEtaGap){
+ eventplaneTask->SetSubeventsSplitMethod(AliEPSelectionTask::kEta);
+ eventplaneTask->SetEtaGap(etaGap);
+ }
+
+ // Cuts on ESD tracks wich corresponds to the one applied for AOD
+ Float_t etalow = 0;
+ Float_t etaup = 0.8;
+ Float_t ptlow = 0.15;
+ Float_t ptup = 20;
+ Int_t ntpc = 50;
+
+ AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Standard");
+
+ esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
+ esdTrackCutsL->SetPtRange(ptlow,ptup);
+ esdTrackCutsL->SetMinNClustersTPC(ntpc);
+ esdTrackCutsL->SetEtaRange(etalow,etaup);
+
+ if(posTPC){
+ if(inputDataType == "AOD"){
+ eventplaneTask->SetPersonalAODtrackCuts(128,0.,0.8,0.15,20.);
+ eventplaneTask->SetSubeventsSplitMethod(AliEPSelectionTask::kRandom);
+ }
+ else{
+
+ eventplaneTask->SetPersonalESDtrackCuts(esdTrackCutsL);
+ eventplaneTask->SetSubeventsSplitMethod(AliEPSelectionTask::kRandom);
+ }
+ }
+ mgr->AddTask(eventplaneTask);
+
+ AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(containername,
+ TList::Class(), AliAnalysisManager::kOutputContainer,
+ "EventStat_temp.root");
+
+ mgr->ConnectInput(eventplaneTask, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(eventplaneTask,1,coutput1);
+
+ return eventplaneTask;
+}
--- /dev/null
+AliAnalysisTask *AddTaskNucleiv2(TString name="name",TString eventtype="REAL", Bool_t saveTree = kFALSE){
+
+ //get the current analysis manager
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ Error("AddTask_Helium3Pi", "No analysis manager found.");
+ return 0;
+ }
+
+ //========= Add task to the ANALYSIS manager =====
+
+ AliAnalysisTaskNucleiv2 *task = new AliAnalysisTaskNucleiv2(name,eventtype,saveTree);
+ task->SetDataType(eventtype);
+ mgr->AddTask(task);
+
+ //================================================
+ // data containers
+ //================================================
+ // find input container
+
+ AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
+
+ TString outputFileName = AliAnalysisManager::GetCommonFileName();
+ //AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("Helium3Pi_tree", TTree::Class(), AliAnalysisManager::kOutputContainer, "AnalysisResults.root");
+ //AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("Helium3Pi_tree", TTree::Class(), AliAnalysisManager::kOutputContainer, "AnalysisResults.root");
+
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("clisthist", TList::Class(), AliAnalysisManager::kOutputContainer, outputFileName);
+ AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("treeNuclei", TTree::Class(),AliAnalysisManager::kOutputContainer, outputFileName);
+ AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("treeMC" , TTree::Class(),AliAnalysisManager::kOutputContainer , outputFileName);
+
+ // connect containers
+ mgr->ConnectInput (task, 0, cinput );
+ mgr->ConnectOutput (task, 1, coutput1);
+ mgr->ConnectOutput (task, 2, coutput2);
+ mgr->ConnectOutput (task, 3, coutput3);
+
+ return task;
+}
--- /dev/null
+/**************************************************************************
+ * Contributors are not mentioned at all. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright noticxse appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+//-----------------------------------------------------------------
+// AliAnalysisTaskNucleiv2 class
+//-----------------------------------------------------------------
+
+class TTree;
+class TParticle;
+class TVector3;
+
+#include "AliAnalysisManager.h"
+#include <AliMCEventHandler.h>
+#include <AliMCEvent.h>
+#include <AliStack.h>
+
+class AliESDVertex;
+class AliAODVertex;
+class AliESDv0;
+class AliAODv0;
+class AliCascadeVertexer;
+
+#include <iostream>
+
+#include "TList.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TH3.h"
+#include "TNtuple.h"
+#include "TGraph.h"
+#include "TF1.h"
+#include "TCanvas.h"
+#include "TMath.h"
+#include "TChain.h"
+#include "Riostream.h"
+#include "AliLog.h"
+#include "AliCascadeVertexer.h"
+#include "AliESDEvent.h"
+#include "AliESDtrack.h"
+#include "AliExternalTrackParam.h"
+#include "AliAODEvent.h"
+#include "AliInputEventHandler.h"
+#include "AliESDcascade.h"
+#include "AliAODcascade.h"
+#include "AliAnalysisTaskNucleiv2.h"
+#include "AliESDtrackCuts.h"
+#include "AliCentrality.h"
+
+ClassImp(AliAnalysisTaskNucleiv2)
+
+using std::cout;
+using std::endl;
+
+//________________________________________________________________________
+AliAnalysisTaskNucleiv2::AliAnalysisTaskNucleiv2()
+: AliAnalysisTaskSE(),
+ fAnalysisType("ESD"),
+ fCollidingSystems(0),
+ fDataType("REAL"),
+ fFillNtuple(kFALSE),
+ fListHistCascade(0),
+ fHistEventMultiplicity(0),
+ fHistTrackMultiplicity(0),
+ fHistTrackMultiplicityCentral(0),
+ fHistTrackMultiplicitySemiCentral(0),
+ fHistTrackMultiplicityMB(0),
+ fhBB(0),
+ fhBBDeu(0),
+ fhPtDeu(0),
+ fhTOF(0),
+ fhMassTOF(0),
+ hRPangleTPCvsCentrality(0), //RESOLUTION Histrograms
+ hPlaneResoTPCvsCentrality(0),
+ hRPangleVZEROvsCentrality(0),
+ hRPangleVZEROAvsCentrality(0),
+ hRPangleVZEROCvsCentrality(0),
+ hPlaneResoVZEROvsCentrality(0),
+ hPlaneResoVZEROAvsCentrality(0),
+ hPlaneResoVZEROCvsCentrality(0),
+ hCosPhivsPt(0),
+ hSinPhivsPt(0),
+ hPhivsPt(0),
+ hAntiCosPhivsPt(0),
+ hAntiSinPhivsPt(0),
+ hAntiPhivsPt(0),
+ hCosDeltaPhivsPt075(0),
+ hSinDeltaPhivsPt075(0),
+ hDeltaPhivsPt075(0),
+ hCosDeltaPhiVZEROvsPt075(0),
+ hSinDeltaPhiVZEROvsPt075(0),
+ hDeltaPhiVZEROvsPt075(0),
+ hCosDeltaPhivsPt1530(0),
+ hSinDeltaPhivsPt1530(0),
+ hDeltaPhivsPt1530(0),
+ hCosDeltaPhiVZEROvsPt1530(0),
+ hSinDeltaPhiVZEROvsPt1530(0),
+ hDeltaPhiVZEROvsPt1530(0),
+ hCosDeltaPhivsPt3050(0),
+ hSinDeltaPhivsPt3050(0),
+ hDeltaPhivsPt3050(0),
+ hCosDeltaPhiVZEROvsPt3050(0),
+ hSinDeltaPhiVZEROvsPt3050(0),
+ hDeltaPhiVZEROvsPt3050(0),
+ hCosDeltaPhivsPt1550(0),
+ hSinDeltaPhivsPt1550(0),
+ hDeltaPhivsPt1550(0),
+ hCosDeltaPhiVZEROvsPt1550(0),
+ hSinDeltaPhiVZEROvsPt1550(0),
+ hDeltaPhiVZEROvsPt1550(0),
+ hAntiCosDeltaPhivsPt075(0),
+ hAntiSinDeltaPhivsPt075(0),
+ hAntiDeltaPhivsPt075(0),
+ hAntiCosDeltaPhiVZEROvsPt075(0),
+ hAntiSinDeltaPhiVZEROvsPt075(0),
+ hAntiDeltaPhiVZEROvsPt075(0),
+ hAntiCosDeltaPhivsPt1530(0),
+ hAntiSinDeltaPhivsPt1530(0),
+ hAntiDeltaPhivsPt1530(0),
+ hAntiCosDeltaPhiVZEROvsPt1530(0),
+ hAntiSinDeltaPhiVZEROvsPt1530(0),
+ hAntiDeltaPhiVZEROvsPt1530(0),
+ hAntiCosDeltaPhivsPt3050(0),
+ hAntiSinDeltaPhivsPt3050(0),
+ hAntiDeltaPhivsPt3050(0),
+ hAntiCosDeltaPhiVZEROvsPt3050(0),
+ hAntiSinDeltaPhiVZEROvsPt3050(0),
+ hAntiDeltaPhiVZEROvsPt3050(0),
+ hAntiCosDeltaPhivsPt1550(0),
+ hAntiSinDeltaPhivsPt1550(0),
+ hAntiDeltaPhivsPt1550(0),
+ hAntiCosDeltaPhiVZEROvsPt1550(0),
+ hAntiSinDeltaPhiVZEROvsPt1550(0),
+ hAntiDeltaPhiVZEROvsPt1550(0),
+ fESDtrackCuts(0),
+ fPIDResponse(0),
+ fNtuple1(0),
+ tCentrality(0),
+ tTPCMomentum(0),
+ tdEdx(0),
+ tEta(0),
+ tITSclustermap(0),
+ tCharge(0),
+ tPtCorr(0),
+ tPhi(0),
+ trpangleTPC(0),
+ tPDGCode(0),
+ tPDGCodeMum(0),
+ tIsPrimaryTr(0),
+ fNtuple2(0) ,
+ tCentralityMC(0),
+ tPDGCodeMC(0),
+ tPDGCodeMumMC(0),
+ tIsPrimary(0),
+ tEtaMC(0),
+ tPtMC(0),
+ tYMC(0)
+{
+ // Dummy Constructor
+ fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
+ //
+ Initialize();
+}
+
+//________________________________________________________________________
+AliAnalysisTaskNucleiv2::AliAnalysisTaskNucleiv2(const char *name,const char *datatype,Bool_t filltree)
+ : AliAnalysisTaskSE(name),
+ fAnalysisType("ESD"),
+ fCollidingSystems(0),
+ fDataType(datatype),
+ fFillNtuple(filltree),
+ fListHistCascade(0),
+ fHistEventMultiplicity(0),
+ fHistTrackMultiplicity(0),
+ fHistTrackMultiplicityCentral(0),
+ fHistTrackMultiplicitySemiCentral(0),
+ fHistTrackMultiplicityMB(0),
+ fhBB(0),
+ fhBBDeu(0),
+ fhPtDeu(0),
+ fhTOF(0),
+ fhMassTOF(0),
+ hRPangleTPCvsCentrality(0), //RESOLUTION Histrograms
+ hPlaneResoTPCvsCentrality(0),
+ hRPangleVZEROvsCentrality(0),
+ hRPangleVZEROAvsCentrality(0),
+ hRPangleVZEROCvsCentrality(0),
+ hPlaneResoVZEROvsCentrality(0),
+ hPlaneResoVZEROAvsCentrality(0),
+ hPlaneResoVZEROCvsCentrality(0),
+ hCosPhivsPt(0),
+ hSinPhivsPt(0),
+ hPhivsPt(0),
+ hAntiCosPhivsPt(0),
+ hAntiSinPhivsPt(0),
+ hAntiPhivsPt(0),
+ hCosDeltaPhivsPt075(0),
+ hSinDeltaPhivsPt075(0),
+ hDeltaPhivsPt075(0),
+ hCosDeltaPhiVZEROvsPt075(0),
+ hSinDeltaPhiVZEROvsPt075(0),
+ hDeltaPhiVZEROvsPt075(0),
+ hCosDeltaPhivsPt1530(0),
+ hSinDeltaPhivsPt1530(0),
+ hDeltaPhivsPt1530(0),
+ hCosDeltaPhiVZEROvsPt1530(0),
+ hSinDeltaPhiVZEROvsPt1530(0),
+ hDeltaPhiVZEROvsPt1530(0),
+ hCosDeltaPhivsPt3050(0),
+ hSinDeltaPhivsPt3050(0),
+ hDeltaPhivsPt3050(0),
+ hCosDeltaPhiVZEROvsPt3050(0),
+ hSinDeltaPhiVZEROvsPt3050(0),
+ hDeltaPhiVZEROvsPt3050(0),
+ hCosDeltaPhivsPt1550(0),
+ hSinDeltaPhivsPt1550(0),
+ hDeltaPhivsPt1550(0),
+ hCosDeltaPhiVZEROvsPt1550(0),
+ hSinDeltaPhiVZEROvsPt1550(0),
+ hDeltaPhiVZEROvsPt1550(0),
+ hAntiCosDeltaPhivsPt075(0),
+ hAntiSinDeltaPhivsPt075(0),
+ hAntiDeltaPhivsPt075(0),
+ hAntiCosDeltaPhiVZEROvsPt075(0),
+ hAntiSinDeltaPhiVZEROvsPt075(0),
+ hAntiDeltaPhiVZEROvsPt075(0),
+ hAntiCosDeltaPhivsPt1530(0),
+ hAntiSinDeltaPhivsPt1530(0),
+ hAntiDeltaPhivsPt1530(0),
+ hAntiCosDeltaPhiVZEROvsPt1530(0),
+ hAntiSinDeltaPhiVZEROvsPt1530(0),
+ hAntiDeltaPhiVZEROvsPt1530(0),
+ hAntiCosDeltaPhivsPt3050(0),
+ hAntiSinDeltaPhivsPt3050(0),
+ hAntiDeltaPhivsPt3050(0),
+ hAntiCosDeltaPhiVZEROvsPt3050(0),
+ hAntiSinDeltaPhiVZEROvsPt3050(0),
+ hAntiDeltaPhiVZEROvsPt3050(0),
+ hAntiCosDeltaPhivsPt1550(0),
+ hAntiSinDeltaPhivsPt1550(0),
+ hAntiDeltaPhivsPt1550(0),
+ hAntiCosDeltaPhiVZEROvsPt1550(0),
+ hAntiSinDeltaPhiVZEROvsPt1550(0),
+ hAntiDeltaPhiVZEROvsPt1550(0),
+ fESDtrackCuts(0),
+ fPIDResponse(0),
+ fNtuple1(0),
+ tCentrality(0),
+ tTPCMomentum(0),
+ tdEdx(0),
+ tEta(0),
+ tITSclustermap(0),
+ tCharge(0),
+ tPtCorr(0),
+ tPhi(0),
+ trpangleTPC(0),
+ tPDGCode(0),
+ tPDGCodeMum(0),
+ tIsPrimaryTr(0),
+ fNtuple2(0) ,
+ tCentralityMC(0),
+ tPDGCodeMC(0),
+ tPDGCodeMumMC(0),
+ tIsPrimary(0),
+ tEtaMC(0),
+ tPtMC(0),
+ tYMC(0)
+
+{
+ // Define input and output slots here
+ // Input slot #0 works with a TChain
+ //DefineInput(0, TChain::Class());
+ // Output slot #0 writes into a TList container (Cascade)
+
+ //
+ // create track cuts
+ //
+ fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
+ //
+ Initialize();
+ SetDataType(datatype);
+ SetFillTree(filltree);
+
+ DefineInput(0, TChain::Class());
+
+ DefineOutput(1, TList::Class());
+ DefineOutput(2, TTree::Class());
+ DefineOutput(3, TTree::Class());
+
+}
+
+void AliAnalysisTaskNucleiv2::Initialize()
+{
+ //
+ // updating parameters in case of changes
+ //
+ fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE,kTRUE);
+ fESDtrackCuts->SetMaxDCAToVertexXY(3);
+ fESDtrackCuts->SetMaxDCAToVertexZ(2);
+ fESDtrackCuts->SetEtaRange(-0.8,0.8);
+ //
+ //
+
+ // Printf("Initizialize\n");
+
+}
+
+//________________________________________________________________________
+Float_t AliAnalysisTaskNucleiv2::GetPhi0Pi(Float_t phi){
+ // Sets the phi angle in the range 0-pi
+ Float_t result=phi;
+ while(result<0){
+ result=result+TMath::Pi();
+ }
+ while(result>TMath::Pi()){
+ result=result-TMath::Pi();
+ }
+ return result;
+}
+
+
+//==================DEFINITION OF OUTPUT OBJECTS==============================
+
+void AliAnalysisTaskNucleiv2::UserCreateOutputObjects()
+{
+ fListHistCascade = new TList();
+ fListHistCascade->SetOwner(); // IMPORTANT!
+
+ if(! fHistEventMultiplicity ){
+
+ fHistEventMultiplicity = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 12 , -0.5,11.5);
+
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(1,"All Events");
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(2,"Events w/PV");
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(3,"Events w/|Vz|<10cm");
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(4,"Central Events");
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(5,"Semi-Central Events");
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(6,"MB Events");
+ //from HF
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(7,"nEventsAnal");
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(8,"nEvSelected");
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(9,"nCandidatesSelected");
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(10,"out of pt bounds");
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(11,"mismatch lab");
+ fHistEventMultiplicity->GetXaxis()->SetBinLabel(12,"non valid TPC EP");
+ fListHistCascade->Add(fHistEventMultiplicity);
+ }
+
+ if(! fHistTrackMultiplicity ){
+ fHistTrackMultiplicity = new TH2F( "fHistTrackMultiplicity", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
+ fHistTrackMultiplicity->GetXaxis()->SetTitle("Number of tracks");
+ fHistTrackMultiplicity->GetYaxis()->SetTitle("Percentile");
+ fListHistCascade->Add(fHistTrackMultiplicity);
+ }
+
+ if(! fHistTrackMultiplicityCentral ){
+ fHistTrackMultiplicityCentral = new TH2F( "fHistTrackMultiplicityCentral", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
+ fHistTrackMultiplicityCentral->GetXaxis()->SetTitle("Number of tracks");
+ fHistTrackMultiplicityCentral->GetYaxis()->SetTitle("Percentile");
+ fListHistCascade->Add(fHistTrackMultiplicityCentral);
+ }
+ if(! fHistTrackMultiplicitySemiCentral ){
+ fHistTrackMultiplicitySemiCentral = new TH2F( "fHistTrackMultiplicitySemiCentral", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
+ fHistTrackMultiplicitySemiCentral->GetXaxis()->SetTitle("Number of tracks");
+ fHistTrackMultiplicitySemiCentral->GetYaxis()->SetTitle("Percentile");
+ fListHistCascade->Add(fHistTrackMultiplicitySemiCentral);
+ }
+ if(! fHistTrackMultiplicityMB ){
+ fHistTrackMultiplicityMB = new TH2F( "fHistTrackMultiplicityMB", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
+ fHistTrackMultiplicityMB->GetXaxis()->SetTitle("Number of tracks");
+ fHistTrackMultiplicityMB->GetYaxis()->SetTitle("Percentile");
+ fListHistCascade->Add(fHistTrackMultiplicityMB);
+ }
+
+ if(! fhBB ){
+ fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 240,-6,6,1000,0,1000);
+ fListHistCascade->Add(fhBB);
+ }
+
+ if(! fhBBDeu ){
+ fhBBDeu = new TH2F( "fhBBDeu" , "BetheBlochTPC - Deuteron" , 240,-6,6,1000,0,1000);
+ fListHistCascade->Add(fhBBDeu);
+ }
+
+ if(!fhPtDeu ){
+ fhPtDeu = new TH2F( "fhPtDeu" , "pt corretto vs pt track - Deuteron" , 120,0,6,120,0,6);
+ fListHistCascade->Add(fhPtDeu);
+ }
+
+ if(! fhTOF ){
+ fhTOF = new TH2F( "fhTOF" , "Scatter Plot TOF" , 240,-6,6,1000,0,1.2);
+ fListHistCascade->Add(fhTOF);
+ }
+ if(! fhMassTOF){
+ fhMassTOF=new TH1F ("fhMassTOF","Particle Mass - TOF", 300,-5 ,5);
+ fListHistCascade->Add(fhMassTOF);
+ }
+
+ if(!hRPangleTPCvsCentrality){
+ hRPangleTPCvsCentrality = new TH2F("hRPangleTPCvsCentrality" ,"hRPangleTPCvsCentrality" ,100,0,TMath::Pi(),210,-0.5,105.5);
+ fListHistCascade->Add(hRPangleTPCvsCentrality);
+ }
+ if(!hPlaneResoTPCvsCentrality){
+ hPlaneResoTPCvsCentrality = new TH2F("hPlaneResoTPCvsCentrality" ,"hPlaneResoTPCvsCentrality" ,500,-1,1,210,-0.5,105.5);
+ fListHistCascade->Add(hPlaneResoTPCvsCentrality);
+ }
+ if(!hRPangleVZEROvsCentrality){
+ hRPangleVZEROvsCentrality = new TH2F("hRPangleVZEROvsCentrality" ,"hRPangleVZEROvsCentrality" ,100,0,TMath::Pi(),210,-0.5,105.5);
+ fListHistCascade->Add(hRPangleVZEROvsCentrality);
+ }
+
+ if(!hRPangleVZEROAvsCentrality){
+ hRPangleVZEROAvsCentrality = new TH2F("hRPangleVZEROAvsCentrality" ,"hRPangleVZEROAvsCentrality" ,100,0,TMath::Pi(),210,-0.5,105.5);
+ fListHistCascade->Add(hRPangleVZEROAvsCentrality);
+ }
+
+ if(!hRPangleVZEROCvsCentrality){
+ hRPangleVZEROCvsCentrality = new TH2F("hRPangleVZEROCvsCentrality" ,"hRPangleVZEROCvsCentrality" ,100,0,TMath::Pi(),210,-0.5,105.5);
+ fListHistCascade->Add(hRPangleVZEROCvsCentrality);
+ }
+
+ if(!hPlaneResoVZEROvsCentrality){
+ hPlaneResoVZEROvsCentrality = new TH2F("hPlaneResoVZEROvsCentrality","hPlaneResoVZEROvsCentrality",500,-1,1,210,-0.5,105.5);
+ fListHistCascade->Add(hPlaneResoVZEROvsCentrality);
+ }
+
+ if(!hPlaneResoVZEROAvsCentrality){
+ hPlaneResoVZEROAvsCentrality = new TH2F("hPlaneResoVZEROAvsCentrality","hPlaneResoVZEROAvsCentrality",500,-1,1,210,-0.5,105.5);
+ fListHistCascade->Add(hPlaneResoVZEROAvsCentrality);
+ }
+
+ if(!hPlaneResoVZEROCvsCentrality){
+ hPlaneResoVZEROCvsCentrality = new TH2F("hPlaneResoVZEROCvsCentrality","hPlaneResoVZEROCvsCentrality",500,-1,1,210,-0.5,105.5);
+ fListHistCascade->Add(hPlaneResoVZEROCvsCentrality);
+ }
+
+ hCosPhivsPt = new TH2F("hCosPhivsPt","hCosPhivsPt",200,-1,1,60,0,3.0);
+ hSinPhivsPt = new TH2F("hSinPhivsPt","hSinPhivsPt",100, 0,1,60,0,3.0);
+ hPhivsPt = new TH2F("hPhivsPt","hPhivsPt" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hAntiCosPhivsPt = new TH2F("hAntiCosPhivsPt","hAntiCosPhivsPt",200,-1,1,60,0,3.0);
+ hAntiSinPhivsPt = new TH2F("hAntiSinPhivsPt","hAntiSinPhivsPt",100, 0,1,60,0,3.0);
+ hAntiPhivsPt = new TH2F("hAntiPhivsPt","hAntiPhivsPt" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+
+ hCosDeltaPhivsPt075 = new TH2F("hCosDeltaPhivsPt075","hCosDeltaPhivsPt075",200,-1,1,60,0,3.0);
+ hSinDeltaPhivsPt075 = new TH2F("hSinDeltaPhivsPt075","hSinDeltaPhivsPt075",100, 0,1,60,0,3.0);
+ hDeltaPhivsPt075 = new TH2F("hDeltaPhivsPt075","hDeltaPhivsPt075" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hCosDeltaPhiVZEROvsPt075 = new TH2F("hCosDeltaPhiVZEROvsPt075","hCosDeltaPhiVZEROvsPt075",200,-1,1,60,0,3.0);
+ hSinDeltaPhiVZEROvsPt075 = new TH2F("hSinDeltaPhiVZEROvsPt075","hSinDeltaPhiVZEROvsPt075",100, 0,1,60,0,3.0);
+ hDeltaPhiVZEROvsPt075 = new TH2F("hDeltaPhiVZEROvsPt075","hDeltaPhiVZEROvsPt075" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hCosDeltaPhivsPt1530 = new TH2F("hCosDeltaPhivsPt1530","hCosDeltaPhivsPt1530",200,-1,1,60,0,3.0);
+ hSinDeltaPhivsPt1530 = new TH2F("hSinDeltaPhivsPt1530","hSinDeltaPhivsPt1530",100, 0,1,60,0,3.0);
+ hDeltaPhivsPt1530 = new TH2F("hDeltaPhivsPt1530","hDeltaPhivsPt1530" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hCosDeltaPhiVZEROvsPt1530 = new TH2F("hCosDeltaPhiVZEROvsPt1530","hCosDeltaPhiVZEROvsPt1530",200,-1,1,60,0,3.0);
+ hSinDeltaPhiVZEROvsPt1530 = new TH2F("hSinDeltaPhiVZEROvsPt1530","hSinDeltaPhiVZEROvsPt1530",100, 0,1,60,0,3.0);
+ hDeltaPhiVZEROvsPt1530 = new TH2F("hDeltaPhiVZEROvsPt1530","hDeltaPhiVZEROvsPt1530" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hCosDeltaPhivsPt3050 = new TH2F("hCosDeltaPhivsPt3050","hCosDeltaPhivsPt3050",200,-1,1,60,0,3.0);
+ hSinDeltaPhivsPt3050 = new TH2F("hSinDeltaPhivsPt3050","hSinDeltaPhivsPt3050",100, 0,1,60,0,3.0);
+ hDeltaPhivsPt3050 = new TH2F("hDeltaPhivsPt3050","hDeltaPhivsPt3050" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hCosDeltaPhiVZEROvsPt3050 = new TH2F("hCosDeltaPhiVZEROvsPt3050","hCosDeltaPhiVZEROvsPt3050",200,-1,1,60,0,3.0);
+ hSinDeltaPhiVZEROvsPt3050 = new TH2F("hSinDeltaPhiVZEROvsPt3050","hSinDeltaPhiVZEROvsPt3050",100, 0,1,60,0,3.0);
+ hDeltaPhiVZEROvsPt3050 = new TH2F("hDeltaPhiVZEROvsPt3050","hDeltaPhiVZEROvsPt3050" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hCosDeltaPhivsPt1550 = new TH2F("hCosDeltaPhivsPt1550","hCosDeltaPhivsPt1550",200,-1,1,60,0,3.0);
+ hSinDeltaPhivsPt1550 = new TH2F("hSinDeltaPhivsPt1550","hSinDeltaPhivsPt1550",100, 0,1,60,0,3.0);
+ hDeltaPhivsPt1550 = new TH2F("hDeltaPhivsPt1550","hDeltaPhivsPt1550" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hCosDeltaPhiVZEROvsPt1550 = new TH2F("hCosDeltaPhiVZEROvsPt1550","hCosDeltaPhiVZEROvsPt1550",200,-1,1,60,0,3.0);
+ hSinDeltaPhiVZEROvsPt1550 = new TH2F("hSinDeltaPhiVZEROvsPt1550","hSinDeltaPhiVZEROvsPt1550",100, 0,1,60,0,3.0);
+ hDeltaPhiVZEROvsPt1550 = new TH2F("hDeltaPhiVZEROvsPt1550","hDeltaPhiVZEROvsPt1550" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+
+ hAntiCosDeltaPhivsPt075 = new TH2F("hAntiCosDeltaPhivsPt075","hAntiCosDeltaPhivsPt075",200,-1,1,60,0,3.0);
+ hAntiSinDeltaPhivsPt075 = new TH2F("hAntiSinDeltaPhivsPt075","hAntiSinDeltaPhivsPt075",100, 0,1,60,0,3.0);
+ hAntiDeltaPhivsPt075 = new TH2F("hAntiDeltaPhivsPt075","hAntiDeltaPhivsPt075" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hAntiCosDeltaPhiVZEROvsPt075 = new TH2F("hAntiCosDeltaPhiVZEROvsPt075","hAntiCosDeltaPhiVZEROvsPt075",200,-1,1,60,0,3.0);
+ hAntiSinDeltaPhiVZEROvsPt075 = new TH2F("hAntiSinDeltaPhiVZEROvsPt075","hAntiSinDeltaPhiVZEROvsPt075",100, 0,1,60,0,3.0);
+ hAntiDeltaPhiVZEROvsPt075 = new TH2F("hAntiDeltaPhiVZEROvsPt075","hAntiDeltaPhiVZEROvsPt075" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hAntiCosDeltaPhivsPt1530 = new TH2F("hAntiCosDeltaPhivsPt1530","hAntiCosDeltaPhivsPt1530",200,-1,1,60,0,3.0);
+ hAntiSinDeltaPhivsPt1530 = new TH2F("hAntiSinDeltaPhivsPt1530","hAntiSinDeltaPhivsPt1530",100, 0,1,60,0,3.0);
+ hAntiDeltaPhivsPt1530 = new TH2F("hAntiDeltaPhivsPt1530","hAntiDeltaPhivsPt1530" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hAntiCosDeltaPhiVZEROvsPt1530 = new TH2F("hAntiCosDeltaPhiVZEROvsPt1530","hAntiCosDeltaPhiVZEROvsPt1530",200,-1,1,60,0,3.0);
+ hAntiSinDeltaPhiVZEROvsPt1530 = new TH2F("hAntiSinDeltaPhiVZEROvsPt1530","hAntiSinDeltaPhiVZEROvsPt1530",100, 0,1,60,0,3.0);
+ hAntiDeltaPhiVZEROvsPt1530 = new TH2F("hAntiDeltaPhiVZEROvsPt1530","hAntiDeltaPhiVZEROvsPt1530" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hAntiCosDeltaPhivsPt3050 = new TH2F("hAntiCosDeltaPhivsPt3050","hAntiCosDeltaPhivsPt3050",200,-1,1,60,0,3.0);
+ hAntiSinDeltaPhivsPt3050 = new TH2F("hAntiSinDeltaPhivsPt3050","hAntiSinDeltaPhivsPt3050",100, 0,1,60,0,3.0);
+ hAntiDeltaPhivsPt3050 = new TH2F("hAntiDeltaPhivsPt3050","hAntiDeltaPhivsPt3050" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hAntiCosDeltaPhiVZEROvsPt3050 = new TH2F("hAntiCosDeltaPhiVZEROvsPt3050","hAntiCosDeltaPhiVZEROvsPt3050",200,-1,1,60,0,3.0);
+ hAntiSinDeltaPhiVZEROvsPt3050 = new TH2F("hAntiSinDeltaPhiVZEROvsPt3050","hAntiSinDeltaPhiVZEROvsPt3050",100, 0,1,60,0,3.0);
+ hAntiDeltaPhiVZEROvsPt3050 = new TH2F("hAntiDeltaPhiVZEROvsPt3050","hAntiDeltaPhiVZEROvsPt3050" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hAntiCosDeltaPhivsPt1550 = new TH2F("hAntiCosDeltaPhivsPt1550","hAntiCosDeltaPhivsPt1550",200,-1,1,60,0,3.0);
+ hAntiSinDeltaPhivsPt1550 = new TH2F("hAntiSinDeltaPhivsPt1550","hAntiSinDeltaPhivsPt1550",100, 0,1,60,0,3.0);
+ hAntiDeltaPhivsPt1550 = new TH2F("hAntiDeltaPhivsPt1550","hAntiDeltaPhivsPt1550" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ hAntiCosDeltaPhiVZEROvsPt1550 = new TH2F("hAntiCosDeltaPhiVZEROvsPt1550","hAntiCosDeltaPhiVZEROvsPt1550",200,-1,1,60,0,3.0);
+ hAntiSinDeltaPhiVZEROvsPt1550 = new TH2F("hAntiSinDeltaPhiVZEROvsPt1550","hAntiSinDeltaPhiVZEROvsPt1550",100, 0,1,60,0,3.0);
+ hAntiDeltaPhiVZEROvsPt1550 = new TH2F("hAntiDeltaPhiVZEROvsPt1550","hAntiDeltaPhiVZEROvsPt1550" ,36, 0,2*TMath::Pi(),60,0,3.0);
+
+ //--------------
+ fListHistCascade->Add(hCosPhivsPt);
+ fListHistCascade->Add(hSinPhivsPt);
+ fListHistCascade->Add(hPhivsPt);
+ fListHistCascade->Add(hAntiCosPhivsPt);
+ fListHistCascade->Add(hAntiSinPhivsPt);
+ fListHistCascade->Add(hAntiPhivsPt);
+ fListHistCascade->Add(hCosDeltaPhivsPt075);
+ fListHistCascade->Add(hSinDeltaPhivsPt075);
+ fListHistCascade->Add(hDeltaPhivsPt075);
+ fListHistCascade->Add(hCosDeltaPhiVZEROvsPt075);
+ fListHistCascade->Add(hSinDeltaPhiVZEROvsPt075);
+ fListHistCascade->Add(hDeltaPhiVZEROvsPt075);
+ fListHistCascade->Add(hCosDeltaPhivsPt1530);
+ fListHistCascade->Add(hSinDeltaPhivsPt1530);
+ fListHistCascade->Add(hDeltaPhivsPt1530);
+ fListHistCascade->Add(hCosDeltaPhiVZEROvsPt1530);
+ fListHistCascade->Add(hSinDeltaPhiVZEROvsPt1530);
+ fListHistCascade->Add(hDeltaPhiVZEROvsPt1530);
+ fListHistCascade->Add(hCosDeltaPhivsPt3050);
+ fListHistCascade->Add(hSinDeltaPhivsPt3050);
+ fListHistCascade->Add(hDeltaPhivsPt3050);
+ fListHistCascade->Add(hCosDeltaPhiVZEROvsPt3050);
+ fListHistCascade->Add(hSinDeltaPhiVZEROvsPt3050);
+ fListHistCascade->Add(hDeltaPhiVZEROvsPt3050);
+ fListHistCascade->Add(hCosDeltaPhivsPt1550);
+ fListHistCascade->Add(hSinDeltaPhivsPt1550);
+ fListHistCascade->Add(hDeltaPhivsPt1550);
+ fListHistCascade->Add(hCosDeltaPhiVZEROvsPt1550);
+ fListHistCascade->Add(hSinDeltaPhiVZEROvsPt1550);
+ fListHistCascade->Add(hDeltaPhiVZEROvsPt1550);
+ fListHistCascade->Add(hAntiCosDeltaPhivsPt075);
+ fListHistCascade->Add(hAntiSinDeltaPhivsPt075);
+ fListHistCascade->Add(hAntiDeltaPhivsPt075);
+ fListHistCascade->Add(hAntiCosDeltaPhiVZEROvsPt075);
+ fListHistCascade->Add(hAntiSinDeltaPhiVZEROvsPt075);
+ fListHistCascade->Add(hAntiDeltaPhiVZEROvsPt075);
+ fListHistCascade->Add(hAntiCosDeltaPhivsPt1530);
+ fListHistCascade->Add(hAntiSinDeltaPhivsPt1530);
+ fListHistCascade->Add(hAntiDeltaPhivsPt1530);
+ fListHistCascade->Add(hAntiCosDeltaPhiVZEROvsPt1530);
+ fListHistCascade->Add(hAntiSinDeltaPhiVZEROvsPt1530);
+ fListHistCascade->Add(hAntiDeltaPhiVZEROvsPt1530);
+ fListHistCascade->Add(hAntiCosDeltaPhivsPt3050);
+ fListHistCascade->Add(hAntiSinDeltaPhivsPt3050);
+ fListHistCascade->Add(hAntiDeltaPhivsPt3050);
+ fListHistCascade->Add(hAntiCosDeltaPhiVZEROvsPt3050);
+ fListHistCascade->Add(hAntiSinDeltaPhiVZEROvsPt3050);
+ fListHistCascade->Add(hAntiDeltaPhiVZEROvsPt3050);
+ fListHistCascade->Add(hAntiCosDeltaPhivsPt1550);
+ fListHistCascade->Add(hAntiSinDeltaPhivsPt1550);
+ fListHistCascade->Add(hAntiDeltaPhivsPt1550);
+ fListHistCascade->Add(hAntiCosDeltaPhiVZEROvsPt1550);
+ fListHistCascade->Add(hAntiSinDeltaPhiVZEROvsPt1550);
+ fListHistCascade->Add(hAntiDeltaPhiVZEROvsPt1550);
+
+ if(! fNtuple1 ) {
+
+ fNtuple1 = new TTree("fNtuple1","fNtuple1");
+
+ fNtuple1->Branch("tEventNumber" ,&tEventNumber ,"tEventNumber[7]/D");
+ fNtuple1->Branch("tCentrality" ,&tCentrality ,"tCentrality/D" );
+ fNtuple1->Branch("tVertexCoord" ,&tVertexCoord ,"tVertexCoord[3]/D");
+ fNtuple1->Branch("tPIDITS" ,&tPIDITS ,"tPIDITS[9]/D" );
+ fNtuple1->Branch("tPIDTPC" ,&tPIDTPC ,"tPIDTPC[9]/D" );
+ fNtuple1->Branch("tPIDTOF" ,&tPIDTOF ,"tPIDTOF[9]/D" );
+ fNtuple1->Branch("tPulls" ,&tPulls ,"tPulls[2]/D" );
+ fNtuple1->Branch("tMomentum" ,&tMomentum ,"tMomentum[3]/D" );
+ fNtuple1->Branch("tTPCMomentum" ,&tTPCMomentum ,"tTPCMomentum/D" );
+ fNtuple1->Branch("tdEdx" ,&tdEdx ,"tdEdx/D" );
+ fNtuple1->Branch("tEta" ,&tEta ,"tEta/D" );
+ fNtuple1->Branch("tDCA" ,&tDCA ,"tDCA[2]/D" );
+ fNtuple1->Branch("tTracksTPC" ,&tTracksTPC ,"tTracksTPC[2]/D" );
+ fNtuple1->Branch("tITSclustermap",&tITSclustermap,"tITSclustermap" );
+ fNtuple1->Branch("tITSsample" ,&tITSsample ,"tITSsample[4]/D" );
+ fNtuple1->Branch("tisTOF[2]" ,&tisTOF ,"tisTOF[2]/I" );
+ fNtuple1->Branch("tTOFtrack" ,&tTOFtrack ,"tTOFtrack[3]/D" );
+ fNtuple1->Branch("tCharge" ,&tCharge ,"tCharge/I" );
+ fNtuple1->Branch("tPtCorr" ,&tPtCorr ,"tPtCorr/D" );
+ fNtuple1->Branch("tPhi" ,&tPhi ,"tPhi/D" );
+ fNtuple1->Branch("trpangleTPC" ,&trpangleTPC ,"trpangleTPC/D" );
+ fNtuple1->Branch("trpangleVZERO" ,&trpangleVZERO ,"trpangleVZERO[3]/D" );
+
+ if(fDataType == "SIM"){
+ fNtuple1->Branch("tPDGCode" ,&tPDGCode ,"tPDGCode/D" );
+ fNtuple1->Branch("tPDGCodeMum" ,&tPDGCode ,"tPDGCodeMum/D" );
+ fNtuple1->Branch("tIsPrimaryTr" ,&tIsPrimaryTr ,"tIsPrimaryTr/D" );
+ fNtuple1->Branch("tIsSecondaryTr",&tIsSecondaryTr,"tIsSecondaryTr[2]/D" );
+ }
+
+ }
+
+
+
+
+ if(fDataType == "SIM"){
+
+ if(! fNtuple2 ) {
+
+ fNtuple2 = new TTree("fNtuple2","fNtuple2");
+
+ fNtuple2->Branch("tEventNumberMC" ,&tEventNumberMC ,"tEventNumberMC[6]/D");
+ fNtuple2->Branch("tCentralityMC" ,&tCentralityMC ,"tCentralityMC/D" );
+ fNtuple2->Branch("tVertexCoordMC" ,&tVertexCoordMC ,"tVertexCoordMC[3]/D");
+ fNtuple2->Branch("tMomentumMC" ,&tMomentumMC ,"tMomentumMC[3]/D" );
+ fNtuple2->Branch("tPDGCodeMC" ,&tPDGCodeMC ,"tPDGCodeMC/D" );
+ fNtuple2->Branch("tPDGCodeMumMC" ,&tPDGCodeMC ,"tPDGCodeMumMC/D" );
+ fNtuple2->Branch("tIsPrimary" ,&tIsPrimary ,"tIsPrimary/D" );
+ fNtuple2->Branch("tIsSecondary" ,&tIsSecondary ,"tIsSecondary[2]/D" );
+ fNtuple2->Branch("tEtaMC" ,&tEtaMC ,"tEtaMC/D" );
+ fNtuple2->Branch("tPtMC" ,&tPtMC ,"tPtMC/D" );
+ fNtuple2->Branch("tYMC" ,&tYMC ,"tYMC/D" );
+
+ }
+
+ }
+
+ PostData(1, fListHistCascade);
+ PostData(2, fNtuple1);
+ PostData(3, fNtuple2);
+}// end UserCreateOutputObjects
+
+
+//====================== USER EXEC ========================
+
+void AliAnalysisTaskNucleiv2::UserExec(Option_t *)
+{
+ // Main loop
+ // Called for EACH event
+ // cout<<"AliAnalysisTaskNucleiv2 Starting UserExec"<<endl;
+
+ Info("AliAnalysisTaskNucleiv2","Starting UserExec");
+
+ AliVEvent *event = InputEvent();
+ if (!event) { Printf("ERROR: Could not retrieve event"); return; }
+
+ AliStack *stack = 0;
+ if(fDataType == "SIM"){
+
+ AliMCEvent *mcEvent = MCEvent();
+ if (!mcEvent) {
+ Printf("ERROR: Could not retrieve MC event");
+ return;
+ }
+ Printf("MC particles: %d", mcEvent->GetNumberOfTracks());
+ stack = mcEvent->Stack();
+ if( !stack ) {
+ Printf( "Stack not available");
+ return;
+ }
+ }
+
+ // create pointer to event
+
+ AliESDEvent* lESDevent = dynamic_cast<AliESDEvent*>(event);
+ if (!lESDevent) {
+ AliError("Cannot get the ESD event");
+ return;
+ }
+
+ fHistEventMultiplicity->Fill(1);
+ fHistEventMultiplicity->Fill(7);
+
+ //_____________________________________________________
+ // Centrality
+
+ AliCentrality *centrality = lESDevent->GetCentrality();
+ Float_t percentile=centrality->GetCentralityPercentile("V0M");
+
+ Int_t TrackNumber = lESDevent->GetNumberOfTracks();
+ fHistTrackMultiplicity->Fill(TrackNumber,percentile); //tracce per evento
+
+ //______________________________________________________
+ // PID
+
+ AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
+ fPIDResponse=inputHandler->GetPIDResponse();
+
+ //=================================================================
+
+ //!*********************!//
+ //! Define variables !//
+ //!*********************!//
+
+ Double_t evNumber = 0.;
+ Double_t runNumber = 0.;
+ Double_t BCNumber = 0.;
+ Double_t OrbitNumber = 0.;
+ Double_t PeriodNumber = 0.;
+
+
+ Double_t ITSsample[4];
+ for(Int_t i=0;i<4;i++)ITSsample[i]=0;
+
+ Double_t xPrimaryVertex=0.,yPrimaryVertex=0.,zPrimaryVertex=0.;
+ Float_t impactXY=-999., impactZ=-999.;
+ Double_t pinTPC=0.,poutTPC=0.,TPCSignal=0.;
+
+ ULong_t status=0;
+ Bool_t isTPC=kFALSE;
+
+
+ // Primary vertex cut
+
+ const AliESDVertex *vtx = lESDevent->GetPrimaryVertexTracks();
+
+ if(vtx->GetNContributors()<1) {
+
+ // SPD vertex cut
+ vtx = lESDevent->GetPrimaryVertexSPD();
+
+ if(vtx->GetNContributors()<1) {
+ Info("AliAnalysisTaskHelium3Pi","No good vertex, skip event");
+ return; // NO GOOD VERTEX, SKIP EVENT
+ }
+ }
+
+ fHistEventMultiplicity->Fill(2); // analyzed events with PV
+
+ xPrimaryVertex=vtx->GetXv();
+ yPrimaryVertex=vtx->GetYv();
+ zPrimaryVertex=vtx->GetZv();
+
+ if(TMath::Abs(zPrimaryVertex)>10) return;
+ fHistEventMultiplicity->Fill(3);
+
+ Bool_t isSelectedCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kCentral);
+ Bool_t isSelectedSemiCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kSemiCentral);
+ Bool_t isSelectedMB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
+
+ fHistTrackMultiplicity->Fill(TrackNumber,percentile);
+
+ Int_t eventtype = -999;
+
+ // cout<<"ET 1: "<<eventtype<<endl;
+
+ if(fDataType == "REAL"){
+
+ if(isSelectedCentral){
+ if(percentile<0)return;
+ if(percentile>=7.5)return;
+ fHistEventMultiplicity->Fill(4);
+ fHistTrackMultiplicityCentral->Fill(TrackNumber,percentile);
+ eventtype =1;
+ }
+
+ if(isSelectedSemiCentral){
+ if(percentile<15)return;
+ if(percentile>=50)return;
+ fHistEventMultiplicity->Fill(5);
+ fHistTrackMultiplicitySemiCentral->Fill(TrackNumber,percentile);
+ eventtype =2;
+ }
+
+ if(isSelectedMB){
+ if(percentile<0)return;
+ if(percentile>=80)return;
+ fHistEventMultiplicity->Fill(6);
+ fHistTrackMultiplicityMB->Fill(TrackNumber,percentile);
+ eventtype =3;
+ }
+
+ // cout<<"ET 2: "<<eventtype<<endl;
+
+ if(eventtype!=1 && eventtype!=2 && eventtype!=3 )return;
+ }
+
+ if(fDataType == "SIM"){
+ cout<<"Take SIM event"<<endl;
+ eventtype = -999;
+ //cout<<"ET MC: "<<eventtype<<endl;
+ if(eventtype!=-999)return;
+
+ }
+
+ evNumber = lESDevent->GetEventNumberInFile();
+ runNumber = lESDevent->GetRunNumber();
+ BCNumber = lESDevent->GetBunchCrossNumber();
+ OrbitNumber = lESDevent->GetOrbitNumber();
+ PeriodNumber= lESDevent->GetPeriodNumber();
+
+ AliEventplane *pl=lESDevent->GetEventplane();
+
+ if(fDataType == "REAL"){
+
+ if(!pl ){
+ AliError("AliAnalysisTaskSENucleiv2::UserExec:no eventplane! v2 analysis without eventplane not possible!\n");
+ fHistEventMultiplicity->Fill(12);
+ }
+ }
+
+ //Event plane
+
+ Double_t rpangleTPC =0;
+ Double_t rpangleVZERO =0;
+ Double_t rpangleeventA =0;
+
+ Double_t rpangleeventBTPC =0;
+ Double_t rpangleeventATPC =0;
+ Double_t deltaPsiTPC =0;
+ Double_t planeresoTPC =0;
+
+ Double_t rpangleeventCVZERO =0;
+ Double_t rpangleeventBVZERO =0;
+ Double_t deltaPsiVZERO =0;
+ Double_t planeresoVZERO =0;
+
+ //For candidate removal from TPC EP
+
+ TVector2 *qsub1=0x0;
+ TVector2 *qsub2=0x0;
+
+ rpangleTPC = pl->GetEventplane("Q");
+
+ if(fDataType == "REAL"){
+ if(rpangleTPC<0){
+ fHistEventMultiplicity->Fill(11);
+ return;
+ }
+ }
+
+ //TPC resolution --> Half or full it depends on the arguments od the add task
+
+ rpangleeventA = rpangleTPC;
+
+ hRPangleTPCvsCentrality->Fill(rpangleTPC,percentile);
+
+ qsub1 = pl->GetQsub1();
+ qsub2 = pl->GetQsub2();
+
+ if(fDataType == "REAL"){
+ if(!qsub1 || !qsub2){
+ AliError("AliAnalysisTaskSENucleiv2::UserExec:no qsub1 or qsub2!\n");
+ return;
+ }
+
+ //TPC event Plane
+
+ rpangleeventATPC = qsub1->Phi()/2.;
+ rpangleeventBTPC = qsub2->Phi()/2.;
+
+ deltaPsiTPC =rpangleeventATPC-rpangleeventBTPC;
+
+ if(TMath::Abs(deltaPsiTPC)>TMath::Pi()/2.){
+ if(deltaPsiTPC>0.) deltaPsiTPC-=TMath::Pi();
+ else deltaPsiTPC +=TMath::Pi();
+ } // difference of subevents reaction plane angle cannot be bigger than phi/2
+
+ planeresoTPC = TMath::Cos(2.*deltaPsiTPC); // reaction plane resolution
+
+ hPlaneResoTPCvsCentrality->Fill(planeresoTPC,percentile);
+
+ //VZERO event plane : Use events with eta>0
+
+ rpangleVZERO = GetPhi0Pi(pl->GetEventplane("V0",lESDevent,2));
+ hRPangleVZEROvsCentrality->Fill(rpangleVZERO,percentile);
+
+ rpangleeventCVZERO=rpangleVZERO;
+ rpangleeventBVZERO=GetPhi0Pi(pl->GetEventplane("V0A",lESDevent,2));
+ rpangleeventCVZERO=GetPhi0Pi(pl->GetEventplane("V0C",lESDevent,2));
+
+ hRPangleVZEROAvsCentrality->Fill(rpangleeventBVZERO,percentile);
+ hRPangleVZEROCvsCentrality->Fill(rpangleeventCVZERO,percentile);
+
+ //V0M
+
+ deltaPsiVZERO =rpangleeventATPC-rpangleVZERO;
+
+ if(TMath::Abs(deltaPsiVZERO)>TMath::Pi()/2.){
+ if(deltaPsiVZERO>0.) deltaPsiVZERO-=TMath::Pi();
+ else deltaPsiVZERO +=TMath::Pi();
+ } // difference of subevents reaction plane angle cannot be bigger than phi/2
+
+ planeresoVZERO = TMath::Cos(2.*deltaPsiVZERO);
+
+ hPlaneResoVZEROvsCentrality->Fill(planeresoVZERO,percentile);
+
+ //V0A
+
+ deltaPsiVZERO =rpangleeventATPC-rpangleeventBVZERO;
+
+ if(TMath::Abs(deltaPsiVZERO)>TMath::Pi()/2.){
+ if(deltaPsiVZERO>0.) deltaPsiVZERO-=TMath::Pi();
+ else deltaPsiVZERO +=TMath::Pi();
+ } // difference of subevents reaction plane angle cannot be bigger than phi/2
+
+ planeresoVZERO = TMath::Cos(2.*deltaPsiVZERO);
+
+ hPlaneResoVZEROAvsCentrality->Fill(planeresoVZERO,percentile);
+
+ //V0C
+
+ deltaPsiVZERO =rpangleeventATPC-rpangleeventBVZERO;
+
+ if(TMath::Abs(deltaPsiVZERO)>TMath::Pi()/2.){
+ if(deltaPsiVZERO>0.) deltaPsiVZERO-=TMath::Pi();
+ else deltaPsiVZERO +=TMath::Pi();
+ } // difference of subevents reaction plane angle cannot be bigger than phi/2
+
+ planeresoVZERO = TMath::Cos(2.*deltaPsiVZERO);
+
+ hPlaneResoVZEROCvsCentrality->Fill(planeresoVZERO,percentile);
+
+ //rpangleeventBVZERO
+
+ if(TMath::Abs(rpangleTPC-rpangleVZERO)>10)return;
+
+ trpangleTPC = rpangleTPC;
+ trpangleVZERO[0] = rpangleVZERO;
+ trpangleVZERO[1] = rpangleeventBVZERO;
+ trpangleVZERO[2] = rpangleeventCVZERO;
+ }
+ // cout<<"rpangle TPC: "<<rpangleTPC<<endl;
+
+ Int_t isTOF=0;
+ Int_t isoutTPC=0;
+ // cout<<"TRack number MC "<<TrackNumber<<endl;
+
+ for (Int_t j=0; j<TrackNumber; j++) { //loop on tracks
+
+ AliESDtrack *esdtrack=lESDevent->GetTrack(j);
+ if (!fESDtrackCuts->AcceptTrack(esdtrack)) continue;
+
+ status = (ULong_t)esdtrack->GetStatus();
+
+ isTPC = (((status) & AliESDtrack::kTPCin) != 0);
+ isTOF = ((((status) & AliESDtrack::kTOFout) != 0) && (((status) & AliESDtrack::kTIME) != 0));
+ isoutTPC = (((status) & AliESDtrack::kTPCout) != 0);
+
+ TPCSignal=esdtrack->GetTPCsignal();
+
+ if (TPCSignal<10)continue;
+ if (TPCSignal>1000)continue;
+ if (!isTPC)continue;
+
+ if(!esdtrack->GetTPCInnerParam())continue;
+ AliExternalTrackParam trackIn(*esdtrack->GetInnerParam());
+ pinTPC= trackIn.GetP();
+
+ fhBB->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
+
+ if(isTOF){
+ if(!esdtrack->GetOuterParam())continue;
+ AliExternalTrackParam trackOut(*esdtrack->GetOuterParam());
+ poutTPC = trackOut.GetP();
+ fhTOF->Fill(poutTPC*esdtrack->GetSign(),(esdtrack->GetIntegratedLength()/esdtrack->GetTOFsignal())/2.99792458e-2);
+
+ }
+
+ Int_t fIdxInt[200]; //dummy array
+ Int_t nClustersTPC = esdtrack->GetTPCclusters(fIdxInt);
+ Float_t chi2PerClusterTPC = esdtrack->GetTPCchi2()/(Float_t)(nClustersTPC);
+
+ esdtrack->GetImpactParameters(impactXY, impactZ);
+
+ Float_t deutExp = -999;
+ Float_t hel3Exp = -999;
+
+ if(fDataType == "REAL"){
+ deutExp = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*2),1.45802,27.4992,4.00313e-15,2.48485,8.31768);
+ hel3Exp = 4*AliExternalTrackParam::BetheBlochAleph(2*pinTPC/(0.938*3),1.74962,27.4992,4.00313e-15,2.42485,8.31768);
+ }
+
+ if(fDataType == "SIM"){
+ Double_t parMC[5] = {1.17329, 27.4992, 4.00313e-15, 2.1204316, 4.1373729}; // NEW!!!
+ deutExp = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*2),parMC[0],parMC[1],parMC[2],parMC[3],parMC[4]);
+ hel3Exp = 4*AliExternalTrackParam::BetheBlochAleph(2*pinTPC/(0.938*3),parMC[0],parMC[1],parMC[2],parMC[3],parMC[4]);
+ }
+
+ Double_t pullTPC = (TPCSignal - deutExp)/(0.07*deutExp);
+ Double_t pullTPChel3 = (TPCSignal - hel3Exp)/(0.07*hel3Exp);
+
+ tPulls[0] = pullTPC;
+ tPulls[1] = pullTPChel3;
+
+ //Fill the tree
+
+ tEventNumber[0] = evNumber ;
+ tEventNumber[1] = runNumber ;
+ tEventNumber[2] = BCNumber ;
+ tEventNumber[3] = OrbitNumber ;
+ tEventNumber[4] = PeriodNumber;
+ tEventNumber[5] = TrackNumber;
+ tEventNumber[6] = eventtype ;
+
+ tCentrality = percentile;
+
+ tVertexCoord[0] = xPrimaryVertex;
+ tVertexCoord[1] = yPrimaryVertex;
+ tVertexCoord[2] = zPrimaryVertex;
+
+ if(TMath::Abs(zPrimaryVertex)>10)continue;
+
+ // bbtheo = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 7);
+
+ tPIDITS[0] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 0);
+ tPIDITS[1] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 1);
+ tPIDITS[2] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 2);
+ tPIDITS[3] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 3);
+ tPIDITS[4] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 4);
+ tPIDITS[5] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 5);
+ tPIDITS[6] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 6);
+ tPIDITS[7] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 7);
+ tPIDITS[8] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 8);
+
+ tPIDTPC[0] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 0);
+ tPIDTPC[1] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 1);
+ tPIDTPC[2] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 2);
+ tPIDTPC[3] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 3);
+ tPIDTPC[4] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 4);
+ tPIDTPC[5] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 5);
+ tPIDTPC[6] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 6);
+ tPIDTPC[7] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 7);
+ tPIDTPC[8] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 8);
+
+ tPIDTOF[0] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 0);
+ tPIDTOF[1] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 1);
+ tPIDTOF[2] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 2);
+ tPIDTOF[3] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 3);
+ tPIDTOF[4] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 4);
+ tPIDTOF[5] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 5);
+ tPIDTOF[6] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 6);
+ tPIDTOF[7] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 7);
+ tPIDTOF[8] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 8);
+
+ tMomentum[0] = esdtrack->Px();
+ tMomentum[1] = esdtrack->Py();
+ tMomentum[2] = esdtrack->Pz();
+
+ tTPCMomentum = pinTPC;
+ tEta = esdtrack->Eta();
+ tdEdx = TPCSignal;
+ tDCA[0] = impactXY;
+ tDCA[1] = impactZ;
+
+ // if(nClustersTPC<80)
+ // cout<<"!!!!! TPC cls: "<<nClustersTPC<<endl;
+
+ tTracksTPC[0] = chi2PerClusterTPC;
+ tTracksTPC[1] = nClustersTPC;
+
+ tITSclustermap = esdtrack->GetITSClusterMap();
+ esdtrack->GetITSdEdxSamples(ITSsample);
+ tITSsample[0] = ITSsample[0];
+ tITSsample[1] = ITSsample[1];
+ tITSsample[2] = ITSsample[2];
+ tITSsample[3] = ITSsample[3];
+
+ tisTOF[0] = isTOF;
+ tisTOF[1] = isoutTPC;
+
+ Double_t p = esdtrack->P();
+ Double_t tof = esdtrack->GetTOFsignal()-fPIDResponse->GetTOFResponse().GetStartTime(p);
+
+ tTOFtrack[0] = poutTPC;
+ tTOFtrack[1] = tof; //esdtrack->GetTOFsignal(); //ps = Time
+ tTOFtrack[2] = esdtrack->GetIntegratedLength(); //cm
+
+ tCharge = esdtrack->Charge();
+ tPhi = esdtrack->Phi();
+
+ //Corrected momentum from Alexander
+
+ Double_t pT = esdtrack->Pt()/(1 - 0.333303/TMath::Power(esdtrack->Pt() + 0.651111, 5.27268));
+ tPtCorr = pT;
+
+ if(fDataType == "REAL"){
+ if(pinTPC < 3. && TMath::Abs(pullTPC) < 3){
+ if(fFillNtuple == kTRUE)
+ fNtuple1->Fill();
+ fhBBDeu->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
+ }
+
+ if(pinTPC < 10. && TMath::Abs(pullTPChel3) < 3){
+ if(fFillNtuple == kTRUE)
+ fNtuple1->Fill();
+ fhBBDeu->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
+ }
+
+ if(TMath::Abs(pullTPC)<2){
+
+ fhPtDeu->Fill(esdtrack->Pt(),pT);
+
+ Float_t deltaphiTPC=2*GetPhi0Pi(tPhi-trpangleTPC);
+ Float_t deltaphiV0 =2*GetPhi0Pi(tPhi-trpangleVZERO[0]);
+
+
+ if(tTPCMomentum < 1.0){
+
+ if(tCharge > 0){
+
+ hCosPhivsPt ->Fill(TMath::Cos(tPhi),tPtCorr);
+ hSinPhivsPt ->Fill(TMath::Sin(tPhi),tPtCorr);
+ hPhivsPt ->Fill(tPhi,tPtCorr);
+
+ if(tCentrality>0 && tCentrality<7.5){
+ hCosDeltaPhivsPt075 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hSinDeltaPhivsPt075 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hDeltaPhivsPt075 ->Fill(deltaphiTPC,tPtCorr);
+ hCosDeltaPhiVZEROvsPt075 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hSinDeltaPhiVZEROvsPt075 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hDeltaPhiVZEROvsPt075 ->Fill(deltaphiV0,tPtCorr);
+
+ }
+
+ if(tCentrality>15 && tCentrality<30){
+ hCosDeltaPhivsPt1530 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hSinDeltaPhivsPt1530 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hDeltaPhivsPt1530 ->Fill(deltaphiTPC,tPtCorr);
+ hCosDeltaPhiVZEROvsPt1530 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hSinDeltaPhiVZEROvsPt1530 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hDeltaPhiVZEROvsPt1530 ->Fill(deltaphiV0,tPtCorr);
+ }
+
+ if(tCentrality>30 && tCentrality<50){
+ hCosDeltaPhivsPt3050 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hSinDeltaPhivsPt3050 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hDeltaPhivsPt3050 ->Fill(deltaphiTPC,tPtCorr);
+ hCosDeltaPhiVZEROvsPt3050 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hSinDeltaPhiVZEROvsPt3050 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hDeltaPhiVZEROvsPt3050 ->Fill(deltaphiV0,tPtCorr);
+ }
+
+ if(tCentrality>15 && tCentrality<50){
+ hCosDeltaPhivsPt1550 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hSinDeltaPhivsPt1550 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hDeltaPhivsPt1550 ->Fill(deltaphiTPC,tPtCorr);
+ hCosDeltaPhiVZEROvsPt1550 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hSinDeltaPhiVZEROvsPt1550 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hDeltaPhiVZEROvsPt1550 ->Fill(deltaphiV0,tPtCorr);
+ }
+ }
+
+ if(tCharge < 0){
+
+ hAntiCosPhivsPt ->Fill(TMath::Cos(tPhi),tPtCorr);
+ hAntiSinPhivsPt ->Fill(TMath::Sin(tPhi),tPtCorr);
+ hAntiPhivsPt ->Fill(tPhi,tPtCorr);
+ if(tCentrality>0 && tCentrality<7.5){
+ hAntiCosDeltaPhivsPt075 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hAntiSinDeltaPhivsPt075 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hAntiDeltaPhivsPt075 ->Fill(deltaphiTPC,tPtCorr);
+ hAntiCosDeltaPhiVZEROvsPt075 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hAntiSinDeltaPhiVZEROvsPt075 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hAntiDeltaPhiVZEROvsPt075 ->Fill(deltaphiV0,tPtCorr);
+ }
+
+ if(tCentrality>15 && tCentrality<30){
+ hAntiCosDeltaPhivsPt1530 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hAntiSinDeltaPhivsPt1530 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hAntiDeltaPhivsPt1530 ->Fill(deltaphiTPC,tPtCorr);
+ hAntiCosDeltaPhiVZEROvsPt1530 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hAntiSinDeltaPhiVZEROvsPt1530 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hAntiDeltaPhiVZEROvsPt1530 ->Fill(deltaphiV0,tPtCorr);
+ }
+
+ if(tCentrality>30 && tCentrality<50){
+ hAntiCosDeltaPhivsPt3050 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hAntiSinDeltaPhivsPt3050 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hAntiDeltaPhivsPt3050 ->Fill(deltaphiTPC,tPtCorr);
+ hAntiCosDeltaPhiVZEROvsPt3050 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hAntiSinDeltaPhiVZEROvsPt3050 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hAntiDeltaPhiVZEROvsPt3050 ->Fill(deltaphiV0,tPtCorr);
+ }
+
+ if(tCentrality>15 && tCentrality<50){
+ hAntiCosDeltaPhivsPt1550 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hAntiSinDeltaPhivsPt1550 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hAntiDeltaPhivsPt1550 ->Fill(deltaphiTPC,tPtCorr);
+ hAntiCosDeltaPhiVZEROvsPt1550 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hAntiSinDeltaPhiVZEROvsPt1550 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hAntiDeltaPhiVZEROvsPt1550 ->Fill(deltaphiV0,tPtCorr);
+ }
+
+ }
+
+ }
+
+ if(tTPCMomentum > 1.0 && tTPCMomentum < 3.0){
+ if(tPIDTOF[5]>2 || tPIDTOF[5]< -2)continue;
+
+ if(tCharge > 0){
+
+ hCosPhivsPt ->Fill(TMath::Cos(tPhi),tPtCorr);
+ hSinPhivsPt ->Fill(TMath::Sin(tPhi),tPtCorr);
+ hPhivsPt ->Fill(tPhi,tPtCorr);
+
+
+ if(tCentrality>0 && tCentrality<7.5){
+ hCosDeltaPhivsPt075 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hSinDeltaPhivsPt075 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hDeltaPhivsPt075 ->Fill(deltaphiTPC,tPtCorr);
+ hCosDeltaPhiVZEROvsPt075 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hSinDeltaPhiVZEROvsPt075 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hDeltaPhiVZEROvsPt075 ->Fill(deltaphiV0,tPtCorr);
+
+ }
+
+ if(tCentrality>15 && tCentrality<30){
+ hCosDeltaPhivsPt1530 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hSinDeltaPhivsPt1530 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hDeltaPhivsPt1530 ->Fill(deltaphiTPC,tPtCorr);
+ hCosDeltaPhiVZEROvsPt1530 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hSinDeltaPhiVZEROvsPt1530 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hDeltaPhiVZEROvsPt1530 ->Fill(deltaphiV0,tPtCorr);
+ }
+
+ if(tCentrality>30 && tCentrality<50){
+ hCosDeltaPhivsPt3050 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hSinDeltaPhivsPt3050 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hDeltaPhivsPt3050 ->Fill(deltaphiTPC,tPtCorr);
+ hCosDeltaPhiVZEROvsPt3050 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hSinDeltaPhiVZEROvsPt3050 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hDeltaPhiVZEROvsPt3050 ->Fill(deltaphiV0,tPtCorr);
+
+ }
+
+ if(tCentrality>15 && tCentrality<50){
+ hCosDeltaPhivsPt1550 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hSinDeltaPhivsPt1550 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hDeltaPhivsPt1550 ->Fill(deltaphiTPC,tPtCorr);
+ hCosDeltaPhiVZEROvsPt1550 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hSinDeltaPhiVZEROvsPt1550 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hDeltaPhiVZEROvsPt1550 ->Fill(deltaphiV0,tPtCorr);
+ }
+ }
+
+ if(tCharge < 0){
+
+ hAntiCosPhivsPt ->Fill(TMath::Cos(tPhi),tPtCorr);
+ hAntiSinPhivsPt ->Fill(TMath::Sin(tPhi),tPtCorr);
+ hAntiPhivsPt ->Fill(tPhi,tPtCorr);
+
+ if(tCentrality>0 && tCentrality<7.5){
+ hAntiCosDeltaPhivsPt075 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hAntiSinDeltaPhivsPt075 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hAntiDeltaPhivsPt075 ->Fill(deltaphiTPC,tPtCorr);
+ hAntiCosDeltaPhiVZEROvsPt075 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hAntiSinDeltaPhiVZEROvsPt075 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hAntiDeltaPhiVZEROvsPt075 ->Fill(deltaphiV0,tPtCorr);
+
+
+ }
+
+ if(tCentrality>15 && tCentrality<30){
+ hAntiCosDeltaPhivsPt1530 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hAntiSinDeltaPhivsPt1530 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hAntiDeltaPhivsPt1530 ->Fill(deltaphiTPC,tPtCorr);
+ hAntiCosDeltaPhiVZEROvsPt1530 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hAntiSinDeltaPhiVZEROvsPt1530 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hAntiDeltaPhiVZEROvsPt1530 ->Fill(deltaphiV0,tPtCorr);
+
+
+ }
+
+ if(tCentrality>30 && tCentrality<50){
+ hAntiCosDeltaPhivsPt3050 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hAntiSinDeltaPhivsPt3050 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hAntiDeltaPhivsPt3050 ->Fill(deltaphiTPC,tPtCorr);
+ hAntiCosDeltaPhiVZEROvsPt3050 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hAntiSinDeltaPhiVZEROvsPt3050 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hAntiDeltaPhiVZEROvsPt3050 ->Fill(deltaphiV0,tPtCorr);
+
+
+ }
+
+ if(tCentrality>15 && tCentrality<50){
+ hAntiCosDeltaPhivsPt1550 ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);
+ hAntiSinDeltaPhivsPt1550 ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);
+ hAntiDeltaPhivsPt1550 ->Fill(deltaphiTPC,tPtCorr);
+ hAntiCosDeltaPhiVZEROvsPt1550 ->Fill(TMath::Cos(deltaphiV0),tPtCorr);
+ hAntiSinDeltaPhiVZEROvsPt1550 ->Fill(TMath::Sin(deltaphiV0),tPtCorr);
+ hAntiDeltaPhiVZEROvsPt1550 ->Fill(deltaphiV0,tPtCorr);
+
+
+ }
+
+ }
+
+ }
+
+
+ if(tTOFtrack[1] > 0){
+ Double_t beta = tTOFtrack[2]/(tTOFtrack[1] * 2.99792457999999984e-02);
+ Float_t gamma = 1/TMath::Sqrt(1 - beta*beta);
+ fhMassTOF->Fill(poutTPC/TMath::Sqrt(gamma*gamma - 1) - 1.8756);
+ }
+ }
+ }
+
+ if(fDataType == "SIM"){
+
+ Int_t label = TMath::Abs(esdtrack->GetLabel());
+ TParticle * part = stack->Particle(label);
+ Int_t PDGCode=part->GetPdgCode();
+
+ Int_t motherPDG=0;
+
+ Int_t mumid = part->GetFirstMother();
+ if(mumid>-1){
+ TParticle *mother=(TParticle*)stack->Particle(mumid);
+ motherPDG = mother->GetPdgCode();
+ }
+
+ if( PDGCode == 1000010020 || PDGCode == -1000010020 || PDGCode == 1000020030 || PDGCode == -1000020030){
+
+ tPDGCode=PDGCode;
+ tPDGCodeMum = motherPDG;
+
+ tIsPrimaryTr = stack->IsPhysicalPrimary(label);
+ tIsSecondaryTr[0] = stack->IsSecondaryFromMaterial(label);
+ tIsSecondaryTr[1] = stack->IsSecondaryFromWeakDecay(label);
+
+ fNtuple1->Fill();
+ fhPtDeu->Fill(esdtrack->Pt(),pT);
+
+ if(tTOFtrack[1] > 0){
+ Double_t beta = tTOFtrack[2]/(tTOFtrack[1] * 2.99792457999999984e-02);
+ Float_t gamma = 1/TMath::Sqrt(1 - beta*beta);
+ fhMassTOF->Fill(poutTPC/TMath::Sqrt(gamma*gamma - 1) - 1.8756);
+ }
+ }
+ }
+
+ } //track
+
+ //==END RECONSTRUCTION==
+
+
+ // MC truth
+
+ if(fDataType == "SIM"){
+
+ for (Int_t iMC=0; iMC<stack->GetNtrack(); iMC++){
+
+ const TParticle *tparticle = stack->Particle(iMC);
+ Long_t PDGCode = tparticle->GetPdgCode();
+
+ Double_t eta = tparticle->Eta();
+ Double_t pt = tparticle->Pt();
+ Double_t rap = tparticle->Y();
+
+ //check which particle it is
+
+ Float_t codemoth = 0;
+
+ Int_t indexMoth=tparticle->GetFirstMother();
+
+ if(indexMoth>=0){
+ TParticle* moth = stack->Particle(indexMoth);
+ codemoth = TMath::Abs(moth->GetPdgCode());
+ }
+
+ //d, 3He
+
+ if( PDGCode == 1000010020 || PDGCode == -1000010020 || PDGCode == 1000020030 || PDGCode == -1000020030){
+
+ tEventNumberMC[0] = evNumber ;
+ tEventNumberMC[1] = runNumber ;
+ tEventNumberMC[2] = BCNumber ;
+ tEventNumberMC[3] = OrbitNumber ;
+ tEventNumberMC[4] = PeriodNumber;
+ tEventNumberMC[5] = TrackNumber;
+
+ tCentralityMC = percentile;
+
+ tVertexCoordMC[0] = xPrimaryVertex;
+ tVertexCoordMC[1] = yPrimaryVertex;
+ tVertexCoordMC[2] = zPrimaryVertex;
+
+ tVertexCoordMC[0] = tparticle->Px();
+ tVertexCoordMC[1] = tparticle->Py();
+ tVertexCoordMC[2] = tparticle->Pz();
+
+ tPDGCodeMC = PDGCode;
+ tPDGCodeMumMC = codemoth;
+ tEtaMC = eta;
+
+ tPtMC = pt;
+ tYMC = rap;
+
+ tIsPrimary = stack->IsPhysicalPrimary(iMC);
+ tIsSecondary[0] = stack->IsSecondaryFromMaterial(iMC);
+ tIsSecondary[1] = stack->IsSecondaryFromWeakDecay(iMC);
+
+
+ fNtuple2->Fill();
+ }
+ }
+
+
+
+ }
+ PostData(1, fListHistCascade);
+ PostData(2, fNtuple1);
+ PostData(3, fNtuple2);
+} //end userexec
+
+
+//________________________________________________________________________
+
+void AliAnalysisTaskNucleiv2::Terminate(Option_t *)
+{
+ // Draw result to the screen
+ // Called once at the end of the query
+}
+
--- /dev/null
+#ifndef ALIANALYSISTASKOVERPROTON_H
+#define ALIANALYSISTASKOVERPROTON_H
+
+/* See cxx source for full Copyright notice */
+
+//-----------------------------------------------------------------
+// AliAnalysisTaskNucleiv2 class
+//-----------------------------------------------------------------
+
+class TList;
+class TH1F;
+class TH2F;
+class TH3F;
+class TNtuple;
+class AliESDcascade;
+//class AliCascadeVertexer;
+#include <AliPIDResponse.h>
+#include "TString.h"
+#include "AliESDtrackCuts.h"
+#include "AliAnalysisTaskSE.h"
+
+class AliAnalysisTaskNucleiv2 : public AliAnalysisTaskSE {
+ public:
+ // AliAnalysisTaskNucleiv2(const char *datatype);
+ AliAnalysisTaskNucleiv2();
+ AliAnalysisTaskNucleiv2(const char *name,const char *datatype,Bool_t filltree);
+ virtual ~AliAnalysisTaskNucleiv2() {}
+
+ virtual void UserCreateOutputObjects();
+ virtual void UserExec(Option_t *option);
+ virtual void Terminate(Option_t *);
+
+ void SetCollidingSystems(Short_t collidingSystems = 0) {fCollidingSystems = collidingSystems;}
+ void SetAnalysisType (const char* analysisType = "ESD") {fAnalysisType = analysisType;}
+ void SetDataType (const char* dataType = "REAL") {fDataType = dataType;}
+ void SetFillTree (Bool_t ifFill = kFALSE) {fFillNtuple = ifFill;}
+ // void SetDataType (const char* dataTypeS = datatype) {fDataType = dataTypeS;}
+ // void SetDataType (const char* dataType) {fDataType = dataType;}
+
+ //Double_t BetheBloch(Double_t bg,Double_t Charge,Bool_t optMC);
+ // Double_t BetheBloch(Double_t bg,Double_t Charge,Bool_t isPbPb);
+ // Bool_t IsTrackAccepted(AliESDtrack * const track);
+ Float_t GetPhi0Pi(Float_t phi);
+ void Initialize();
+ private:
+
+ TString fAnalysisType; //! "ESD" or "AOD" analysis type
+
+ Short_t fCollidingSystems; //! 0 = pp collisions or 1 = AA collisions
+ TString fDataType; //! "REAL" or "SIM" data type
+ Bool_t fFillNtuple; //! fill or not the tree
+
+ TList *fListHistCascade; //! List of Cascade histograms
+ TH1F *fHistEventMultiplicity; //! event multiplicity
+ TH2F *fHistTrackMultiplicity; //! track multiplicity
+ TH2F *fHistTrackMultiplicityCentral; //! track multiplicity
+ TH2F *fHistTrackMultiplicitySemiCentral;//! track multiplicity
+ TH2F *fHistTrackMultiplicityMB; //! track multiplicity
+ TH2F *fhBB; //! ScatterPlot Total
+ TH2F *fhBBDeu; //! ScatterPlot Total
+ TH2F *fhPtDeu; //! correctet vs non correcter d pt
+ TH2F *fhTOF; //! ScatterPlot Total TOF
+ TH1F *fhMassTOF; //! Mass Distribution TOF
+
+ TH2F *hRPangleTPCvsCentrality; //RESOLUTION Histrograms
+ TH2F *hPlaneResoTPCvsCentrality;
+ TH2F *hRPangleVZEROvsCentrality;
+ TH2F *hRPangleVZEROAvsCentrality;
+ TH2F *hRPangleVZEROCvsCentrality;
+ TH2F *hPlaneResoVZEROvsCentrality;
+ TH2F *hPlaneResoVZEROAvsCentrality;
+ TH2F *hPlaneResoVZEROCvsCentrality;
+ TH2F *hCosPhivsPt;
+ TH2F *hSinPhivsPt;
+ TH2F *hPhivsPt;
+ TH2F *hAntiCosPhivsPt;
+ TH2F *hAntiSinPhivsPt;
+ TH2F *hAntiPhivsPt;
+ TH2F *hCosDeltaPhivsPt075;
+ TH2F *hSinDeltaPhivsPt075;
+ TH2F *hDeltaPhivsPt075;
+ TH2F *hCosDeltaPhiVZEROvsPt075;
+ TH2F *hSinDeltaPhiVZEROvsPt075;
+ TH2F *hDeltaPhiVZEROvsPt075;
+ TH2F *hCosDeltaPhivsPt1530;
+ TH2F *hSinDeltaPhivsPt1530;
+ TH2F *hDeltaPhivsPt1530;
+ TH2F *hCosDeltaPhiVZEROvsPt1530;
+ TH2F *hSinDeltaPhiVZEROvsPt1530;
+ TH2F *hDeltaPhiVZEROvsPt1530;
+ TH2F *hCosDeltaPhivsPt3050;
+ TH2F *hSinDeltaPhivsPt3050;
+ TH2F *hDeltaPhivsPt3050;
+ TH2F *hCosDeltaPhiVZEROvsPt3050;
+ TH2F *hSinDeltaPhiVZEROvsPt3050;
+ TH2F *hDeltaPhiVZEROvsPt3050;
+ TH2F *hCosDeltaPhivsPt1550;
+ TH2F *hSinDeltaPhivsPt1550;
+ TH2F *hDeltaPhivsPt1550;
+ TH2F *hCosDeltaPhiVZEROvsPt1550;
+ TH2F *hSinDeltaPhiVZEROvsPt1550;
+ TH2F *hDeltaPhiVZEROvsPt1550;
+ TH2F *hAntiCosDeltaPhivsPt075;
+ TH2F *hAntiSinDeltaPhivsPt075;
+ TH2F *hAntiDeltaPhivsPt075;
+ TH2F *hAntiCosDeltaPhiVZEROvsPt075;
+ TH2F *hAntiSinDeltaPhiVZEROvsPt075;
+ TH2F *hAntiDeltaPhiVZEROvsPt075;
+ TH2F *hAntiCosDeltaPhivsPt1530;
+ TH2F *hAntiSinDeltaPhivsPt1530;
+ TH2F *hAntiDeltaPhivsPt1530;
+ TH2F *hAntiCosDeltaPhiVZEROvsPt1530;
+ TH2F *hAntiSinDeltaPhiVZEROvsPt1530;
+ TH2F *hAntiDeltaPhiVZEROvsPt1530;
+ TH2F *hAntiCosDeltaPhivsPt3050;
+ TH2F *hAntiSinDeltaPhivsPt3050;
+ TH2F *hAntiDeltaPhivsPt3050;
+ TH2F *hAntiCosDeltaPhiVZEROvsPt3050;
+ TH2F *hAntiSinDeltaPhiVZEROvsPt3050;
+ TH2F *hAntiDeltaPhiVZEROvsPt3050;
+ TH2F *hAntiCosDeltaPhivsPt1550;
+ TH2F *hAntiSinDeltaPhivsPt1550;
+ TH2F *hAntiDeltaPhivsPt1550;
+ TH2F *hAntiCosDeltaPhiVZEROvsPt1550;
+ TH2F *hAntiSinDeltaPhiVZEROvsPt1550;
+ TH2F *hAntiDeltaPhiVZEROvsPt1550;
+
+ AliESDtrackCuts * fESDtrackCuts;
+ AliPIDResponse *fPIDResponse; //! pointer to PID response
+
+ //_______________________________________________________________________
+
+ TTree *fNtuple1; //! Some Information on the tracks
+
+ Double_t tEventNumber[7]; //ev number; run number; Bunch Cross - Orbit - Period Number; #tracks; event type
+ Double_t tCentrality ;
+ Double_t tVertexCoord[3];
+
+ //TRACKS
+ Double_t tPIDITS[9]; //n-signas different particle species ITS
+ Double_t tPIDTPC[9]; //n-signas different particle species TPC
+ Double_t tPIDTOF[9]; //n-signas different particle species TOF
+ Double_t tPulls[3]; //Pulls
+
+ Double_t tMomentum[3]; //pxpypz of the tracks
+ Double_t tTPCMomentum; //momentum at theh TPC inner wall
+ Double_t tdEdx; //dEdx of the tracks
+ Double_t tEta; //eta of the tracks
+ Double_t tDCA[2]; //dcaXY and dcaZ of the track
+ Double_t tTracksTPC[2]; //chi^2 and #TPCcluster
+ Double_t tITSclustermap; //ITS cluster map
+ Double_t tITSsample[4]; //ITS samples
+ Int_t tisTOF[2]; //isTOF, isOuterTPCwall
+ Double_t tTOFtrack[3]; //poutTPC,timeTOF,trackLenghtTOF;
+ Int_t tCharge; //Charge of the Track
+ Double_t tPtCorr; //Corrected Momentum
+ Double_t tPhi; //Phi
+ Double_t trpangleTPC; //rpangleTPC
+ Double_t trpangleVZERO[3]; //rpangleVZERO: V0M, V0A, V0C
+
+
+ Double_t tPDGCode; //PDG code ptc
+ Double_t tPDGCodeMum; //PDG code mother ptc
+ Double_t tIsPrimaryTr;
+ Double_t tIsSecondaryTr[2]; //from material ; from weak deacy
+
+ //_______________________________________________________________________
+
+ TTree *fNtuple2; //! MC tree
+
+ Double_t tEventNumberMC[6]; //ev number; run number; Bunch Cross - Orbit - Period Number; #tracks
+ Double_t tCentralityMC;
+ Double_t tVertexCoordMC[3];
+ Double_t tMomentumMC[3]; //pxpypz of the tracks
+
+ Double_t tPDGCodeMC ;
+ Double_t tPDGCodeMumMC ;
+ Double_t tIsPrimary ;
+ Double_t tIsSecondary[2] ; //from material ; from weak deacy
+ Double_t tEtaMC ;
+ Double_t tPtMC ;
+ Double_t tYMC ;
+
+ //_______________________________________________________________________
+
+ AliAnalysisTaskNucleiv2(const AliAnalysisTaskNucleiv2&); // not implemented
+ AliAnalysisTaskNucleiv2& operator=(const AliAnalysisTaskNucleiv2&); // not implemented
+
+ ClassDef(AliAnalysisTaskNucleiv2, 0);
+};
+
+#endif
const char * tag);
TGraphErrors * PlotGSIYields(const char * fileName, Int_t color=kBlack, Int_t lineStyle = kSolid,
const char * tag ="", Bool_t isPbPb = 1);
+TGraphErrors* PlotFlorenceYields(const char * filename, Int_t color, Int_t lineStyle,
+ const char * tag) ;
void AddLineToThermalLegend(TObject * obj, TString line, const char * optFirst = "L");
// Ratios to be draw. Remember to change the labels in DrawFrame if you change this
const Int_t nratio = 10;
-// Int_t denum[nratio] = {kPDGPi , kPDGPi , kPDGKS0 , kPDGPi , kPDGPi , kPDGPi , kPDGDeuteron , kPDGPi , kPDGK , -kPDGK};
-
Int_t num [nratio] = {kPDGK , kPDGProton , kPDGLambda , kPDGXi , kPDGOmega , kPDGDeuteron , kPDGHE3 , kPDGHyperTriton , kPDGPhi , kPDGKStar};
Int_t denum[nratio] = {kPDGPi , kPDGPi , kPDGKS0 , kPDGPi , kPDGPi , kPDGProton , kPDGDeuteron , kPDGPi , kPDGK , kPDGK};
Int_t isSum[nratio] = {1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 };
+
+// const Int_t nratio = 10;
+// Int_t num [nratio] = {kPDGK , kPDGProton , kPDGLambda , kPDGXi , kPDGOmega , kPDGDeuteron , kPDGHE3 , kPDGHyperTriton , kPDGPhi , kPDGKStar};
+// Int_t denum[nratio] = {kPDGPi , kPDGPi , kPDGKS0 , kPDGPi , kPDGPi , kPDGProton , kPDGDeuteron , kPDGPi , kPDGK , kPDGK};
+// Int_t isSum[nratio] = {1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 };
+
const char * ratiosLabels[] = {"#frac{K^{+}+K^{-}}{#pi^{+}+#pi^{-}}",
"#frac{p+#bar{p}}{#pi^{+}+#pi^{-}}",
"#frac{2#Lambda}{K_{S}^{0}}",
"#frac{{}^{3}_{#Lambda}H+{}^{3}_{#Lambda}#bar{H} }{#pi^{+}+#pi^{-}}",
"#frac{#phi}{K^{+}+K^{-}}",
"#frac{K*+#bar{K}*}{K^{+}+K^{-}}",};
-static const Double_t scale[] = {1 , 3 , 0.5 , 30 , 250 , 50 , 100 , 4e5 , 2 , 1 };
+//static const Double_t scale[] = {1 , 3 , 0.5 , 30 , 250 , 50 , 100 , 4e5 , 2 , 1 };
+static const Double_t scale[] = {1 , 3 , 0.5 , 80 , 1000 , 50 , 100 , 4e5 , 2 , 1 };
//static const Double_t scale[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,};
const Int_t npart = 12;
Int_t particleYields [npart] = {kPDGPi ,kPDGK ,kPDGKS0, kPDGKStar, kPDGPhi, kPDGProton , kPDGLambda , kPDGXi , kPDGOmega , kPDGDeuteron, kPDGHyperTriton, kPDGHE3 };
TLegend * legThermal = 0;
#endif
-Bool_t saveCanvas = 0; // if true, the canvas is saved and copied to the analysis note folder
+Bool_t saveCanvas = 1; // if true, the canvas is saved and copied to the analysis note folder
TClonesArray * PlotRatiosForQM14() {
#if !(!defined (__CINT__) || (defined(__MAKECINT__)))
// Uncomment stuff in this section to save the inputs for thermal models
//#define SAVE_INPUT_THERMAL_MODEL
#ifdef SAVE_INPUT_THERMAL_MODEL
- PrepareThermalModelsInputFiles(arrPbPb, AliParticleYield::kCSPbPb, 2760, "V0M0010", /*separateCharges*/1);
+ PrepareThermalModelsInputFiles(arrPbPb, AliParticleYield::kCSPbPb, 2760, "V0M0010", /*separateCharges*/1);
// PrepareThermalModelsInputFiles(arrpp7, AliParticleYield::kCSpp, 7000, "", /*separateCharges*/1);
// PrepareThermalModelsInputFiles(arrpPb, AliParticleYield::kCSpPb, 5020, "V0A0005", /*separateCharges*/1);
// PrepareThermalModelsInputFiles(arrpPb, AliParticleYield::kCSpPb, 5020, "V0A2040", /*separateCharges*/1);
SetStyle();
- // DrawRatio("allpp");
+ DrawRatio("allpp");
+ // DrawRatio("allppWithRHIC");
// DrawRatio("PbPbWithPP7TeV");
//DrawRatio("allsyst");
//DrawRatio("PbPb6080andpPb0005");
// DrawRatio("pp_vsRHIC");
// DrawRatio("PbPb_vsRHIC");
- // DrawRatio("aliceall");
+ //DrawRatio("aliceall");
// Yields and FITS
// maxy=2000;
- //DrawRatio("fit_ReferenceFit_PbPb0010", 1);
- //DrawRatio("fitSHARE_NoPionsNoProtons_PbPb0010",1);
+ // DrawRatio("fit_ReferenceFit_PbPb0010", 1);
+ // DrawRatio("fit_ReferenceFit_GSIONLY_PbPb0010", 1);
+ // DrawRatio("fit_ReferenceFit_GSITHERMUS_PbPb0010",1);
+ // DrawRatio("fitSHARE_NoPionsNoProtons_PbPb0010",1);
// DrawRatio("fitGSI_NoPionsNoProtons_PbPb0010", 1);
- //DrawRatio("fitShare_All_PbPb0010", 1);
+ // DrawRatio("fitShare_All_PbPb0010", 1);
// DrawRatio("fitShareWithWithoutNuclei_PbPb0010", 1);
// maxy=200;
// DrawRatio("fitGSI_PbPb6080", 1);
- // maxy=150;
- // DrawRatio("fitGSI_PbPb2040", 1);
- maxy = 60;
- // DrawRatio("fitThermus_GammaSFree_pPb0005");
- DrawRatio("fitShare_pPb0005");
- // maxy=20;
- // DrawRatio("fitThermus_GammaSFree_pPb2040");
- // maxy=9;
- // DrawRatio("fitThermus_GammaSFree_pPb6080");
- // maxy=9;
- // DrawRatio("fitGSI_pp");
+ // maxy=150;
+ // DrawRatio("fitGSI_PbPb2040", 1);
+ // maxy = 60;
+ // DrawRatio("fitThermus_GammaSFree_pPb0005");
+ // DrawRatio("fitShare_pPb0005");
+ // DrawRatio("fitShare_pPb0005_NoOmega", 1);
+ // maxy=20;
+ // DrawRatio("fitThermus_GammaSFree_pPb2040");
+ // maxy=9;
+ // DrawRatio("fitThermus_GammaSFree_pPb6080");
+ // maxy=9;
+ // DrawRatio("fitGSI_pp");
+ // DrawRatio("fitFlorence_pp");
// NewLegendQM();
return arrPbPb;
SaveCanvas("Ratios_pponly");
}
+ else if (what == "allppWithRHIC"){
+ DrawRatio("frame");
+ DrawRatio("pp900", 0, 0.05);
+ DrawRatio("pp276", 0, 0.20);
+ DrawRatio("pp7", 0, 0.35);
+ DrawRatio("ppPHENIX", 0, -0.35);
+ DrawRatio("ppSTAR", 0, -0.15);
+
+ array =0;
+
+ NewLegendQM(0.588353, 0.636857, 0.910643, 0.948352);
+
+ SaveCanvas("Ratios_pponly_withRHIC");
+ }
else if (what == "PbPbWithPP7TeV"){
DrawRatio("frame");
SaveCanvas("Fit_PbPb0010_Reference");
array =0;
- } else if( what == "fitSHARE_NoPionsNoProtons_PbPb0010") {
+ } else if( what == "fit_ReferenceFit_GSIONLY_PbPb0010") {
+
+ DrawRatio("frame",1);
+ DrawRatio("PbPb_0010",1);
+ particlesToExcludeFromChi2="[313]"; // do not consider K*
+ legThermal->SetNColumns(4);
+ AddLineToThermalLegend(legThermal, "Model,T (MeV), V (fm^{3}), #chi^{2}/NDF", "0");
+ // FIXME: sistemare valori rapporti
+ shiftRatioDataModel =0;
+ PlotGSIYields("data+therm_fit2_s2760_0-10qm14.dat" , kBlack , kSolid , "GSI , 156 #pm 2 , 5330 #pm 505 , 17.4/9");
+
+ myPadHisto->cd();
+ NewLegendQM(0.651606, 0.765993, 0.909639, 0.865951, 1);
+ DrawMarkerKStarNoFit() ;
+ DrawExtrapolatedSymbolsYieldsPbPb0010();
+
+ SaveCanvas("Fit_PbPb0010_Reference_GSI");
+
+ array =0;
+ } else if( what == "fit_ReferenceFit_GSITHERMUS_PbPb0010") {
+
+ DrawRatio("frame",1);
+ DrawRatio("PbPb_0010",1);
+ particlesToExcludeFromChi2="[313]"; // do not consider K*
+ legThermal->SetNColumns(4);
+ AddLineToThermalLegend(legThermal, "Model,T (MeV), V (fm^{3}), #chi^{2}/NDF", "0");
+ // FIXME: sistemare valori rapporti
+ shiftRatioDataModel =-0.1;
+ PlotThermusYields("lhc2760_final_0005_single_gc_output_gs1_wevc_nkst.txt" , kBlack , kSolid , "THERMUS 2.3 , 155 #pm 2 , 5924 #pm 543 , 23.6/9");
+ shiftRatioDataModel =0.1;
+ PlotGSIYields("data+therm_fit2_s2760_0-10qm14.dat" , kOrange-1 , kDashed , "GSI , 156 #pm 2 , 5330 #pm 505 , 17.4/9");
+
+
+ myPadHisto->cd();
+ NewLegendQM(0.651606, 0.765993, 0.909639, 0.865951, 1);
+ DrawMarkerKStarNoFit() ;
+ DrawExtrapolatedSymbolsYieldsPbPb0010();
+
+ SaveCanvas("Fit_PbPb0010_Reference_GSITHERMUS");
+ // SaveCanvas("");
+
+ array =0;
+ }else if( what == "fitSHARE_NoPionsNoProtons_PbPb0010") {
array =0;
DrawRatio("frame",1);
std::cout << "MISSING DATA" << std::endl;
array =0;
} else if( what == "fitShare_pPb0005") {
+
+
DrawRatio("frame",1);
- DrawRatio("pPb0005",1);
- legThermal->SetNColumns(1);
- PlotThermusYields("fit_gamma_q_s_fixed_pPb_0005.txt" , kGreen , kDashDotted , "SHARE 3 q fix s fix");
- PlotThermusYields("fit_gamma_q_fixed_pPb_0005.txt" , kBlue , kDashDotted , "SHARE 3 q fix s free");
- PlotThermusYields("fit_gamma_q_s_free_pPb_0005.txt" , kRed , kDashDotted , "SHARE 3 q free s free");
- PlotThermusYields("fit_gamma_q_s_free_with_d_pPb_0005.txt", kBlack, kSolid, "SHARE 3 (with d) q free s free");
- NewLegendQM(0.613454, 0.701578, 0.940763, 0.918272, 1);
+ DrawRatio("pPb0005",1, 0.00001);
+ legThermal->SetNColumns(6);
+ AddLineToThermalLegend(legThermal, "Model,T (MeV), V (fm^{3}), #gamma_{s}, #gamma_{q}, #chi^{2}/NDF", "0");
+ particlesToExcludeFromChi2="[313][1000010020][1000020030][1010010030]"; // do not consider K* and nuclei
+
+ shiftRatioDataModel = -0.2;
+ PlotThermusYields("NEW_fit_gamma_q_s_fixed_pPb_0005_without_nuclei.txt" , kBlack , kSolid , "SHARE 3 , 158 #pm 3 , 121 #pm 18 , 1 (fix) , 1 (fix) , 24.3/6");
+ shiftRatioDataModel = 0;
+ PlotThermusYields("NEW_fit_gamma_q_fixed_pPb_0005_without_nuclei.txt" , kBlue+1 , kDashDotted , "SHARE 3 , 161 #pm 3 , 115 #pm 17 , 0.93 #pm 0.04 , 1 (fix) , 20.3/5");
+ shiftRatioDataModel = 0.2;
+ PlotThermusYields("NEW_fit_gamma_q_s_free_pPb_0005_without_nuclei.txt" , kOrange+2 , kDashDotted , "SHARE 3 , 144 #pm 1 , 81 #pm 25 , 1.599 #pm 0 , 1.71 #pm 0.06 , 11.4/4");
+
+ NewLegendQM(0.650602, 0.694971, 0.909639, 0.865951, 1);
+ DrawExtrapNotInFitpPb0005() ;
+ DrawMarkerNucleiNoFit();
+ legThermal->SetX1(0.124498 );
+ legThermal->SetY1(0.0715488);
+ legThermal->SetX2(0.672691 );
+ legThermal->SetY2(0.384575 );
+
+ SaveCanvas("Fit_pPb0005_SHARE");
+
+
array =0;
- } else if( what == "fitShare_pPb2040") {
+ } else if( what == "fitShare_pPb0005_NoOmega") {
+
+
+ DrawRatio("frame",1);
+ DrawRatio("pPb0005",1, 0.00001);
+ legThermal->SetNColumns(6);
+ AddLineToThermalLegend(legThermal, "Model,T (MeV), V (fm^{3}), #gamma_{s}, #gamma_{q}, #chi^{2}/NDF", "0");
+ particlesToExcludeFromChi2="[313][1000010020][1000020030][1010010030]"; // do not consider K* and nuclei
+
+ shiftRatioDataModel = -0.3;
+ PlotThermusYields("NEW_fit_gamma_q_s_fixed_pPb_0005_without_nuclei.txt" , kBlack , kSolid , "SHARE 3 , 158 #pm 3 , 121 #pm 18 , 1 (fix) , 1 (fix), 24.3/6");
+ shiftRatioDataModel = -.1;
+ PlotThermusYields("NEW_fit_gamma_q_s_fixed_pPb_0005_without_nuclei_excluding_Omega.txt" , kBlue+1 , kDashDotted , "SHARE 3 (No #Omega) , 163 #pm 4 , 99 #pm 17 , 1 (fix) , 1 (fix), 15.6/5");
+ shiftRatioDataModel = 0.1;
+ PlotThermusYields("NEW_fit_gamma_q_fixed_pPb_0005_without_nuclei_excluding_Omega.txt" , kOrange+2 , kDashed , "SHARE 3 (No #Omega) , 163 #pm 3 , 100 #pm 16 , 0.96 #pm 0.04 , 1 (fix), 14.7/4");
+ shiftRatioDataModel = 0.3;
+ PlotThermusYields("NEW_fit_gamma_q_s_fixed_pPb_0005_with_nuclei_excluding_Omega.txt" , kCyan+2 , kDotted , "SHARE 3 (No #Omega + d) , 160 #pm 3 , 114 #pm 17 , 1 (fix) , 1 (fix), 18.6/6");
+
+ NewLegendQM(0.650602, 0.694971, 0.909639, 0.865951, 1);
+ DrawExtrapNotInFitpPb0005() ;
+ DrawMarkerNucleiNoFit();
+ legThermal->SetX1(0.124498 );
+ legThermal->SetY1(0.0715488);
+ legThermal->SetX2(0.672691 );
+ legThermal->SetY2(0.384575 );
+
+ SaveCanvas("Fit_pPb0005_SHARE_NoOmega");
+
+
+ array =0;
+
+ } else if( what == "fitShare_pPb2040") {
std::cout << "MISSING DATA" << std::endl;
array =0;
} else if( what == "fitShare_pPb6080") {
SaveCanvas("Fit_pp7000_GSI");
//DrawExtrapNotInFitpPb0005(0);
array =0;
+ }else if( what == "fitFlorence_pp") {
+ DrawRatio("frame",1);
+ DrawRatio("pp7",1, 0.00001);
+ legThermal->SetNColumns(1);
+ AddLineToThermalLegend(legThermal, "Model", "0");
+ shiftRatioDataModel = -0.1;
+ particlesToExcludeFromChi2 = "[1000020030][1010010030][1000010020]";
+ PlotFlorenceYields("pp7000_Florence.txt", kBlack, kSolid, "Becattini et al.");
+ shiftRatioDataModel = 0.1;
+ particlesToExcludeFromChi2 = "[313][1000020030][1010010030]";
+ PlotGSIYields ("data+therm_fit2_s7000gs.dat", kRed+1, kDashed, "GSI GC",0);
+ myPadHisto->cd();
+ NewLegendQM(0.725904, 0.761431, 0.874498, 0.841323, 1);
+
+ SaveCanvas("Fit_pp7000_Florence");
+ //DrawExtrapNotInFitpPb0005(0);
+ array =0;
} else if( what == "fitGSI_fullCanonical") {
std::cout << "MISSING DATA" << std::endl;
array =0;
void DrawFrame(Bool_t isYield) {
- myCan = new TCanvas("myCan","ThermalFits",50,10,1000,isYield ? 820 : 650);
+ myCan = new TCanvas("myCan","ThermalFits",50,10,1000,isYield ? 950 : 650);
myCan->Draw();
myCan->cd();
// Set the Pads
myPadSetUp(myPadHisto);
myPadHisto->Draw();
- myPadStdDev = new TPad("myPadStdDev","myPadStdDev",0.0,0.0,1.0,0.2,0);
+ myPadStdDev = new TPad("myPadStdDev","myPadStdDev",0.0,0.035,1.0,0.215,0);
myPadSetUp(myPadStdDev);
if(isYield) myPadStdDev->Draw();
myPadStdDev->SetGridx();
myPadStdDev->SetGridy();
// This pad is for the ratios data/model
- myPadRatio = new TPad("myPadRatio","myPadRatio",0.0,0.2,1.0,0.4,0);
+ myPadRatio = new TPad("myPadRatio","myPadRatio",0.0,0.22,1.0,0.4,0);
myPadSetUp(myPadRatio);
if(isYield) myPadRatio->Draw();
myPadRatio->SetGridx();
return gThermus;
}
+TGraphErrors* PlotFlorenceYields(const char * filename, Int_t color, Int_t lineStyle,
+ const char * tag) {
+
+ Int_t lw = lineStyle == kSolid ? 2 : 3; // Set line width
+
+
+ std::map<Int_t,Double_t> mapYields;
+ std::map<Int_t,Double_t> mapStdDev;
+
+ Int_t pdg;
+ Double_t yield, yieldbar, stddev;
+ ifstream thermusFile(filename);
+ TString line;
+ std::cout << "---"<<tag<<"---" << std::endl;
+
+ // std::istream is(thermusFile);
+ // Read the std dev and the ratio in 2 maps, then plot them in a graph.
+ while(line.ReadLine(thermusFile, kTRUE)) {
+ if(line.BeginsWith("#")) continue;
+ TObjArray * tokens = line.Tokenize(" \t");
+ if(tokens->GetEntries() != 4) continue;// not a line with data
+ // thermusFile >> pdg >> yield >> stddev;
+ pdg = ((TObjString*)tokens->At(0))->String().Atof();
+ yield = ((TObjString*)tokens->At(2))->String().Atof();
+ yieldbar = ((TObjString*)tokens->At(3))->String().Atof(); // Antiparticle yield
+ if(pdg == 0) {
+ // not a line with data
+ delete tokens;
+ continue ;
+ }
+ if( thermusFile.eof() ) break;
+ std::cout << "PDG " << pdg << " " << yield << " " << yieldbar << std::endl;
+
+ mapYields[TMath::Abs(pdg)] += yieldbar ? ((yield+yieldbar)/2) : yield; // If the antiparticle exists, use the average
+
+ delete tokens;
+ }
+
+ // Now plot
+ TGraphErrors * gFlorence = new TGraphErrors;
+ for(Int_t ipart = 0; ipart < npart; ipart++){
+ gFlorence->SetPoint(ipart, ipart+1.5, mapYields[particleYields[ipart]]);
+ gFlorence->SetPointError(ipart, 0.3, 0);
+ }
+
+ myPadHisto->cd();
+ gFlorence->Draw("PZ");
+ gFlorence->SetLineWidth(lw);
+
+ gFlorence->SetLineColor(color);
+ gFlorence->SetLineStyle(lineStyle);
+ gFlorence->SetTitle("NoLegend");
+
+
+
+ TGraphErrors* gStdDev2 = 0;
+ TGraphErrors* gRatio = 0;
+ std::cout << "CHI2: "
+ << GetGraphRatioAndStdDev(gFlorence, gRatio, gStdDev2)
+ << std::endl;
+ myPadRatio->cd();
+ gRatio->Draw("PZ");
+ myPadStdDev->cd();
+ gStdDev2->Draw("PZ");
+ myPadHisto->cd();
+ AddLineToThermalLegend(gFlorence, tag, "l");
+ return gFlorence;
+}
TGraphErrors* PlotGSIYields(const char * filename, Int_t color, Int_t lineStyle,
Double_t fTotaltotET, fTotalAcctotET, fTotalRectotET, fTotalRectotETDep;//Total ET
- AliEMCALGeometry *fGeoUt;//EMCal geometry object
+ AliEMCALGeometry *fGeoUt;//!//EMCal geometry object
// *******************
// primaries ET
// *******************
- TH2F *fHistPrimEtaEET;//total ET - Eta vs E
- TH2F *fHistPrimEtaPtET;//total ET - Eta vs pt
- TH2F *fHistPrimEtaET;//total ET - Eta
- TH1F *fHistPrimtotET;//total ET distribution
+ TH2F *fHistPrimEtaEET;//!//total ET - Eta vs E
+ TH2F *fHistPrimEtaPtET;//!//total ET - Eta vs pt
+ TH2F *fHistPrimEtaET;//!//total ET - Eta
+ TH1F *fHistPrimtotET;//!//total ET distribution
- TH2F *fHistPrimAccEtaEET;//acceptance ET - Eta vs E
- TH2F *fHistPrimAccEtaPtET;//acceptance ET - Eta vs pt
- TH2F *fHistPrimAccEtaET;//acceptance ET - Eta
- TH1F *fHistPrimAcctotET;//acceptance ET distribution
+ TH2F *fHistPrimAccEtaEET;//!//acceptance ET - Eta vs E
+ TH2F *fHistPrimAccEtaPtET;//!//acceptance ET - Eta vs pt
+ TH2F *fHistPrimAccEtaET;//!//acceptance ET - Eta
+ TH1F *fHistPrimAcctotET;//!//acceptance ET distribution
- TH2F *fHistPrimRecEtaEET;//reconstructed ET - Eta vs E
- TH2F *fHistPrimRecEtaPtET;//reconstructed ET - Eta vs pt
- TH2F *fHistPrimRecEtaET;//reconstructed ET - Eta
- TH1F *fHistPrimRectotET;//reconstructed ET distribution
+ TH2F *fHistPrimRecEtaEET;//!//reconstructed ET - Eta vs E
+ TH2F *fHistPrimRecEtaPtET;//!//reconstructed ET - Eta vs pt
+ TH2F *fHistPrimRecEtaET;//!//reconstructed ET - Eta
+ TH1F *fHistPrimRectotET;//!//reconstructed ET distribution
- TH2F *fHistPrimRecEtaEDepETDep;//deposited ET - Eta vs E deposited
- TH2F *fHistPrimRecEtaPtETDep;//deposited ET - Eta vs pt
- TH2F *fHistPrimRecEtaETDep;//deposited ET - Eta
- TH1F *fHistPrimRectotETDep;//deposited ET distribution
+ TH2F *fHistPrimRecEtaEDepETDep;//!//deposited ET - Eta vs E deposited
+ TH2F *fHistPrimRecEtaPtETDep;//!//deposited ET - Eta vs pt
+ TH2F *fHistPrimRecEtaETDep;//!//deposited ET - Eta
+ TH1F *fHistPrimRectotETDep;//!//deposited ET distribution
// *******************
// electron ET
// *******************
- TH2F *fHistElectronEtaEET;// ET - Eta vs E
- TH2F *fHistElectronEtaPtET;//ET - Eta vs pt
- TH2F *fHistElectronEtaET;// ET - Eta
- TH2F *fHistElectronEtaE;// multiplicity - Eta vs E
- TH2F *fHistElectronEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistElectrontotET;// total ET distribution
+ TH2F *fHistElectronEtaEET;//!// ET - Eta vs E
+ TH2F *fHistElectronEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistElectronEtaET;//!// ET - Eta
+ TH2F *fHistElectronEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistElectronEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistElectrontotET;//!// total ET distribution
- TH2F *fHistConvElectronEtaEET;//ET - Eta vs E
- TH2F *fHistConvElectronEtaPtET;//ET - Eta vs pt
- TH2F *fHistConvElectronEtaET;// ET - Eta
- TH2F *fHistConvElectronEtaE;// multiplicity - Eta vs E
- TH2F *fHistConvElectronEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistConvElectrontotET;// total ET distribution
+ TH2F *fHistConvElectronEtaEET;//!//ET - Eta vs E
+ TH2F *fHistConvElectronEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistConvElectronEtaET;//!// ET - Eta
+ TH2F *fHistConvElectronEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistConvElectronEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistConvElectrontotET;//!// total ET distribution
- TH2F *fHistScatElectronEtaEET;//ET - Eta vs E
- TH2F *fHistScatElectronEtaPtET;//ET - Eta vs pt
- TH2F *fHistScatElectronEtaET;// ET - Eta
- TH2F *fHistScatElectronEtaE;// multiplicity - Eta vs E
- TH2F *fHistScatElectronEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistScatElectrontotET;// total ET distribution
+ TH2F *fHistScatElectronEtaEET;//!//ET - Eta vs E
+ TH2F *fHistScatElectronEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistScatElectronEtaET;//!// ET - Eta
+ TH2F *fHistScatElectronEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistScatElectronEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistScatElectrontotET;//!// total ET distribution
// *******************
// total electron ET
// *******************
- TH1F *fHistTotElectrontotET;//total ET distribution
+ TH1F *fHistTotElectrontotET;//!//total ET distribution
// *******************
// gamma ET
// *******************
- TH2F *fHistGammaEtaEET;//ET - Eta vs E
- TH2F *fHistGammaEtaPtET;//ET - Eta vs pt
- TH2F *fHistGammaEtaET;// ET - Eta
- TH2F *fHistGammaEtaE;// multiplicity - Eta vs E
- TH2F *fHistGammaEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistGammatotET;// total ET distribution
+ TH2F *fHistGammaEtaEET;//!//ET - Eta vs E
+ TH2F *fHistGammaEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistGammaEtaET;//!// ET - Eta
+ TH2F *fHistGammaEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistGammaEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistGammatotET;//!// total ET distribution
- TH2F *fHistAnnihGammaEtaEET;//ET - Eta vs E
- TH2F *fHistAnnihGammaEtaPtET;//ET - Eta vs pt
- TH2F *fHistAnnihGammaEtaET;// ET - Eta
- TH2F *fHistAnnihGammaEtaE;// multiplicity - Eta vs E
- TH2F *fHistAnnihGammaEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistAnnihGammatotET;// total ET distribution
+ TH2F *fHistAnnihGammaEtaEET;//!//ET - Eta vs E
+ TH2F *fHistAnnihGammaEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistAnnihGammaEtaET;//!// ET - Eta
+ TH2F *fHistAnnihGammaEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistAnnihGammaEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistAnnihGammatotET;//!// total ET distribution
- TH2F *fHistScatGammaEtaEET;//ET - Eta vs E
- TH2F *fHistScatGammaEtaPtET;//ET - Eta vs pt
- TH2F *fHistScatGammaEtaET;// ET - Eta
- TH2F *fHistScatGammaEtaE;// multiplicity - Eta vs E
- TH2F *fHistScatGammaEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistScatGammatotET;// total ET distribution
+ TH2F *fHistScatGammaEtaEET;//!//ET - Eta vs E
+ TH2F *fHistScatGammaEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistScatGammaEtaET;//!// ET - Eta
+ TH2F *fHistScatGammaEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistScatGammaEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistScatGammatotET;//!// total ET distribution
- TH2F *fHistConvGammaEtaEET;//ET - Eta vs E
- TH2F *fHistConvGammaEtaPtET;//ET - Eta vs pt
- TH2F *fHistConvGammaEtaET;// ET - Eta
- TH2F *fHistConvGammaEtaE;// multiplicity - Eta vs E
- TH2F *fHistConvGammaEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistConvGammatotET;// total ET distribution
+ TH2F *fHistConvGammaEtaEET;//!//ET - Eta vs E
+ TH2F *fHistConvGammaEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistConvGammaEtaET;//!// ET - Eta
+ TH2F *fHistConvGammaEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistConvGammaEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistConvGammatotET;//!// total ET distribution
- TH2F *fHistNonConvGammaEtaEET;//ET - Eta vs E
- TH2F *fHistNonConvGammaEtaPtET;//ET - Eta vs pt
- TH2F *fHistNonConvGammaEtaET;// ET - Eta
- TH2F *fHistNonConvGammaEtaE;// multiplicity - Eta vs E
- TH2F *fHistNonConvGammaEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistNonConvGammatotET;// total ET distribution
+ TH2F *fHistNonConvGammaEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNonConvGammaEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistNonConvGammaEtaET;//!// ET - Eta
+ TH2F *fHistNonConvGammaEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNonConvGammaEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistNonConvGammatotET;//!// total ET distribution
// *******************
// total gamma ET
// *******************
- TH1F *fHistTotGammatotET;//total ET distribution
+ TH1F *fHistTotGammatotET;//!//total ET distribution
// *******************
// total electromagnetic ET
// *******************
- TH1F *fHistTotEMtotET;//total ET distribution
+ TH1F *fHistTotEMtotET;//!//total ET distribution
// non-primary electromagnetic ET
- TH2F *fHistNPPElectronEtaEET;//ET - Eta vs E
- TH2F *fHistNPPElectronEtaPtET;//ET - Eta vs pt
- TH2F *fHistNPPElectronEtaET;// ET - Eta
- TH2F *fHistNPPElectronEtaE;// multiplicity - Eta vs E
- TH2F *fHistNPPElectronEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistNPPElectrontotET;// total ET distribution
-
- TH2F *fHistNPPGammaEtaEET;//ET - Eta vs E
- TH2F *fHistNPPGammaEtaPtET;//ET - Eta vs pt
- TH2F *fHistNPPGammaEtaET;// ET - Eta
- TH2F *fHistNPPGammaEtaE;// multiplicity - Eta vs E
- TH2F *fHistNPPGammaEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistNPPGammatotET;// total ET distribution
-
- TH1F *fHistTotNPPEMtotET;//total ET distribution
-
- TH2F *fHistNPPPi0GammaEtaEET;//ET - Eta vs E
- TH2F *fHistNPPPi0GammaEtaPtET;//ET - Eta vs pt
- TH2F *fHistNPPPi0GammaEtaET;// ET - Eta
- TH2F *fHistNPPPi0GammaEtaE;// multiplicity - Eta vs E
- TH2F *fHistNPPPi0GammaEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistNPPPi0GammatotET;// total ET distribution
+ TH2F *fHistNPPElectronEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNPPElectronEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistNPPElectronEtaET;//!// ET - Eta
+ TH2F *fHistNPPElectronEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNPPElectronEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistNPPElectrontotET;//!// total ET distribution
+
+ TH2F *fHistNPPGammaEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNPPGammaEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistNPPGammaEtaET;//!// ET - Eta
+ TH2F *fHistNPPGammaEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNPPGammaEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistNPPGammatotET;//!// total ET distribution
+
+ TH1F *fHistTotNPPEMtotET;//!//total ET distribution
+
+ TH2F *fHistNPPPi0GammaEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNPPPi0GammaEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistNPPPi0GammaEtaET;//!// ET - Eta
+ TH2F *fHistNPPPi0GammaEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNPPPi0GammaEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistNPPPi0GammatotET;//!// total ET distribution
// *******************
// electron ET inside EMCal acceptance
// *******************
- TH2F *fHistElectronAccEtaEET;//ET - Eta vs E
- TH2F *fHistElectronAccEtaPtET;//ET - Eta vs pt
- TH2F *fHistElectronAccEtaET;// ET - Eta
- TH2F *fHistElectronAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistElectronAccEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistElectronAcctotET;// total ET distribution
+ TH2F *fHistElectronAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistElectronAccEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistElectronAccEtaET;//!// ET - Eta
+ TH2F *fHistElectronAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistElectronAccEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistElectronAcctotET;//!// total ET distribution
- TH2F *fHistConvElectronAccEtaEET;//ET - Eta vs E
- TH2F *fHistConvElectronAccEtaPtET;//ET - Eta vs pt
- TH2F *fHistConvElectronAccEtaET;// ET - Eta
- TH2F *fHistConvElectronAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistConvElectronAccEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistConvElectronAcctotET;// total ET distribution
+ TH2F *fHistConvElectronAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistConvElectronAccEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistConvElectronAccEtaET;//!// ET - Eta
+ TH2F *fHistConvElectronAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistConvElectronAccEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistConvElectronAcctotET;//!// total ET distribution
- TH2F *fHistScatElectronAccEtaEET;//ET - Eta vs E
- TH2F *fHistScatElectronAccEtaPtET;//ET - Eta vs pt
- TH2F *fHistScatElectronAccEtaET;// ET - Eta
- TH2F *fHistScatElectronAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistScatElectronAccEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistScatElectronAcctotET;// total ET distribution
+ TH2F *fHistScatElectronAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistScatElectronAccEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistScatElectronAccEtaET;//!// ET - Eta
+ TH2F *fHistScatElectronAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistScatElectronAccEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistScatElectronAcctotET;//!// total ET distribution
// *******************
// total electron ET inside EMCal acceptance
// *******************
- TH1F *fHistTotElectronAcctotET;//total ET distribution
+ TH1F *fHistTotElectronAcctotET;//!//total ET distribution
// *******************
// gamma ET inside EMCal acceptance
// *******************
- TH2F *fHistGammaAccEtaEET;//ET - Eta vs E
- TH2F *fHistGammaAccEtaPtET;//ET - Eta vs pt
- TH2F *fHistGammaAccEtaET;// ET - Eta
- TH2F *fHistGammaAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistGammaAccEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistGammaAcctotET;// total ET distribution
-
- TH2F *fHistAnnihGammaAccEtaEET;//ET - Eta vs E
- TH2F *fHistAnnihGammaAccEtaPtET;//ET - Eta vs pt
- TH2F *fHistAnnihGammaAccEtaET;// ET - Eta
- TH2F *fHistAnnihGammaAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistAnnihGammaAccEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistAnnihGammaAcctotET;// total ET distribution
-
- TH2F *fHistScatGammaAccEtaEET;//ET - Eta vs E
- TH2F *fHistScatGammaAccEtaPtET;//ET - Eta vs pt
- TH2F *fHistScatGammaAccEtaET;// ET - Eta
- TH2F *fHistScatGammaAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistScatGammaAccEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistScatGammaAcctotET;// total ET distribution
-
- TH2F *fHistConvGammaAccEtaEET;//ET - Eta vs E
- TH2F *fHistConvGammaAccEtaPtET;//ET - Eta vs pt
- TH2F *fHistConvGammaAccEtaET;// ET - Eta
- TH2F *fHistConvGammaAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistConvGammaAccEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistConvGammaAcctotET;// total ET distribution
-
- TH2F *fHistNonConvGammaAccEtaEET;//ET - Eta vs E
- TH2F *fHistNonConvGammaAccEtaPtET;//ET - Eta vs pt
- TH2F *fHistNonConvGammaAccEtaET;// ET - Eta
- TH2F *fHistNonConvGammaAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistNonConvGammaAccEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistNonConvGammaAcctotET;// total ET distribution
+ TH2F *fHistGammaAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistGammaAccEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistGammaAccEtaET;//!// ET - Eta
+ TH2F *fHistGammaAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistGammaAccEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistGammaAcctotET;//!// total ET distribution
+
+ TH2F *fHistAnnihGammaAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistAnnihGammaAccEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistAnnihGammaAccEtaET;//!// ET - Eta
+ TH2F *fHistAnnihGammaAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistAnnihGammaAccEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistAnnihGammaAcctotET;//!// total ET distribution
+
+ TH2F *fHistScatGammaAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistScatGammaAccEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistScatGammaAccEtaET;//!// ET - Eta
+ TH2F *fHistScatGammaAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistScatGammaAccEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistScatGammaAcctotET;//!// total ET distribution
+
+ TH2F *fHistConvGammaAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistConvGammaAccEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistConvGammaAccEtaET;//!// ET - Eta
+ TH2F *fHistConvGammaAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistConvGammaAccEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistConvGammaAcctotET;//!// total ET distribution
+
+ TH2F *fHistNonConvGammaAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNonConvGammaAccEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistNonConvGammaAccEtaET;//!// ET - Eta
+ TH2F *fHistNonConvGammaAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNonConvGammaAccEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistNonConvGammaAcctotET;//!// total ET distribution
// *******************
// total gamma ET inside EMCal acceptance
// *******************
- TH1F *fHistTotGammaAcctotET;//total ET distribution
+ TH1F *fHistTotGammaAcctotET;//!//total ET distribution
// *******************
// total electromagnetic ET inside EMCal acceptance
// *******************
- TH1F *fHistTotEMAcctotET;//total ET distribution
+ TH1F *fHistTotEMAcctotET;//!//total ET distribution
// non-primary electromagnetic ET
- TH2F *fHistNPPElectronAccEtaEET;//ET - Eta vs E
- TH2F *fHistNPPElectronAccEtaPtET;//ET - Eta vs pt
- TH2F *fHistNPPElectronAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistNPPElectronAccEtaPt;// multiplicity - Eta vs pt
+ TH2F *fHistNPPElectronAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNPPElectronAccEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistNPPElectronAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNPPElectronAccEtaPt;//!// multiplicity - Eta vs pt
- TH2F *fHistNPPGammaAccEtaEET;//ET - Eta vs E
- TH2F *fHistNPPGammaAccEtaPtET;//ET - Eta vs pt
- TH2F *fHistNPPGammaAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistNPPGammaAccEtaPt;// multiplicity - Eta vs pt
+ TH2F *fHistNPPGammaAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNPPGammaAccEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistNPPGammaAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNPPGammaAccEtaPt;//!// multiplicity - Eta vs pt
// *******************
// electron ET reconstructed in EMCal
// *******************
- TH2F *fHistElectronRecEtaEET;//ET - Eta vs E
- TH2F *fHistElectronRecEtaPtET;//ET - Eta vs pt
- TH2F *fHistElectronRecEtaET;// ET - Eta
- TH2F *fHistElectronRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistElectronRecEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistElectronRectotET;// total ET distribution
+ TH2F *fHistElectronRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistElectronRecEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistElectronRecEtaET;//!// ET - Eta
+ TH2F *fHistElectronRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistElectronRecEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistElectronRectotET;//!// total ET distribution
- TH2F *fHistConvElectronRecEtaEET;//ET - Eta vs E
- TH2F *fHistConvElectronRecEtaPtET;//ET - Eta vs pt
- TH2F *fHistConvElectronRecEtaET;// ET - Eta
- TH2F *fHistConvElectronRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistConvElectronRecEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistConvElectronRectotET;// total ET distribution
+ TH2F *fHistConvElectronRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistConvElectronRecEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistConvElectronRecEtaET;//!// ET - Eta
+ TH2F *fHistConvElectronRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistConvElectronRecEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistConvElectronRectotET;//!// total ET distribution
- TH2F *fHistScatElectronRecEtaEET;//ET - Eta vs E
- TH2F *fHistScatElectronRecEtaPtET;//ET - Eta vs pt
- TH2F *fHistScatElectronRecEtaET;// ET - Eta
- TH2F *fHistScatElectronRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistScatElectronRecEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistScatElectronRectotET;// total ET distribution
+ TH2F *fHistScatElectronRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistScatElectronRecEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistScatElectronRecEtaET;//!// ET - Eta
+ TH2F *fHistScatElectronRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistScatElectronRecEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistScatElectronRectotET;//!// total ET distribution
// *******************
// total Electron ET reconstructed in EMCal
// *******************
- TH1F *fHistTotElectronRectotET;//total ET distribution
+ TH1F *fHistTotElectronRectotET;//!//total ET distribution
// *******************
// gamma ET reconstructed in EMCal
// *******************
- TH2F *fHistGammaRecEtaEET;//ET - Eta vs E
- TH2F *fHistGammaRecEtaPtET;//ET - Eta vs pt
- TH2F *fHistGammaRecEtaET;// ET - Eta
- TH2F *fHistGammaRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistGammaRecEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistGammaRectotET;// total ET distribution
+ TH2F *fHistGammaRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistGammaRecEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistGammaRecEtaET;//!// ET - Eta
+ TH2F *fHistGammaRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistGammaRecEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistGammaRectotET;//!// total ET distribution
- TH2F *fHistGammaRecResEET;// ET - track matching residual vs E_Added CAIO
- TH2F *fHistGammaRecResPtET;// ET - track matching residual vs pt_Added CAIO
- TH2F *fHistGammaRecResE;// multiplicity - track matching residual vs E_Added CAIO
- TH2F *fHistGammaRecResPt;// multiplicity - track matching residual vs pt_Added CAIO
- TH2F *fHistGammaRecResEDepETDep;// ET deposited - track matching residual vs E deposited_Added CAIO
- TH2F *fHistGammaRecResPtETDep;// ET deposited - track matching residual vs pt_Added Caio
+ TH2F *fHistGammaRecResEET;//!// ET - track matching residual vs E_Added CAIO
+ TH2F *fHistGammaRecResPtET;//!// ET - track matching residual vs pt_Added CAIO
+ TH2F *fHistGammaRecResE;//!// multiplicity - track matching residual vs E_Added CAIO
+ TH2F *fHistGammaRecResPt;//!// multiplicity - track matching residual vs pt_Added CAIO
+ TH2F *fHistGammaRecResEDepETDep;//!// ET deposited - track matching residual vs E deposited_Added CAIO
+ TH2F *fHistGammaRecResPtETDep;//!// ET deposited - track matching residual vs pt_Added Caio
- TH2F *fHistAnnihGammaRecEtaEET;//ET - Eta vs E
- TH2F *fHistAnnihGammaRecEtaPtET;//ET - Eta vs pt
- TH2F *fHistAnnihGammaRecEtaET;// ET - Eta
- TH2F *fHistAnnihGammaRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistAnnihGammaRecEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistAnnihGammaRectotET;// total ET distribution
+ TH2F *fHistAnnihGammaRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistAnnihGammaRecEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistAnnihGammaRecEtaET;//!// ET - Eta
+ TH2F *fHistAnnihGammaRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistAnnihGammaRecEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistAnnihGammaRectotET;//!// total ET distribution
- TH2F *fHistScatGammaRecEtaEET;//ET - Eta vs E
- TH2F *fHistScatGammaRecEtaPtET;//ET - Eta vs pt
- TH2F *fHistScatGammaRecEtaET;// ET - Eta
- TH2F *fHistScatGammaRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistScatGammaRecEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistScatGammaRectotET;// total ET distribution
+ TH2F *fHistScatGammaRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistScatGammaRecEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistScatGammaRecEtaET;//!// ET - Eta
+ TH2F *fHistScatGammaRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistScatGammaRecEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistScatGammaRectotET;//!// total ET distribution
// *******************
// total gamma ET reconstructed in EMCal
// *******************
- TH1F *fHistTotGammaRectotET;//total ET distribution
+ TH1F *fHistTotGammaRectotET;//!//total ET distribution
// *******************
// total EM ET reconstructed in EMCal
// *******************
- TH1F *fHistTotEMRectotET;//total ET distribution
+ TH1F *fHistTotEMRectotET;//!//total ET distribution
// non-primary electromagnetic ET
- TH2F *fHistNPPElectronRecEtaEET;//ET - Eta vs E
- TH2F *fHistNPPElectronRecEtaPtET;//ET - Eta vs pt
- TH2F *fHistNPPElectronRecEtaET;// ET - Eta
- TH2F *fHistNPPElectronRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistNPPElectronRecEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistNPPElectronRectotET;// total ET distribution
-
- TH2F *fHistNPPGammaRecEtaEET;//ET - Eta vs E
- TH2F *fHistNPPGammaRecEtaPtET;//ET - Eta vs pt
- TH2F *fHistNPPGammaRecEtaET;// ET - Eta
- TH2F *fHistNPPGammaRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistNPPGammaRecEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistNPPGammaRectotET;// total ET distribution
-
- TH1F *fHistTotNPPEMRectotET;//total ET distribution
-
- TH2F *fHistNPPPi0GammaRecEtaEET;//ET - Eta vs E
- TH2F *fHistNPPPi0GammaRecEtaPtET;//ET - Eta vs pt
- TH2F *fHistNPPPi0GammaRecEtaET;// ET - Eta
- TH2F *fHistNPPPi0GammaRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistNPPPi0GammaRecEtaPt;// multiplicity - Eta vs pt
- TH1F *fHistNPPPi0GammaRectotET;// total ET distribution
+ TH2F *fHistNPPElectronRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNPPElectronRecEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistNPPElectronRecEtaET;//!// ET - Eta
+ TH2F *fHistNPPElectronRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNPPElectronRecEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistNPPElectronRectotET;//!// total ET distribution
+
+ TH2F *fHistNPPGammaRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNPPGammaRecEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistNPPGammaRecEtaET;//!// ET - Eta
+ TH2F *fHistNPPGammaRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNPPGammaRecEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistNPPGammaRectotET;//!// total ET distribution
+
+ TH1F *fHistTotNPPEMRectotET;//!//total ET distribution
+
+ TH2F *fHistNPPPi0GammaRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNPPPi0GammaRecEtaPtET;//!//ET - Eta vs pt
+ TH2F *fHistNPPPi0GammaRecEtaET;//!// ET - Eta
+ TH2F *fHistNPPPi0GammaRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNPPPi0GammaRecEtaPt;//!// multiplicity - Eta vs pt
+ TH1F *fHistNPPPi0GammaRectotET;//!// total ET distribution
// *******************
// muon ET (+ and -)
// *******************
- TH2F *fHistMuonEtaEET;//ET - Eta vs E
- TH2F *fHistMuonAccEtaEET;//ET - Eta vs E
- TH2F *fHistMuonRecEtaEET;//ET - Eta vs E
- TH2F *fHistMuonMatchEtaEET;//ET - Eta vs E
+ TH2F *fHistMuonEtaEET;//!//ET - Eta vs E
+ TH2F *fHistMuonAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistMuonRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistMuonMatchEtaEET;//!//ET - Eta vs E
- TH2F *fHistMuonEtaPtET;// ET - Eta vs pt
- TH2F *fHistMuonAccEtaPtET;// ET - Eta vs pt
- TH2F *fHistMuonRecEtaPtET;// ET - Eta vs pt
- TH2F *fHistMuonMatchEtaPtET;// ET - Eta vs pt
+ TH2F *fHistMuonEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistMuonAccEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistMuonRecEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistMuonMatchEtaPtET;//!// ET - Eta vs pt
- TH2F *fHistMuonEtaET;// ET - Eta
- TH2F *fHistMuonAccEtaET;// ET - Eta
- TH2F *fHistMuonRecEtaET;// ET - Eta
- TH2F *fHistMuonMatchEtaET;// ET - Eta
+ TH2F *fHistMuonEtaET;//!// ET - Eta
+ TH2F *fHistMuonAccEtaET;//!// ET - Eta
+ TH2F *fHistMuonRecEtaET;//!// ET - Eta
+ TH2F *fHistMuonMatchEtaET;//!// ET - Eta
- TH2F *fHistMuonEtaE;// multiplicity - Eta vs E
- TH2F *fHistMuonAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistMuonRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistMuonMatchEtaE;// multiplicity - Eta vs E
+ TH2F *fHistMuonEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistMuonAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistMuonRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistMuonMatchEtaE;//!// multiplicity - Eta vs E
- TH2F *fHistMuonEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistMuonAccEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistMuonRecEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistMuonMatchEtaPt;// multiplicity - Eta vs pt
+ TH2F *fHistMuonEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistMuonAccEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistMuonRecEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistMuonMatchEtaPt;//!// multiplicity - Eta vs pt
- TH1F *fHistMuontotET;// total ET distribution
- TH1F *fHistMuonAcctotET;// total ET distribution
- TH1F *fHistMuonRectotET;// total ET distribution
- TH1F *fHistMuonMatchtotET;// total ET distribution
+ TH1F *fHistMuontotET;//!// total ET distribution
+ TH1F *fHistMuonAcctotET;//!// total ET distribution
+ TH1F *fHistMuonRectotET;//!// total ET distribution
+ TH1F *fHistMuonMatchtotET;//!// total ET distribution
- TH1F *fHistMuonRectotETDep;//total deposited ET distribution
- TH1F *fHistMuonMatchtotETDep;// total deposited ET distribution
+ TH1F *fHistMuonRectotETDep;//!//total deposited ET distribution
+ TH1F *fHistMuonMatchtotETDep;//!// total deposited ET distribution
- TH2F *fHistMuonRecEtaEDepETDep;// ET deposited - Eta vs E deposited
- TH2F *fHistMuonMatchEtaEDepETDep;// ET deposited - Eta vs E deposited
+ TH2F *fHistMuonRecEtaEDepETDep;//!// ET deposited - Eta vs E deposited
+ TH2F *fHistMuonMatchEtaEDepETDep;//!// ET deposited - Eta vs E deposited
- TH2F *fHistMuonRecEtaPtETDep;// ET deposited - Eta vs pt
- TH2F *fHistMuonMatchEtaPtETDep;// ET deposited - Eta vs pt
+ TH2F *fHistMuonRecEtaPtETDep;//!// ET deposited - Eta vs pt
+ TH2F *fHistMuonMatchEtaPtETDep;//!// ET deposited - Eta vs pt
- TH2F *fHistMuonRecEtaETDep;// ET deposited - Eta
- TH2F *fHistMuonMatchEtaETDep;// ET deposited - Eta
+ TH2F *fHistMuonRecEtaETDep;//!// ET deposited - Eta
+ TH2F *fHistMuonMatchEtaETDep;//!// ET deposited - Eta
- TH2F *fHistMuonRecResEET;// ET - track matching residual vs E
- TH2F *fHistMuonRecResPtET;// ET - track matching residual vs pt
- TH2F *fHistMuonRecResE;// multiplicity - track matching residual vs E
- TH2F *fHistMuonRecResPt;// multiplicity - track matching residual vs pt
- TH2F *fHistMuonRecResEDepETDep;// ET deposited - track matching residual vs E deposited
- TH2F *fHistMuonRecResPtETDep;// ET deposited - track matching residual vs pt
+ TH2F *fHistMuonRecResEET;//!// ET - track matching residual vs E
+ TH2F *fHistMuonRecResPtET;//!// ET - track matching residual vs pt
+ TH2F *fHistMuonRecResE;//!// multiplicity - track matching residual vs E
+ TH2F *fHistMuonRecResPt;//!// multiplicity - track matching residual vs pt
+ TH2F *fHistMuonRecResEDepETDep;//!// ET deposited - track matching residual vs E deposited
+ TH2F *fHistMuonRecResPtETDep;//!// ET deposited - track matching residual vs pt
// *******************
// pion ET (+ and -)
// *******************
- TH2F *fHistPionEtaEET;//ET - Eta vs E
- TH2F *fHistPionAccEtaEET;//ET - Eta vs E
- TH2F *fHistPionRecEtaEET;//ET - Eta vs E
- TH2F *fHistPionMatchEtaEET;//ET - Eta vs E
+ TH2F *fHistPionEtaEET;//!//ET - Eta vs E
+ TH2F *fHistPionAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistPionRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistPionMatchEtaEET;//!//ET - Eta vs E
- TH2F *fHistPionEtaPtET;// ET - Eta vs pt
- TH2F *fHistPionAccEtaPtET;// ET - Eta vs pt
- TH2F *fHistPionRecEtaPtET;// ET - Eta vs pt
- TH2F *fHistPionMatchEtaPtET;// ET - Eta vs pt
+ TH2F *fHistPionEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistPionAccEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistPionRecEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistPionMatchEtaPtET;//!// ET - Eta vs pt
- TH2F *fHistPionEtaET;// ET - Eta
- TH2F *fHistPionAccEtaET;// ET - Eta
- TH2F *fHistPionRecEtaET;// ET - Eta
- TH2F *fHistPionMatchEtaET;// ET - Eta
+ TH2F *fHistPionEtaET;//!// ET - Eta
+ TH2F *fHistPionAccEtaET;//!// ET - Eta
+ TH2F *fHistPionRecEtaET;//!// ET - Eta
+ TH2F *fHistPionMatchEtaET;//!// ET - Eta
- TH2F *fHistPionEtaE;// multiplicity - Eta vs E
- TH2F *fHistPionAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistPionRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistPionMatchEtaE;// multiplicity - Eta vs E
+ TH2F *fHistPionEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistPionAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistPionRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistPionMatchEtaE;//!// multiplicity - Eta vs E
- TH2F *fHistPionEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistPionAccEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistPionRecEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistPionMatchEtaPt;// multiplicity - Eta vs pt
+ TH2F *fHistPionEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistPionAccEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistPionRecEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistPionMatchEtaPt;//!// multiplicity - Eta vs pt
- TH1F *fHistPiontotET;// total ET distribution
- TH1F *fHistPionAcctotET;// total ET distribution
- TH1F *fHistPionRectotET;// total ET distribution
- TH1F *fHistPionMatchtotET;// total ET distribution
+ TH1F *fHistPiontotET;//!// total ET distribution
+ TH1F *fHistPionAcctotET;//!// total ET distribution
+ TH1F *fHistPionRectotET;//!// total ET distribution
+ TH1F *fHistPionMatchtotET;//!// total ET distribution
- TH1F *fHistPionRectotETDep;// total deposited ET distribution
- TH1F *fHistPionMatchtotETDep;// total deposited ET distribution
+ TH1F *fHistPionRectotETDep;//!// total deposited ET distribution
+ TH1F *fHistPionMatchtotETDep;//!// total deposited ET distribution
- TH2F *fHistPionRecEtaEDepETDep;// ET deposited - Eta vs E deposited
- TH2F *fHistPionMatchEtaEDepETDep;// ET deposited - Eta vs E deposited
+ TH2F *fHistPionRecEtaEDepETDep;//!// ET deposited - Eta vs E deposited
+ TH2F *fHistPionMatchEtaEDepETDep;//!// ET deposited - Eta vs E deposited
- TH2F *fHistPionRecEtaPtETDep;// ET deposited - Eta vs pt
- TH2F *fHistPionMatchEtaPtETDep;// ET deposited - Eta vs pt
+ TH2F *fHistPionRecEtaPtETDep;//!// ET deposited - Eta vs pt
+ TH2F *fHistPionMatchEtaPtETDep;//!// ET deposited - Eta vs pt
- TH2F *fHistPionRecEtaETDep;// ET deposited - Eta
- TH2F *fHistPionMatchEtaETDep;// ET deposited - Eta
+ TH2F *fHistPionRecEtaETDep;//!// ET deposited - Eta
+ TH2F *fHistPionMatchEtaETDep;//!// ET deposited - Eta
- TH2F *fHistPionRecResEET;// ET - track matching residual vs E
- TH2F *fHistPionRecResPtET;// ET - track matching residual vs pt
- TH2F *fHistPionRecResE;// multiplicity - track matching residual vs E
- TH2F *fHistPionRecResPt;// multiplicity - track matching residual vs pt
- TH2F *fHistPionRecResEDepETDep;// ET deposited - track matching residual vs E deposited
- TH2F *fHistPionRecResPtETDep;// ET deposited - track matching residual vs pt
+ TH2F *fHistPionRecResEET;//!// ET - track matching residual vs E
+ TH2F *fHistPionRecResPtET;//!// ET - track matching residual vs pt
+ TH2F *fHistPionRecResE;//!// multiplicity - track matching residual vs E
+ TH2F *fHistPionRecResPt;//!// multiplicity - track matching residual vs pt
+ TH2F *fHistPionRecResEDepETDep;//!// ET deposited - track matching residual vs E deposited
+ TH2F *fHistPionRecResPtETDep;//!// ET deposited - track matching residual vs pt
// *******************
// charged kaon (+ and -) ET
// *******************
- TH2F *fHistKaonEtaEET;//ET - Eta vs E
- TH2F *fHistKaonAccEtaEET;//ET - Eta vs E
- TH2F *fHistKaonRecEtaEET;//ET - Eta vs E
- TH2F *fHistKaonMatchEtaEET;//ET - Eta vs E
+ TH2F *fHistKaonEtaEET;//!//ET - Eta vs E
+ TH2F *fHistKaonAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistKaonRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistKaonMatchEtaEET;//!//ET - Eta vs E
- TH2F *fHistKaonEtaPtET;// ET - Eta vs pt
- TH2F *fHistKaonAccEtaPtET;// ET - Eta vs pt
- TH2F *fHistKaonRecEtaPtET;// ET - Eta vs pt
- TH2F *fHistKaonMatchEtaPtET;// ET - Eta vs pt
+ TH2F *fHistKaonEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistKaonAccEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistKaonRecEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistKaonMatchEtaPtET;//!// ET - Eta vs pt
- TH2F *fHistKaonEtaET;// ET - Eta
- TH2F *fHistKaonAccEtaET;// ET - Eta
- TH2F *fHistKaonRecEtaET;// ET - Eta
- TH2F *fHistKaonMatchEtaET;// ET - Eta
+ TH2F *fHistKaonEtaET;//!// ET - Eta
+ TH2F *fHistKaonAccEtaET;//!// ET - Eta
+ TH2F *fHistKaonRecEtaET;//!// ET - Eta
+ TH2F *fHistKaonMatchEtaET;//!// ET - Eta
- TH2F *fHistKaonEtaE;// multiplicity - Eta vs E
- TH2F *fHistKaonAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistKaonRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistKaonMatchEtaE;// multiplicity - Eta vs E
+ TH2F *fHistKaonEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistKaonAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistKaonRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistKaonMatchEtaE;//!// multiplicity - Eta vs E
- TH2F *fHistKaonEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistKaonAccEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistKaonRecEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistKaonMatchEtaPt;// multiplicity - Eta vs pt
+ TH2F *fHistKaonEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistKaonAccEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistKaonRecEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistKaonMatchEtaPt;//!// multiplicity - Eta vs pt
- TH1F *fHistKaontotET;// total ET distribution
- TH1F *fHistKaonAcctotET;// total ET distribution
- TH1F *fHistKaonRectotET;// total ET distribution
- TH1F *fHistKaonMatchtotET;// total ET distribution
+ TH1F *fHistKaontotET;//!// total ET distribution
+ TH1F *fHistKaonAcctotET;//!// total ET distribution
+ TH1F *fHistKaonRectotET;//!// total ET distribution
+ TH1F *fHistKaonMatchtotET;//!// total ET distribution
- TH1F *fHistKaonRectotETDep;// total deposited ET distribution
- TH1F *fHistKaonMatchtotETDep;// total deposited ET distribution
+ TH1F *fHistKaonRectotETDep;//!// total deposited ET distribution
+ TH1F *fHistKaonMatchtotETDep;//!// total deposited ET distribution
- TH2F *fHistKaonRecEtaEDepETDep;// ET deposited - Eta vs E deposited
- TH2F *fHistKaonMatchEtaEDepETDep;// ET deposited - Eta vs E deposited
+ TH2F *fHistKaonRecEtaEDepETDep;//!// ET deposited - Eta vs E deposited
+ TH2F *fHistKaonMatchEtaEDepETDep;//!// ET deposited - Eta vs E deposited
- TH2F *fHistKaonRecEtaPtETDep;// ET deposited - Eta vs pt
- TH2F *fHistKaonMatchEtaPtETDep;// ET deposited - Eta vs pt
+ TH2F *fHistKaonRecEtaPtETDep;//!// ET deposited - Eta vs pt
+ TH2F *fHistKaonMatchEtaPtETDep;//!// ET deposited - Eta vs pt
- TH2F *fHistKaonRecEtaETDep;// ET deposited - Eta
- TH2F *fHistKaonMatchEtaETDep;// ET deposited - Eta
+ TH2F *fHistKaonRecEtaETDep;//!// ET deposited - Eta
+ TH2F *fHistKaonMatchEtaETDep;//!// ET deposited - Eta
- TH2F *fHistKaonRecResEET;// ET - track matching residual vs E
- TH2F *fHistKaonRecResPtET;// ET - track matching residual vs pt
- TH2F *fHistKaonRecResE;// multiplicity - track matching residual vs E
- TH2F *fHistKaonRecResPt;// multiplicity - track matching residual vs pt
- TH2F *fHistKaonRecResEDepETDep;// ET deposited - track matching residual vs E deposited
- TH2F *fHistKaonRecResPtETDep;// ET deposited - track matching residual vs pt
+ TH2F *fHistKaonRecResEET;//!// ET - track matching residual vs E
+ TH2F *fHistKaonRecResPtET;//!// ET - track matching residual vs pt
+ TH2F *fHistKaonRecResE;//!// multiplicity - track matching residual vs E
+ TH2F *fHistKaonRecResPt;//!// multiplicity - track matching residual vs pt
+ TH2F *fHistKaonRecResEDepETDep;//!// ET deposited - track matching residual vs E deposited
+ TH2F *fHistKaonRecResPtETDep;//!// ET deposited - track matching residual vs pt
// *******************
// proton (anti) ET
// *******************
- TH2F *fHistProtonEtaEET;//ET - Eta vs E
- TH2F *fHistProtonAccEtaEET;//ET - Eta vs E
- TH2F *fHistProtonRecEtaEET;//ET - Eta vs E
- TH2F *fHistProtonMatchEtaEET;//ET - Eta vs E
+ TH2F *fHistProtonEtaEET;//!//ET - Eta vs E
+ TH2F *fHistProtonAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistProtonRecEtaEET;//!//ET - Eta vs E
+ TH2F *fHistProtonMatchEtaEET;//!//ET - Eta vs E
- TH2F *fHistProtonEtaPtET;// ET - Eta vs pt
- TH2F *fHistProtonAccEtaPtET;// ET - Eta vs pt
- TH2F *fHistProtonRecEtaPtET;// ET - Eta vs pt
- TH2F *fHistProtonMatchEtaPtET;// ET - Eta vs pt
+ TH2F *fHistProtonEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistProtonAccEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistProtonRecEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistProtonMatchEtaPtET;//!// ET - Eta vs pt
- TH2F *fHistProtonEtaET;// ET - Eta
- TH2F *fHistProtonAccEtaET;// ET - Eta
- TH2F *fHistProtonRecEtaET;// ET - Eta
- TH2F *fHistProtonMatchEtaET;// ET - Eta
+ TH2F *fHistProtonEtaET;//!// ET - Eta
+ TH2F *fHistProtonAccEtaET;//!// ET - Eta
+ TH2F *fHistProtonRecEtaET;//!// ET - Eta
+ TH2F *fHistProtonMatchEtaET;//!// ET - Eta
- TH2F *fHistProtonEtaE;// multiplicity - Eta vs E
- TH2F *fHistProtonAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistProtonRecEtaE;// multiplicity - Eta vs E
- TH2F *fHistProtonMatchEtaE;// multiplicity - Eta vs E
+ TH2F *fHistProtonEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistProtonAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistProtonRecEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistProtonMatchEtaE;//!// multiplicity - Eta vs E
- TH2F *fHistProtonEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistProtonAccEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistProtonRecEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistProtonMatchEtaPt;// multiplicity - Eta vs pt
+ TH2F *fHistProtonEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistProtonAccEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistProtonRecEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistProtonMatchEtaPt;//!// multiplicity - Eta vs pt
- TH1F *fHistProtontotET;// total ET distribution
- TH1F *fHistProtonAcctotET;// total ET distribution
- TH1F *fHistProtonRectotET;// total ET distribution
- TH1F *fHistProtonMatchtotET;// total ET distribution
+ TH1F *fHistProtontotET;//!// total ET distribution
+ TH1F *fHistProtonAcctotET;//!// total ET distribution
+ TH1F *fHistProtonRectotET;//!// total ET distribution
+ TH1F *fHistProtonMatchtotET;//!// total ET distribution
- TH1F *fHistProtonRectotETDep;// total deposited ET distribution
- TH1F *fHistProtonMatchtotETDep;// total deposited ET distribution
+ TH1F *fHistProtonRectotETDep;//!// total deposited ET distribution
+ TH1F *fHistProtonMatchtotETDep;//!// total deposited ET distribution
- TH2F *fHistProtonRecEtaEDepETDep;// ET deposited - Eta vs E deposited
- TH2F *fHistProtonMatchEtaEDepETDep;// ET deposited - Eta vs E deposited
+ TH2F *fHistProtonRecEtaEDepETDep;//!// ET deposited - Eta vs E deposited
+ TH2F *fHistProtonMatchEtaEDepETDep;//!// ET deposited - Eta vs E deposited
- TH2F *fHistProtonRecEtaPtETDep;// ET deposited - Eta vs pt
- TH2F *fHistProtonMatchEtaPtETDep;// ET deposited - Eta vs pt
+ TH2F *fHistProtonRecEtaPtETDep;//!// ET deposited - Eta vs pt
+ TH2F *fHistProtonMatchEtaPtETDep;//!// ET deposited - Eta vs pt
- TH2F *fHistProtonRecEtaETDep;// ET deposited - Eta
- TH2F *fHistProtonMatchEtaETDep;// ET deposited - Eta
+ TH2F *fHistProtonRecEtaETDep;//!// ET deposited - Eta
+ TH2F *fHistProtonMatchEtaETDep;//!// ET deposited - Eta
- TH2F *fHistProtonRecResEET;// ET - track matching residual vs E
- TH2F *fHistProtonRecResPtET;// ET - track matching residual vs pt
- TH2F *fHistProtonRecResE;// multiplicity - track matching residual vs E
- TH2F *fHistProtonRecResPt;// multiplicity - track matching residual vs pt
- TH2F *fHistProtonRecResEDepETDep;// ET deposited - track matching residual vs E deposited
- TH2F *fHistProtonRecResPtETDep;// ET deposited - track matching residual vs pt
+ TH2F *fHistProtonRecResEET;//!// ET - track matching residual vs E
+ TH2F *fHistProtonRecResPtET;//!// ET - track matching residual vs pt
+ TH2F *fHistProtonRecResE;//!// multiplicity - track matching residual vs E
+ TH2F *fHistProtonRecResPt;//!// multiplicity - track matching residual vs pt
+ TH2F *fHistProtonRecResEDepETDep;//!// ET deposited - track matching residual vs E deposited
+ TH2F *fHistProtonRecResPtETDep;//!// ET deposited - track matching residual vs pt
// *******************
// total charged ET
// *******************
- TH1F *fHistTotChargedtotET;//total ET distribution
- TH1F *fHistTotChargedAcctotET;//total ET distribution
- TH1F *fHistTotChargedRectotET;//total ET distribution
- TH1F *fHistTotChargedRectotETDep;//total deposited ET distribution
- TH1F *fHistTotChargedMatchtotET;//total ET distribution
- TH1F *fHistTotChargedMatchtotETDep;//total deposited ET distribution
+ TH1F *fHistTotChargedtotET;//!//total ET distribution
+ TH1F *fHistTotChargedAcctotET;//!//total ET distribution
+ TH1F *fHistTotChargedRectotET;//!//total ET distribution
+ TH1F *fHistTotChargedRectotETDep;//!//total deposited ET distribution
+ TH1F *fHistTotChargedMatchtotET;//!//total ET distribution
+ TH1F *fHistTotChargedMatchtotETDep;//!//total deposited ET distribution
// *******************
// neutron (anti) ET
// *******************
- TH2F *fHistNeutronEtaEET;//ET - Eta vs E
- TH2F *fHistNeutronAccEtaEET;//ET - Eta vs E
- TH2F *fHistNeutronRecEtaEET;//ET - Eta vs E
+ TH2F *fHistNeutronEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNeutronAccEtaEET;//!//ET - Eta vs E
+ TH2F *fHistNeutronRecEtaEET;//!//ET - Eta vs E
- TH2F *fHistNeutronEtaPtET;// ET - Eta vs pt
- TH2F *fHistNeutronAccEtaPtET;// ET - Eta vs pt
- TH2F *fHistNeutronRecEtaPtET;// ET - Eta vs pt
+ TH2F *fHistNeutronEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistNeutronAccEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistNeutronRecEtaPtET;//!// ET - Eta vs pt
- TH2F *fHistNeutronEtaET;// ET - Eta
- TH2F *fHistNeutronAccEtaET;// ET - Eta
- TH2F *fHistNeutronRecEtaET;// ET - Eta
+ TH2F *fHistNeutronEtaET;//!// ET - Eta
+ TH2F *fHistNeutronAccEtaET;//!// ET - Eta
+ TH2F *fHistNeutronRecEtaET;//!// ET - Eta
- TH2F *fHistNeutronEtaE;// multiplicity - Eta vs E
- TH2F *fHistNeutronAccEtaE;// multiplicity - Eta vs E
- TH2F *fHistNeutronRecEtaE;// multiplicity - Eta vs E
+ TH2F *fHistNeutronEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNeutronAccEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistNeutronRecEtaE;//!// multiplicity - Eta vs E
- TH2F *fHistNeutronEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistNeutronAccEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistNeutronRecEtaPt;// multiplicity - Eta vs pt
+ TH2F *fHistNeutronEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistNeutronAccEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistNeutronRecEtaPt;//!// multiplicity - Eta vs pt
- TH1F *fHistNeutrontotET;// total ET distribution
- TH1F *fHistNeutronAcctotET;// total ET distribution
- TH1F *fHistNeutronRectotET;// total ET distribution
- TH1F *fHistNeutronRectotETDep;// total deposited ET distribution
+ TH1F *fHistNeutrontotET;//!// total ET distribution
+ TH1F *fHistNeutronAcctotET;//!// total ET distribution
+ TH1F *fHistNeutronRectotET;//!// total ET distribution
+ TH1F *fHistNeutronRectotETDep;//!// total deposited ET distribution
- TH2F *fHistNeutronRecEtaEDepETDep;// ET deposited - Eta vs E deposited
- TH2F *fHistNeutronRecEtaETDep;// ET deposited - Eta
+ TH2F *fHistNeutronRecEtaEDepETDep;//!// ET deposited - Eta vs E deposited
+ TH2F *fHistNeutronRecEtaETDep;//!// ET deposited - Eta
- TH2F *fHistNeutronRecEtaPtETDep;// ET deposited - Eta vs pt
+ TH2F *fHistNeutronRecEtaPtETDep;//!// ET deposited - Eta vs pt
// *******************
// neutral kaon ET
// *******************
- TH2F *fHistK0EtaEET;//ET - Eta vs E
- TH2F *fHistK0RecEtaEET;//ET - Eta vs E
+ TH2F *fHistK0EtaEET;//!//ET - Eta vs E
+ TH2F *fHistK0RecEtaEET;//!//ET - Eta vs E
- TH2F *fHistK0EtaPtET;// ET - Eta vs pt
- TH2F *fHistK0RecEtaPtET;// ET - Eta vs pt
+ TH2F *fHistK0EtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistK0RecEtaPtET;//!// ET - Eta vs pt
- TH2F *fHistK0EtaET;// ET - Eta
- TH2F *fHistK0RecEtaET;// ET - Eta
+ TH2F *fHistK0EtaET;//!// ET - Eta
+ TH2F *fHistK0RecEtaET;//!// ET - Eta
- TH2F *fHistK0EtaE;// multiplicity - Eta vs E
- TH2F *fHistK0RecEtaE;// multiplicity - Eta vs E
+ TH2F *fHistK0EtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistK0RecEtaE;//!// multiplicity - Eta vs E
- TH2F *fHistK0EtaPt;// multiplicity - Eta vs pt
- TH2F *fHistK0RecEtaPt;// multiplicity - Eta vs pt
+ TH2F *fHistK0EtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistK0RecEtaPt;//!// multiplicity - Eta vs pt
- TH1F *fHistK0totET;// total ET distribution
- TH1F *fHistK0RectotET;// total ET distribution
+ TH1F *fHistK0totET;//!// total ET distribution
+ TH1F *fHistK0RectotET;//!// total ET distribution
- TH1F *fHistK0RectotETDep;// total deposited ET distribution
+ TH1F *fHistK0RectotETDep;//!// total deposited ET distribution
- TH2F *fHistK0RecEtaEDepETDep;// ET deposited - Eta vs E deposited
- TH2F *fHistK0RecEtaETDep;// ET deposited - Eta
+ TH2F *fHistK0RecEtaEDepETDep;//!// ET deposited - Eta vs E deposited
+ TH2F *fHistK0RecEtaETDep;//!// ET deposited - Eta
- TH2F *fHistK0RecEtaPtETDep;// ET deposited - Eta vs pt
+ TH2F *fHistK0RecEtaPtETDep;//!// ET deposited - Eta vs pt
// *******************
// Lambda(anti) ET
// *******************
- TH2F *fHistLambdaEtaEET;//ET - Eta vs E
- TH2F *fHistLambdaRecEtaEET;//ET - Eta vs E
+ TH2F *fHistLambdaEtaEET;//!//ET - Eta vs E
+ TH2F *fHistLambdaRecEtaEET;//!//ET - Eta vs E
- TH2F *fHistLambdaEtaPtET;// ET - Eta vs pt
- TH2F *fHistLambdaRecEtaPtET;// ET - Eta vs pt
+ TH2F *fHistLambdaEtaPtET;//!// ET - Eta vs pt
+ TH2F *fHistLambdaRecEtaPtET;//!// ET - Eta vs pt
- TH2F *fHistLambdaEtaET;// ET - Eta
- TH2F *fHistLambdaRecEtaET;// ET - Eta
+ TH2F *fHistLambdaEtaET;//!// ET - Eta
+ TH2F *fHistLambdaRecEtaET;//!// ET - Eta
- TH2F *fHistLambdaEtaE;// multiplicity - Eta vs E
- TH2F *fHistLambdaRecEtaE;// multiplicity - Eta vs E
+ TH2F *fHistLambdaEtaE;//!// multiplicity - Eta vs E
+ TH2F *fHistLambdaRecEtaE;//!// multiplicity - Eta vs E
- TH2F *fHistLambdaEtaPt;// multiplicity - Eta vs pt
- TH2F *fHistLambdaRecEtaPt;// multiplicity - Eta vs pt
+ TH2F *fHistLambdaEtaPt;//!// multiplicity - Eta vs pt
+ TH2F *fHistLambdaRecEtaPt;//!// multiplicity - Eta vs pt
- TH1F *fHistLambdatotET;// total ET distribution
- TH1F *fHistLambdaRectotET;// total ET distribution
+ TH1F *fHistLambdatotET;//!// total ET distribution
+ TH1F *fHistLambdaRectotET;//!// total ET distribution
- TH1F *fHistLambdaRectotETDep;// total deposited ET distribution
+ TH1F *fHistLambdaRectotETDep;//!// total deposited ET distribution
- TH2F *fHistLambdaRecEtaEDepETDep;// ET deposited - Eta vs E deposited
- TH2F *fHistLambdaRecEtaETDep;// ET deposited - Eta
+ TH2F *fHistLambdaRecEtaEDepETDep;//!// ET deposited - Eta vs E deposited
+ TH2F *fHistLambdaRecEtaETDep;//!// ET deposited - Eta
- TH2F *fHistLambdaRecEtaPtETDep;// ET deposited - Eta vs pt
+ TH2F *fHistLambdaRecEtaPtETDep;//!// ET deposited - Eta vs pt
// *******************
// total neutral ET
// *******************
- TH1F *fHistTotNeutraltotET;//total ET distribution
- TH1F *fHistTotNeutralRectotET;//total ET distribution
- TH1F *fHistTotNeutralRectotETDep;//total deposited ET distribution
+ TH1F *fHistTotNeutraltotET;//!//total ET distribution
+ TH1F *fHistTotNeutralRectotET;//!//total ET distribution
+ TH1F *fHistTotNeutralRectotETDep;//!//total deposited ET distribution
// *******************
// total ET
// *******************
- TH1F *fHistTotaltotET;//total ET distribution
- TH1F *fHistTotalAcctotET;//total ET distribution
- TH1F *fHistTotalRectotET;//total ET distribution
- TH1F *fHistTotalRectotETDep;//total deposited ET distribution
+ TH1F *fHistTotaltotET;//!//total ET distribution
+ TH1F *fHistTotalAcctotET;//!//total ET distribution
+ TH1F *fHistTotalRectotET;//!//total ET distribution
+ TH1F *fHistTotalRectotETDep;//!//total deposited ET distribution
// *******************
// some checks
// *******************
// check produced electrons
- TH1F *fHistElectronFirstMother;// first mother ID
- TH2F *fHistElectronFirstMotherXY;// first mother XY position
- TH1F *fHistElectronNDaughters;// number of daughters
- TH1F *fHistElectronDaughters;// daughters ID
- TH2F *fHistElectronDaughtersXY;// daughters XY position
-
- TH1F *fHistElectronFirstMotherAcc;// first mother ID
- TH2F *fHistElectronFirstMotherXYAcc;// first mother XY position
- TH1F *fHistElectronNDaughtersAcc;// number of daughters
- TH1F *fHistElectronDaughtersAcc;// daughters ID
- TH2F *fHistElectronDaughtersXYAcc;// daughters XY position
-
- TH1F *fHistElectronFirstMotherRec;// first mother ID
- TH2F *fHistElectronFirstMotherXYRec;// first mother XY position
- TH1F *fHistElectronNDaughtersRec;// number of daughters
- TH1F *fHistElectronDaughtersRec;// daughters ID
- TH2F *fHistElectronDaughtersXYRec;// daughters XY position
-
- TH1F *fHistNPPElectronFirstMother;// first mother ID
- TH2F *fHistNPPElectronFirstMotherXY;// first mother XY position
- TH1F *fHistNPPElectronNDaughters;// number of daughters
- TH1F *fHistNPPElectronDaughters;// daughters ID
- TH2F *fHistNPPElectronDaughtersXY;// daughters XY position
-
- TH1F *fHistNPPElectronFirstMotherAcc;// first mother ID
- TH2F *fHistNPPElectronFirstMotherXYAcc;// first mother XY position
- TH1F *fHistNPPElectronNDaughtersAcc;// number of daughters
- TH1F *fHistNPPElectronDaughtersAcc;// daughters ID
- TH2F *fHistNPPElectronDaughtersXYAcc;// daughters XY position
-
- TH1F *fHistNPPElectronFirstMotherRec;// first mother ID
- TH2F *fHistNPPElectronFirstMotherXYRec;// first mother XY position
- TH1F *fHistNPPElectronNDaughtersRec;// number of daughters
- TH1F *fHistNPPElectronDaughtersRec;// daughters ID
- TH2F *fHistNPPElectronDaughtersXYRec;// daughters XY position
+ TH1F *fHistElectronFirstMother;//!// first mother ID
+ TH2F *fHistElectronFirstMotherXY;//!// first mother XY position
+ TH1F *fHistElectronNDaughters;//!// number of daughters
+ TH1F *fHistElectronDaughters;//!// daughters ID
+ TH2F *fHistElectronDaughtersXY;//!// daughters XY position
+
+ TH1F *fHistElectronFirstMotherAcc;//!// first mother ID
+ TH2F *fHistElectronFirstMotherXYAcc;//!// first mother XY position
+ TH1F *fHistElectronNDaughtersAcc;//!// number of daughters
+ TH1F *fHistElectronDaughtersAcc;//!// daughters ID
+ TH2F *fHistElectronDaughtersXYAcc;//!// daughters XY position
+
+ TH1F *fHistElectronFirstMotherRec;//!// first mother ID
+ TH2F *fHistElectronFirstMotherXYRec;//!// first mother XY position
+ TH1F *fHistElectronNDaughtersRec;//!// number of daughters
+ TH1F *fHistElectronDaughtersRec;//!// daughters ID
+ TH2F *fHistElectronDaughtersXYRec;//!// daughters XY position
+
+ TH1F *fHistNPPElectronFirstMother;//!// first mother ID
+ TH2F *fHistNPPElectronFirstMotherXY;//!// first mother XY position
+ TH1F *fHistNPPElectronNDaughters;//!// number of daughters
+ TH1F *fHistNPPElectronDaughters;//!// daughters ID
+ TH2F *fHistNPPElectronDaughtersXY;//!// daughters XY position
+
+ TH1F *fHistNPPElectronFirstMotherAcc;//!// first mother ID
+ TH2F *fHistNPPElectronFirstMotherXYAcc;//!// first mother XY position
+ TH1F *fHistNPPElectronNDaughtersAcc;//!// number of daughters
+ TH1F *fHistNPPElectronDaughtersAcc;//!// daughters ID
+ TH2F *fHistNPPElectronDaughtersXYAcc;//!// daughters XY position
+
+ TH1F *fHistNPPElectronFirstMotherRec;//!// first mother ID
+ TH2F *fHistNPPElectronFirstMotherXYRec;//!// first mother XY position
+ TH1F *fHistNPPElectronNDaughtersRec;//!// number of daughters
+ TH1F *fHistNPPElectronDaughtersRec;//!// daughters ID
+ TH2F *fHistNPPElectronDaughtersXYRec;//!// daughters XY position
// check produced gammas
- TH1F *fHistGammaFirstMother;// first mother ID
- TH2F *fHistGammaFirstMotherXY;// first mother XY position
- TH1F *fHistGammaNDaughters;// number of daughters
- TH1F *fHistGammaDaughters;// daughters ID
- TH2F *fHistGammaDaughtersXY;// daughters XY position
- TH2F *fHistConvGammaDaughtersXY;// daughters XY position
- TH2F *fHistNonConvGammaDaughtersXY;// daughters XY position
-
- TH1F *fHistGammaFirstMotherAcc;// first mother ID
- TH2F *fHistGammaFirstMotherXYAcc;// first mother XY position
- TH1F *fHistGammaNDaughtersAcc;// number of daughters
- TH1F *fHistGammaDaughtersAcc;// daughters ID
- TH2F *fHistGammaDaughtersXYAcc;// daughters XY position
- TH2F *fHistConvGammaDaughtersXYAcc;// daughters XY position
- TH2F *fHistNonConvGammaDaughtersXYAcc;// daughters XY position
-
- TH1F *fHistGammaFirstMotherRec;// first mother ID
- TH2F *fHistGammaFirstMotherXYRec;// first mother XY position
- TH1F *fHistGammaNDaughtersRec;// number of daughters
- TH1F *fHistGammaDaughtersRec;// daughters ID
- TH2F *fHistGammaDaughtersXYRec;// daughters XY position
- TH2F *fHistConvGammaDaughtersXYRec;// daughters XY position
- TH2F *fHistNonConvGammaDaughtersXYRec;// daughters XY position
-
- TH1F *fHistNPPGammaFirstMother;// first mother ID
- TH2F *fHistNPPGammaFirstMotherXY;// first mother XY position
- TH1F *fHistNPPGammaNDaughters;// number of daughters
- TH1F *fHistNPPGammaDaughters;// daughters ID
- TH2F *fHistNPPGammaDaughtersXY;// daughters XY position
-
- TH1F *fHistNPPGammaFirstMotherAcc;// first mother ID
- TH2F *fHistNPPGammaFirstMotherXYAcc;// first mother XY position
- TH1F *fHistNPPGammaNDaughtersAcc;// number of daughters
- TH1F *fHistNPPGammaDaughtersAcc;// daughters ID
- TH2F *fHistNPPGammaDaughtersXYAcc;// daughters XY position
-
- TH1F *fHistNPPGammaFirstMotherRec;// first mother ID
- TH2F *fHistNPPGammaFirstMotherXYRec;// first mother XY position
- TH1F *fHistNPPGammaNDaughtersRec;// number of daughters
- TH1F *fHistNPPGammaDaughtersRec;// daughters ID
- TH2F *fHistNPPGammaDaughtersXYRec;// daughters XY position
+ TH1F *fHistGammaFirstMother;//!// first mother ID
+ TH2F *fHistGammaFirstMotherXY;//!// first mother XY position
+ TH1F *fHistGammaNDaughters;//!// number of daughters
+ TH1F *fHistGammaDaughters;//!// daughters ID
+ TH2F *fHistGammaDaughtersXY;//!// daughters XY position
+ TH2F *fHistConvGammaDaughtersXY;//!// daughters XY position
+ TH2F *fHistNonConvGammaDaughtersXY;//!// daughters XY position
+
+ TH1F *fHistGammaFirstMotherAcc;//!// first mother ID
+ TH2F *fHistGammaFirstMotherXYAcc;//!// first mother XY position
+ TH1F *fHistGammaNDaughtersAcc;//!// number of daughters
+ TH1F *fHistGammaDaughtersAcc;//!// daughters ID
+ TH2F *fHistGammaDaughtersXYAcc;//!// daughters XY position
+ TH2F *fHistConvGammaDaughtersXYAcc;//!// daughters XY position
+ TH2F *fHistNonConvGammaDaughtersXYAcc;//!// daughters XY position
+
+ TH1F *fHistGammaFirstMotherRec;//!// first mother ID
+ TH2F *fHistGammaFirstMotherXYRec;//!// first mother XY position
+ TH1F *fHistGammaNDaughtersRec;//!// number of daughters
+ TH1F *fHistGammaDaughtersRec;//!// daughters ID
+ TH2F *fHistGammaDaughtersXYRec;//!// daughters XY position
+ TH2F *fHistConvGammaDaughtersXYRec;//!// daughters XY position
+ TH2F *fHistNonConvGammaDaughtersXYRec;//!// daughters XY position
+
+ TH1F *fHistNPPGammaFirstMother;//!// first mother ID
+ TH2F *fHistNPPGammaFirstMotherXY;//!// first mother XY position
+ TH1F *fHistNPPGammaNDaughters;//!// number of daughters
+ TH1F *fHistNPPGammaDaughters;//!// daughters ID
+ TH2F *fHistNPPGammaDaughtersXY;//!// daughters XY position
+
+ TH1F *fHistNPPGammaFirstMotherAcc;//!// first mother ID
+ TH2F *fHistNPPGammaFirstMotherXYAcc;//!// first mother XY position
+ TH1F *fHistNPPGammaNDaughtersAcc;//!// number of daughters
+ TH1F *fHistNPPGammaDaughtersAcc;//!// daughters ID
+ TH2F *fHistNPPGammaDaughtersXYAcc;//!// daughters XY position
+
+ TH1F *fHistNPPGammaFirstMotherRec;//!// first mother ID
+ TH2F *fHistNPPGammaFirstMotherXYRec;//!// first mother XY position
+ TH1F *fHistNPPGammaNDaughtersRec;//!// number of daughters
+ TH1F *fHistNPPGammaDaughtersRec;//!// daughters ID
+ TH2F *fHistNPPGammaDaughtersXYRec;//!// daughters XY position
//check projections
- TH2F *fHistAllERecEMC;// E reconstructed vs E MC
- TH2F *fHistAllPtRecPtMC;// pt reconstructed vs pt MC
- TH2F *fHistElectronERecEMC;// E reconstructed vs E MC
- TH2F *fHistGammaERecEMC;// E reconstructed vs E MC
-
- TH2F *fHistChargedRes;// charged particle track matching residual
- TH2F *fHistChargedRes2;// charged particle track matching residual
- TH2F *fHistChargedRes3;// charged particle track matching residual
- TH2F *fHistNeutralRes;// neutral particle track matching residual
- TH2F *fHistElectronRes;// electron track matching residual
- TH2F *fHistGammaRes;// gamma track matching residual
-
- TH2F *fHistIsInAcc;// EMCal acceptance check
+ TH2F *fHistAllERecEMC;//!// E reconstructed vs E MC
+ TH2F *fHistAllPtRecPtMC;//!// pt reconstructed vs pt MC
+ TH2F *fHistElectronERecEMC;//!// E reconstructed vs E MC
+ TH2F *fHistGammaERecEMC;//!// E reconstructed vs E MC
+
+ TH2F *fHistChargedRes;//!// charged particle track matching residual
+ TH2F *fHistChargedRes2;//!// charged particle track matching residual
+ TH2F *fHistChargedRes3;//!// charged particle track matching residual
+ TH2F *fHistNeutralRes;//!// neutral particle track matching residual
+ TH2F *fHistElectronRes;//!// electron track matching residual
+ TH2F *fHistGammaRes;//!// gamma track matching residual
+
+ TH2F *fHistIsInAcc;//!// EMCal acceptance check
private:
Double_t fTotChargedMatchtotETDep;// total Et deposited - matched chagred particles
Double_t fTotalRectotETDep;// total ET deposited
- AliESDEvent *fESD;// ESD object
-/* AliEMCALGeometry *fGeoUt;// EMCal geometry object */
+ AliESDEvent *fESD;//!// ESD object
+/* AliEMCALGeometry *fGeoUt;//!// EMCal geometry object */
// *******************
// all ET
// *******************
- THnSparseF* fHistAllRecETDep;// ET deposited - all particles
- THnSparseF* fHistAllRec;// mutliplicity - all particles
- TH1F *fHistAllRectotETDep;// total ET deposited - all particles
+ THnSparseF* fHistAllRecETDep;//!// ET deposited - all particles
+ THnSparseF* fHistAllRec;//!// mutliplicity - all particles
+ TH1F *fHistAllRectotETDep;//!// total ET deposited - all particles
// *******************
// electron ET reconstructed in EMCal
// *******************
- THnSparseF* fHistElectronRecETDep;// Et deposited - matched electrons
- THnSparseF* fHistElectronRec;// multiplicity - matched electrons
- TH1F *fHistElectronMatchtotETDep;// total Et deposited - matched electrons
+ THnSparseF* fHistElectronRecETDep;//!// Et deposited - matched electrons
+ THnSparseF* fHistElectronRec;//!// multiplicity - matched electrons
+ TH1F *fHistElectronMatchtotETDep;//!// total Et deposited - matched electrons
- TH2F *fHistElectronRecdEdxP;// electron dEdx vs p
+ TH2F *fHistElectronRecdEdxP;//!// electron dEdx vs p
// *******************
// Neutral ET reconstructed in EMCal
// *******************
- TH1F *fHistNeutralRectotET;// total ET - neutral particles
+ TH1F *fHistNeutralRectotET;//!// total ET - neutral particles
// *******************
// total EM ET reconstructed in EMCal
// *******************
- TH1F *fHistTotEMRectotET;// total electromagnetic ET
+ TH1F *fHistTotEMRectotET;//!// total electromagnetic ET
// *******************
// muon ET (+ and -)
// *******************
- THnSparseF* fHistMuonRecETDep;// Et deposited
- THnSparseF* fHistMuonRec;// multiplicity
- TH1F *fHistMuonMatchtotETDep;// total Et deposited
+ THnSparseF* fHistMuonRecETDep;//!// Et deposited
+ THnSparseF* fHistMuonRec;//!// multiplicity
+ TH1F *fHistMuonMatchtotETDep;//!// total Et deposited
- TH2F *fHistMuonRecdEdxP;// dEdx vs p
+ TH2F *fHistMuonRecdEdxP;//!// dEdx vs p
// *******************
// pion ET (+ and -)
// *******************
- THnSparseF* fHistPionRecETDep;// Et deposited
- THnSparseF* fHistPionRec;// multiplicity
- TH1F *fHistPionMatchtotETDep;// total Et deposited
+ THnSparseF* fHistPionRecETDep;//!// Et deposited
+ THnSparseF* fHistPionRec;//!// multiplicity
+ TH1F *fHistPionMatchtotETDep;//!// total Et deposited
- TH2F *fHistPionRecdEdxP;// dEdx vs p
+ TH2F *fHistPionRecdEdxP;//!// dEdx vs p
// *******************
// charged kaon (+ and -) ET
// *******************
- THnSparseF* fHistKaonRecETDep;// Et deposited
- THnSparseF* fHistKaonRec;// multiplicity
- TH1F *fHistKaonMatchtotETDep;// total Et deposited
+ THnSparseF* fHistKaonRecETDep;//!// Et deposited
+ THnSparseF* fHistKaonRec;//!// multiplicity
+ TH1F *fHistKaonMatchtotETDep;//!// total Et deposited
- TH2F *fHistKaonRecdEdxP;// dEdx vs p
+ TH2F *fHistKaonRecdEdxP;//!// dEdx vs p
// *******************
// proton (anti) ET
// *******************
- THnSparseF* fHistProtonRecETDep;// Et deposited
- THnSparseF* fHistProtonRec;// multiplicity
- TH1F *fHistProtonMatchtotETDep;// total Et deposited
+ THnSparseF* fHistProtonRecETDep;//!// Et deposited
+ THnSparseF* fHistProtonRec;//!// multiplicity
+ TH1F *fHistProtonMatchtotETDep;//!// total Et deposited
- TH2F *fHistProtonRecdEdxP;// dEdx vs p
+ TH2F *fHistProtonRecdEdxP;//!// dEdx vs p
// *******************
// total charged ET
// *******************
- TH1F *fHistTotChargedMatchtotETDep;// total Et deposited - all charged particles
+ TH1F *fHistTotChargedMatchtotETDep;//!// total Et deposited - all charged particles
// *******************
// total ET
// *******************
- TH1F *fHistTotalRectotETDep;// total Et deposited - all particles
+ TH1F *fHistTotalRectotETDep;//!// total Et deposited - all particles
//few checks
- TH2F *fHistDeltaRZ;// track-cluster matching residual
+ TH2F *fHistDeltaRZ;//!// track-cluster matching residual
private:
//Declare it private to avoid compilation warning
// Reconstruction efficiency corrections
AliAnalysisEtRecEffCorrection *fReCorrections;
- TTree *fEventSummaryTree; // Contains event level information
+ TTree *fEventSummaryTree; //! Contains event level information
- TTree *fAcceptedTree; // Tree for information about accepted particles
+ TTree *fAcceptedTree; //! Tree for information about accepted particles
- TTree *fDepositTree; // optional TTree for energy deposit measurements
+ TTree *fDepositTree; //! optional TTree for energy deposit measurements
Double_t fTotEt;/** Total Et in the event (without acceptance cuts) */
// Declare the histograms
/** The EM Et spectrum measured */
- TH1F *fHistEt; //Et spectrum
+ TH1F *fHistEt; //!Et spectrum
/** Multiplicity of neutral particles in the events */
- TH1F *fHistNeutralMult; //Multiplicity
+ TH1F *fHistNeutralMult; //!Multiplicity
// Acceptance plots
- TH2F *fHistPhivsPtPos; //phi vs pT plot for positive tracks
- TH2F *fHistPhivsPtNeg; //phi vs pT plot for negative tracks
+ TH2F *fHistPhivsPtPos; //!phi vs pT plot for positive tracks
+ TH2F *fHistPhivsPtNeg; //!phi vs pT plot for negative tracks
/* Auxiliary Histogram variables */
static Float_t fgEtaAxis[17];//bins for eta axis of histograms
static Int_t fgNumOfRBins;//number of R bins
/** Centrality object */
- AliCentrality *fCentrality; //Centrality object
+ AliCentrality *fCentrality; //!Centrality object
Bool_t fMakeSparse;//Boolean for whether or not to make sparse histograms
- TH1I *fCutFlow; // Cut flow
+ TH1I *fCutFlow; //! Cut flow
AliAnalysisEtSelector *fSelector; // Selector class
- AliPIDResponse *fPIDResponse;
+ AliPIDResponse *fPIDResponse;//
Float_t fsub;
Float_t K0Weight(Float_t pt);//Function which gives the factor to reweigh a K0 so it roughly matches the data
Float_t LambdaWeight(Float_t pt);//Function which gives the factor to reweigh a Lambda so it roughly matches the data
Float_t AntiLambdaWeight(Float_t pt);//Function which gives the factor to reweigh a Lambda so it roughly matches the data
- TF1 *fK0PythiaD6T;//function with Levy fit parameters for K0S in PYTHIA D6T
- TF1 *fLambdaPythiaD6T;//function with Levy fit parameters for Lambda in PYTHIA D6T
- TF1 *fAntiLambdaPythiaD6T;//function with Levy fit parameters for AntiLambda in PYTHIA D6T
- TF1 *fK0Data;//function with Levy fit parameters for K0S in data
- TF1 *fLambdaData;//function with Levy fit parameters for Lambda in data
- TF1 *fAntiLambdaData;//function with Levy fit parameters for AntiLambda in data
-
- TF1 *fLambdaEnhancement;//function to describe lambda enhancement
- TF1 *fProtonEnhancement;//function to describe anti-lambda enhancement
+ TF1 *fK0PythiaD6T;//!function with Levy fit parameters for K0S in PYTHIA D6T
+ TF1 *fLambdaPythiaD6T;//!function with Levy fit parameters for Lambda in PYTHIA D6T
+ TF1 *fAntiLambdaPythiaD6T;//!function with Levy fit parameters for AntiLambda in PYTHIA D6T
+ TF1 *fK0Data;//!function with Levy fit parameters for K0S in data
+ TF1 *fLambdaData;//!function with Levy fit parameters for Lambda in data
+ TF1 *fAntiLambdaData;//!function with Levy fit parameters for AntiLambda in data
+
+ TF1 *fLambdaEnhancement;//!function to describe lambda enhancement
+ TF1 *fProtonEnhancement;//!function to describe anti-lambda enhancement
Float_t LambdaBaryonEnhancement(Float_t pt);//Function which gives the factor to reweigh a lambda or antilambda so it roughly matches baryon enhancement seen at RHIC
Float_t ProtonBaryonEnhancement(Float_t pt);//Function which gives the factor to reweigh a lambda or antilambda so it roughly matches baryon enhancement seen at RHIC
TString fCentralityMethod;//string specifying the centrality method, see https://twiki.cern.ch/twiki/bin/viewauth/ALICE/CentStudies
//
,fGeometryEmcalEtaAccCut(0.6)
,fGeometryEmcalPhiAccMinCut(80.0) // rad 1.4
- ,fGeometryEmcalPhiAccMaxCut(180.0) // rad 3.14
+ ,fGeometryEmcalPhiAccMaxCut(120.0) // rad 2.1
+ //,fGeometryEmcalPhiAccMaxCut(180.0) // rad 3.14
,fGeometryEmcalDetectorRadius(440.0)
//
,fReconstructedVertexXCut(0.5)
,fMonteCarloSingleChargedParticle(3)
,fMonteCarloNeutralParticle(0)
- ,fHistMakeTree(kTRUE)
+ ,fHistMakeTree(kFALSE)
,fHistMakeTreeDeposit(kFALSE)
,fHistNbinsMult(2000)
,fHistMinMult(-0.5)
Bool_t nottrackmatched = kTRUE;//default to no track matched
+ Bool_t countasmatched = kFALSE;
Float_t matchedTrackp = 0.0;
Float_t matchedTrackpt = 0.0;
fDepositedCode = part->GetPdgCode();
//cout<<"rcorr "<<rcorr<<endl;
Int_t n=caloCluster->GetNLabels() ;
//if(fReconstructedE - fsub* track->P() > 0.0){//if more energy was deposited than the momentum of the track and more than one particle led to the cluster
+ //cout<<"was matched"<<endl;
if(fSelector->PassMinEnergyCut( (fReconstructedE - fsub* track->P())*TMath::Sin(cp.Theta()) )){//if more energy was deposited than the momentum of the track and more than one particle led to the cluster
//then we say the cluster was not track matched but correct the energy
nottrackmatched = kTRUE;
- //cout<<"Reassigning energy "<<fReconstructedEt;
+ //but we don't want to double count the matched tracks...
+ countasmatched = kTRUE;
+ //cout<<" fsub "<<fsub;
+ //cout<<" Reassigning energy "<<fReconstructedEt;
fReconstructedE = fReconstructedE - fsub* track->P();
fReconstructedEt = fReconstructedE*TMath::Sin(cp.Theta());
//cout<<" to "<<fReconstructedEt<<endl;
}
}
Double_t eMax=0.;//eSubMax=0. ;
- cout<<"n="<<n<<", ";
+ //cout<<"n="<<n<<", ";
for(Int_t i=0; i<n; i++){
Int_t label = caloCluster->GetLabelAt(i);
if(label!=trackMatchedIndex){
}
else{
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%BEGIN NEUTRAL SECONDARIES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- if(nottrackmatched){//secondaries not removed
+ if(nottrackmatched && !countasmatched){//secondaries not removed
// cout<<"Neutral Secondary ";
// PrintFamilyTreeShort(iPart, stack);
etAntiProtonDeposited += clEt;
etAntiProtonDepositedNoEffCorr += fReconstructedEt;
}
- if(nottrackmatched){//not removed but should be
+ if(nottrackmatched && !countasmatched){//not removed but should be
subtotalHadronEnergy += fReconstructedEt;
etHadronCrossCheckTrue += clEt;
etPiKPDepositedNotTrackMatched += clEt;
}
}
else{//removed and should have been
+ //if(countasmatched) cout<<" I was counted as matched even though some of my energy might have been saved."<<endl;
//cout<<" t.m. primary"<<endl;
Int_t trackindex = fSelector->GetLabel(caloCluster,stack);// (caloCluster->GetLabelsArray())->At(0);
fHistChargedTrackDepositsAcceptedVsPt->Fill(part->Pt(), fCentClass,fReconstructedEt);
}
//===================================END NEUTRONS==================================================
}
- fPrimaryTree->Fill();
+ if(fCuts->GetHistMakeTree()) fPrimaryTree->Fill();
} // end of loop over clusters
Int_t fClusterMult;
- TH3F *fHistDecayVertexNonRemovedCharged; // Decay vertex for non-removed charged particles
- TH3F *fHistDecayVertexRemovedCharged; // Decay vertex for non-removed charged particles
- TH3F *fHistDecayVertexNonRemovedNeutral; // Decay vertex for non-removed charged particles
- TH3F *fHistDecayVertexRemovedNeutral; // Decay vertex for non-removed charged particles
-
- TH2F *fHistRemovedOrNot; // If charged/neutral particles were removed or not
-
- TH2F *fHistEtNonRemovedProtons; // enter comment here
- TH2F *fHistEtNonRemovedAntiProtons; // enter comment here
- TH2F *fHistEtNonRemovedPiPlus; // enter comment here
- TH2F *fHistEtNonRemovedPiMinus; // enter comment here
- TH2F *fHistEtNonRemovedKaonPlus; // enter comment here
- TH2F *fHistEtNonRemovedKaonMinus; // enter comment here
- TH2F *fHistEtNonRemovedK0s; // enter comment here
- TH2F *fHistEtNonRemovedK0L; // enter comment here
- TH2F *fHistEtNonRemovedLambdas; // enter comment here
- TH2F *fHistEtNonRemovedElectrons; // enter comment here
- TH2F *fHistEtNonRemovedPositrons; // enter comment here
- TH2F *fHistEtNonRemovedMuPlus; // enter comment here
- TH2F *fHistEtNonRemovedMuMinus; // enter comment here
- TH2F *fHistEtNonRemovedNeutrons; // enter comment here
- TH2F *fHistEtNonRemovedAntiNeutrons; // enter comment here
- TH2F *fHistEtNonRemovedGammas; // enter comment here
- TH2F *fHistEtNonRemovedGammasFromPi0; // enter comment here
-
- TH2F *fHistEtRemovedGammas; // enter comment here
- TH2F *fHistEtRemovedNeutrons; // enter comment here
- TH2F *fHistEtRemovedAntiNeutrons; // enter comment here
-
- TH2F *fHistEtRemovedCharged; // enter comment here
- TH2F *fHistEtRemovedNeutrals; // enter comment here
-
- TH2F *fHistEtNonRemovedCharged; // enter comment here
- TH2F *fHistEtNonRemovedNeutrals; // enter comment here
-
- TH2F *fHistMultNonRemovedProtons; // enter comment here
- TH2F *fHistMultNonRemovedAntiProtons; // enter comment here
- TH2F *fHistMultNonRemovedPiPlus; // enter comment here
- TH2F *fHistMultNonRemovedPiMinus; // enter comment here
- TH2F *fHistMultNonRemovedKaonPlus; // enter comment here
- TH2F *fHistMultNonRemovedKaonMinus; // enter comment here
- TH2F *fHistMultNonRemovedK0s; // enter comment here
- TH2F *fHistMultNonRemovedK0L; // enter comment here
- TH2F *fHistMultNonRemovedLambdas; // enter comment here
- TH2F *fHistMultNonRemovedElectrons; // enter comment here
- TH2F *fHistMultNonRemovedPositrons; // enter comment here
- TH2F *fHistMultNonRemovedMuPlus; // enter comment here
- TH2F *fHistMultNonRemovedMuMinus; // enter comment here
- TH2F *fHistMultNonRemovedNeutrons; // enter comment here
- TH2F *fHistMultNonRemovedAntiNeutrons; // enter comment here
- TH2F *fHistMultNonRemovedGammas; // enter comment here
-
- TH2F *fHistMultRemovedGammas; // enter comment here
- TH2F *fHistMultRemovedNeutrons; // enter comment here
- TH2F *fHistMultRemovedAntiNeutrons; // enter comment here
-
- TH2F *fHistMultRemovedCharged; // enter comment here
- TH2F *fHistMultRemovedNeutrals; // enter comment here
-
- TH2F *fHistMultNonRemovedCharged; // enter comment here
- TH2F *fHistMultNonRemovedNeutrals; // enter comment here
-
- TH2F *fHistTrackMultvsNonRemovedCharged; // enter comment here
- TH2F *fHistTrackMultvsNonRemovedNeutral; // enter comment here
- TH2F *fHistTrackMultvsRemovedGamma; // enter comment here
-
- TH2F *fHistClusterMultvsNonRemovedCharged; // enter comment here
- TH2F *fHistClusterMultvsNonRemovedNeutral; // enter comment here
- TH2F *fHistClusterMultvsRemovedGamma; // enter comment here
-
- TH2F *fHistMultvsNonRemovedChargedE; // enter comment here
- TH2F *fHistMultvsNonRemovedNeutralE; // enter comment here
- TH2F *fHistMultvsRemovedGammaE; // enter comment here
+ TH3F *fHistDecayVertexNonRemovedCharged; //! Decay vertex for non-removed charged particles
+ TH3F *fHistDecayVertexRemovedCharged; //! Decay vertex for non-removed charged particles
+ TH3F *fHistDecayVertexNonRemovedNeutral; //! Decay vertex for non-removed charged particles
+ TH3F *fHistDecayVertexRemovedNeutral; //! Decay vertex for non-removed charged particles
+
+ TH2F *fHistRemovedOrNot; //! If charged/neutral particles were removed or not
+
+ TH2F *fHistEtNonRemovedProtons; //! enter comment here
+ TH2F *fHistEtNonRemovedAntiProtons; //! enter comment here
+ TH2F *fHistEtNonRemovedPiPlus; //! enter comment here
+ TH2F *fHistEtNonRemovedPiMinus; //! enter comment here
+ TH2F *fHistEtNonRemovedKaonPlus; //! enter comment here
+ TH2F *fHistEtNonRemovedKaonMinus; //! enter comment here
+ TH2F *fHistEtNonRemovedK0s; //! enter comment here
+ TH2F *fHistEtNonRemovedK0L; //! enter comment here
+ TH2F *fHistEtNonRemovedLambdas; //! enter comment here
+ TH2F *fHistEtNonRemovedElectrons; //! enter comment here
+ TH2F *fHistEtNonRemovedPositrons; //! enter comment here
+ TH2F *fHistEtNonRemovedMuPlus; //! enter comment here
+ TH2F *fHistEtNonRemovedMuMinus; //! enter comment here
+ TH2F *fHistEtNonRemovedNeutrons; //! enter comment here
+ TH2F *fHistEtNonRemovedAntiNeutrons; //! enter comment here
+ TH2F *fHistEtNonRemovedGammas; //! enter comment here
+ TH2F *fHistEtNonRemovedGammasFromPi0; //! enter comment here
+
+ TH2F *fHistEtRemovedGammas; //! enter comment here
+ TH2F *fHistEtRemovedNeutrons; //! enter comment here
+ TH2F *fHistEtRemovedAntiNeutrons; //! enter comment here
+
+ TH2F *fHistEtRemovedCharged; //! enter comment here
+ TH2F *fHistEtRemovedNeutrals; //! enter comment here
+
+ TH2F *fHistEtNonRemovedCharged; //! enter comment here
+ TH2F *fHistEtNonRemovedNeutrals; //! enter comment here
+
+ TH2F *fHistMultNonRemovedProtons; //! enter comment here
+ TH2F *fHistMultNonRemovedAntiProtons; //! enter comment here
+ TH2F *fHistMultNonRemovedPiPlus; //! enter comment here
+ TH2F *fHistMultNonRemovedPiMinus; //! enter comment here
+ TH2F *fHistMultNonRemovedKaonPlus; //! enter comment here
+ TH2F *fHistMultNonRemovedKaonMinus; //! enter comment here
+ TH2F *fHistMultNonRemovedK0s; //! enter comment here
+ TH2F *fHistMultNonRemovedK0L; //! enter comment here
+ TH2F *fHistMultNonRemovedLambdas; //! enter comment here
+ TH2F *fHistMultNonRemovedElectrons; //! enter comment here
+ TH2F *fHistMultNonRemovedPositrons; //! enter comment here
+ TH2F *fHistMultNonRemovedMuPlus; //! enter comment here
+ TH2F *fHistMultNonRemovedMuMinus; //! enter comment here
+ TH2F *fHistMultNonRemovedNeutrons; //! enter comment here
+ TH2F *fHistMultNonRemovedAntiNeutrons; //! enter comment here
+ TH2F *fHistMultNonRemovedGammas; //! enter comment here
+
+ TH2F *fHistMultRemovedGammas; //! enter comment here
+ TH2F *fHistMultRemovedNeutrons; //! enter comment here
+ TH2F *fHistMultRemovedAntiNeutrons; //! enter comment here
+
+ TH2F *fHistMultRemovedCharged; //! enter comment here
+ TH2F *fHistMultRemovedNeutrals; //! enter comment here
+
+ TH2F *fHistMultNonRemovedCharged; //! enter comment here
+ TH2F *fHistMultNonRemovedNeutrals; //! enter comment here
+
+ TH2F *fHistTrackMultvsNonRemovedCharged; //! enter comment here
+ TH2F *fHistTrackMultvsNonRemovedNeutral; //! enter comment here
+ TH2F *fHistTrackMultvsRemovedGamma; //! enter comment here
+
+ TH2F *fHistClusterMultvsNonRemovedCharged; //! enter comment here
+ TH2F *fHistClusterMultvsNonRemovedNeutral; //! enter comment here
+ TH2F *fHistClusterMultvsRemovedGamma; //! enter comment here
+
+ TH2F *fHistMultvsNonRemovedChargedE; //! enter comment here
+ TH2F *fHistMultvsNonRemovedNeutralE; //! enter comment here
+ TH2F *fHistMultvsRemovedGammaE; //! enter comment here
Bool_t fCalcForKaonCorrection;//turns on and off creation of kaon correction histograms
- TH3F *fHistK0EDepositsVsPtInAcceptance; // enter comment here
- TH3F *fHistK0EGammaVsPtInAcceptance; // enter comment here
- TH3F *fHistK0EDepositsVsPtOutOfAcceptance; // enter comment here
- TH3F *fHistK0EGammaVsPtOutOfAcceptance; // enter comment here
- TH1F *fHistSimKaonsInAcceptance;// enter comment here
- TH1F *fHistSimK0SInAcceptance;// enter comment here
- TH1F *fHistSimKPlusInAcceptance;// enter comment here
- TH1F *fHistSimKMinusInAcceptance;// enter comment here
- TH1F *fHistSimK0LInAcceptance;// enter comment here
- TH1F *fHistSimKaonsOutOfAcceptance;// enter comment here
- TH1F *fHistSimKaonsInAcceptanceWithDepositsPrimaries;// enter comment here
- TH1F *fHistSimKaonsOutOfAcceptanceWithDepositsSecondaries;// enter comment here
- TH1F *fHistSimKaonsOutOfAcceptanceWithDepositsPrimaries;// enter comment here
+ TH3F *fHistK0EDepositsVsPtInAcceptance; //! enter comment here
+ TH3F *fHistK0EGammaVsPtInAcceptance; //! enter comment here
+ TH3F *fHistK0EDepositsVsPtOutOfAcceptance; //! enter comment here
+ TH3F *fHistK0EGammaVsPtOutOfAcceptance; //! enter comment here
+ TH1F *fHistSimKaonsInAcceptance;//! enter comment here
+ TH1F *fHistSimK0SInAcceptance;//! enter comment here
+ TH1F *fHistSimKPlusInAcceptance;//! enter comment here
+ TH1F *fHistSimKMinusInAcceptance;//! enter comment here
+ TH1F *fHistSimK0LInAcceptance;//! enter comment here
+ TH1F *fHistSimKaonsOutOfAcceptance;//! enter comment here
+ TH1F *fHistSimKaonsInAcceptanceWithDepositsPrimaries;//! enter comment here
+ TH1F *fHistSimKaonsOutOfAcceptanceWithDepositsSecondaries;//! enter comment here
+ TH1F *fHistSimKaonsOutOfAcceptanceWithDepositsPrimaries;//! enter comment here
Float_t fEtNonRemovedProtons; // enter comment here
Float_t fEtNonRemovedAntiProtons; // enter comment here
Int_t fTrackMultInAcc; // enter comment here
- TH2F *fHistDxDzNonRemovedCharged; // enter comment here
- TH2F *fHistDxDzRemovedCharged; // enter comment here
- TH2F *fHistDxDzNonRemovedNeutral; // enter comment here
- TH2F *fHistDxDzRemovedNeutral; // enter comment here
+ TH2F *fHistDxDzNonRemovedCharged; //! enter comment here
+ TH2F *fHistDxDzRemovedCharged; //! enter comment here
+ TH2F *fHistDxDzNonRemovedNeutral; //! enter comment here
+ TH2F *fHistDxDzRemovedNeutral; //! enter comment here
- TH1F *fHistPiPlusMult; // enter comment here
- TH1F *fHistPiMinusMult; // enter comment here
- TH1F *fHistPiZeroMult; // enter comment here
+ TH1F *fHistPiPlusMult; //! enter comment here
+ TH1F *fHistPiMinusMult; //! enter comment here
+ TH1F *fHistPiZeroMult; //! enter comment here
- TH1F *fHistPiPlusMultAcc; // enter comment here
- TH1F *fHistPiMinusMultAcc; // enter comment here
- TH1F *fHistPiZeroMultAcc; // enter comment here
+ TH1F *fHistPiPlusMultAcc; //! enter comment here
+ TH1F *fHistPiMinusMultAcc; //! enter comment here
+ TH1F *fHistPiZeroMultAcc; //! enter comment here
// Int_t fPiPlusMult; // enter comment here
// Int_t fPiMinusMult; // enter comment here
Double_t fTotNeutralEtAfterMinEnergyCut; // enter comment here
Bool_t fCalcTrackMatchVsMult;
- TH1F *fHistGammasFound;
- TH1F *fHistGammasGenerated;
- TH2F *fHistGammasFoundCent;
- TH2F *fHistGammasFoundOutOfAccCent;
- TH2F *fHistGammasFoundAltCent;
- TH2F *fHistGammasFoundOutOfAccAltCent;
- TH2F *fHistGammasGeneratedCent;
- TH2F *fHistGammasFoundRecoEnergyCent;
- TH2F *fHistGammasFoundOutOfAccRecoEnergyCent;
- TH1F *fHistChargedTracksCut;
- TH1F *fHistChargedTracksAccepted;
- TH1F *fHistGammasCut;
- TH1F *fHistGammasAccepted;
- TH2F *fHistChargedTrackDepositsAcceptedVsPt;
- TH2F *fHistChargedTrackDepositsAllVsPt;
- TH2F *fHistChargedTrackDepositsAcceptedVsPtEffCorr;
- TH2F *fHistChargedTrackDepositsAllVsPtEffCorr;
- TH2F *fHistChargedTracksCutMult;
- TH2F *fHistChargedTracksAcceptedMult;
- TH2F *fHistChargedTracksAcceptedLowPtCentEffCorr;
- TH2F *fHistChargedTracksAcceptedLowPtCent;
- TH2F *fHistChargedTracksAcceptedLowPtCent500MeV;
- TH2F *fHistChargedTracksAcceptedLowPtCentNoAntiProtons;
- TH2F *fHistChargedTracksAcceptedLowPtCentAntiProtons;
- TH2F *fHistGammasCutMult;
- TH2F *fHistGammasAcceptedMult;
- TH1F *fHistBadTrackMatches;
- TH2F *fHistMatchedTracksEvspTBkgd;
- TH2F *fHistMatchedTracksEvspTSignal;
- TH2F *fHistMatchedTracksEvspTBkgdPeripheral;
- TH2F *fHistMatchedTracksEvspTSignalPeripheral;
- TH3F *fHistMatchedTracksEvspTBkgdvsCent;
- TH3F *fHistMatchedTracksEvspTSignalvsCent;
- TH3F *fHistMatchedTracksEvspTBkgdvsCentEffCorr;
- TH3F *fHistMatchedTracksEvspTSignalvsCentEffCorr;
- TH1F *fHistChargedTracksCutPeripheral;
- TH1F *fHistChargedTracksAcceptedPeripheral;
- TH1F *fHistGammasCutPeripheral;
- TH1F *fHistGammasAcceptedPeripheral;
- TH2F *fHistBadTrackMatchesdPhidEta;
- TH2F *fHistGoodTrackMatchesdPhidEta;
- TH1F *fHistHadronDepositsAll;
- TH1F *fHistHadronDepositsReco;
- TH2F *fHistHadronDepositsAllCent;
- TH2F *fHistHadronDepositsAllCent500MeV;
- TH2F *fHistHadronDepositsRecoCent;
- TH2F *fHistHadronDepositsAllvsECent;
- TH2F *fHistHadronDepositsRecovsECent;
- TH2F *fHistHadronsAllCent;
- TH3F *fHistMultChVsSignalVsMult;
- TH2F *fHistNeutralRemovedSecondaryEtVsCent;
- TH2F *fHistChargedRemovedSecondaryEtVsCent;
- TH2F *fHistNeutralNotRemovedSecondaryEtVsCent;
- TH2F *fHistChargedNotRemovedSecondaryEtVsCent;
- TH2F *fHistNeutralRemovedSecondaryNumVsNCluster;
- TH2F *fHistChargedRemovedSecondaryNumVsNCluster;
- TH2F *fHistNeutralNotRemovedSecondaryNumVsNCluster;
- TH2F *fHistChargedNotRemovedSecondaryNumVsNCluster;
- TH2F *fHistNeutralRemovedSecondaryNumVsCent;
- TH2F *fHistChargedRemovedSecondaryNumVsCent;
- TH2F *fHistNeutralNotRemovedSecondaryNumVsCent;
- TH2F *fHistChargedNotRemovedSecondaryNumVsCent;
- TH2F *fHistNeutronsEtVsCent;
- TH2F *fHistNeutronsNumVsCent;
- TH2F *fHistNotNeutronsNumVsCent;
- TH2F *fHistPiKPDepositedVsNch;
- TH2F *fHistPiKPNotTrackMatchedDepositedVsNch;
-
- TH2F *fHistNeutronsDepositedVsNch;
- TH2F *fHistAntiNeutronsDepositedVsNch;
- TH2F *fHistProtonsDepositedVsNch;
- TH2F *fHistAntiProtonsDepositedVsNch;
- TH2F *fHistProtonsNotTrackMatchedDepositedVsNch;
- TH2F *fHistAntiProtonsNotTrackMatchedDepositedVsNch;//
- TH2F *fHistNeutronsDepositedVsNcl;
- TH2F *fHistAntiNeutronsDepositedVsNcl;
- TH2F *fHistProtonsDepositedVsNcl;
- TH2F *fHistAntiProtonsDepositedVsNcl;
- TH2F *fHistProtonsNotTrackMatchedDepositedVsNcl;
- TH2F *fHistAntiProtonsNotTrackMatchedDepositedVsNcl;
- TH2F *fHistSecondariesVsNch;
- TH2F *fHistSecondariesVsNcl;
- TH2F *fHistSecondariesEffCorrVsNch;
- TH2F *fHistSecondariesEffCorrVsNcl;
- TH2F *fHistSecondariesOutOfAccEffCorrVsNch;
- TH2F *fHistSecondariesDetectorCoverEffCorrVsNch;
-
-
- TH2F *fHistNeutronsDepositedVsNchNoEffCorr;//filled
- TH2F *fHistAntiNeutronsDepositedVsNchNoEffCorr;//filled
- TH2F *fHistProtonsDepositedVsNchNoEffCorr;//filled
- TH2F *fHistAntiProtonsDepositedVsNchNoEffCorr;//filled
- TH2F *fHistProtonsNotTrackMatchedDepositedVsNchNoEffCorr;//filled
- TH2F *fHistAntiProtonsNotTrackMatchedDepositedVsNchNoEffCorr;//filled
- TH2F *fHistNeutronsDepositedVsNclNoEffCorr;//filled
- TH2F *fHistAntiNeutronsDepositedVsNclNoEffCorr;//filled
- TH2F *fHistProtonsDepositedVsNclNoEffCorr;//filled
- TH2F *fHistAntiProtonsDepositedVsNclNoEffCorr;//filled
- TH2F *fHistProtonsNotTrackMatchedDepositedVsNclNoEffCorr;//filled
- TH2F *fHistAntiProtonsNotTrackMatchedDepositedVsNclNoEffCorr;//filled
-
- TH3F *fHistCentVsNchVsNcl;
- TH3F *fHistSecondaryPositionInDetector;
- //TH2F *fHistSecondaryPositionInDetector2D;
- TH2F *fClusterPositionWeird;
- //TH3F *fHistSecondaryPositionInDetectorMultiple;
- TH1F *fSecondaryClusterEnergy; // Distribution of cluster energies
-
- TH2F *fHistGammaCrossCheck;
- TH2F *fHistGammaCrossCheckAlt;//includes gammas that did not hit as gammas
- TH2F *fHistGammaEnergyCrossCheck;
- TH2F *fHistGammaEnergyCrossCheckAlt;//includes gammas that did not hit as gammas
- TH2F *fHistNeutronCrossCheck;
- TH2F *fHistSecondaryCrossCheck;
- TH2F *fHistHadronCrossCheck;
- TH2F *fHistKaonCrossCheck;
-
- TH1F *fHistAllEnergy;//energy of all clusters passing cuts vs centrality
- TH1F *fHistSignalEnergy;//signal of signal clusters passing cuts vs centrality
- TH1F *fHistNeutronEnergy;//signal of neutron clusters passing cuts vs centrality
- TH1F *fHistKaonEnergy;//signal of kaon clusters passing cuts vs centrality
- TH1F *fHistHadronEnergy;//signal of hadron clusters passing cuts vs centrality
- TH1F *fHistSecondaryEnergy;//signal of secondary clusters passing cuts vs centrality
- TH1F *fHistSecondaryChargedEnergy;//signal of secondary clusters passing cuts vs centrality
- TH1F *fHistSecondaryNeutronEnergy;//signal of secondary clusters passing cuts vs centrality
- TH1F *fHistSecondaryGammaEnergy;//signal of secondary clusters passing cuts vs centrality
- TH1F *fHistSecondaryElectronEnergy;//signal of secondary clusters passing cuts vs centrality
- TH1F *fHistSecondaryOtherEnergy;//signal of secondary clusters passing cuts vs centrality
- TH1F *fHistSimulatedGammaEnergy;//signal of signal clusters passing cuts vs centrality
- TH1F *fHistReconstructedGammaEnergy;//signal of signal clusters passing cuts vs centrality
- TH1F *fHistSimulatedGammaEnergyAboveThreshold;//signal of signal clusters passing cuts vs centrality
- TH1F *fHistReconstructedSignalEnergy;//signal of signal clusters passing cuts vs centrality
-
- TH2F *fHistFracSignalVsNClusters;//Fraction of signal vs number of clusters
- TH2F *fHistFracHadronsVsNClusters;//Fraction of hadrons vs number of clusters
- TH2F *fHistFracNeutronsVsNClusters;//Fraction of signal vs number of clusters
- TH2F *fHistFracKaonsVsNClusters;//Fraction of signal vs number of clusters
- TH2F *fHistFracSecondariesVsNClusters;//Fraction of signal vs number of clusters
- TH2F *fHistFracSignalVsNMultiplicity;//Fraction of signal vs charged track multiplicity
- TH2F *fHistFracHadronsVsNMultiplicity;//Fraction of hadrons vs charged track multiplicity
- TH2F *fHistFracNeutronsVsNMultiplicity;//Fraction of signal vs charged track multiplicity
- TH2F *fHistFracKaonsVsNMultiplicity;//Fraction of signal vs charged track multiplicity
- TH2F *fHistFracSecondariesVsNMultiplicity;//Fraction of signal vs charged track multiplicity
- TH2F *fHistFracSignalVsNMatchedTracks;//Fraction of signal vs number of matched tracks
- TH2F *fHistFracHadronsVsNMatchedTracks;//Fraction of hadrons vs number of matched tracks
- TH2F *fHistFracNeutronsVsNMatchedTracks;//Fraction of signal vs number of matched tracks
- TH2F *fHistFracKaonsVsNMatchedTracks;//Fraction of signal vs number of matched tracks
- TH2F *fHistFracSecondariesVsNMatchedTracks;//Fraction of signal vs number of matched tracks
- TH2F *fHistFracSignalVsNTotalTracks;//Fraction of signal vs number of total tracks
- TH2F *fHistFracHadronsVsNTotalTracks;//Fraction of hadrons vs number of total tracks
- TH2F *fHistFracNeutronsVsNTotalTracks;//Fraction of signal vs number of total tracks
- TH2F *fHistFracKaonsVsNTotalTracks;//Fraction of signal vs number of total tracks
- TH2F *fHistFracSecondariesVsNTotalTracks;//Fraction of signal vs number of total tracks
- TH3F *fHistRCorrVsPtVsCent; // enter comment here
+ TH1F *fHistGammasFound;//!
+ TH1F *fHistGammasGenerated;//!
+ TH2F *fHistGammasFoundCent;//!
+ TH2F *fHistGammasFoundOutOfAccCent;//!
+ TH2F *fHistGammasFoundAltCent;//!
+ TH2F *fHistGammasFoundOutOfAccAltCent;//!
+ TH2F *fHistGammasGeneratedCent;//!
+ TH2F *fHistGammasFoundRecoEnergyCent;//!
+ TH2F *fHistGammasFoundOutOfAccRecoEnergyCent;//!
+ TH1F *fHistChargedTracksCut;//!
+ TH1F *fHistChargedTracksAccepted;//!
+ TH1F *fHistGammasCut;//!
+ TH1F *fHistGammasAccepted;//!
+ TH2F *fHistChargedTrackDepositsAcceptedVsPt;//!
+ TH2F *fHistChargedTrackDepositsAllVsPt;//!
+ TH2F *fHistChargedTrackDepositsAcceptedVsPtEffCorr;//!
+ TH2F *fHistChargedTrackDepositsAllVsPtEffCorr;//!
+ TH2F *fHistChargedTracksCutMult;//!
+ TH2F *fHistChargedTracksAcceptedMult;//!
+ TH2F *fHistChargedTracksAcceptedLowPtCentEffCorr;//!
+ TH2F *fHistChargedTracksAcceptedLowPtCent;//!
+ TH2F *fHistChargedTracksAcceptedLowPtCent500MeV;//!
+ TH2F *fHistChargedTracksAcceptedLowPtCentNoAntiProtons;//!
+ TH2F *fHistChargedTracksAcceptedLowPtCentAntiProtons;//!
+ TH2F *fHistGammasCutMult;//!
+ TH2F *fHistGammasAcceptedMult;//!
+ TH1F *fHistBadTrackMatches;//!
+ TH2F *fHistMatchedTracksEvspTBkgd;//!
+ TH2F *fHistMatchedTracksEvspTSignal;//!
+ TH2F *fHistMatchedTracksEvspTBkgdPeripheral;//!
+ TH2F *fHistMatchedTracksEvspTSignalPeripheral;//!
+ TH3F *fHistMatchedTracksEvspTBkgdvsCent;//!
+ TH3F *fHistMatchedTracksEvspTSignalvsCent;//!
+ TH3F *fHistMatchedTracksEvspTBkgdvsCentEffCorr;//!
+ TH3F *fHistMatchedTracksEvspTSignalvsCentEffCorr;//!
+ TH1F *fHistChargedTracksCutPeripheral;//!
+ TH1F *fHistChargedTracksAcceptedPeripheral;//!
+ TH1F *fHistGammasCutPeripheral;//!
+ TH1F *fHistGammasAcceptedPeripheral;//!
+ TH2F *fHistBadTrackMatchesdPhidEta;//!
+ TH2F *fHistGoodTrackMatchesdPhidEta;//!
+ TH1F *fHistHadronDepositsAll;//!
+ TH1F *fHistHadronDepositsReco;//!
+ TH2F *fHistHadronDepositsAllCent;//!
+ TH2F *fHistHadronDepositsAllCent500MeV;//!
+ TH2F *fHistHadronDepositsRecoCent;//!
+ TH2F *fHistHadronDepositsAllvsECent;//!
+ TH2F *fHistHadronDepositsRecovsECent;//!
+ TH2F *fHistHadronsAllCent;//!
+ TH3F *fHistMultChVsSignalVsMult;//!
+ TH2F *fHistNeutralRemovedSecondaryEtVsCent;//!
+ TH2F *fHistChargedRemovedSecondaryEtVsCent;//!
+ TH2F *fHistNeutralNotRemovedSecondaryEtVsCent;//!
+ TH2F *fHistChargedNotRemovedSecondaryEtVsCent;//!
+ TH2F *fHistNeutralRemovedSecondaryNumVsNCluster;//!
+ TH2F *fHistChargedRemovedSecondaryNumVsNCluster;//!
+ TH2F *fHistNeutralNotRemovedSecondaryNumVsNCluster;//!
+ TH2F *fHistChargedNotRemovedSecondaryNumVsNCluster;//!
+ TH2F *fHistNeutralRemovedSecondaryNumVsCent;//!
+ TH2F *fHistChargedRemovedSecondaryNumVsCent;//!
+ TH2F *fHistNeutralNotRemovedSecondaryNumVsCent;//!
+ TH2F *fHistChargedNotRemovedSecondaryNumVsCent;//!
+ TH2F *fHistNeutronsEtVsCent;//!
+ TH2F *fHistNeutronsNumVsCent;//!
+ TH2F *fHistNotNeutronsNumVsCent;//!
+ TH2F *fHistPiKPDepositedVsNch;//!
+ TH2F *fHistPiKPNotTrackMatchedDepositedVsNch;//!
+
+ TH2F *fHistNeutronsDepositedVsNch;//!
+ TH2F *fHistAntiNeutronsDepositedVsNch;//!
+ TH2F *fHistProtonsDepositedVsNch;//!
+ TH2F *fHistAntiProtonsDepositedVsNch;//!
+ TH2F *fHistProtonsNotTrackMatchedDepositedVsNch;//!
+ TH2F *fHistAntiProtonsNotTrackMatchedDepositedVsNch;//!//
+ TH2F *fHistNeutronsDepositedVsNcl;//!
+ TH2F *fHistAntiNeutronsDepositedVsNcl;//!
+ TH2F *fHistProtonsDepositedVsNcl;//!
+ TH2F *fHistAntiProtonsDepositedVsNcl;//!
+ TH2F *fHistProtonsNotTrackMatchedDepositedVsNcl;//!
+ TH2F *fHistAntiProtonsNotTrackMatchedDepositedVsNcl;//!
+ TH2F *fHistSecondariesVsNch;//!
+ TH2F *fHistSecondariesVsNcl;//!
+ TH2F *fHistSecondariesEffCorrVsNch;//!
+ TH2F *fHistSecondariesEffCorrVsNcl;//!
+ TH2F *fHistSecondariesOutOfAccEffCorrVsNch;//!
+ TH2F *fHistSecondariesDetectorCoverEffCorrVsNch;//!
+
+
+ TH2F *fHistNeutronsDepositedVsNchNoEffCorr;//!//filled
+ TH2F *fHistAntiNeutronsDepositedVsNchNoEffCorr;//!//filled
+ TH2F *fHistProtonsDepositedVsNchNoEffCorr;//!//filled
+ TH2F *fHistAntiProtonsDepositedVsNchNoEffCorr;//!//filled
+ TH2F *fHistProtonsNotTrackMatchedDepositedVsNchNoEffCorr;//!//filled
+ TH2F *fHistAntiProtonsNotTrackMatchedDepositedVsNchNoEffCorr;//!//filled
+ TH2F *fHistNeutronsDepositedVsNclNoEffCorr;//!//filled
+ TH2F *fHistAntiNeutronsDepositedVsNclNoEffCorr;//!//filled
+ TH2F *fHistProtonsDepositedVsNclNoEffCorr;//!//filled
+ TH2F *fHistAntiProtonsDepositedVsNclNoEffCorr;//!//filled
+ TH2F *fHistProtonsNotTrackMatchedDepositedVsNclNoEffCorr;//!//filled
+ TH2F *fHistAntiProtonsNotTrackMatchedDepositedVsNclNoEffCorr;//!//filled
+
+ TH3F *fHistCentVsNchVsNcl;//!
+ TH3F *fHistSecondaryPositionInDetector;//!
+ //TH2F *fHistSecondaryPositionInDetector2D;//!
+ TH2F *fClusterPositionWeird;//!
+ //TH3F *fHistSecondaryPositionInDetectorMultiple;//!
+ TH1F *fSecondaryClusterEnergy;//! // Distribution of cluster energies
+
+ TH2F *fHistGammaCrossCheck;//!
+ TH2F *fHistGammaCrossCheckAlt;//!//includes gammas that did not hit as gammas
+ TH2F *fHistGammaEnergyCrossCheck;//!
+ TH2F *fHistGammaEnergyCrossCheckAlt;//!//includes gammas that did not hit as gammas
+ TH2F *fHistNeutronCrossCheck;//!
+ TH2F *fHistSecondaryCrossCheck;//!
+ TH2F *fHistHadronCrossCheck;//!
+ TH2F *fHistKaonCrossCheck;//!
+
+ TH1F *fHistAllEnergy;//!//energy of all clusters passing cuts vs centrality
+ TH1F *fHistSignalEnergy;//!//signal of signal clusters passing cuts vs centrality
+ TH1F *fHistNeutronEnergy;//!//signal of neutron clusters passing cuts vs centrality
+ TH1F *fHistKaonEnergy;//!//signal of kaon clusters passing cuts vs centrality
+ TH1F *fHistHadronEnergy;//!//signal of hadron clusters passing cuts vs centrality
+ TH1F *fHistSecondaryEnergy;//!//signal of secondary clusters passing cuts vs centrality
+ TH1F *fHistSecondaryChargedEnergy;//!//signal of secondary clusters passing cuts vs centrality
+ TH1F *fHistSecondaryNeutronEnergy;//!//signal of secondary clusters passing cuts vs centrality
+ TH1F *fHistSecondaryGammaEnergy;//!//signal of secondary clusters passing cuts vs centrality
+ TH1F *fHistSecondaryElectronEnergy;//!//signal of secondary clusters passing cuts vs centrality
+ TH1F *fHistSecondaryOtherEnergy;//!//signal of secondary clusters passing cuts vs centrality
+ TH1F *fHistSimulatedGammaEnergy;//!//signal of signal clusters passing cuts vs centrality
+ TH1F *fHistReconstructedGammaEnergy;//!//signal of signal clusters passing cuts vs centrality
+ TH1F *fHistSimulatedGammaEnergyAboveThreshold;//!//signal of signal clusters passing cuts vs centrality
+ TH1F *fHistReconstructedSignalEnergy;//!//signal of signal clusters passing cuts vs centrality
+
+ TH2F *fHistFracSignalVsNClusters;//!//Fraction of signal vs number of clusters
+ TH2F *fHistFracHadronsVsNClusters;//!//Fraction of hadrons vs number of clusters
+ TH2F *fHistFracNeutronsVsNClusters;//!//Fraction of signal vs number of clusters
+ TH2F *fHistFracKaonsVsNClusters;//!//Fraction of signal vs number of clusters
+ TH2F *fHistFracSecondariesVsNClusters;//!//Fraction of signal vs number of clusters
+ TH2F *fHistFracSignalVsNMultiplicity;//!//Fraction of signal vs charged track multiplicity
+ TH2F *fHistFracHadronsVsNMultiplicity;//!//Fraction of hadrons vs charged track multiplicity
+ TH2F *fHistFracNeutronsVsNMultiplicity;//!//Fraction of signal vs charged track multiplicity
+ TH2F *fHistFracKaonsVsNMultiplicity;//!//Fraction of signal vs charged track multiplicity
+ TH2F *fHistFracSecondariesVsNMultiplicity;//!//Fraction of signal vs charged track multiplicity
+ TH2F *fHistFracSignalVsNMatchedTracks;//!//Fraction of signal vs number of matched tracks
+ TH2F *fHistFracHadronsVsNMatchedTracks;//!//Fraction of hadrons vs number of matched tracks
+ TH2F *fHistFracNeutronsVsNMatchedTracks;//!//Fraction of signal vs number of matched tracks
+ TH2F *fHistFracKaonsVsNMatchedTracks;//!//Fraction of signal vs number of matched tracks
+ TH2F *fHistFracSecondariesVsNMatchedTracks;//!//Fraction of signal vs number of matched tracks
+ TH2F *fHistFracSignalVsNTotalTracks;//!//Fraction of signal vs number of total tracks
+ TH2F *fHistFracHadronsVsNTotalTracks;//!//Fraction of hadrons vs number of total tracks
+ TH2F *fHistFracNeutronsVsNTotalTracks;//!//Fraction of signal vs number of total tracks
+ TH2F *fHistFracKaonsVsNTotalTracks;//!//Fraction of signal vs number of total tracks
+ TH2F *fHistFracSecondariesVsNTotalTracks;//!//Fraction of signal vs number of total tracks
+ TH3F *fHistRCorrVsPtVsCent;//! // enter comment here
private:
private:
- TH2I *fBadMapM2; // Bad map
- TH2I *fBadMapM3; // Bad map
- TH2I *fBadMapM4; // Bad map
+ TH2I *fBadMapM2; //! Bad map
+ TH2I *fBadMapM3; //! Bad map
+ TH2I *fBadMapM4; //! Bad map
- AliPHOSGeoUtils *fGeoUtils; // Geo utils
+ AliPHOSGeoUtils *fGeoUtils;// // Geo utils
// Prohibited
AliAnalysisEtMonteCarloPhos & operator = (const AliAnalysisEtMonteCarloPhos&) ;//cpy assignment
,fClusterPositionAllEnergy(0)
,fClusterEnergy(0)
,fClusterEnergyCent(0)
+ ,fClusterEnergyModifiedTrackMatchesCent(0)
,fClusterEnergyCentMatched(0)
,fClusterEnergyCentNotMatched(0)
,fClusterEt(0)
delete fClusterPositionAllEnergy;
delete fClusterEnergy;
delete fClusterEnergyCent;
+ delete fClusterEnergyModifiedTrackMatchesCent;
delete fClusterEnergyCentMatched;
delete fClusterEnergyCentNotMatched;
delete fClusterEt;
// if(fReconstructedE - fsub* track->P() > 0.0){
fReconstructedE = fReconstructedE - fsub* track->P();
matched = kFALSE;
+ fClusterEnergyModifiedTrackMatchesCent->Fill(GetCorrectionModification(*cluster,0,0,cent)*fReconstructedE,cent);
}
}
}
list->Add(fClusterPositionAllEnergy);
list->Add(fClusterEnergy);
list->Add(fClusterEnergyCent);
+ list->Add(fClusterEnergyModifiedTrackMatchesCent);
list->Add(fClusterEnergyCentMatched);
list->Add(fClusterEnergyCentNotMatched);
list->Add(fClusterEt);
fClusterEnergyCent->SetYTitle("Centrality Bin");
fClusterEnergyCent->SetZTitle("Number of clusters");
+ histname = "fClusterEnergyModifiedTrackMatchesCent" + fHistogramNameSuffix;
+ fClusterEnergyModifiedTrackMatchesCent = new TH2F(histname.Data(), histname.Data(), 100, 0, 5,20,-0.5,19.5);
+ fClusterEnergyModifiedTrackMatchesCent->SetXTitle("Energy of cluster");
+ fClusterEnergyModifiedTrackMatchesCent->SetYTitle("Centrality Bin");
+ fClusterEnergyModifiedTrackMatchesCent->SetZTitle("Number of clusters");
+
histname = "fClusterEnergyCentMatched" + fHistogramNameSuffix;
fClusterEnergyCentMatched = new TH2F(histname.Data(), histname.Data(), 100, 0, 5,20,-0.5,19.5);
fClusterEnergyCentMatched->SetXTitle("Energy of cluster");
virtual Double_t GetCorrectionModification(const AliESDCaloCluster& cluster,Int_t nonLinCorr, Int_t effCorr, Int_t cent);//nonLinCorr 0 = nominal 1 = high -1 = low, effCorr 0 = nominal 1 = high -1 = low
- AliAnalysisHadEtCorrections *fCorrections;//corrections needed for hadronic et
+ AliAnalysisHadEtCorrections *fCorrections;//!//corrections needed for hadronic et
Double_t fPidCut; // cut on the pid probability
Float_t nChargedHadronsMeasured;
Float_t nChargedHadronsTotal;
- TH2F *fHistChargedPionEnergyDeposit; /** Energy deposited in calorimeter by charged pions */
- TH2F *fHistProtonEnergyDeposit; /** Energy deposited in calorimeter by protons */
- TH2F *fHistAntiProtonEnergyDeposit; /** Energy deposited in calorimeter by anti-protons */
- TH2F *fHistChargedKaonEnergyDeposit; /** Energy deposited in calorimeter by charged kaons */
- TH2F *fHistMuonEnergyDeposit; /** Energy deposited in calorimeter by muons */
+ TH2F *fHistChargedPionEnergyDeposit;//! /** Energy deposited in calorimeter by charged pions */
+ TH2F *fHistProtonEnergyDeposit;//! /** Energy deposited in calorimeter by protons */
+ TH2F *fHistAntiProtonEnergyDeposit;//! /** Energy deposited in calorimeter by anti-protons */
+ TH2F *fHistChargedKaonEnergyDeposit;//! /** Energy deposited in calorimeter by charged kaons */
+ TH2F *fHistMuonEnergyDeposit;//! /** Energy deposited in calorimeter by muons */
- TH1F *fHistRemovedEnergy; // removed energy
+ TH1F *fHistRemovedEnergy;//! // removed energy
Double_t fGeomCorrection; // geometry correction
Double_t fEMinCorrection; // Emin correction
Double_t fRecEffCorrection; // Eff correction
- TH2D *fClusterPositionAccepted; // Position of clusters
- TH2D *fClusterPositionAll; // Position of clusters
- TH2D *fClusterPositionAcceptedEnergy; // Position of clusters
- TH2D *fClusterPositionAllEnergy; // Position of clusters
- TH1F *fClusterEnergy; // Distribution of cluster energies
- TH2F *fClusterEnergyCent; // Distribution of cluster energies vs centrality bin
- TH2F *fClusterEnergyCentMatched; // Distribution of cluster energies vs centrality bin
- TH2F *fClusterEnergyCentNotMatched; // Distribution of cluster energies vs centrality bin
- TH1F *fClusterEt; // Distribution of cluster energies
+ TH2D *fClusterPositionAccepted;//! // Position of clusters
+ TH2D *fClusterPositionAll;//! // Position of clusters
+ TH2D *fClusterPositionAcceptedEnergy;//! // Position of clusters
+ TH2D *fClusterPositionAllEnergy;//! // Position of clusters
+ TH1F *fClusterEnergy;//! // Distribution of cluster energies
+ TH2F *fClusterEnergyCent;//! // Distribution of cluster energies vs centrality bin
+ TH2F *fClusterEnergyModifiedTrackMatchesCent;//! // Distribution of cluster energies vs centrality bin
+ TH2F *fClusterEnergyCentMatched;//! // Distribution of cluster energies vs centrality bin
+ TH2F *fClusterEnergyCentNotMatched;//! // Distribution of cluster energies vs centrality bin
+ TH1F *fClusterEt;//! // Distribution of cluster energies
- TH2D *fHistChargedEnergyRemoved; // Charged energy removed
- TH2D *fHistNeutralEnergyRemoved; // Neutral energy removed
- TH2D *fHistGammaEnergyAdded; // gamma energy added
-
- TH3F *fHistMatchedTracksEvspTvsCent; //For measuring hadron deposits
- TH3F *fHistMatchedTracksEvspTvsCentEffCorr; //For measuring hadron deposits
- TH3F *fHistMatchedTracksEvspTvsCentEffTMCorr; //For measuring hadron deposits
- TH3F *fHistPeripheralMatchedTracksEvspTvsCentEffTMCorr; //For measuring hadron deposits - uses peripheral bins and different centralities' efficiences
- TH3F *fHistMatchedTracksEvspTvsCentEffTMCorr500MeV; //For measuring hadron deposits
- TH2F *fHistFoundHadronsvsCent; //For measuring hadron deposits
- TH2F *fHistNotFoundHadronsvsCent; //For measuring hadron deposits
- TH2F *fHistFoundHadronsEtvsCent; //For measuring hadron deposits
- TH2F *fHistNotFoundHadronsEtvsCent; //For measuring hadron deposits
- TH2F *fHistFoundHadronsvsCent500MeV; //For measuring hadron deposits
- TH2F *fHistNotFoundHadronsvsCent500MeV; //For measuring hadron deposits
- TH2F *fHistFoundHadronsEtvsCent500MeV; //For measuring hadron deposits
- TH2F *fHistNotFoundHadronsEtvsCent500MeV; //For measuring hadron deposits
- TH2D *fHistNominalRawEt;//Total ET from clusters with nominal reconstruction efficiency and nonlinearity correction vs centrality
- TH2D *fHistNominalNonLinHighEt;//Total ET from clusters with nominal reconstruction efficiency and high bound of nonlinearity correction vs centrality
- TH2D *fHistNominalNonLinLowEt;//Total ET from clusters with nominal reconstruction efficiency and low bound of nonlinearity correction vs centrality
- TH2D *fHistNominalEffHighEt;//Total ET from clusters with high bound on reconstruction efficiency and nominal nonlinearity correction vs centrality
- TH2D *fHistNominalEffLowEt;//Total ET from clusters with low bound on reconstruction efficiency and nominal nonlinearity correction vs centrality
-
- TH2F *fHistTotRawEtEffCorr; // gamma efficiency applied
- TH2F *fHistTotRawEt; //no gamma efficiency applied
- TH2F *fHistTotRawEtEffCorr500MeV;//Total ET from clusters with nominal reconstruction efficiency and nonlinearity correction vs centrality
- TH2F *fHistTotAllRawEt; // all clusters no reco eff
- TH2F *fHistTotAllRawEtEffCorr; // all clusters reco eff applied
+ TH2D *fHistChargedEnergyRemoved;//! // Charged energy removed
+ TH2D *fHistNeutralEnergyRemoved;//! // Neutral energy removed
+ TH2D *fHistGammaEnergyAdded;//! // gamma energy added
+
+ TH3F *fHistMatchedTracksEvspTvsCent;//! //For measuring hadron deposits
+ TH3F *fHistMatchedTracksEvspTvsCentEffCorr;//! //For measuring hadron deposits
+ TH3F *fHistMatchedTracksEvspTvsCentEffTMCorr;//! //For measuring hadron deposits
+ TH3F *fHistPeripheralMatchedTracksEvspTvsCentEffTMCorr;//! //For measuring hadron deposits - uses peripheral bins and different centralities' efficiences
+ TH3F *fHistMatchedTracksEvspTvsCentEffTMCorr500MeV;//! //For measuring hadron deposits
+ TH2F *fHistFoundHadronsvsCent;//! //For measuring hadron deposits
+ TH2F *fHistNotFoundHadronsvsCent;//! //For measuring hadron deposits
+ TH2F *fHistFoundHadronsEtvsCent;//! //For measuring hadron deposits
+ TH2F *fHistNotFoundHadronsEtvsCent;//! //For measuring hadron deposits
+ TH2F *fHistFoundHadronsvsCent500MeV;//! //For measuring hadron deposits
+ TH2F *fHistNotFoundHadronsvsCent500MeV;//! //For measuring hadron deposits
+ TH2F *fHistFoundHadronsEtvsCent500MeV;//! //For measuring hadron deposits
+ TH2F *fHistNotFoundHadronsEtvsCent500MeV;//! //For measuring hadron deposits
+ TH2D *fHistNominalRawEt;//!//Total ET from clusters with nominal reconstruction efficiency and nonlinearity correction vs centrality
+ TH2D *fHistNominalNonLinHighEt;//!//Total ET from clusters with nominal reconstruction efficiency and high bound of nonlinearity correction vs centrality
+ TH2D *fHistNominalNonLinLowEt;//!//Total ET from clusters with nominal reconstruction efficiency and low bound of nonlinearity correction vs centrality
+ TH2D *fHistNominalEffHighEt;//!//Total ET from clusters with high bound on reconstruction efficiency and nominal nonlinearity correction vs centrality
+ TH2D *fHistNominalEffLowEt;//!//Total ET from clusters with low bound on reconstruction efficiency and nominal nonlinearity correction vs centrality
+
+ TH2F *fHistTotRawEtEffCorr;//! // gamma efficiency applied
+ TH2F *fHistTotRawEt;//! //no gamma efficiency applied
+ TH2F *fHistTotRawEtEffCorr500MeV;//!//Total ET from clusters with nominal reconstruction efficiency and nonlinearity correction vs centrality
+ TH2F *fHistTotAllRawEt;//! // all clusters no reco eff
+ TH2F *fHistTotAllRawEtEffCorr;//! // all clusters reco eff applied
Double_t ApplyModifiedCorrections(const AliESDCaloCluster& cluster,Int_t nonLinCorr, Int_t effCorr, Int_t cent);//nonLinCorr 0 = nominal 1 = high -1 = low, effCorr 0 = nominal 1 = high -1 = low
- TH3F *fHistNClustersPhosVsEmcal; // all clusters no reco eff
- TH2F *fHistClusterSizeVsCent; // all clusters no reco eff
- TH2F *fHistMatchedClusterSizeVsCent; // all clusters no reco eff
- TH2F *fHistTotAllRawEtVsTotalPt; // all clusters no reco eff
+ TH3F *fHistNClustersPhosVsEmcal;//! // all clusters no reco eff
+ TH2F *fHistClusterSizeVsCent;//! // all clusters no reco eff
+ TH2F *fHistMatchedClusterSizeVsCent;//! // all clusters no reco eff
+ TH2F *fHistTotAllRawEtVsTotalPt;//! // all clusters no reco eff
//fHistTotAllRawEtVsTotalPtCent
- TH3F *fHistTotAllRawEtVsTotalPtVsCent; // all clusters no reco eff
- TH3F *fHistTotMatchedRawEtVsTotalPtVsCent; // all clusters no reco eff
- TH2F *fHistPIDProtonsTrackMatchedDepositedVsNch;
- TH2F *fHistPIDAntiProtonsTrackMatchedDepositedVsNch;
- TH2F *fHistPIDProtonsTrackMatchedDepositedVsNcl;
- TH2F *fHistPIDAntiProtonsTrackMatchedDepositedVsNcl;
- TH2F *fHistPiKPTrackMatchedDepositedVsNch;
- TH2F *fHistPIDProtonsTrackMatchedDepositedVsNchNoEff;
- TH2F *fHistPIDAntiProtonsTrackMatchedDepositedVsNchNoEff;
- TH2F *fHistPIDProtonsTrackMatchedDepositedVsNclNoEff;
- TH2F *fHistPIDAntiProtonsTrackMatchedDepositedVsNclNoEff;
- TH2F *fHistPiKPTrackMatchedDepositedVsNchNoEff;
- TH3F *fHistCentVsNchVsNclReco;
-
- TH1F *fHistRawSignalReco;
- TH1F *fHistEffCorrSignalReco;
- TH3F *fHistRecoRCorrVsPtVsCent; // enter comment here
+ TH3F *fHistTotAllRawEtVsTotalPtVsCent;//! // all clusters no reco eff
+ TH3F *fHistTotMatchedRawEtVsTotalPtVsCent;//! // all clusters no reco eff
+ TH2F *fHistPIDProtonsTrackMatchedDepositedVsNch;//!
+ TH2F *fHistPIDAntiProtonsTrackMatchedDepositedVsNch;//!
+ TH2F *fHistPIDProtonsTrackMatchedDepositedVsNcl;//!
+ TH2F *fHistPIDAntiProtonsTrackMatchedDepositedVsNcl;//!
+ TH2F *fHistPiKPTrackMatchedDepositedVsNch;//!
+ TH2F *fHistPIDProtonsTrackMatchedDepositedVsNchNoEff;//!
+ TH2F *fHistPIDAntiProtonsTrackMatchedDepositedVsNchNoEff;//!
+ TH2F *fHistPIDProtonsTrackMatchedDepositedVsNclNoEff;//!
+ TH2F *fHistPIDAntiProtonsTrackMatchedDepositedVsNclNoEff;//!
+ TH2F *fHistPiKPTrackMatchedDepositedVsNchNoEff;//!
+ TH3F *fHistCentVsNchVsNclReco;//!
+
+ TH1F *fHistRawSignalReco;//!
+ TH1F *fHistEffCorrSignalReco;//!
+ TH3F *fHistRecoRCorrVsPtVsCent;//! // enter comment here
private:
protected:
- const AliVEvent *fEvent; // Pointer to current event
+ const AliVEvent *fEvent; //! Pointer to current event
- TRefArray *fClusterArray; // Array of clusters
+ TRefArray *fClusterArray; //! Array of clusters
- AliAnalysisEtCuts *fCuts; // Pointer to the cuts object; DS: also in base class?
+ AliAnalysisEtCuts *fCuts; //! Pointer to the cuts object; DS: also in base class?
Bool_t SuspiciousDecayInChain(const UInt_t suspectMotherPdg, const UInt_t suspectDaughterPdg, const TParticle& part, AliStack& stack) const;
int LoadGeometry(); // load geometry
int LoadBadMaps(); // load bad maps
- AliPHOSGeometry *fGeoUtils; // geo utils
+ AliPHOSGeometry *fGeoUtils; //! geo utils
- TH2I *fBadMapM2; // Bad map
- TH2I *fBadMapM3; // Bad map
- TH2I *fBadMapM4; // Bad map
+ TH2I *fBadMapM2; //! Bad map
+ TH2I *fBadMapM3; //! Bad map
+ TH2I *fBadMapM4; //! Bad map
Bool_t fMatrixInitialized; // matrix initialized
Float_t Et(TParticle *part, float mass = -1000);
Float_t Et(Float_t p, Float_t theta, Int_t pid, Short_t charge) const;
- TList *fhistoList;//list of histograms saved out to file
+ TList *fhistoList;//->list of histograms saved out to file
//static Float_t fgEtaAxis[47];//bins for eta axis of histograms
static Float_t fgEtaAxis[17];//bins for eta axis of histograms
static Int_t fgnumOfEtaBins;//number of eta bins
Float_t minEt = 0.0;
Float_t maxEt = 100.0;
Float_t minEtPiKP = 0.0;
- Float_t maxEtPiKP = 50.0;
+ Float_t maxEtPiKP = 100.0;
if(fDataSet==20100){
maxEt=4000.0;
maxEtPiKP = 2500;
//Float_t fSimPiKPEtSmeared[4];//simulated Et for pi,k,p smeared for each event by different momentum resolutions
static Float_t fgSmearWidths[4];//array with widths for smearing with different momentum resultions
static Int_t fgNumSmearWidths;//number of entries in the array above
- TRandom *fPtSmearer;//a TRandom used for investigating momentum smearing
- AliAnalysisHadEtReconstructed *fHadEtReco;//corresponding class for data reconstruction. Used to access corrections directly used here.
+ TRandom *fPtSmearer;//!a TRandom used for investigating momentum smearing
+ AliAnalysisHadEtReconstructed *fHadEtReco;//!corresponding class for data reconstruction. Used to access corrections directly used here.
ClassDef(AliAnalysisHadEtMonteCarlo, 1);
};
Float_t minEt = 0.0;
Float_t maxEt = 100.0;
Float_t minEtPiKP = 0.0;
- Float_t maxEtPiKP = 50.0;
+ Float_t maxEtPiKP = 100.0;
if(fDataSet==20100){
maxEt=4000.0;
maxEtPiKP = 2500;
protected:
Bool_t CheckGoodVertex(AliVParticle *track);
- AliAnalysisHadEtCorrections *fCorrections;//corrections needed for hadronic et
+ AliAnalysisHadEtCorrections *fCorrections;//!corrections needed for hadronic et
TString fConfigFile; // the name of the ConfigFile
//virtual bool TrackHitsCalorimeter(AliVParticle *track, Double_t magField) = 0;
virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *);
void IsSim(){fIsSim = kTRUE;}
- AliPIDResponse *fPIDResponse;
+ AliPIDResponse *fPIDResponse;//!
private:
virtual void UserCreateOutputObjects();
virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *);
- AliPIDResponse *fPIDResponse;
+ AliPIDResponse *fPIDResponse;//!
private:
AliCentrality* GetCentralityObject();
/** The ESD event */
- AliESDEvent *fESDEvent; //The ESD event
+ AliESDEvent *fESDEvent; //!The ESD event
TString fMCConfigFile; // the name of the ConfigFile
TString fRecoConfigFile; // the name of the ConfigFile
- TH2F *fHistEtRecvsEtMC; // Rec vs MC histo
- TH2F *fHistEtRecOverEtMC; // Rec over MC histo
- TH2F *fHistDiffEtRecEtMCOverEtMC; // Rec - MC over MC histo
+ TH2F *fHistEtRecvsEtMC; //! Rec vs MC histo
+ TH2F *fHistEtRecOverEtMC; //! Rec over MC histo
+ TH2F *fHistDiffEtRecEtMCOverEtMC; //! Rec - MC over MC histo
- AliESDtrackCuts* fEsdtrackCutsITSTPC; // track cuts ITS&TPC
- AliESDtrackCuts* fEsdtrackCutsTPC; // track cuts TPC
- AliESDtrackCuts* fEsdtrackCutsITS; // track cuts ITS
+ AliESDtrackCuts* fEsdtrackCutsITSTPC; //! track cuts ITS&TPC
+ AliESDtrackCuts* fEsdtrackCutsTPC; //! track cuts TPC
+ AliESDtrackCuts* fEsdtrackCutsITS; //! track cuts ITS
- TList *fOutputList; //output list
+ TList *fOutputList; //->output list
TString fPhysSelTaskName; // If we need to access the physics selection task
TString fCentSelTaskName; // If we need to access the centrality selection task
hadCorrectionEMCAL->SetNeutralCorrection(neutralCorr);
//Using error from data, see analysis note for details
if(ispp){
- hadCorrectionEMCAL->SetNeutralCorrectionLowBound(neutralCorr*(1.0-0.013));
- hadCorrectionEMCAL->SetNeutralCorrectionHighBound(neutralCorr*(1.0+0.013));
+ hadCorrectionEMCAL->SetNeutralCorrectionLowBound(neutralCorr*(1.0-0.014));
+ hadCorrectionEMCAL->SetNeutralCorrectionHighBound(neutralCorr*(1.0+0.014));
}
else{
hadCorrectionEMCAL->SetNeutralCorrectionLowBound(neutralCorr*(1.0-0.049));
hadCorrectionEMCAL->SetNotHadronicCorrectionLowBound(hadronicCorr*(1.0-0.023));
hadCorrectionEMCAL->SetNotHadronicCorrectionHighBound(hadronicCorr*(1.0+0.023));
}
-
float ptcutITS = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim);
hadCorrectionEMCAL->SetpTCutCorrectionITS(ptcutITS);
float ptcutTPC = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim);
hadCorrectionPHOS->SetNeutralCorrection(neutralCorr);
//Using error from data, see analysis note for details
if(ispp){
- hadCorrectionPHOS->SetNeutralCorrectionLowBound(neutralCorr*(1.0-.013));
- hadCorrectionPHOS->SetNeutralCorrectionHighBound(neutralCorr*(1.0+.013));
+ hadCorrectionPHOS->SetNeutralCorrectionLowBound(neutralCorr*(1.0-.014));
+ hadCorrectionPHOS->SetNeutralCorrectionHighBound(neutralCorr*(1.0+.014));
}
else{
hadCorrectionPHOS->SetNeutralCorrectionLowBound(neutralCorr*(1.0-0.049));
Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp, bool forSim, bool TPC, bool hadronic, float etacut, int dataset){
if(!forSim){//for data we have evaluated the neutral correction from ALICE data
if(hadronic){//for tot et from had et
- return 0.581;
+ return 1/0.5665;//0.5665 0.0145 <-- Correct - what should be applied
}
else{//for had et only
if(dataset==2009){
return 1.0/0.7571;
}
else{
- return 1.0/0.755;
+ return 1.0/0.751;
}
}
}
int nbins = allhad->GetXaxis()->GetNbins();
//cout<<"Projecting from "<<allhad->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<allhad->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
//cout<<"Projecting from "<<allhad->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<allhad->GetXaxis()->GetBinLowEdge(nbins)<<endl;
-
//allhad->Sumw2();
TH1D *numerator;
TH1D *denominator;
case -1:
numerator = ptlow->ProjectionY("nameLow",lowbin,highbin);
denominator = allhad->ProjectionY("denominatorLow",highbin,nbins);
- denominator->Add(ptlow);
+ denominator->Add(numerator);
break;
case 1:
numerator = pthigh->ProjectionY("nameHigh",lowbin,highbin);
denominator = allhad->ProjectionY("denominatorHigh",highbin,nbins);
- denominator->Add(pthigh);
+ denominator->Add(numerator);
break;
default:
numerator = allhad->ProjectionY("name",lowbin,highbin);
if(fIsPdgCode && TMath::Abs( particle->PdgCode() )!= fPdgCode) isSelected = kFALSE;
// Charge selection
- if(fIsCharged && !(particle->Charge()!=0)) isSelected = kFALSE;
+ if(fIsCharged && (particle->Charge()==0)) isSelected = kFALSE;
// Selection of Physical Primary particles
if(!fisAOD) { // check on ESDs
if ((track->GetStatus()&AliESDtrack::kTOFout)==0) return kFALSE;
if ((track->GetStatus()&AliESDtrack::kTIME)==0) return kFALSE;
if ((track->GetStatus()&AliESDtrack::kTOFpid)==0) return kFALSE;
- if (!(track->GetStatus()&AliESDtrack::kTOFmismatch)==0) return kFALSE;
+ if ((track->GetStatus()&AliESDtrack::kTOFmismatch)!=0) return kFALSE;
return kTRUE;
}
if(alimult) ntrklets = alimult->GetNumberOfTracklets();
const char* beamType = esdE->GetBeamType();
- Printf("beam type = %s", beamType);
+ // Printf("beam type = %s", beamType);
Bool_t kLowFlux = kTRUE, kHighFlux = kFALSE;
// TString pp= "p-p";
if (beamType == AA){
kHighFlux = kTRUE;
kLowFlux = kFALSE;
- Printf ("high flux setting");
+ // Printf ("high flux setting");
}
AliCDBManager* man = AliCDBManager::Instance();
Int_t runNb = esdE->GetRunNumber();
if (runNb > 0) {
man->SetRun(runNb);
- Printf("runNb = %d", runNb);
+ // Printf("runNb = %d", runNb);
}
AliCDBEntry *entry = (AliCDBEntry*)man->Get("GRP/Calib/RecoParam/");
- Printf("entry = %p", entry);
+ // Printf("entry = %p", entry);
TObjArray *arrayRecoParam=0x0;
if (entry) {
arrayRecoParam = (TObjArray*)entry->GetObject();
- Printf("arrayRecoParam = %p", arrayRecoParam);
+ // Printf("arrayRecoParam = %p", arrayRecoParam);
}
else {
Printf("CDBEntry not found");
//track vertex recomputed from the vertexer
AliESDVertex *trkv = vertexer->FindPrimaryVertex(esdE);
- Printf ("trkv = %p", trkv);
+
//const AliESDVertex *trkv = esdE->GetPrimaryVertexTracks();
//SPD vertex taken from the ESD
<a href="MIPattachSlopeC_vs_run.png">Attachment parameter p1, C side</a><br>
<br>
<a href="pullPhiConstrain_vs_run.png">Tracking parameter phi</a><br>
+<br>
+<br>
+<a href="prodinfo">Production information</a><br>
</div>
#
# origin: Mikolaj Krzewicki, mikolaj.krzewicki@cern.ch
#
+if [ ${BASH_VERSINFO} -lt 4 ]; then
+ echo "bash version >= 4 needed, you have ${BASH_VERSION}, exiting..."
+ exit 1
+fi
+
main()
{
if [[ $# -lt 1 ]]; then
[[ -z ${alienSyncFilesGroupOwnership} ]] && alienSyncFilesGroupOwnership=$(id -gn)
# do some accounting
- [[ ! -d $logOutputPath ]] && echo "logOutputPath not available, creating..." && sg ${alienSyncFilesGroupOwnership} "mkdir -p $logOutputPath"
+ [[ ! -d $logOutputPath ]] && echo "logOutputPath not available, creating..." && mkdir -p $logOutputPath && chgrp ${alienSyncFilesGroupOwnership} ${logOutputPath}
[[ ! -d $logOutputPath ]] && echo "could not create log dir, exiting..." && exit 1
dateString=$(date +%Y-%m-%d-%H-%M)
logFile=$logOutputPath/alienSync-$dateString.log
rm -f $redoneFilesList
touch $redoneFilesList
updatedFilesList="${logOutputPath}/updatedFiles.list"
+ failedDownloadList="${logOutputPath}/failedDownload.list"
+ touch ${failedDownloadList}
+
# check the config
[[ -z $alienFindCommand ]] && echo "alienFindCommand not defined, exiting..." && exitScript 1
[[ "$md5local" =~ "." ]] && md5local=""
if [[ $forceLocalMD5recalculation -eq 1 || -z $md5local ]]; then
- tmparrayMD5=($(md5sum ${destination}))
- md5recalculated=${tmparrayMD5[0]}
+ md5recalculated=$(checkMD5sum ${destination})
[[ "$md5local" != "$md5recalculated" ]] && echo "WARNING: local copy change ${destination}"
md5local=${md5recalculated}
fi
[[ -f $tmpdestination ]] && echo "WARNING: stale $tmpdestination, removing" && rm $tmpdestination
- sg ${alienSyncFilesGroupOwnership} "mkdir -p ${destinationdir}"
+ mkdir -p ${destinationdir} && chgrp ${alienSyncFilesGroupOwnership} ${destinationdir}
[[ ! -d $destinationdir ]] && echo cannot access $destinationdir && continue
#check token
downloadOK=0
#verify the downloaded md5 if available, validate otherwise...
if [[ -n $md5alien ]]; then
- if (echo "$md5alien $tmpdestination"|md5sum -c --status -); then
+ md5recalculated=$(checkMD5sum ${tmpdestination})
+ if [[ ${md5alien} == ${md5recalculated} ]]; then
echo "OK md5 after download"
downloadOK=1
else
echo ${destination} >> $localFileList
fi
[[ -n ${postCommand} ]] && ( cd ${destinationdir}; eval "${postCommand}" )
+ if grep -q ${alienFile} ${failedDownloadList}; then
+ echo "removing ${alienFile} from ${failedDownloadList}"
+ grep -v ${alienFile} ${failedDownloadList} >tmpUpdatedFailed
+ mv tmpUpdatedFailed ${failedDownloadList}
+ fi
else
echo "download not validated, NOT moving to ${destination}..."
echo "removing $tmpdestination"
rm -f $tmpdestination
+ echo ${alienFile} >> ${failedDownloadList}
continue
fi
fi
cat ${newFilesList} ${redoneFilesList} > ${updatedFilesList}
- eval "${executeEnd}"
echo alienFindCommand:
echo " $alienFindCommand"
echo "redone files:"
echo
cat $redoneFilesList
+ echo
+ echo
+
+ #output the list of failed files to stdout, so the cronjob can mail it
+ echo '###############################'
+ echo "failed to download from alien:"
+ echo
+ local tmpfailed=$(mktemp)
+ [[ "$(cat ${failedDownloadList} | wc -l)" -gt 0 ]] && sort ${failedDownloadList} | uniq -c | awk 'BEGIN{print "#tries\t file" }{print $1 "\t " $2}' | tee ${tmpfailed}
+
+ [[ -n ${MAILTO} ]] && echo $logFile | mail -s "alienSync ${alienFindCommand} done" ${MAILTO}
- [[ -n $MAILTO ]] && echo $logFile | mail -s "alienSync $alienFindCommand done" $MAILTO
+ echo
+ echo
+ echo '###############################'
+ echo "eval ${executeEnd}"
+ eval "${executeEnd}"
exitScript 0
}
alien_find()
{
# like a regular alien_find command
- # output is a list with md5sums and ctimes
+ # output is a list with md5 sums and ctimes
executable="$ALIEN_ROOT/api/bin/gbbox find"
[[ ! -x ${executable% *} ]] && echo "### error, no $executable..." && return 1
[[ -z $logOutputPath ]] && logOutputPath="./"
src="alien://${src}"
dst=$2
if [[ "$copyMethod" == "tfilecp" ]]; then
- echo timeout $copyTimeout root -b -q "$copyScript(\"$src\",\"$dst\")"
- timeout $copyTimeout root -b -q "$copyScript(\"$src\",\"$dst\")"
+ if which timeout &>/dev/null; then
+ echo timeout $copyTimeout root -b -q "$copyScript(\"$src\",\"$dst\")"
+ timeout $copyTimeout root -b -q "$copyScript(\"$src\",\"$dst\")"
+ else
+ echo root -b -q "$copyScript(\"$src\",\"$dst\")"
+ root -b -q "$copyScript(\"$src\",\"$dst\")"
+ fi
else
- echo timeout $copyTimeout $ALIEN_ROOT/api/bin/alien_cp $src $dst
- timeout $copyTimeout $ALIEN_ROOT/api/bin/alien_cp $src $dst
+ if which timeout &>/dev/null; then
+ echo timeout $copyTimeout $ALIEN_ROOT/api/bin/alien_cp $src $dst
+ timeout $copyTimeout $ALIEN_ROOT/api/bin/alien_cp $src $dst
+ else
+ echo $ALIEN_ROOT/api/bin/alien_cp $src $dst
+ $ALIEN_ROOT/api/bin/alien_cp $src $dst
+ fi
fi
}
done
}
+checkMD5sum()
+{
+ local file="${1}"
+ local md5=""
+ [[ ! -f ${file} ]] && return 1
+ if which md5sum &>/dev/null; then
+ local tmp=($(md5sum ${file}))
+ md5=${tmp[0]}
+ elif which md5 &>/dev/null; then
+ local tmp=($(md5 ${file}))
+ md5=${tmp[3]}
+ fi
+ echo ${md5}
+}
+
main "$@"
#alien user name
alienUserName="mkrzewic"
-#map the mc production manes to their anchor years
-mcProductionMap="
-LHC14c2_p3=2013
-LHC14c2_p2=2013
-LHC14c2=2013
-LHC14c1c=2010
-LHC14c1b=2010
-LHC14c1a=2010
-LHC14b8b=2010
-LHC14b8a=2010
-LHC14b7=2011
-LHC14b6d=2010
-LHC14b6c=2010
-LHC14b6b=2010
-LHC14b6a=2010
-LHC14b5=2013
-LHC14b4=2013
-LHC14b3c=2013
-LHC14b3b=2013
-LHC14b3a=2013
-LHC14b2=2013
-LHC14b1h=2011
-LHC14b1g=2011
-LHC14b1f=2011
-LHC14b1e=2011
-LHC14b1d=2011
-LHC14b1c=2011
-LHC14b1b=2011
-LHC14b1a=2011
-LHC14a6=2011
-LHC14a2=2013
-LHC14a1c=2011
-LHC14a1b=2011
-LHC14a1a=2011
-LHC13f7=2010
-LHC13f6d=2011
-LHC13f6c=2011
-LHC13f6b=2011
-LHC13f6a=2011
-LHC13f5=2011
-LHC13f4=2013
-LHC13f2d=2013
-LHC13f2c=2013
-LHC13f2b=2013
-LHC13f2a=2013
-LHC13f1r=2013
-LHC13f1q=2013
-LHC13f1p=2013
-LHC13f1o=2013
-LHC13f1n=2013
-LHC13f1m=2013
-LHC13f1l=2013
-LHC13f1k=2013
-LHC13f1j=2013
-LHC13f1i=2013
-LHC13f1h=2013
-LHC13f1g=2013
-LHC13f1f=2013
-LHC13f1e=2013
-LHC13f1d=2013
-LHC13f1c=2013
-LHC13f1b=2013
-LHC13f1a=2013
-LHC13e7=2013
-LHC13e6r=2013
-LHC13e6q=2013
-LHC13e6p=2013
-LHC13e6o=2013
-LHC13e6n=2013
-LHC13e6m=2013
-LHC13e6l=2013
-LHC13e6k=2013
-LHC13e6j=2013
-LHC13e6i=2013
-LHC13e6h=2013
-LHC13e6g=2013
-LHC13e6f=2013
-LHC13e6e=2013
-LHC13e6d=2013
-LHC13e6c=2013
-LHC13e6b=2013
-LHC13e6a=2013
-LHC13e5=2011
-LHC13e4=2011
-LHC13e3h=2010
-LHC13e3g=2010
-LHC13e3f=2010
-LHC13e3e=2010
-LHC13e3d=2010
-LHC13e3c=2010
-LHC13e3b_plus=2010
-LHC13e3b=2010
-LHC13e3a=2010
-LHC13e2_plus=2010
-LHC13e2_fix=2010
-LHC13e2=2010
-LHC13e1c=2011
-LHC13e1b=2011
-LHC13e1a=2011
-LHC13d9=2012
-LHC13d8=2012
-LHC13d7=2012
-LHC13d6=2012
-LHC13d4=2010
-LHC13d3_plus=2013
-LHC13d3=2013
-LHC13d2b=2010
-LHC13d22=2010
-LHC13d2=2010
-LHC13d21=2010
-LHC13d20=2010
-LHC13d19=2010
-LHC13d18e_plus=2010
-LHC13d18e=2010
-LHC13d18d_plus=2010
-LHC13d18d=2010
-LHC13d18c_plus=2010
-LHC13d18c=2010
-LHC13d18b_plus=2010
-LHC13d18b=2010
-LHC13d17a=2010
-LHC13d16_fix=2010
-LHC13d16=2010
-LHC13d15=2010
-LHC13d14=2010
-LHC13d13=2010
-LHC13d12=2010
-LHC13d1=2011
-LHC13d10=2013
-LHC13c9=2013
-LHC13c8=2013
-LHC13c7c=2011
-LHC13c7b=2011
-LHC13c7a=2011
-LHC13c6b=2013
-LHC13c6a=2013
-LHC13c5=2013
-LHC13c4=2013
-LHC13c3=2013
-LHC13c2=2013
-LHC13c17c=2010
-LHC13c17b=2011
-LHC13b4_plus=2013
-LHC13b4_fix=2013
-LHC13b4=2013
-LHC13b3_fix2=2012
-LHC13b3_fix=2013
-LHC13b3=2013
-LHC13b2_plus=2013
-LHC13b2_fix_3=2013
-LHC13b2_fix_2=2013
-LHC13b2_fix_1=2013
-LHC13b2_efix_p4=2013
-LHC13b2_efix_p3=2013
-LHC13b2_efix_p2=2013
-LHC13b2_efix_p1=2013
-LHC13b2=2013
-LHC13b1=2013
-LHC12i6=2011
-LHC12i5b=2011
-LHC12i5a=2011
-LHC12i4b=2011
-LHC12i4a=2011
-LHC12i3=2011
-LHC12i2=2010
-LHC12i1b=2011
-LHC12i1a=2011
-LHC12h6=2012
-LHC12h5=2012
-LHC12h4=2011
-LHC12h3=2011
-LHC12h2=2011
-LHC12h1=2011
-LHC12g6b=2012
-LHC12g6a=2012
-LHC12g5=2012
-LHC12g4c=2012
-LHC12g4b_fix=2012
-LHC12g4b=2012
-LHC12g4a=2012
-LHC12g4=2012
-LHC12g2=2012
-LHC12g1_fix=2012
-LHC12g1=2012
-LHC12f2b=2011
-LHC12f2a=2011
-LHC12f1b=2011
-LHC12f1a=2011
-LHC12e6=2011
-LHC12e5=2012
-LHC12e4=2010
-LHC12e3=2010
-LHC12e2=2010
-LHC12e1=2011
-LHC12d4c=2010
-LHC12d4b=2010
-LHC12d4a=2010
-LHC12d3=2011
-LHC12d2_plus=2011
-LHC12d2=2011
-LHC12d1=2010
-LHC12c4=2010
-LHC12c2=2010
-LHC12c1b=2012
-LHC12c1a=2012
-LHC12b3=2011
-LHC12b2=2010
-LHC12b1c=2011
-LHC12b1b=2011
-LHC12b1a=2011
-LHC12a9_plus=2011
-LHC12a9=2011
-LHC12a8c=2011
-LHC12a8b=2011
-LHC12a8a=2011
-LHC12a7=2010
-LHC12a5c=2010
-LHC12a5b=2010
-LHC12a5a=2010
-LHC12a4=2010
-LHC12a3f=2010
-LHC12a3e=2010
-LHC12a3d=2010
-LHC12a3c=2010
-LHC12a3b=2010
-LHC12a3a=2010
-LHC12a2=2010
-LHC12a19f=2011
-LHC12a19e=2011
-LHC12a19d=2011
-LHC12a19c=2011
-LHC12a19b=2011
-LHC12a19a=2011
-LHC12a18=2010
-LHC12a17i_fix=2011
-LHC12a17i=2011
-LHC12a17h_fix=2011
-LHC12a17h=2011
-LHC12a17g_fix=2011
-LHC12a17g=2011
-LHC12a17f_fix=2011
-LHC12a17f=2011
-LHC12a17e_fix=2011
-LHC12a17e=2011
-LHC12a17d_fix=2011
-LHC12a17d=2011
-LHC12a17c_fix=2011
-LHC12a17c=2011
-LHC12a17b_fix_jemalloc=2011
-LHC12a17b_fix=2011
-LHC12a17b=2011
-LHC12a17a_fix=2011
-LHC12a17a=2011
-LHC12a15h=2011
-LHC12a15g=2011
-LHC12a15f=2011
-LHC12a15e_fix=2011
-LHC12a15e=2011
-LHC12a15d=2011
-LHC12a15c=2011
-LHC12a15b=2011
-LHC12a15a=2011
-LHC12a14=2010
-LHC12a13b=2011
-LHC12a13a=2011
-LHC12a12_bis=2010
-LHC12a12=2010
-LHC12a11i=2010
-LHC12a11h=2010
-LHC12a11g=2010
-LHC12a11f=2010
-LHC12a11e=2010
-LHC12a11d=2010
-LHC12a11c=2010
-LHC12a11b=2010
-LHC12a11a=2010
-LHC12a10_bis=2011
-LHC11h6=2010
-LHC11h5c=2011
-LHC11h5b=2011
-LHC11h5a=2011
-LHC11h4c=2010
-LHC11h4b=2010
-LHC11h4a=2010
-LHC11h3c=2010
-LHC11h3b=2010
-LHC11h3a=2010
-LHC11h2c=2010
-LHC11h2b=2010
-LHC11h2a=2010
-LHC11h1c=2010
-LHC11h1b=2010
-LHC11h1a=2010
-LHC11f5=2010
-LHC11f3=2010
-LHC11f2=2011
-LHC11f1=2010
-LHC11e3b=2011
-LHC11e3a_plus=2011
-LHC11e3a=2011
-LHC11d6g=2010
-LHC11d6f=2010
-LHC11d6e=2010
-LHC11d6d=2010
-LHC11d6c=2010
-LHC11d6b=2010
-LHC11d6a=2010
-LHC11d5_full=2010
-LHC11d5=2010
-LHC11d4a=2010
-LHC11d3=2011
-LHC11d2=2010
-LHC11d1=2010
-LHC11c_raw=2010
-LHC11c4=2010
-LHC11c3b=2010
-LHC11c3a=2010
-LHC11c2b=2010
-LHC11c2a=2010
-LHC11c1=2010
-LHC11b9=2010
-LHC11b9_1=2010
-LHC11b8=2011
-LHC11b7=2010
-LHC11b6=2010
-LHC11b5=2010
-LHC11b4=2010
-LHC11b3=2010
-LHC11b2=2010
-LHC11b1c=2010
-LHC11b1b=2010
-LHC11b1a=2010
-LHC11b12b=2010
-LHC11b12a=2010
-LHC11b11a=2010
-LHC11b10c=2011
-LHC11b10b=2011
-LHC11b10a=2011
-LHC11a9b=2010
-LHC11a9a=2010
-LHC11a6b=2010
-LHC11a6a=2010
-LHC11a5a=2010
-LHC11a4_tris=2010
-LHC11a4=2016
-LHC11a10b_plus=2010
-LHC11a10b_bis=2010
-LHC11a10b=2010
-LHC11a10a_bis=2010
-LHC11a10a=2010
-LHC10h8_spc=2010
-LHC10h7=2010
-LHC10h6=2010
-LHC10h5=2010
-LHC10h4=2010
-LHC10h3=2010
-LHC10h2=2010
-LHC10h1a=2010
-LHC10h16=2010
-LHC10h13=2010
-LHC10h1=2010
-LHC10f7a=2010
-LHC10f7=2010
-LHC10f6=2010
-LHC10f1=2010
-LHC10e9=2010
-LHC10e8=2010
-LHC10e7=2010
-LHC10e6=2010
-LHC10e5=2010
-LHC10e4=2010
-LHC10e3=2010
-LHC10e2=2010
-LHC10e20=2010
-LHC10e13=2010
-LHC10e12=2010
-LHC10e10=2010
-LHC10d4a=2010
-LHC10d4=2010
-LHC10d3=2010
-LHC10d2=2010
-LHC10d15=2010
-LHC10d14=2010
-LHC10d1=2010
-LHC10a5b=2011
+#run map - used to associate a runnumber to a year
+#for setting of the proper OCDB storage
+runMap="
+2010 108350 139517
+2011 140441 170593
+2012 171590 193766
+2013 194482 197692
"
+
#!/bin/bash
+if [ ${BASH_VERSINFO} -lt 4 ]; then
+ echo "bash version >= 4 needed, you have ${BASH_VERSION}, exiting..."
+ exit 1
+fi
+
main()
{
if [[ -z $1 ]]; then
echo " ${0##*/} configFile=runQA.config inputList=file.list outputDirectory=%det"
return 1
fi
-
+
if ! parseConfig "$@"; then
${0}
return 1
if [[ "$qaFile" =~ .*.zip$ ]]; then
if unzip -l ${qaFile} | egrep "QAresults.root" &>/dev/null; then
qaFile="${qaFile}#QAresults.root"
+ elif unzip -l ${qaFile} | egrep "QAresults_barrel.root" &>/dev/null; then
+ qaFile="${qaFile}#QAresults_barrel.root"
else
qaFile=""
fi
aliroot -b -q -l "$ALICE_ROOT/PWGPP/macros/simpleTrending.C(\"${qaFile}\",${runNumber},\"${detector}\",\"trending.root\",\"trending\",\"recreate\")" 2>&1 | tee -a runLevelQA.log
fi
if [[ -f trending.root ]]; then
- arrOfTouchedProductions[${tmpProductionDir}]=1
+ #cache the touched production + an example file to guarantee consistent run data parsing
+ arrOfTouchedProductions[${tmpProductionDir}]="${qaFile%\#*}"
else
echo "trending.root not created"
fi
for dir in ${tmpProductionDir}/000*; do
echo
oldRunDir=${outputDir}/${dir#${tmpPrefix}}
- if ! guessRunData "${dir}/dummyName"; then
+ if ! guessRunData "${arrOfTouchedProductions[${tmpProductionDir}]}"; then
echo "could not guess run data from ${dir}"
continue
fi
#modify the OCDB: set the year
if [[ ${dataType} =~ sim ]]; then
- anchorYear=$(for x in $mcProductionMap ; do [[ "${x}" =~ ${originalPeriod} ]] && echo ${x} && break; done)
- anchorYear=${anchorYear#*=}
+ anchorYear=$(run2year $runNumber)
+ if [[ -z "${anchorYear}" ]]; then
+ echo "WARNING: anchorYear not available for this production: ${originalPeriod}, runNumber: ${runNumber}. Cannot set the OCDB."
+ return 1
+ fi
ocdbStorage=$(setYear ${anchorYear} ${ocdbStorage})
else
ocdbStorage=$(setYear ${year} ${ocdbStorage})
fi
#if [[ -z ${dataType} || -z ${year} || -z ${period} || -z ${runNumber}} || -z ${pass} ]];
- if [[ -z ${runNumber}} ]]
+ if [[ -z ${runNumber} ]]
then
#error condition
return 1
fi
}
+run2year()
+{
+ #for a given run print the year.
+ #the run-year table is ${runMap} (a string)
+ #defined in the config file
+ #one line per year, format: year runMin runMax
+ local run=$1
+ [[ -z ${run} ]] && return 1
+ local year=""
+ local runMin=""
+ local runMax=""
+ while read year runMin runMax; do
+ [[ -z ${year} || -z ${runMin} || -z ${runMax} ]] && continue
+ [[ ${run} -ge ${runMin} && ${run} -le ${runMax} ]] && echo ${year} && break
+ done < <(echo "${runMap}")
+ return 0
+}
+
substituteDetectorName()
{
local det=$1
return kFALSE;
}
if(ref->Pt()<1.e-3) return kFALSE;
-
+ Float_t prod(t.GetBz()*t.Charge());
// Initialize TRD track to the reference
AliTRDtrackV1 tt;
}
if(HasTrkltRefit()){
// if(!tr->FitRobust(tt.Charge()>0.)) printf("W - AliTRDcheckTRK::PropagateKalman :: FitRobust() failed for Det[%03d]\n", det);
- if(!tr->FitRobust(AliTRDgeometry::GetPadPlane(det))) printf("W - AliTRDcheckTRK::PropagateKalman :: FitRobust() failed for Det[%03d]\n", det);
+ if(!tr->FitRobust(AliTRDgeometry::GetPadPlane(det), prod>0., tt.Charge())) printf("W - AliTRDcheckTRK::PropagateKalman :: FitRobust() failed for Det[%03d]\n", det);
else {
TGeoHMatrix *matrix = AliTRDgeometry::GetClusterMatrix(det);
if (matrix) tr->SetXYZ(matrix);
%+++++++++++++++++++++++++++++++++++++++++++
processJETrackQA.C
+Processes the results of the JE_PWG4HighPtTrackQA wagon. Should be run with the following arguments:
+TString strFileIn = "AnalysisResults.root" : the path to the input file.
+TString suffix = "eps" : the suffix that determines the output format. For example: eps, pdf, png, etc.
+Int_t cent = 10 : the centrality class of the results. Options: 0 (0-10%), 1 (10-30%), 2 (30-50%), 3 (50-80%) and 10 (0-80%). Usually they are published with class 10.
+Int_t trig = 1 : linked to the trigger. Default depends on data period: lhc11h: 1, containing lhc12 or lhc13: 5, or else: 6. On doubt one can always referr to the table at the bottom of this paragraph in after checking the AnalysisResults.root file with a browser.
+Bool_t bESD = kFALSE : an obsolete variable. Might be removed in the future.
+Int_t run = 0 : enables to add a run number to the plots. Not neccessary for general QA, and can be suppresed by giving the number 0.
+const char *outfile ="JETrackQA_output.root" : the path to the place to store the plots as root file. This is in addition to the image files made with in the 'suffix' format.
+List of triggers:
+ if(trig==1) strTrigger = "kCentral";
+ if(trig==2) strTrigger = "kSemiCentral";
+ if(trig==3) strTrigger = "kMBkCentralkSemiCentral";
+ if(trig==4) strTrigger = "kEMCEJE";
+ if(trig==5) strTrigger = "kINT7";
+ if(trig==6) strTrigger = "kMB";
+
%+++++++++++++++++++++++++++++++++++++++++++
processJETriggerQA.C
+This is an old version of the macro. Use V2 if possible. Only use this for old results.
+
%+++++++++++++++++++++++++++++++++++++++++++
processJETriggerQA_V2.C
+Processes the results of the JE_TriggerQAFullR020 wagon, and if present, can also be used for the results of the JE_TriggerQAFullR020_EMCEGA and JE_TriggerQAFullR020_EMCEJE wagon. Should be run with the following arguments:
+TString strFileIn = "AnalysisResults.root" : the path to the input file.
+TString suftype ="eps" : the suffix that deternmines the output format. For example: eps, pdf, png, etc.
+Float_t jetR = 0.2 : the jetR. Default train value is 0.2, but can otherwise be found by opening the AnalysisResults.root file with the browser.
+Float_t minTrkPT = 0.15 : the lower Track momentum cut-off. Default train value is 0.15, but can otherwise be found by opening the AnalysisResults.root file with the browser.
+Float_t minClusterET = 0.3 : the lower Cluster energy cut-off. Default train value is 0.3, but can otherwise be found by opening the AnalysisResults.root file with the browser.
+Int_t run = 0 : enables to add a run number to the plots. Not neccessary for general QA, and can be suppresed by giving the number 0.
+TString trigsuffix = "" : leave empty to open the results of the JE_TriggerQAFullR020 wagon, but or use "EJE" or "EGA" to use the triggered results otherwise.
+const char* outfile = "JETriggerQA_outfile.root" : the path to the place to store the plots as root file. This is in addition to the image files made with in the 'suffix' format.
+
%+++++++++++++++++++++++++++++++++++++++++++
processJpsi2eeQAplots.C
--- /dev/null
+# override the *.d exclusion
+!/benchmark.config.d
--- /dev/null
+#!/bin/bash
+
+#
+# launch-relval.sh -- by Dario Berzano <dario.berzano@cern.ch>
+#
+# Controls the release validation submission by managing the validation virtual
+# cluster.
+#
+
+#
+# Variables
+#
+
+# error codes
+errCfg=1
+errMissingCmd=2
+errEc2Auth=3
+errInvalidOpt=4
+errSessionDir=5
+errCreateKey=6
+errRunVm=7
+errLaunchValidation=8
+errSshNotReady=9
+errStatusUnavailable=10
+errPickSession=11
+errCopyKey=12
+errAttachScreen=13
+
+# error codes not treated as errors (100 to 140)
+errStatusRunning=100
+errStatusNotRunning=101
+errStatusDoneOk=102
+errStatusDoneFail=103
+
+# thresholds
+maxVmLaunchAttempts=10
+maxSshConnectAttempts=400
+maxVmAddressWait=120
+
+# working directory prefix
+sessionPrefix='/tmp/alirelval'
+
+# screen name for the validation
+screenName='AliceReleaseValidation'
+
+# program name
+Prog=$(basename "$0")
+
+#
+# Functions
+#
+
+# Pretty print
+function pr() {
+ local nl
+ if [ "$1" == '-n' ] ; then
+ nl="-n"
+ shift
+ fi
+ echo $nl -e "\033[1m$@\033[m" >&2
+}
+
+# Nice date in UTC
+function ndate() {
+ date -u +%Y%m%d-%H%M%S-utc
+}
+
+# Temporary file
+function tmpf() {
+ mktemp /tmp/alirelval-XXXX
+}
+
+# Swallow output. Show only if something goes wrong
+function swallow() {
+ local tout ret
+ tout=$(tmpf)
+ "$@" > "$tout" 2>&1
+ ret=$?
+ if [ $ret != 0 ] ; then
+ pr "Command failed (exit status: $ret): $@"
+ cat "$tout" >&2
+ fi
+ rm -f "$tout"
+ return $ret
+}
+
+# Launch a VM. Create the keypair if the given keyfile does not exist. Syntax:
+#
+# RunVM <image_id> <profile> <user_data> <key_name> <key_file>
+#
+# Returns 0 on success, nonzero on failure. IP address is returned on stdout.
+function RunVM() {
+ local imageId profile userData keyName
+ imageId="$1"
+ profile="$2"
+ userData="$3"
+ keyName="$4"
+ keyFile="$5"
+ local raw iip iid ret attempt createdKeypair
+
+ # keypair part: if file does not exist, create keypair
+ if [ ! -e "$keyFile" ] ; then
+ pr "Creating a new keypair: $keyName (private key: $keyFile)"
+ swallow euca-create-keypair -f "$keyFile" "$keyName"
+ if [ $? != 0 ] ; then
+ pr 'Problems creating the keypair'
+ return $errCreateKey
+ fi
+ createdKeypair=1
+ fi
+
+ attempt=0
+ pr 'Attempting to run virtual machine'
+
+ # resubmit loop
+ while true ; do
+
+ if [ $((++attempt)) -gt $maxVmLaunchAttempts ] ; then
+ pr " * Reached maximum number of attempts, giving up"
+ if [ "$createdKeypair" == 1 ] ; then
+ ( euca-delete-keypair "$keyName" ; rm -f "$keyFile" ) > /dev/null 2>&1
+ fi
+ return $errRunVm
+ fi
+
+ pr -n " * Launching VM (attempt #$attempt/$maxVmLaunchAttempts)..."
+
+ raw=$( euca-run-instances "$imageId" -t "$profile" -d "$userData" -k "$keyName" 2>&1 )
+ ret=$?
+ iid=$( echo "$raw" | egrep '^INSTANCE' | head -n1 | awk '{ print $2 }' )
+ if [ $ret != 0 ] || [ "$iid" == '' ] ; then
+ # 'hard' error, but can be temporary
+ pr 'error: message follows'
+ echo "$raw" >&2
+ sleep 1
+ continue
+ else
+ pr 'ok'
+ fi
+
+ pr " * VM has instance ID $iid"
+ pr -n " * Waiting for IP address..."
+
+ # wait for address loop
+ iip=''
+ for ((i=0; i<$maxVmAddressWait; i++)) ; do
+ sleep 1
+ raw=$( euca-describe-instances 2>&1 | grep -E '^INSTANCE' | grep "$iid" | head -n1 )
+
+ # error state?
+ echo "$raw" | grep -i error -q
+ if [ $? == 0 ] ; then
+ pr ; pr -n " * VM went to error state"
+ break
+ fi
+
+ # no error: try to parse address (NOTE: only IPv4 for the moment)
+ iip=$( echo "$raw" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' )
+ if [ "$iip" != '' ] ; then
+ pr
+ break
+ fi
+
+ # no address
+ pr -n '.'
+
+ done
+
+ # do we have address?
+ if [ "$iip" != '' ] ; then
+ pr " * VM has address $iip"
+ break
+ fi
+
+ # we don't: terminate (timeout)
+ pr 'timeout' ; pr " * Terminating instance $iid"
+ euca-terminate-instances "$iid" > /dev/null 2>&1
+
+ done
+
+ # success
+ [ "$createdKeypair" == 1 ] && euca-delete-keypair "$keyName" > /dev/null 2>&1
+ echo "$iid $iip" # must be parsed
+ return 0
+
+}
+
+# Prepare the validation session directory. Syntax:
+#
+# PrepareSession <aliroot_tag>
+#
+# Returns 0 on success, nonzero on failure. Session tag returned on stdout.
+function PrepareSession() {
+ local aliRootTag sessionTag sessionDir
+ aliRootTag="$1"
+ sessionTag="${aliRootTag}_$(ndate)"
+ sessionDir="$sessionPrefix/$sessionTag"
+
+ # session directory already exists? abort
+ if [ -d "$sessionDir" ] ; then
+ pr "Session directory already exists, aborting"
+ return $errSessionDir
+ fi
+
+ # create working directory
+ mkdir -p "$sessionDir"
+ if [ $? != 0 ] ; then
+ pr "Fatal: cannot create session directory $sessionDir"
+ return $errSessionDir
+ fi
+
+ # aliroot version written to a file
+ echo "$aliRootTag" > "$sessionDir/aliroot-version.txt"
+
+ # benchmark script, configuration and file list
+ cp benchmark.sh benchmark.config files.list "$sessionDir/"
+ if [ $? != 0 ] ; then
+ pr "Cannot copy benchmark configuration and script to $sessionDir"
+ return $errSessionDir
+ fi
+
+ # append local files to the configuration
+ for f in benchmark.config.d/*.config ; do
+ [ ! -e "$f" ] && continue
+ ( echo ''
+ echo "### from $f ###"
+ cat $f
+ echo ''
+ ) >> "$sessionDir/benchmark.config"
+ done
+
+ # success: return the session tag and move to the session directory
+ pr "*** Creating new working session: $sessionTag ***"
+ pr "*** Use this name for future session operations ***"
+ echo "$sessionTag"
+ return 0
+}
+
+# Undo the previous action
+function PrepareSession_Undo() {
+ rm -rf "$sessionPrefix/$1"
+}
+
+# Move into the session tag directory. Usage:
+#
+# MoveToSessionDir <session_tag>
+#
+# Returns 0 on success, nonzero on error.
+function MoveToSessionDir() {
+ originalWorkDir="$PWD"
+ cd "$sessionPrefix/$sessionTag" || return $errSessionDir
+ return 0
+}
+
+# Undo the previous action
+function MoveToSessionDir_Undo() {
+ cd "$originalWorkDir"
+}
+
+# Load the benchmark configuration
+function LoadConfig() {
+ source benchmark.config > /dev/null 2>&1
+ if [ $? != 0 ] ; then
+ pr "Cannot load benchmark configuration"
+ return $errCfg
+ fi
+ return 0
+}
+
+# Instantiate the validation VM
+function InstantiateValidationVM() {
+ local sessionTag instanceId instanceIp ret raw
+ sessionTag="$1"
+
+ # check if we already have a vm
+ instanceId="$(cat instance-id.txt 2> /dev/null)"
+ if [ "$instanceId" != '' ] ; then
+ pr "Virtual machine $instanceId is already running"
+ return 0 # consider it a success
+ else
+ rm -f instance-id.txt instance-address.txt
+ fi
+
+ # do we need to create a keypair?
+ if [ "$cloudKeyName" == '' ] ; then
+ pr "Note: temporary SSH keys will be created for this VM"
+ cloudKeyName="$sessionTag"
+ cloudKeyFile="$PWD/key.pem"
+ rm -f "$cloudKeyFile"
+ elif [ -e "$cloudKeyFile" ] ; then
+ # copy key to session dir
+ pr -n "Copying private key $cloudKeyFile to session directory..."
+ cp "$cloudKeyFile" 'key.pem' 2> /dev/null
+ if [ $? != 0 ] ; then
+ pr 'error'
+ return $errCopyKey
+ else
+ pr 'ok'
+ fi
+ cloudKeyFile="$PWD/key.pem"
+ else
+ pr "Cannot find private key to access virtual machines: $cloudKeyFile"
+ return $errCopyKey
+ fi
+
+ # launch virtual machine and get its address
+ raw=$( RunVM "$cloudImageId" "$cloudProfile" "$cloudUserData" "$cloudKeyName" "$cloudKeyFile" )
+ ret=$?
+
+ if [ $ret == 0 ] ; then
+ instanceId=$( echo $raw | cut -d' ' -f1 )
+ instanceIp=$( echo $raw | cut -d' ' -f2 )
+
+ # write both parameters to files
+ echo $instanceId > 'instance-id.txt'
+ echo $instanceIp > 'instance-address.txt'
+ fi
+
+ return $ret
+}
+
+# Undo the previous action
+function InstantiateValidationVM_Undo() {
+ local sessionTag
+ sessionTag="$1"
+ if [ -e 'instance-id.txt' ] ; then
+ swallow euca-terminate-instances $(cat instance-id.txt)
+ if [ $? == 0 ] ; then
+ rm -f instance-id.txt instance-address.txt key.pem
+ fi
+ fi
+}
+
+# Generic SSH function to the VM
+function VMSSH() {
+ local instanceIp sshParams ret
+ instanceIp=$(cat instance-address.txt 2> /dev/null)
+ sshParams="-oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -oPasswordAuthentication=no -i $PWD/key.pem"
+
+ if [ "$1" == '--rsync-cmd' ] ; then
+ shift
+ echo ssh $sshParams "$@"
+ ret=0
+ else
+ ssh $sshParams "$cloudUserName"@"$instanceIp" "$@"
+ ret=$?
+ fi
+ return $ret
+}
+
+# Opens a shell to the remote VM
+function Shell() {
+ local sessionTag
+ sessionTag="$1"
+ VMSSH
+}
+
+# Checks status of the validation
+function Status() {
+ local raw ret screen exitcode
+ raw=$( VMSSH -t "screen -ls 2> /dev/null | grep -q .$screenName && echo -n 'screen_yes ' || echo -n 'screen_no ' ; cat alirelval/validation.done 2> /dev/null || echo 'not_done' ; true" 2> /dev/null )
+ raw=$( echo "$raw" | tr -cd '[:alnum:]_ ' ) # garbage removal
+ ret=$?
+
+ if [ "$ret" != 0 ] ; then
+ pr "Cannot get status"
+ return $errStatusUnavailable
+ fi
+
+ screen="${raw%% *}"
+ exitcode="${raw#* }"
+
+ if [ "$screen" == 'screen_yes' ] ; then
+ pr 'Status: validation still running'
+ return $errStatusRunning
+ else
+ if [ "$exitcode" == 'not_done' ] ; then
+ pr 'Status: validation not running'
+ return $errStatusNotRunning
+ elif [ "$exitcode" == 0 ] ; then
+ pr 'Status: validation completed successfully'
+ return $errStatusDoneOk
+ else
+ pr "Status: validation finished with errors (exitcode: $exitcode)"
+ return $errStatusDoneFail
+ fi
+ fi
+
+}
+
+# Wait for host to be ready
+function WaitSsh() {
+ local attempt error
+ attempt=0
+ pr -n 'Waiting for the VM to accept SSH connections...'
+
+ while ! VMSSH -Tq true > /dev/null 2>&1 ; do
+ if [ $((++attempt)) -gt $maxSshConnectAttempts ] ; then
+ pr 'timeout'
+ error=1
+ break
+ fi
+ pr -n '.'
+ sleep 3
+ done
+
+ [ "$error" == 1 ] && return $errSshNotReady
+ pr 'ok'
+ return 0
+}
+
+# Run the validation
+function Validate() {
+ local instanceIp sshParams sessionTag
+ sessionTag="$1"
+ instanceIp=$(cat instance-address.txt 2> /dev/null)
+ sshParams="-oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -oPasswordAuthentication=no -i $PWD/key.pem"
+
+ # create helper script to launch benchmark
+ cat > run-benchmark.sh <<_EoF_
+#!/bin/bash
+cd \$(dirname "\$0")
+v=validation.done
+rm -f \$v
+env ALIROOT_VERSION=$(cat aliroot-version.txt) ./benchmark.sh run $sessionTag files.list benchmark.config
+#sleep 1000
+ret=\$?
+echo \$ret > \$v
+echo ; echo ; echo
+echo "*** Validation finished with exitcode \$ret ***"
+echo ; echo ; echo
+read -p 'Press ENTER to dismiss: automatic dismiss in 60 seconds...' -t 60
+_EoF_
+ chmod +x run-benchmark.sh
+
+ # transfer files
+ pr 'Transferring files to the VM'
+ rsync -av -e "$(VMSSH --rsync-cmd)" $PWD/ $cloudUserName@$instanceIp:alirelval/ || return $errLaunchValidation
+
+ # open a screen that does something; note that the command is not executed if
+ # the screen already exists, which is what we want
+ # note: sleep necessary to avoid "dead" screens
+ VMSSH -t "screen -wipe > /dev/null 2>&1 ; if screen -ls | grep -q $screenName ; then ret=42 ; else screen -dmS AliceReleaseValidation alirelval/run-benchmark.sh ; ret=0 ; sleep 3 ; fi ; exit \$ret"
+ ret=$?
+
+ # message
+ if [ $ret == 42 ] ; then
+ pr 'Validation already running inside a screen.'
+ else
+ pr 'Validation launched inside a screen.'
+ fi
+
+ pr
+ pr 'Check the progress status with:'
+ pr " $Prog --session $sessionTag --status"
+ pr 'Attach to the screen for debug:'
+ pr " $Prog --session $sessionTag --attach"
+ pr 'Open a shell to the virtual machine:'
+ pr " $Prog --session $sessionTag --shell"
+ pr
+
+ # ignore ssh errors
+ return 0
+}
+
+# Attach current validation screen, if possible
+function Attach() {
+ local sessionTag
+ sessionTag="$1"
+
+ VMSSH -t "( screen -wipe ; screen -rx $screenName ) > /dev/null 2>&1"
+
+ if [ $? != 0 ] ; then
+ pr "Cannot attach screen: check if validation is running with:"
+ pr " $Prog --session $sessionTag --status"
+ pr "or connect manually to the VM for debug:"
+ pr " $Prog --session $sessionTag --attach"
+ return $errAttachScreen
+ fi
+
+ return 0
+}
+
+# Pick session interactively
+function PickSession() {
+ local sessionTag sess listSessions
+ listSessions=()
+ mkdir -p "$sessionPrefix"
+
+ while read sess ; do
+ [ ! -d "$sessionPrefix/$sess" ] && continue
+ listSessions+=( $sess )
+ done < <( cd $sessionPrefix ; ls -1t )
+
+ if [ ${#listSessions[@]} == 0 ] ; then
+ pr "No session available in session directory $sessionPrefix"
+ return $errPickSession
+ fi
+
+ pr 'Available sessions (most recent first):'
+ for ((i=0; i<${#listSessions[@]}; i++)) ; do
+ pr "$( printf " % 2d. ${listSessions[$i]}" $((i+1)) )"
+ done
+ pr -n 'Pick one: '
+ read i
+
+ let i--
+ if [ "$i" -lt 0 ] || [ "${listSessions[$i]}" == '' ] ; then
+ pr 'Invalid session'
+ return $errPickSession
+ fi
+
+ sess="${listSessions[$i]}"
+ pr "You chose session $sess"
+ echo $sess
+ return 0
+}
+
+# Run an action
+function RunAction() {
+ local ret
+ type "$1" > /dev/null 2>&1
+ if [ $? == 0 ] ; then
+ #pr "--> $1 (wd: $PWD)"
+ eval "$@"
+ ret=$?
+ #pr "<-- $1 (ret: $ret, wd: $PWD)"
+ return $ret
+ fi
+ return 0
+}
+
+# Print help screen
+function Help() {
+ pr "$Prog -- by Dario Berzano <dario.berzano@cern.ch>"
+ pr 'Controls the Release Validation workflow on the cloud for AliRoot.'
+ pr
+ pr "Usage 1: $Prog [--prepare|--launch] --aliroot <aliroot_tag>"
+ pr
+ pr 'A new session is created to validate the specified AliRoot tag.'
+ pr
+ pr ' --prepare : prepares the session directory containing the files needed'
+ pr ' for the validation'
+ pr ' --launch : launches the full validation process: prepares session,'
+ pr ' runs the virtual machine, launches the validation program'
+ pr ' --aliroot : the AliRoot tag to validate, in the form "vAN-20140610"'
+ pr ; pr
+ pr "Usage 2: $Prog [--runvm|--validate|--shell|--status] --session <session_tag>"
+ pr
+ pr 'Runs the validation step by step after a session is created with'
+ pr '--prepare, and runs other actions on a certain session.'
+ pr
+ pr ' --session : session identifier, e.g. vAN-20140610_20140612-123047-utc:'
+ pr ' if no session is specified an interactive prompt is'
+ pr ' presented'
+ pr ' --runvm : instantiates the head node of the validation cluster on'
+ pr ' the cloud'
+ pr ' --validate : runs the validation script on the head node for the'
+ pr ' current session. Head node must be already up, or it'
+ pr ' should be created with --runvm. If validation is running'
+ pr ' already, connects to the existing validation shell'
+ pr ' --attach : attach a currently running validation screen; remember to'
+ pr ' detach with Ctrl+A+D (and *not* Ctrl-C)'
+ pr ' --shell : does SSH on the head node'
+ pr ' --status : returns the status of the validation'
+ pr ; pr
+ pr 'Example 1: run the validation of AliRoot tag vAN-20140610:'
+ pr
+ pr " $Prog --aliroot vAN-20140610 --launch"
+ pr
+ pr 'Example 2: do the same thing step-by-step:'
+ pr
+ pr " $Prog --aliroot vAN-20140610 --prepare"
+ pr " $Prog --runvm"
+ pr " $Prog --validate"
+ pr
+}
+
+# The main function
+function Main() {
+
+ # local variables
+ local Args aliRootTag EnterShell Actions sessionTag
+ Actions=()
+
+ # parse command line options
+ while [ $# -gt 0 ] ; do
+ case "$1" in
+
+ # options
+ --aliroot|-a)
+ aliRootTag="$2"
+ shift 2
+ ;;
+ --session)
+ sessionTag="$2"
+ shift 2
+ ;;
+
+ # actions
+ --launch)
+ # all actions
+ Actions=( PrepareSession MoveToSessionDir LoadConfig InstantiateValidationVM WaitSsh Validate )
+ shift
+ ;;
+ --prepare)
+ Actions=( PrepareSession MoveToSessionDir )
+ shift
+ ;;
+ --runvm)
+ Actions=( MoveToSessionDir LoadConfig InstantiateValidationVM )
+ shift
+ ;;
+ --validate)
+ Actions=( MoveToSessionDir LoadConfig WaitSsh Validate )
+ shift
+ ;;
+ --attach)
+ Actions=( MoveToSessionDir LoadConfig WaitSsh Attach )
+ shift
+ ;;
+
+ # extra actions
+ --shell)
+ Actions=( MoveToSessionDir LoadConfig WaitSsh Shell )
+ shift
+ ;;
+ --status)
+ Actions=( MoveToSessionDir LoadConfig WaitSsh Status )
+ shift
+ ;;
+ --help)
+ Help
+ exit 0
+ ;;
+
+ *)
+ pr "Invalid option: $1. Use --help for assistance."
+ return $errInvalidOpt
+ ;;
+ esac
+ done
+ shift # --
+
+ # check for the presence of the required tools in the $PATH
+ for T in euca-describe-instances euca-describe-regions euca-run-instances euca-create-keypair euca-delete-keypair rsync ; do
+ which "$T" > /dev/null 2>&1
+ if [ $? != 0 ] ; then
+ pr "Cannot find one of the required commands: $T"
+ return $errMissingCmd
+ fi
+ done
+
+ # test EC2 credentials
+ # euca-describe-regions > /dev/null 2>&1
+ # if [ $? != 0 ] ; then
+ # pr 'Cannot authenticate to EC2.'
+ # pr 'Note: you must have at least the following variables properly set in your environment:'
+ # pr " * EC2_URL (current value: ${EC2_URL-<not set>})"
+ # pr " * EC2_ACCESS_KEY (current value: ${EC2_ACCESS_KEY-<not set>})"
+ # pr " * EC2_SECRET_KEY (current value: ${EC2_SECRET_KEY-<not set>})"
+ # return $errEc2Auth
+ # fi
+
+ # what to do?
+ if [ ${#Actions[@]} == 0 ] ; then
+ pr 'Nothing to do. Use --help for assistance.'
+ return $errInvalidOpt
+ fi
+
+ # run actions
+ for ((i=0; i<${#Actions[@]}; i++)) ; do
+
+ A=${Actions[$i]}
+
+ if [ "$A" == 'PrepareSession' ] ; then
+ # special action returning the session tag
+ if [ "$aliRootTag" == '' ] ; then
+ pr 'Specify an AliRoot version with --aliroot <tag>'
+ return $errInvalidOpt
+ fi
+ if [ "$sessionTag" != '' ] ; then
+ pr 'Cannot use --session with --prepare. Use --help for assistance.'
+ return $errInvalidOpt
+ fi
+ sessionTag=$( RunAction "$A" "$aliRootTag" )
+ ret=$?
+ else
+ if [ "$sessionTag" == '' ] ; then
+ sessionTag=$( PickSession )
+ ret=$?
+ [ $ret != 0 ] && return $ret
+ fi
+ RunAction "$A" "$sessionTag"
+ ret=$?
+ fi
+
+ # 100 to 140 --> not errors
+ ( [ $ret != 0 ] && ( [ $ret -ge 100 ] || [ $ret -le 140 ] ) ) && break
+
+ done
+
+ # undo actions
+ let i--
+ if [ $ret != 0 ] && ( [ $ret -ge 100 ] || [ $ret -le 140 ] ) ; then
+ for ((; i>=0; i--)) ; do
+ RunAction "${Actions[$i]}_Undo" "$sessionTag"
+ done
+ fi
+
+ # return last value
+ return $ret
+
+}
+
+#
+# Entry point
+#
+
+Main "$@" || exit $?
#run QA with a known good version of the QA script
#trustedQAtrainMacro='/hera/alice/mkrzewic/gsisvn/Calibration/QAtrain_duo.C'
-## if set to 1, reconstruct in /tmp, then copy results to final place
+## if set to 1, run in whatever mktemp -d aasfa provides,
+## if set to 2, run in the current dir (as provided by the batch system) or subdir of that
+## then copy results to final place
#
reconstructInTemporaryDir=0
--- /dev/null
+#
+# 50cloud -- by Dario Berzano <dario.berzano@cern.ch>
+#
+# Appended to the main benchmark.config file.
+#
+# Cloud configuration for the ALICE Release Validation.
+#
+
+# Override benchmark.config: make makeflow more verbose
+makeflowOptions="-T condor -d all"
+
+# Override benchmark.config: use temporary dir instead of output dir in some cases
+reconstructInTemporaryDir=1
+
+# EC2 credentials (must export)
+export EC2_ACCESS_KEY='your_ec2_access_key'
+export EC2_SECRET_KEY='your_ec2_secret_key'
+
+# EC2 server. CERN Agile server in the example
+export EC2_URL='http://openstack.cern.ch:8773/services/Cloud'
+
+# user-data for the CernVM head node, as obtained from CernVM Online
+cloudUserData=$(cat <<_EoF_
+[amiconfig]
+plugins=cernvm
+[cernvm]
+contextualization_key=f962a8f825994aa780db907f6ba6f2ec:__password_to_the_context__
+[ucernvm-begin]
+resize_rootfs=true
+cvmfs_branch=cernvm-prod.cern.ch
+cvmfs_tag=cernvm-system-3.3.0.3
+[ucernvm-end]
+_EoF_
+)
+
+# Image ID (EC2 AMI) of uCernVM on your cloud
+cloudImageId='ami-00000298'
+
+# Keypair name to associate to your VM for SSH access.
+# Leave blank for automatically generating one!
+cloudKeyName=''
+
+# Private key file corresponding to the keypair.
+# Ignored if cloudKeyName=''
+#cloudKeyFile='/path/to/private/key'
+
+# Instance type of the node
+cloudProfile='m1.large'
+
+# Unprivileged user name running the validation.
+# Note: it must be possible to run:
+# ssh $cloudUserName@$vmAddress -i $cloudKeyFile
+# i.e. to do passwordless authentication using the above key with this user
+cloudUserName='alicerelval'
return 1
fi
- #runpath=${PWD}/rundir_cpass0_${runNumber}_${jobindex}
runpath=${outputDir}
- #[[ ${reconstructInTemporaryDir} -eq 1 && -n ${TMPDIR} ]] && runpath=${TMPDIR}
[[ ${reconstructInTemporaryDir} -eq 1 ]] && runpath=$(mktemp -d -t cpass0.XXXXXX)
+ [[ ${reconstructInTemporaryDir} -eq 2 ]] && runpath=${PWD}/rundir_cpass0_${runNumber}_${jobindex}
mkdir -p ${runpath}
if [[ ! -d ${runpath} ]]; then
touch ${doneFileTmp}
# [dberzano] OK this is fine!
echo rm -f ./${chunkName}
rm -f ./${chunkName}
- echo "cp -R ${runpath}/* ${outputDir}"
- cp -p -R ${runpath}/* ${outputDir}
+ echo "paranoidCp ${runpath}/* ${outputDir}"
+ paranoidCp ${runpath}/* ${outputDir}
echo
#validate CPass0
return 1
fi
- #runpath=${PWD}/rundir_cpass1_${runNumber}_${jobindex}
runpath=${outputDir}
- #[[ ${reconstructInTemporaryDir} -eq 1 && -n ${TMPDIR} ]] && runpath=${TMPDIR}
[[ ${reconstructInTemporaryDir} -eq 1 ]] && runpath=$(mktemp -d -t cpass1.XXXXXX)
+ [[ ${reconstructInTemporaryDir} -eq 2 ]] && runpath=${PWD}/rundir_cpass1_${runNumber}_${jobindex}
#MC
if [[ "${infile}" =~ galice\.root ]]; then
/bin/ls
echo rm -f ./${chunkName}
rm -f ./${chunkName}
- echo "cp -R ${runpath}/* ${outputDir}"
- cp -pf -R ${runpath}/* ${outputDir}
+ echo "paranoidCp ${runpath}/* ${outputDir}"
+ paranoidCp ${runpath}/* ${outputDir}
echo
#validate CPass1
[[ -f ${alirootSource} && -z ${ALICE_ROOT} ]] && source ${alirootSource}
- #runpath=${PWD}/rundir_cpass0_Merge_${runNumber}
runpath=${outputDir}
- #[[ ${reconstructInTemporaryDir} -eq 1 && -n ${TMPDIR} ]] && runpath=${TMPDIR}
[[ ${reconstructInTemporaryDir} -eq 1 ]] && runpath=$(mktemp -d -t mergeCPass0.XXXXXX)
+ [[ ${reconstructInTemporaryDir} -eq 2 ]] && runpath=${PWD}/rundir_mergeCPass0_${runNumber}
mkdir -p ${runpath}
if [[ ! -d ${runpath} ]]; then
/bin/ls
#copy all to output dir
- cp -pf -R ${runpath}/* ${outputDir}
+ echo "paranoidCp ${runpath}/* ${outputDir}"
+ paranoidCp ${runpath}/* ${outputDir}
if [[ -n ${generateMC} ]]; then
goPrintValues sim ${commonOutputPath}/meta/sim.run${runNumber}.list ${commonOutputPath}/meta/cpass0.job*.run${runNumber}.done
[[ -f ${alirootSource} && -z ${ALICE_ROOT} ]] && source ${alirootSource}
- #runpath=${PWD}/rundir_cpass1_Merge_${runNumber}
runpath=${outputDir}
- #[[ ${reconstructInTemporaryDir} -eq 1 && -n ${TMPDIR} ]] && runpath=${TMPDIR}
[[ ${reconstructInTemporaryDir} -eq 1 ]] && runpath=$(mktemp -d -t mergeCPass1.XXXXXX)
+ [[ ${reconstructInTemporaryDir} -eq 2 ]] && runpath=${PWD}/rundir_mergeCPass1_${runNumber}
mkdir -p ${runpath}
if [[ ! -d ${runpath} ]]; then
/bin/ls
#copy all to output dir
- cp -pf -R ${runpath}/* ${outputDir}
+ echo "paranoidCp ${runpath}/* ${outputDir}"
+ paranoidCp ${runpath}/* ${outputDir}
#validate merge cpass1
cd ${outputDir}
cp "$logTmp" "$logDest" || rm -f "$logTmp" "$logDest"
#copy output files
- cp -r QAplots ${commonOutputPath}
- cp *.list ${commonOutputPath}
- cp *.root ${commonOutputPath}
- cp *.log ${commonOutputPath}
+ paranoidCp QAplots ${commonOutputPath}
+ paranoidCp *.list ${commonOutputPath}
+ paranoidCp *.root ${commonOutputPath}
+ paranoidCp *.log ${commonOutputPath}
return 0
)
return 0
}
+paranoidCp()
+(
+ #recursively copy files and directories
+ #to avoid using find and the like as they kill
+ #the performance on some cluster file systems
+ #does not copy links to avoid problems
+ sourceFiles=("${@}")
+ destination="${sourceFiles[@]:(-1)}" #last element
+ unset sourceFiles[${#sourceFiles[@]}-1] #remove last element (dst)
+ for src in "${sourceFiles[@]}"; do
+ if [[ -f "${src}" && ! -h "${src}" ]]; then
+ paranoidCopyFile "${src}" "${destination}"
+ elif [[ -d "${src}" && ! -h "${src}" ]]; then
+ src="${src%/}"
+ dst="${destination}/${src##*/}"
+ mkdir -p "${dst}"
+ paranoidCp "${src}"/* "${dst}"
+ fi
+ done
+)
+
+paranoidCopyFile()
+(
+ #copy a single file to a target in an existing dir
+ #repeat a few times if copy fails
+ src="${1}"
+ dst="${2}"
+ [[ -d "${dst}" ]] && dst="${dst}/${src##*/}"
+ [[ -z "${maxCopyTries}" ]] && maxCopyTries=5
+ echo "maxCopyTries=${maxCopyTries}"
+ echo "cp ${src} ${dst}"
+ cp "${src}" "${dst}"
+ i=0
+ until cmp -s "${src}" "${dst}"; do
+ echo "try: ${i}"
+ [[ -f "${dst}" ]] && rm "${dst}"
+ cp "${src}" "${dst}"
+ [[ ${i} -gt ${maxCopyTries} ]] && ret=1 && return 1
+ (( i++ ))
+ done
+ return 0
+)
+
guessRunData()
{
#guess the period from the path, pick the rightmost one
--- /dev/null
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127712/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127712/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127822/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127822/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127822/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127933/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127933/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127933/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127933/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127935/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127935/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127935/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127935/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127936/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127936/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127936/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127936/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127936/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127936/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127937/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127937/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127937/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127937/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127937/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127940/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127941/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127941/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127941/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127942/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127942/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127942/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127942/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127942/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127942/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127942/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127942/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127942/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000127942/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128185/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128185/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128185/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128185/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128185/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128185/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128186/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128186/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128186/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128186/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128186/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128186/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128186/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128189/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128191/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128191/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128191/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128191/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128192/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128192/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128260/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128260/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128260/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128260/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128260/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128366/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128366/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128366/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128366/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128452/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128483/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128483/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128486/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128486/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128486/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128486/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128486/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128486/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128486/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128486/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128494/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128494/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128494/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128494/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128495/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128495/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128503/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128504/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128582/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128582/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128605/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128605/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128609/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128611/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128611/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128611/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128615/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128615/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128615/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128615/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128677/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128678/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128678/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128777/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128777/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128777/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128777/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128777/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128777/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128778/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128778/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128778/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128778/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128820/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128820/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128820/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128823/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128823/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128824/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128824/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128824/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128824/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128824/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128824/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128824/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128835/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128836/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128836/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128836/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128836/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128836/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128843/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128843/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128843/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128843/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128853/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128853/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128853/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128853/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128855/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128855/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128855/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128855/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128855/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128913/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128913/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000128913/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129512/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129512/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129512/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129512/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129512/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129512/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129512/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129513/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129513/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129513/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129513/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129513/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129513/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129513/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129513/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129513/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129513/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129514/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129520/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129520/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129520/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129520/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129520/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129523/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129523/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129523/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129523/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129527/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129527/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129528/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129528/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129528/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129540/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129540/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129540/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129540/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129540/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129540/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129540/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129586/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129586/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129586/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129587/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129587/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129587/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129599/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129599/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129639/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129641/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129641/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129641/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129641/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129647/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129647/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129647/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129650/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129650/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129650/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129652/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129652/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129652/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129653/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129653/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129653/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129653/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129653/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129654/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129659/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129659/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129666/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129666/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129666/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129666/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129723/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129725/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129726/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129726/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129726/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129729/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129729/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129729/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129735/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129735/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129735/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129735/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129735/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129735/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129736/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129736/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129736/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129736/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129736/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129736/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129738/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129738/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129738/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129738/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129738/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129742/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129742/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129742/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129744/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129744/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129744/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129959/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129959/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129959/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129960/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129960/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129960/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129960/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129961/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129961/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129961/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000129961/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130149/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130157/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130158/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130172/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130178/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130342/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130342/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130342/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130342/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130342/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130342/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130342/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130343/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130354/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130354/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130354/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130356/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130480/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/47/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/48/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/49/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/50/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/51/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/52/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/53/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/54/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/55/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/56/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/57/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/58/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/59/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/60/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/61/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/62/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/63/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/64/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/65/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/66/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/67/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/68/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/69/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/70/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/71/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/72/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/73/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/74/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/75/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/76/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/77/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/78/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/79/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/80/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/81/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/82/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/83/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/84/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/85/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/86/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/87/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/88/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/89/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/90/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/91/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/92/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/93/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/94/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/95/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130517/filtered/96/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/47/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/48/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/49/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/50/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/51/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/52/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/53/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/54/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/55/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/56/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/57/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/58/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/59/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/60/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/61/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/62/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/63/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/64/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/65/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/66/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130519/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130696/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/47/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/48/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/49/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/50/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130704/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130793/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130795/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130798/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130798/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130798/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130798/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130798/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130798/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130798/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130798/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130798/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130799/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130834/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2010/LHC10e/000130840/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/100/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/101/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/102/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/103/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/104/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/105/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/106/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/107/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/108/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/109/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/110/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/111/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/112/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/113/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/115/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/116/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/117/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/119/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/120/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/122/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/123/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/124/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/125/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/126/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/127/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/128/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/129/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/130/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/131/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/132/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/133/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/134/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/135/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/136/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/137/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/138/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/139/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/140/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/141/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/142/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/143/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/144/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/145/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/146/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/147/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/148/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/149/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/150/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/151/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/152/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/153/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/154/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/155/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/156/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/157/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/161/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/47/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/48/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/49/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/50/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/51/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/52/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/53/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/54/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/56/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/57/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/58/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/59/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/60/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/61/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/63/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/64/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/65/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/66/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/67/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/68/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/69/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/70/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/71/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/72/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/73/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/74/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/75/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/76/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/77/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/78/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/79/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/80/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/81/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/82/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/83/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/84/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/85/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/86/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/87/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/88/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/89/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/91/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/92/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/93/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/94/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/95/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/96/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/97/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/98/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000167988/filtered/99/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168207/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168207/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168207/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168207/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168207/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168207/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000168460/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/100/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/101/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/102/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/103/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/104/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/105/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/106/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/107/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/108/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/109/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/110/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/111/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/112/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/113/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/114/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/115/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/116/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/117/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/118/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/47/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/48/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/49/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/50/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/51/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/52/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/53/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/54/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/55/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/56/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/57/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/58/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/59/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/60/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/61/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/62/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/63/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/64/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/65/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/66/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/67/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/68/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/69/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/70/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/71/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/72/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/73/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/74/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/75/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/76/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/77/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/78/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/79/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/80/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/81/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/82/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/83/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/84/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/85/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/86/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/87/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/88/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/89/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/90/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/91/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/92/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/93/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/94/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/95/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/96/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/97/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/98/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170268/filtered/99/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170269/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/47/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/48/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/49/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/50/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/51/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/52/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/53/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/54/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/55/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170270/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/100/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/101/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/102/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/104/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/105/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/106/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/107/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/108/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/109/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/110/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/111/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/112/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/113/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/114/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/115/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/116/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/117/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/118/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/119/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/120/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/47/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/48/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/49/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/50/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/51/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/52/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/53/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/54/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/55/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/56/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/57/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/61/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/63/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/64/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/66/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/67/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/68/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/69/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/70/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/71/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/72/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/73/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/74/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/76/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/77/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/78/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/79/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/80/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/82/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/83/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/84/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/85/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/86/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/87/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/88/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/89/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/90/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/91/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/92/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/93/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/94/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/95/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/96/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170309/filtered/99/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/100/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/101/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/102/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/103/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/104/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/105/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/106/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/107/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/108/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/109/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/110/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/111/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/112/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/113/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/114/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/115/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/116/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/117/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/118/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/119/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/120/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/121/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/122/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/123/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/124/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/125/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/126/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/127/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/128/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/129/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/47/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/48/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/49/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/50/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/51/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/52/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/53/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/54/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/55/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/56/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/57/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/58/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/59/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/60/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/61/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/62/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/63/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/64/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/65/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/66/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/67/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/68/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/69/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/70/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/71/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/72/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/73/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/74/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/75/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/76/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/77/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/78/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/79/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/80/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/81/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/82/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/83/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/84/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/85/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/86/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/87/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/88/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/89/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/9/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/90/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/91/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/92/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/93/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/94/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/95/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/96/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/97/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/98/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170312/filtered/99/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/1/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/10/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/11/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/12/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/13/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/14/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/15/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/16/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/17/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/18/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/19/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/2/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/20/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/21/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/22/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/23/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/24/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/25/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/26/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/27/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/28/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/29/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/3/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/30/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/31/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/32/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/33/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/34/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/35/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/36/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/37/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/38/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/39/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/4/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/40/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/41/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/42/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/43/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/44/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/45/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/46/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/47/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/48/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/49/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/5/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/50/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/51/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/52/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/53/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/54/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/55/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/56/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/57/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/58/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/59/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/6/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/60/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/61/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/62/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/64/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/65/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/66/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/7/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/8/filtered_highPt.root
+/eos/opstest/pbuncic/reference/2011/LHC11h/000170593/filtered/9/filtered_highPt.root
fHeavyFlavour(kTRUE),
fLongLived(kFALSE),
fPatchOmegaDalitz(0),
+ fDecayerExodus(0),
fPi0(1)
{
// Default Constructor
fHeavyFlavour(kTRUE),
fLongLived(kFALSE),
fPatchOmegaDalitz(0),
+ fDecayerExodus(0),
fPi0(1)
{
// Copy Constructor
fTriggerMaxPt(1000),
fTriggerMultiplicity(0),
fTriggerMultiplicityEta(0),
+ fTriggerMultiplicityEtaMin(0),
+ fTriggerMultiplicityEtaMax(0),
fTriggerMultiplicityPtMin(0),
fCountMode(kCountAll),
fHeader(0),
fTriggerMaxPt(1000),
fTriggerMultiplicity(0),
fTriggerMultiplicityEta(0),
+ fTriggerMultiplicityEtaMin(0),
+ fTriggerMultiplicityEtaMax(0),
fTriggerMultiplicityPtMin(0),
fCountMode(kCountAll),
fHeader(0),
// eta cut
if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
continue;
+ //multiplicity check for a given eta range
+ if ((fTriggerMultiplicityEtaMin != fTriggerMultiplicityEtaMax) &&
+ (iparticle->Eta() < fTriggerMultiplicityEtaMin || iparticle->Eta() > fTriggerMultiplicityEtaMax))
+ continue;
// pt cut
if (iparticle->Pt() < fTriggerMultiplicityPtMin)
continue;
virtual void SetTriggerChargedMultiplicity(Int_t multiplicity, Float_t etamax = 0, Float_t ptmin = -1.)
{fTriggerMultiplicity = multiplicity; fTriggerMultiplicityEta = etamax;
fTriggerMultiplicityPtMin = ptmin;}
-
+
+ // Trigger on a minimum multiplicity for a given eta range
+ virtual void SetTriggerMultiplicityEtaRange(Int_t multiplicity, Float_t etamin = 0., Float_t etamax = 0., Float_t ptmin = -1.)
+ {fTriggerMultiplicity = multiplicity; fTriggerMultiplicityEtaMin = etamin; fTriggerMultiplicityEtaMax = etamax;
+ fTriggerMultiplicityPtMin = ptmin;}
+
// Calorimeters acceptance
// Set Phi in degrees, and Eta coverage, should not be negative
virtual void SetBarrelAcceptance(Float_t deta) {fTriggerEta = deta ;}
Float_t fTriggerMaxPt; // .. within pt < fTriggerMaxPt
Int_t fTriggerMultiplicity; // Trigger on events with a minimum charged multiplicity
Float_t fTriggerMultiplicityEta; // in a given eta range
+ Float_t fTriggerMultiplicityEtaMin; // in a given eta min
+ Float_t fTriggerMultiplicityEtaMax; // in a given eta max
Float_t fTriggerMultiplicityPtMin; // above this pT
CountMode_t fCountMode; // Options for counting when the event will be finished.
// fCountMode = kCountAll --> All particles that end up in the
{new((*fJets)[fJets->GetEntriesFast()]) AliAODJet(*vtx); return fJets->GetEntriesFast()-1;}
// -- Tracklets
- AliAODTracklets *GetTracklets() const { return fTracklets; }
-
+ AliAODTracklets *GetTracklets() const { return fTracklets; }
+ AliAODTracklets *GetMultiplicity() const {return GetTracklets();}
// -- Calorimeter Cells
AliAODCaloCells *GetEMCALCells() const { return fEmcalCells; }
AliAODCaloCells *GetPHOSCells() const { return fPhosCells; }
#include "AliVCuts.h"
#include "AliMCEvent.h"
#include "AliAODpidUtil.h"
+#include "AliAODMCHeader.h"
ClassImp(AliAODInputHandler)
if (!fMCEvent) fMCEvent = new AliMCEvent();
fMCEvent->SetParticleArray(mcParticles);
}
+
+ AliAODMCHeader* mcHeader = (AliAODMCHeader*) fEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
+ if(mcHeader) {
+ fMCEvent->SetExternalHeader(mcHeader);}
// When merging, get current event number from GetReadEntry(),
// entry gives the events in the current file
if (fTreeToMerge) fTreeToMerge->GetEntry(GetReadEntry() + fMergeOffset);
#include "AliInputEventHandler.h"
#include "AliAODEvent.h"
#include "AliMCEvent.h"
+#include "AliAODMCHeader.h"
class TList;
class AliMCEvent;
class TH2F;
fVx(0),
fVy(0),
fVz(0),
- fVt(0)
+ fVt(0),
+ fGeneratorIndex(-1)
{
// Default Constructor
fDaughter[0] = fDaughter[1] = 0;
fVx(mcpart->Particle()->Vx()),
fVy(mcpart->Particle()->Vy()),
fVz(mcpart->Particle()->Vz()),
- fVt(mcpart->Particle()->T())
+ fVt(mcpart->Particle()->T()),
+ fGeneratorIndex(mcpart->GetGeneratorIndex())
{
// Constructor
fDaughter[0] = mcpart->GetFirstDaughter();
fVx(mcPart.fVx),
fVy(mcPart.fVy),
fVz(mcPart.fVz),
- fVt(mcPart.fVt)
+ fVt(mcPart.fVt),
+ fGeneratorIndex(-1)
{
// Copy constructor
fDaughter[0] = mcPart.fDaughter[0];
fVy = mcPart.fVy;
fVz = mcPart.fVz;
fVt = mcPart.fVt;
+ fGeneratorIndex = mcPart.fGeneratorIndex;
fDaughter[0] = mcPart.fDaughter[0];
fDaughter[1] = mcPart.fDaughter[1];
}
virtual Int_t GetNDaughters () const { return fDaughter[1]>0 ? fDaughter[1]-fDaughter[0]+1 : (fDaughter[0]>0 ? 1:0 ) ;}
virtual void SetMother(Int_t im){fMother = im;}
virtual Int_t GetMother() const {return fMother;}
+
+ virtual Int_t GetFirstDaughter() const {return fDaughter[0];}
+ virtual Int_t GetLastDaughter() const {return fDaughter[1];}
+
virtual void Print(const Option_t *opt = "") const;
virtual Int_t GetPdgCode() const { return fPdgCode;}
virtual Int_t PdgCode() const { return GetPdgCode();}
-
+ virtual void SetGeneratorIndex(Short_t i) {fGeneratorIndex = i;}
+ virtual Short_t GetGeneratorIndex() const {return fGeneratorIndex;}
enum { kPrimary = 1<<0, kPhysicalPrim = 1<<1, kSecondaryFromWeakDecay = 1<<2, kSecondaryFromMaterial = 1 <<3}; // use only the first 8bits!
void SetFlag(UInt_t flag){fFlag = flag;} // carefull flag encodes three different types of information
UInt_t GetFlag() const {return fFlag;}
Double32_t fVy; // [0.,0.,12] y of production vertex
Double32_t fVz; // [0.,0.,12] z of production vertex
Double32_t fVt; // [0.,0.,12] t of production vertex
-
+ Short_t fGeneratorIndex; //! Index of generator in cocktail
// Copy the uniquID to another data member? unique ID is correctly handled
// via TOBject Copy construct but not by AliVParticle ctor (no passing of
// TParticles
};
*/
- ClassDef(AliAODMCParticle,7) // AliVParticle realisation for AODMCParticles
+ ClassDef(AliAODMCParticle,8) // AliVParticle realisation for AODMCParticles
};
// Class created from AliMultiplicity
//-------------------------------------------------------------------------
+#include <TString.h>
#include "AliAODTracklets.h"
ClassImp(AliAODTracklets)
-AliAODTracklets::AliAODTracklets() : TNamed(), fNTracks(0), fTheta(0), fPhi(0), fDeltaPhi(0), fLabels(0), fLabelsL2(0)
+AliAODTracklets::AliAODTracklets() : AliVMultiplicity(), fNTracks(0), fTheta(0), fPhi(0), fDeltaPhi(0), fLabels(0), fLabelsL2(0)
{
// default constructor
}
-AliAODTracklets::AliAODTracklets(const char* name, const char* title) : TNamed(name, title), fNTracks(0), fTheta(0), fPhi(0), fDeltaPhi(0), fLabels(0), fLabelsL2(0)
+AliAODTracklets::AliAODTracklets(const char* name, const char* title) : AliVMultiplicity(name, title), fNTracks(0), fTheta(0), fPhi(0), fDeltaPhi(0), fLabels(0), fLabelsL2(0)
{
- // TNamed constructor
+ // Named constructor
}
AliAODTracklets::AliAODTracklets(const AliAODTracklets& tracklet) :
- TNamed(tracklet),
+ AliVMultiplicity(tracklet),
fNTracks(tracklet.fNTracks),
fTheta(0),
fPhi(0),
{
// Assignment operator
if(&tracklet == this) return *this;
- TNamed::operator=(tracklet);
+ AliVMultiplicity::operator=(tracklet);
if(fNTracks!=tracklet.fNTracks){
fNTracks = tracklet.fNTracks;
CreateContainer(fNTracks);
void AliAODTracklets::DeleteContainer()
{
// deletes allocated memory
-
if (fTheta)
{
delete[] fTheta;
return kTRUE;
}
+//______________________________________________________________________
+void AliAODTracklets::Print(Option_t *opt) const
+{
+ // print
+ printf("N.tracklets: %4d | ScaleDThtSin2T:%s\n",fNTracks,GetScaleDThetaBySin2T() ? "ON":"OFF");
+ TString opts = opt; opts.ToLower();
+ //
+ if (opts.Contains("t")) {
+ for (int i=0;i<fNTracks;i++) {
+ printf("T#%3d| Eta:%+5.2f Th:%+6.3f Phi:%+6.3f DPhi:%+6.3f L1:%5d L2:%5d\n",
+ i,GetEta(i),fTheta[i],fPhi[i],fDeltaPhi[i],fLabels[i],fLabelsL2[i]);
+ }
+ }
+ //
+}
+
+//________________________________________________________________
+void AliAODTracklets::SetLabel(Int_t i, Int_t layer,Int_t label)
+{
+ // set labels
+ if (i>=0 && i<fNTracks)
+ {
+ if(layer == 0) fLabels[i] = label;
+ else fLabelsL2[i] = label;
+ }
+}
+
+//________________________________________________________________
+Int_t AliAODTracklets::GetLabel(Int_t i, Int_t layer) const
+{
+ // access labels
+ if (i>=0 && i<fNTracks)
+ {
+ return (layer == 0) ? fLabels[i] : fLabelsL2[i];
+ }
+ else
+ Error("GetLabel","Invalid track number %d",i); return -9999;
+}
+
+//________________________________________________________________
+Double_t AliAODTracklets::GetTheta(Int_t i) const
+{
+ // access theta's
+ if (i>=0 && i<fNTracks)
+ {
+ return fTheta[i];
+ }
+ else
+ Error("GetTheta","Invalid track number %d",i); return -9999.;
+}
+
+//________________________________________________________________
+Double_t AliAODTracklets::GetPhi(Int_t i) const
+{
+ // access phi's
+ if (i>=0 && i<fNTracks)
+ {
+ return fPhi[i];
+ }
+ else
+ Error("GetPhi","Invalid track number %d",i); return -9999.;
+}
+
+//________________________________________________________________
+Double_t AliAODTracklets::GetDeltaPhi(Int_t i) const
+{
+ // access delta phi's
+ if (i>=0 && i<fNTracks)
+ {
+ return fDeltaPhi[i];
+ }
+ else
+ Error("GetDeltaPhi","Invalid track number %d",i); return -9999.;
+}
#ifndef ALIAODTRACKLETS_H
#define ALIAODTRACKLETS_H
-#include <TNamed.h>
+#include "AliVMultiplicity.h"
-class AliAODTracklets : public TNamed
+class AliAODTracklets : public AliVMultiplicity
{
public:
AliAODTracklets();
void CreateContainer(Int_t nTracks);
void DeleteContainer();
+ virtual void Clear(Option_t* ) {AliVMultiplicity::Clear(); DeleteContainer();}
Bool_t SetTracklet(Int_t pos, Double32_t theta, Double32_t phi, Double32_t deltaPhi, Int_t labelL1, Int_t labelL2);
- Int_t GetNumberOfTracklets() const { return fNTracks; }
- inline Double32_t GetTheta(Int_t i) const;
- inline Double32_t GetPhi(Int_t i) const;
- inline Double32_t GetDeltaPhi(Int_t i) const;
- inline Int_t GetLabel(Int_t i, Int_t layer) const;
- inline void SetLabel(Int_t i, Int_t layer,Int_t label);
+
+ virtual Int_t GetNumberOfTracklets() const { return fNTracks; }
+ virtual Double_t GetTheta(Int_t i) const;
+ virtual Double_t GetPhi(Int_t i) const;
+ virtual Double_t GetDeltaPhi(Int_t i) const;
+ virtual Int_t GetLabel(Int_t i, Int_t layer) const;
+ virtual void SetLabel(Int_t i, Int_t layer,Int_t label);
+ //
+ virtual Double_t* GetTheta() const {return (Double_t*)fTheta;}
+ virtual Double_t* GetPhi() const {return (Double_t*)fPhi;}
+ virtual Double_t* GetDeltPhi() const {return (Double_t*)fDeltaPhi;}
+ virtual Int_t* GetLabels() const {return (Int_t*)fLabels;}
+ virtual Int_t* GetLabels2() const {return (Int_t*)fLabelsL2;}
+ virtual void Print(Option_t *opt="") const;
protected:
Int_t fNTracks; // Number of tracklets
Int_t *fLabelsL2; //[fNTracks] array with labels of cluster in L2 used for the tracklet
- ClassDef(AliAODTracklets, 3);
+ ClassDef(AliAODTracklets, 4);
};
-Double32_t AliAODTracklets::GetTheta(Int_t i) const
-{
- if (i>=0 && i<fNTracks)
- {
- return fTheta[i];
- }
- else
- Error("GetTheta","Invalid track number %d",i); return -9999.;
-}
-
-Double32_t AliAODTracklets::GetPhi(Int_t i) const
-{
- if (i>=0 && i<fNTracks)
- {
- return fPhi[i];
- }
- else
- Error("GetPhi","Invalid track number %d",i); return -9999.;
-}
-
-Double32_t AliAODTracklets::GetDeltaPhi(Int_t i) const
-{
- if (i>=0 && i<fNTracks)
- {
- return fDeltaPhi[i];
- }
- else
- Error("GetDeltaPhi","Invalid track number %d",i); return -9999.;
-}
-
-Int_t AliAODTracklets::GetLabel(Int_t i, Int_t layer) const
-{
- if (i>=0 && i<fNTracks)
- {
- return (layer == 0) ? fLabels[i] : fLabelsL2[i];
- }
- else
- Error("GetLabel","Invalid track number %d",i); return -9999;
-}
-
-
-void AliAODTracklets::SetLabel(Int_t i, Int_t layer,Int_t label)
-{
- if (i>=0 && i<fNTracks)
- {
- if(layer == 0) fLabels[i] = label;
- else fLabelsL2[i] = label;
- }
-}
-
#endif
// build filename from entry's id
TString filename;
if (!IdToFilename(id, filename)) {
- AliError("Bad ID encountered! Subnormal error!");
+ AliError("Bad ID encountered, cannot make a file name out of it!");
return kFALSE;
}
}
// open file
- TFile *file=0;
+ TFile *file = 0;
+ TFile *reopenedFile = 0;
AliDebug(2, Form("fNretry = %d, fInitRetrySeconds = %d",fNretry,fInitRetrySeconds));
TString targetSE("");
Bool_t result = kFALSE;
Bool_t reOpenResult = kFALSE;
Int_t reOpenAttempts=0;
- while( !reOpenResult && reOpenAttempts<2){ //loop to check the file after closing it, to catch the unlikely but possible case when the file
+ while( !reOpenResult && reOpenAttempts<2 ) { //loop to check the file after closing it, to catch the unlikely but possible case when the file
// is cleaned up by alien just before closing as a consequence of a network disconnection while writing
- while( !file && remainingSEs>0){
+ while( !file && remainingSEs>0 ) {
if(nSEs!=0){
TObjString *target = (TObjString*) arraySEs->At(nSEs-remainingSEs);
targetSE=target->String();
if ( !(targetSE.BeginsWith("ALICE::") && targetSE.CountChar(':')==4) ) {
- AliError(Form("\"%s\" is an invalid storage element identifier.",targetSE.Data()));
+ AliError( Form("\"%s\" is an invalid storage element identifier.",targetSE.Data()) );
continue;
}
- if(fullFilename.Contains('?')) fullFilename.Remove(fullFilename.Last('?'));
+ if ( fullFilename.Contains('?')) fullFilename.Remove(fullFilename.Last('?') );
fullFilename += Form("?se=%s",targetSE.Data());
}
Int_t remainingAttempts=fNretry;
remainingAttempts--;
file = TFile::Open(fullFilename,"CREATE");
if(!file || !file->IsWritable()){
- if(file) file->Close(); delete file; file=0; // file is not writable
+ if(file) { // file is not writable
+ file->Close(); delete file; file=0;
+ }
TString message(TString::Format("Attempt %d failed.",fNretry-remainingAttempts));
if(remainingAttempts>0) {
message += " Sleeping for "; message += nsleep; message += " seconds";
// write object (key name: "AliCDBEntry")
result = (file->WriteTObject(entry, "AliCDBEntry") != 0);
- if (!result) AliError(Form("Can't write entry to file <%s>!", filename.Data()));
file->Close();
-
- if(result)
- {
+ if (!result) {
+ AliError(Form("Can't write entry to file <%s>!", filename.Data()));
+ } else {
AliDebug(2, Form("Reopening file %s for checking its correctness",fullFilename.Data()));
- TFile* ffile = TFile::Open(fullFilename.Data(),"READ");
- if(!ffile){
+ reopenedFile = TFile::Open(fullFilename.Data(),"READ");
+ if(!reopenedFile){
reOpenResult = kFALSE;
AliInfo(Form("The file %s was closed successfully but cannot be reopened. Trying now to regenerate it (regeneration attempt number %d)",
fullFilename.Data(),++reOpenAttempts));
remainingSEs++;
}else{
reOpenResult = kTRUE;
- ffile->Close();
+ if ( ! AliCDBManager::Instance()->IsOCDBUploadMode() ) {
+ reopenedFile->Close();
+ delete reopenedFile; reopenedFile=0;
+ }
}
- delete ffile; ffile=0;
}
}
TagFileMetaData(filename, entry->GetMetaData());
}else{
- AliError("The file could not be opend or the object could not be written");
+ AliError("The file could not be opened or the object could not be written.");
if(!gGrid->Rm(filename.Data()))
AliError("Can't delete file!");
return kFALSE;
}
arraySEs->Delete(); arraySEs=0;
+ if ( AliCDBManager::Instance()->IsOCDBUploadMode() ) { // if uploading to OCDBs, add to cvmfs too
+ if ( !filename.BeginsWith("/alice/data") && !filename.BeginsWith("/alice/simulation/2008/v4-15-Release") ) {
+ AliError ( Form ( "Cannot upload to CVMFS OCDBs a non official CDB object: \"%s\"!", filename.Data() ) );
+ } else {
+ if ( !PutInCvmfs( filename, reopenedFile) )
+ AliError( Form( "Could not upload AliEn file \"%s\" to CVMFS OCDB!", filename.Data() ) );
+ }
+ reopenedFile->Close();
+ delete reopenedFile; reopenedFile=0;
+ }
+
+ return kTRUE;
+}
+
+//_____________________________________________________________________________
+Bool_t AliCDBGrid::PutInCvmfs(TString &filename, TFile *cdbFile) const {
+ // Add the CDB object to cvmfs OCDB
+
+ TString cvmfsFilename(filename);
+ if (cvmfsFilename.EndsWith("/")) cvmfsFilename.Remove(cvmfsFilename.Length()-1,1);
+ TString basename = ( cvmfsFilename(cvmfsFilename.Last('/')+1, cvmfsFilename.Length()) ); // Run0_99999999_v2_s0.root
+ TString cvmfsDirname = cvmfsFilename.Remove ( cvmfsFilename.Last('/')+1, cvmfsFilename.Length() ); // /alice/data/2011/OCDB/GRP/GRP/Data
+
+ TRegexp re_RawFolder("^/alice/data/20[0-9]+/OCDB");
+ TRegexp re_MCFolder("^/alice/simulation/2008/v4-15-Release");
+ TString rawFolder = cvmfsDirname(re_RawFolder);
+ TString mcFolder = cvmfsDirname(re_MCFolder);
+ if ( !rawFolder.IsNull() ) {
+ cvmfsDirname.Replace(0, 6, "/cvmfs/alice-ocdb.cern.ch/calibration");
+ } else if ( !mcFolder.IsNull() ){
+ cvmfsDirname.Replace(0,36,"/cvmfs/alice-ocdb.cern.ch/calibration/MC");
+ } else {
+ AliError(Form("OCDB folder set for an invalid OCDB storage:\n %s", cvmfsDirname.Data()));
+ return kFALSE;
+ }
+ // now cvmfsDirname is "/cvmfs/alice-ocdb.cern.ch/calibration/data/2011/OCDB/GRP/GRP/Data"
+ AliDebug(3, Form("Publishing \"%s\" in \"%s\"", basename.Data(), cvmfsDirname.Data()));
+
+ // Tar the file with the right prefix path
+ cdbFile->Cp( basename.Data() );
+ TString tarFileName("cdbObjectToAdd.tar.gz");
+ // tarCommand should be e.g.: tar --transform 's,^,/cvmfs/alice-ocdb.cern.ch/calibration/data/2010/OCDB,S' -cvzf objecttoadd.tar.gz basename
+ Int_t result = gSystem->Exec ( Form( "tar --transform 's,^,%s,S' -cvzf %s %s", cvmfsDirname.Data(), tarFileName.Data(), basename.Data() ) );
+ if ( result != 0 ) {
+ AliError ( Form ( "Could not create the tarball for the object \"%s\"", filename.Data() ) );
+ return kFALSE;
+ }
+
+ // Copy the file to cvmfs
+ result = gSystem->Exec( Form( "ocdb-cvmfs %s", tarFileName.Data() ) );
+ if ( result != 0 ) {
+ AliError ( Form ( "Could not execute \"ocdb-cvmfs %s\"", filename.Data() ) );
+ return kFALSE;
+ }
+
+ // Remove the local file and the tar-file
+ gSystem->Exec( Form( "rm %s", basename.Data() ) );
+ gSystem->Exec( Form( "rm %s", tarFileName.Data() ) );
+
return kTRUE;
}
Bool_t PrepareId(AliCDBId& id);
AliCDBId* GetId(const TObjArray& validFileIds, const AliCDBId& query);
AliCDBEntry* GetEntryFromFile(TString& filename, AliCDBId* dataId);
+ Bool_t PutInCvmfs(TString &fullFilename, TFile *cdbFile) const;
// TODO use AliEnTag classes!
Bool_t AddTag(TString& foldername, const char* tagname);
// e-mail: Alberto.Colla@cern.ch
//-------------------------------------------------------------------------
-#include <stdlib.h>
#include <fstream>
#include "AliCDBManager.h"
#include "TMessage.h"
#include "TObject.h"
#include "TRegexp.h"
- // STD
-using namespace std;
-#include <iostream>
-#include <algorithm>
-#include <sstream>
-#include <stdexcept>
-#include <functional>
ClassImp(AliCDBParam)
}
//_____________________________________________________________________________
-void AliCDBManager::DumpToSnapshotFile(const char* snapshotFileName, Bool_t singleKeys){
+void AliCDBManager::DumpToSnapshotFile(const char* snapshotFileName, Bool_t singleKeys) const {
//
-// dump the entries map and the ids list to
-// the output file
+// If singleKeys is true, dump the entries map and the ids list to the snapshot file
+// (provided mostly for historical reasons, the file is then read with InitFromSnapshot),
+// otherwise write to file each AliCDBEntry separately (the is the preferred way, the file
+// is then read with SetSnapshotMode).
// open the file
TFile *f = TFile::Open(snapshotFileName,"RECREATE");
AliInfo(Form("Dumping entriesList with %d entries!\n", fIds->GetEntries()));
f->cd();
- f->WriteObject(&fEntryCache,"CDBentriesMap");
- f->WriteObject(fIds,"CDBidsList");
-
- if(!singleKeys){
+ if(singleKeys){
+ f->WriteObject(&fEntryCache,"CDBentriesMap");
+ f->WriteObject(fIds,"CDBidsList");
+ }else{
// We write the entries one by one named by their calibration path
- /*
- fEntryCache.Write("CDBentriesMap");
- fIds->Write("CDBidsList");
- */
TIter iter(fEntryCache.GetTable());
TPair* pair = 0;
while((pair = dynamic_cast<TPair*> (iter.Next()))){
}
f->Close();
delete f;
+}
+
+//_____________________________________________________________________________
+void AliCDBManager::DumpToLightSnapshotFile(const char* lightSnapshotFileName) const {
+// The light snapshot does not contain the CDB objects (AliCDBEntries) but
+// only the information identifying them, that is the map of storages and
+// the list of AliCDBIds, as in the UserInfo of AliESDs.root
+
+ // open the file
+ TFile *f = TFile::Open(lightSnapshotFileName,"RECREATE");
+ if (!f || f->IsZombie()){
+ AliError(Form("Cannot open file %s",lightSnapshotFileName));
+ return;
+ }
+
+ AliInfo(Form("Dumping map of storages with %d entries!\n", fStorageMap->GetEntries()));
+ AliInfo(Form("Dumping entriesList with %d entries!\n", fIds->GetEntries()));
+ f->WriteObject(fStorageMap,"cdbStoragesMap");
+ f->WriteObject(fIds,"CDBidsList");
- //exit(0);
+ f->Close();
+ delete f;
}
//_____________________________________________________________________________
fLock(kFALSE),
fSnapshotMode(kFALSE),
fSnapshotFile(0),
+ fOCDBUploadMode(kFALSE),
fRaw(kFALSE),
fCvmfsOcdb(""),
fStartRunLHCPeriod(-1),
return fDrainStorage->Put(entry);
}
+//____________________________________________________________________________
+Bool_t AliCDBManager::SetOCDBUploadMode() {
+// Set the framework in official upload mode. This tells the framework to upload
+// objects to cvmfs after they have been uploaded to AliEn OCDBs.
+// It return false if the executable to upload to cvmfs is not found.
+
+ TString cvmfsUploadExecutable("$HOME/bin/ocdb-cvmfs");
+ gSystem->ExpandPathName(cvmfsUploadExecutable);
+ if ( gSystem->AccessPathName(cvmfsUploadExecutable) )
+ return kFALSE;
+ fOCDBUploadMode = kTRUE;
+ return kTRUE;
+}
+
//____________________________________________________________________________
void AliCDBManager::SetDefaultStorage(const char* storageUri) {
// sets default storage from URI string
}
//_____________________________________________________________________________
-AliCDBEntry* AliCDBManager::Get(const AliCDBId& query, Bool_t forceCaching, Bool_t doCatch) {
+AliCDBEntry* AliCDBManager::Get(const AliCDBId& query, Bool_t forceCaching) {
// get an AliCDBEntry object from the database
// check if query's path and runRange are valid
// query is invalid also if version is not specified and subversion is!
- try {
-
-
if (!query.IsValid()) {
AliError(Form("Invalid query: %s", query.ToString().Data()));
return NULL;
if(entry && !fIds->Contains(&entry->GetId())){
fIds->Add(entry->GetId().Clone());
}
+
return entry;
- }catch(const exception &e){
- cerr << "OCDB retrieval failed!" << endl;
- cerr << "Detailes: " << e.what() << endl;
- if (!doCatch) {
- throw std::runtime_error(e.what());
- }
- return 0;
- }
- return 0;
}
//_____________________________________________________________________________
void SetDrain(const char* dbString);
void SetDrain(const AliCDBParam* param);
void SetDrain(AliCDBStorage *storage);
-
+ void UnsetDrain(){fDrainStorage = 0x0;}
Bool_t IsDrainSet() const {return fDrainStorage != 0;}
-
Bool_t Drain(AliCDBEntry* entry);
- void UnsetDrain(){fDrainStorage = 0x0;}
+ Bool_t SetOCDBUploadMode();
+ void UnsetOCDBUploadMode() { fOCDBUploadMode=kFALSE; }
+ Bool_t IsOCDBUploadMode() const { return fOCDBUploadMode; }
- AliCDBEntry* Get(const AliCDBId& query, Bool_t forceCaching=kFALSE, Bool_t doCatch=kFALSE);
+ AliCDBEntry* Get(const AliCDBId& query, Bool_t forceCaching=kFALSE);
AliCDBEntry* Get(const AliCDBPath& path, Int_t runNumber=-1,
Int_t version = -1, Int_t subVersion = -1);
AliCDBEntry* Get(const AliCDBPath& path, const AliCDBRunRange& runRange,
Bool_t InitFromSnapshot(const char* snapshotFileName, Bool_t overwrite=kTRUE);
Bool_t SetSnapshotMode(const char* snapshotFileName="OCDB.root");
void UnsetSnapshotMode() {fSnapshotMode=kFALSE;}
- void DumpToSnapshotFile(const char* snapshotFileName, Bool_t singleKeys);
+ void DumpToSnapshotFile(const char* snapshotFileName, Bool_t singleKeys) const;
+ void DumpToLightSnapshotFile(const char* lightSnapshotFileName) const;
Int_t GetStartRunLHCPeriod();
Int_t GetEndRunLHCPeriod();
Bool_t fSnapshotMode; //! flag saying if we are in snapshot mode
TFile *fSnapshotFile;
+ Bool_t fOCDBUploadMode; //! flag for uploads to Official CDBs (upload to cvmfs must follow upload to AliEn)
Bool_t fRaw; // flag to say whether we are in the raw case
TString fCvmfsOcdb; // set from $OCDB_PATH, points to a cvmfs AliRoot package
STEERBase/AliVTOFHit.cxx
STEERBase/AliVTOFMatch.cxx
STEERBase/AliVTOFcluster.cxx
+ STEERBase/AliVMultiplicity.cxx
)
string(REPLACE ".cxx" ".h" HDRS "${SRCS}")
#include "AliESDZDC.h"
#include "AliESDACORDE.h"
#include "AliESDAD.h"
+#include "AliMultiplicity.h"
// AliESDtrack has to be included so that the compiler
// knows its inheritance tree (= that it is a AliVParticle).
class AliESDFMD;
class AliESDkink;
class AliESDv0;
-class AliMultiplicity;
class AliRawDataErrorLog;
class AliESDRun;
class AliESDTrdTrigger;
void SetMultiplicity(const AliMultiplicity *mul);
- const AliMultiplicity *GetMultiplicity() const {return fSPDMult;}
+ AliMultiplicity *GetMultiplicity() const {return fSPDMult;}
void EstimateMultiplicity(Int_t &tracklets,Int_t &trITSTPC,Int_t &trITSSApure,
Double_t eta=1.,Bool_t useDCAFlag=kTRUE,Bool_t useV0Flag=kTRUE) const;
//______________________________________________________________________
AliMultiplicity::AliMultiplicity():
- TObject(),
+AliVMultiplicity("AliMultiplicity",""), // must be named like that to be searchable in ESDEvent
fNtracks(0),
fNsingle(0),
fNsingleSPD2(0),
//______________________________________________________________________
AliMultiplicity::AliMultiplicity(Int_t ntr, Float_t *th, Float_t *ph, Float_t *dth, Float_t *dph, Int_t *labels, Int_t* labelsL2, Int_t ns, Float_t *ts, Float_t *ps, Int_t *labelss, Short_t nfcL1, Short_t nfcL2, const TBits & fFastOr):
- TObject(),
+ AliVMultiplicity("AliMultiplicity",""),
fNtracks(ntr),
fNsingle(ns),
fNsingleSPD2(0),
//______________________________________________________________________
AliMultiplicity::AliMultiplicity(Int_t ntr, Int_t ns, Short_t nfcL1, Short_t nfcL2, const TBits & fFastOr) :
- TObject(),
+ AliVMultiplicity("AliMultiplicity",""),
fNtracks(ntr),
fNsingle(ns),
fNsingleSPD2(0),
//______________________________________________________________________
AliMultiplicity::AliMultiplicity(const AliMultiplicity& m):
- TObject(m),
+ AliVMultiplicity(m),
fNtracks(m.fNtracks),
fNsingle(m.fNsingle),
fNsingleSPD2(m.fNsingleSPD2),
AliMultiplicity &AliMultiplicity::operator=(const AliMultiplicity& m){
// assignment operator
if(this == &m)return *this;
- ((TObject *)this)->operator=(m);
+ ((AliVMultiplicity*)this)->operator=(m);
if(fTh)delete [] fTh;fTh = 0;
if(fPhi)delete [] fPhi;fPhi = 0;
void AliMultiplicity::Clear(Option_t*)
{
// reset all
- TObject::Clear();
+ AliVMultiplicity::Clear();
if(fTh)delete [] fTh;fTh = 0;
if(fPhi)delete [] fPhi;fPhi = 0;
if(fDeltTh)delete [] fDeltTh;fDeltTh = 0;
#ifndef ALIMULTIPLICITY_H
#define ALIMULTIPLICITY_H
-#include <TObject.h>
#include <TBits.h>
#include <TMath.h>
+#include "AliVMultiplicity.h"
class AliRefArray;
////////////////////////////////////////////////////////
//// to stored in the ESD //
////////////////////////////////////////////////////////
-class AliMultiplicity : public TObject {
+class AliMultiplicity : public AliVMultiplicity {
public:
//
- enum {kMultTrackRefs =BIT(14), // in new format (old is default for bwd.comp.) multiple cluster->track references are allowed
- kScaleDThtbySin2=BIT(15), // scale Dtheta by 1/sin^2(theta). Default is DON'T scale, for bwd.comp.
- kSPD2Sng =BIT(16) // are SPD2 singles stored?
- };
AliMultiplicity(); // default constructor
- // standard constructor
AliMultiplicity(Int_t ntr,Float_t *th, Float_t *ph, Float_t *dth, Float_t *dph, Int_t *labels,
Int_t* labelsL2, Int_t ns, Float_t *ts, Float_t *ps, Int_t *labelss, Short_t nfcL1, Short_t nfcL2, const TBits & fFastOrFiredChips);
AliMultiplicity(Int_t ntr, Int_t ns, Short_t nfcL1, Short_t nfcL2, const TBits & fFastOr);
void SetMultTrackRefs(Bool_t v) {SetBit(kMultTrackRefs,v);}
Bool_t GetScaleDThetaBySin2T() const {return TestBit(kScaleDThtbySin2);}
void SetScaleDThetaBySin2T(Bool_t v) {SetBit(kScaleDThtbySin2,v);}
-
//
- Int_t GetNumberOfTracklets() const {return fNtracks;}
- Double_t GetTheta(Int_t i) const {
+ // methods supported on AliVMultiplicity level >>>
+ //
+ virtual Int_t GetNumberOfTracklets() const {return fNtracks;}
+ virtual Double_t GetTheta(Int_t i) const {
if(i>=0 && i<fNtracks) return fTh[i];
Error("GetTheta","Invalid track number %d",i); return -9999.;
}
- Double_t GetEta(Int_t i) const {
- if(i>=0 && i<fNtracks) return -TMath::Log(TMath::Tan(fTh[i]/2.));
- Error("GetEta","Invalid track number %d",i); return -9999.;
- }
- Double_t GetPhi(Int_t i) const {
+ virtual Double_t GetPhi(Int_t i) const {
if(i>=0 && i<fNtracks) return fPhi[i];
Error("GetPhi","Invalid track number %d",i); return -9999.;
}
- Double_t GetDeltaTheta(Int_t i) const {
- if(fDeltTh && i>=0 && i<fNtracks) return fDeltTh[i];
- Error("GetDeltaTheta","DeltaTheta not available in data or Invalid track number %d(max %d)",i, fNtracks); return -9999.;
- }
- Double_t GetDeltaPhi(Int_t i) const {
+ virtual Double_t GetDeltaPhi(Int_t i) const {
if(i>=0 && i<fNtracks) return fDeltPhi[i];
Error("GetDeltaPhi","Invalid track number %d",i); return -9999.;
}
+ virtual Int_t GetLabel(Int_t i, Int_t layer) const;
+ virtual void SetLabel(Int_t i, Int_t layer, Int_t label);
+ //
+ // array getters
+ virtual Double_t* GetTheta() const {return (Double_t*)fTh;}
+ virtual Double_t* GetPhi() const {return (Double_t*)fPhi;}
+ virtual Double_t* GetDeltPhi() const {return (Double_t*)fDeltPhi;}
+ virtual Int_t* GetLabels() const {return (Int_t*)fLabels;}
+ virtual Int_t* GetLabels2() const {return (Int_t*)fLabelsL2;}
+ //
+ virtual void Print(Option_t *opt="") const;
+ //
+ // methods supported on AliVMultiplicity level <<<
+ //
+ Double_t GetDeltaTheta(Int_t i) const {
+ if(fDeltTh && i>=0 && i<fNtracks) return fDeltTh[i];
+ Error("GetDeltaTheta","DeltaTheta not available in data or Invalid track number %d(max %d)",i, fNtracks); return -9999.;
+ }
Double_t CalcDist(Int_t it) const;
Float_t GetThetaAll(int icl, int lr) const;
Float_t GetPhiAll(int icl, int lr) const;
Int_t GetLabelAll(int icl, int lr) const;
- Int_t GetLabel(Int_t i, Int_t layer) const;
- void SetLabel(Int_t i, Int_t layer, Int_t label);
Int_t GetLabelSingle(Int_t i) const;
Int_t GetLabelSingleLr(Int_t i, Int_t layer) const;
void SetLabelSingle(Int_t i, Int_t label);
Bool_t FreeClustersTracklet(Int_t i, Int_t mode) const;
Bool_t FreeSingleCluster(Int_t i, Int_t mode) const;
-
-// methods to access single cluster information
+ // methods to access single cluster information
Int_t SetNumberOfSingleClustersSPD2(Int_t n) {return fNsingleSPD2 = n;}
Int_t GetNumberOfSingleClusters() const {return fNsingle;}
Int_t GetNumberOfSingleClustersLr(Int_t lr) const;
if(i>=0 && i<fNsingle) return fThsingle[i];
Error("GetThetaSingle","Invalid cluster number %d",i); return -9999.;
}
-
+
Double_t GetPhiSingle(Int_t i) const {
if(i>=0 && i<fNsingle) return fPhisingle[i];
Error("GetPhisingle","Invalid cluster number %d",i); return -9999.;
}
-
+
Double_t GetPhiSingleLr(Int_t i, Int_t lr) const {
if (lr==1) {
if (!AreSPD2SinglesStored()) {Error("GetPhiSingle","Invalid cluster number %d for lr %d",i,lr); return -9999.;}
Int_t GetSingleClusterTrackIDs(Int_t i, Int_t mode, UInt_t* refs, UInt_t maxRef) const;
// array getters
- Double_t* GetTheta() const {return (Double_t*)fTh;}
- Double_t* GetPhi() const {return (Double_t*)fPhi;}
Double_t* GetDeltTheta() const {return (Double_t*)fDeltTh;}
- Double_t* GetDeltPhi() const {return (Double_t*)fDeltPhi;}
Double_t* GetThetaSingle() const {return (Double_t*)fThsingle;}
Double_t* GetPhiSingle() const {return (Double_t*)fPhisingle;}
- Int_t* GetLabels() const {return (Int_t*)fLabels;}
- Int_t* GetLabels2() const {return (Int_t*)fLabelsL2;}
Int_t* GetLabelsSingle() const {return (Int_t*)fLabelssingle;}
void AttachTracklet2TrackRefs(AliRefArray* l1t1,AliRefArray* l1t2,AliRefArray* l2t1,AliRefArray* l2t2) {
Float_t GetNStdDev() const {return fNStdDev;}
//
- virtual void Print(Option_t *opt="") const;
-
protected:
void Duplicate(const AliMultiplicity &m); // used by copy ctr.
TBits fFastOrFiredChips; // Map of FastOr fired chips
TBits fClusterFiredChips; // Map of fired chips (= at least one cluster)
- ClassDef(AliMultiplicity,19);
+ ClassDef(AliMultiplicity,20);
};
inline Int_t AliMultiplicity::GetLabel(Int_t i, Int_t layer) const
fClassMaskNext50 = ((ULong64_t)data[16] & 0xf) << 46; // 100..97
- fClassMaskNext50 |= (ULong64_t)data[20] << 38; // 96..89
- fClassMaskNext50 |= ((ULong64_t)data[21] & 0xF) << 34; // 88..85
+ fClassMaskNext50 |= ((ULong64_t)data[21] & 0xF) << 42; // 96..93
+ fClassMaskNext50 |= (ULong64_t)data[20] << 34; // 92..85
- fClassMaskNext50 |= (ULong64_t)data[24] << 26; //84..77
- fClassMaskNext50 |= ((ULong64_t)data[25] & 0xF) << 22; //76..73
+ fClassMaskNext50 |= ((ULong64_t)data[25] & 0xF) << 30; //84..81
+ fClassMaskNext50 |= (ULong64_t)data[24] << 22; //80..73
- fClassMaskNext50 |= (ULong64_t)data[28] << 14; //72..65
- fClassMaskNext50 |= ((ULong64_t)data[29] & 0xF) << 10; //64..61
+ fClassMaskNext50 |= ((ULong64_t)data[29] & 0xF) << 18; //72..69
+ fClassMaskNext50 |= (ULong64_t)data[28] << 10; //68..61
- fClassMaskNext50 |= (ULong64_t)data[32] << 2; //60..53
- fClassMaskNext50 |= ((ULong64_t)data[33] & 0xc) >> 2; //52..51
- fClassMask = ((ULong64_t)data[33] & 0x3) << 48; //50..49
+ fClassMaskNext50 |= ((ULong64_t)data[33] & 0xf ) << 6; //60..57
+ fClassMaskNext50 |= ((ULong64_t)data[32] & 0xfc )>> 2; //56..51
+ fClassMask = ((ULong64_t)data[32] & 0x3 ) << 48; //50..49
- fClassMask |= (ULong64_t)data[36] << 40; //48..41
- fClassMask |= ((ULong64_t)data[37] & 0xf) << 36; //40..37
+ fClassMask |= ((ULong64_t)data[37] & 0xf) << 44; //48..45
+ fClassMask |= (ULong64_t)data[36] << 36; //44..37
- fClassMask |= (ULong64_t)data[40] << 28; //36..29
- fClassMask |= ((ULong64_t)data[41] & 0xf) << 24; //28..25
+ fClassMask |= ((ULong64_t)data[41] & 0xf) << 32; //36..33
+ fClassMask |= (ULong64_t)data[40] << 24; //32..25
- fClassMask |= (ULong64_t)data[44] << 16; //24..17
- fClassMask |= ((ULong64_t)data[45] & 0xf) << 12; //16..13
+ fClassMask |= ((ULong64_t)data[45] & 0xf) << 20; //24..21
+ fClassMask |= (ULong64_t)data[44] << 12; //20..13
- fClassMask |= (ULong64_t)data[48] << 4; //12..5
- fClassMask |= ((ULong64_t)data[49] & 0xf) << 0; //4..1
+ fClassMask |= ((ULong64_t)data[49] & 0xf) << 8; //12..9
+ fClassMask |= (ULong64_t)data[48] << 0; //8..1
if (fRawReader->GetDataSize() == 52) {
AliDebug(1,"No trigger input and interaction records found");
#include "AliLHCData.h"
#include "ARVersion.h"
#include <RVersion.h>
+#include <stdlib.h>
#include <unistd.h>
#include <sys/resource.h>
ClassImp(AliReconstruction)
if(toCDBSnapshot)
{
AliCDBManager::Instance()->DumpToSnapshotFile(snapshotFileOut.Data(),kFALSE);
- AliCDBManager::Instance()->UnloadFromCache("*/Align/*");
- if(cdbCache->Contains("GRP/Calib/CosmicTriggers"))
- AliCDBManager::Instance()->UnloadFromCache("GRP/Calib/CosmicTriggers");
+ exit(0);
}
if (fInput && gProof) {
fYJet(-1.),
fInMediumLength(0.),
fImpactParameter(-1),
- fPtHard(0.)
+ fPtHard(0.),
+ fXsection(0)
{
// Default Constructor
for (Int_t i = 0; i < 4; i++) fZquench[i] = 0.;
fYJet(-1.),
fInMediumLength(0.),
fImpactParameter(-1),
- fPtHard(0.)
+ fPtHard(0.),
+ fXsection(0)
{
// Constructor
for (Int_t i = 0; i < 4; i++) fZquench[i] = 0.;
Float_t fUQJets[4][10]; // Unquenched trigger jets
Double_t fZquench[4]; // Quenching fraction
Float_t fPtHard; // pT hard
- Float_t fXsection; //Cross-section
+ Float_t fXsection; // Cross-section
ClassDef(AliGenPythiaEventHeader,7) // Event header for Pythia event
};
fMCParticles(0),
fMCParticleMap(0),
fHeader(new AliHeader()),
+ fAODMCHeader(0),
fTRBuffer(0),
fTrackReferences(new TClonesArray("AliTrackReference", 1000)),
fTreeTR(0),
fMCParticles(mcEvnt.fMCParticles),
fMCParticleMap(mcEvnt.fMCParticleMap),
fHeader(mcEvnt.fHeader),
+ fAODMCHeader(mcEvnt.fAODMCHeader),
fTRBuffer(mcEvnt.fTRBuffer),
fTrackReferences(mcEvnt.fTrackReferences),
fTreeTR(mcEvnt.fTreeTR),
//
if (fExternal) {
+
+
return ((AliVParticle*) (fMCParticles->At(i)));
+
}
//
} else {
mcParticle = dynamic_cast<AliMCParticle*>(fMCParticleMap->At(i));
}
+
+ //Printf("mcParticleGetMother %d",mcParticle->GetMother());
return mcParticle;
}
}
+ Int_t AliMCEvent::GetCocktailList(TList*& lh){
+ //gives the CocktailHeaders when reading ESDs/AODs (corresponding to fExteral=kFALSE/kTRUE)
+ //the AODMC header (and the aodmc array) is passed as an instance to MCEvent by the AliAODInputHandler
+ if(fExternal==kFALSE) {
+ AliGenCocktailEventHeader* coHeader =dynamic_cast<AliGenCocktailEventHeader*> (GenEventHeader());
+ if(!coHeader) return 0;
+ lh=coHeader->GetHeaders();}
+ if(fExternal==kTRUE){
+ if(!fAODMCHeader) return 0;
+ lh=fAODMCHeader->GetCocktailHeaders();}
+ return 1; }
- TString AliMCEvent::GetGenerator(Int_t index){
- Int_t nsumpart=0;
-
- AliGenCocktailEventHeader* coHeader =
- dynamic_cast<AliGenCocktailEventHeader*> (GenEventHeader());
- if(!coHeader) {TString noheader="nococktailheader";
- return noheader;}
- TList *lh=coHeader->GetHeaders();
- Int_t nh=lh->GetEntries();
- for(Int_t i=0;i<nh;i++){
- AliGenEventHeader* gh=(AliGenEventHeader*)lh->At(i);
- TString genname=gh->GetName();
- Int_t npart=gh->NProduced();
- if(index>=nsumpart && index<(nsumpart+npart)) return genname;
- nsumpart+=npart;
- }
+
+ TString AliMCEvent::GetGenerator(Int_t index){
+ Int_t nsumpart=0;
+
+ TList* lh;
+ Int_t nt= GetCocktailList(lh);
+ if(nt==0){ TString noheader="nococktailheader";
+ return noheader;}
+ Int_t nh=lh->GetEntries();
+ for(Int_t i=0;i<nh;i++){
+ AliGenEventHeader* gh=(AliGenEventHeader*)lh->At(i);
+ TString genname=gh->GetName();
+ Int_t npart=gh->NProduced();
+ if(index>=nsumpart && index<(nsumpart+npart)) return genname;
+ nsumpart+=npart;}
TString empty="";
- return empty;
-
+ return empty;}
+
+void AliMCEvent::AssignGeneratorIndex() {
+ //
+ // Assign the generator index to each particle
+ //
+ TList* list;
+ Int_t nt = GetCocktailList(list);
+ if (nt == 0) {
+ } else {
+ Int_t nh = list->GetEntries();
+ Int_t nsumpart = 0;
+ for(Int_t i = 0; i < nh; i++){
+ AliGenEventHeader* gh = (AliGenEventHeader*)list->At(i);
+ Int_t npart = gh->NProduced();
+ for (Int_t j = nsumpart; j < npart; j++) {
+ AliVParticle* part = GetTrack(j);
+ part->SetGeneratorIndex(i);
+ Int_t dmin = part->GetFirstDaughter();
+ Int_t dmax = part->GetLastDaughter();
+ for (Int_t k = dmin; k <= dmax; k++) {
+ AliVParticle* dpart = GetTrack(k);
+ dpart->SetGeneratorIndex(i);
+ }
+ }
+ nsumpart += npart;
+ }
+ }
}
-Bool_t AliMCEvent::GetCocktailGenerator(Int_t index,TString &nameGen){
+
+ Bool_t AliMCEvent::GetCocktailGenerator(Int_t index,TString &nameGen){
//method that gives the generator for a given particle with label index (or that of the corresponding primary)
- nameGen=GetGenerator(index);
- if(nameGen.Contains("nococktailheader") )return 0;
-
- while(nameGen.IsWhitespace()){
-
- AliMCParticle* mcpart = (AliMCParticle*) (GetTrack(index));
+
+ nameGen=GetGenerator(index);
+ if(nameGen.Contains("nococktailheader") )return 0;
+ Int_t lab=index;
+
+ while(nameGen.IsWhitespace()){
+
+
+ AliVParticle* mcpart = (AliVParticle*) (GetTrack(lab));
+
+ if(!mcpart){
+ printf("AliMCEvent-BREAK: No valid AliMCParticle at label %i\n",lab);
+ break;}
+ Int_t mother=0;
+ mother = mcpart->GetMother();
- if(!mcpart){
- printf("AliMCEvent-BREAK: No valid AliMCParticle at label %i\n",index);
- break;
- }
- Int_t mother = mcpart->GetMother();
if(mother<0){
printf("AliMCEvent - BREAK: Reached primary particle without valid mother\n");
break;
}
- index=mother;
+ AliVParticle* mcmom = (AliVParticle*) (GetTrack(mother));
+ if(!mcmom){
+ printf("AliMCEvent-BREAK: No valid AliMCParticle mother at label %i\n",mother);
+ break;
+ }
+ lab=mother;
+
nameGen=GetGenerator(mother);
}
return 1;
-}
+ }
+
virtual Int_t BgLabelToIndex(Int_t label);
static Int_t BgLabelOffset() {return fgkBgLabelOffset;}
virtual Bool_t IsFromBGEvent(Int_t index);
- TString GetGenerator(Int_t index);
- Bool_t GetCocktailGenerator(Int_t index,TString &nameGen);
+ Int_t GetCocktailList(TList*& lista);
+ TString GetGenerator(Int_t index);
+ Bool_t GetCocktailGenerator(Int_t index,TString &nameGen);
virtual Bool_t IsSecondaryFromWeakDecay(Int_t index);
virtual Bool_t IsSecondaryFromMaterial(Int_t index);
// External particle array
virtual void SetParticleArray(TClonesArray* mcParticles)
{fMCParticles = mcParticles; fNparticles = fMCParticles->GetEntries(); fExternal = kTRUE;}
-
+ //External Header
+ virtual void SetExternalHeader(AliVHeader* aodmcHeader)
+ {fAODMCHeader=aodmcHeader;}
virtual AliGenEventHeader *FindHeader(Int_t ipart);
+ virtual void AssignGeneratorIndex();
//Following needed only for mixed event
virtual Int_t EventIndex(Int_t) const {return 0;}
virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
virtual AliVVZERO *GetVZEROData() const {return 0;}
virtual AliVZDC *GetZDCData() const {return 0;}
-
+
private:
virtual void ReorderAndExpandTreeTR();
TClonesArray *fMCParticles; // Pointer to list of particles
TObjArray *fMCParticleMap; // Map of MC Particles
AliHeader *fHeader; // Current pointer to header
+ AliVHeader *fAODMCHeader; //Current pointer to AODMC header
TClonesArray *fTRBuffer; // Track reference buffer
TClonesArray *fTrackReferences; // Array of track references
TTree *fTreeTR; // Pointer to Track Reference Tree
static Int_t fgkBgLabelOffset; // Standard branch name
mutable AliVVertex* fVertex; // MC Vertex
Int_t fNBG; //! Background particles in current event
-
ClassDef(AliMCEvent, 2) // AliVEvent realisation for MC data
};
fLabel(-1),
fMother(-1),
fFirstDaughter(-1),
- fLastDaughter(-1)
+ fLastDaughter(-1),
+ fGeneratorIndex(-1)
{
// Constructor
}
fLabel(index),
fMother(-1),
fFirstDaughter(-1),
- fLastDaughter(-1)
+ fLastDaughter(-1),
+ fGeneratorIndex(-1)
{
// Constructor
if (rarray != 0) {
fLabel(-1),
fMother(-1),
fFirstDaughter(-1),
- fLastDaughter(-1)
+ fLastDaughter(-1),
+ fGeneratorIndex(-1)
{
// Copy constructor
}
// "Trackable" criteria
Float_t GetTPCTrackLength(Float_t bz, Float_t ptmin, Int_t &counter, Float_t deadWidth, Float_t zMax=230. );
// Navigation
- Int_t GetMother() const {return fMother;}
+ virtual Int_t GetMother() const {return fMother;}
Int_t GetFirstDaughter() const {return fFirstDaughter;}
Int_t GetLastDaughter() const {return fLastDaughter;}
void SetMother(Int_t idx) {fMother = idx;}
void SetFirstDaughter(Int_t idx) {fFirstDaughter = idx;}
void SetLastDaughter(Int_t idx) {fLastDaughter = idx;}
void SetLabel(Int_t label) {fLabel = label;}
-
+ virtual void SetGeneratorIndex(Short_t i) {fGeneratorIndex = i;}
+ virtual Short_t GetGeneratorIndex() const {return fGeneratorIndex;}
+
private:
TParticle *fParticle; // The wrapped TParticle
TObjArray *fTrackReferences; // Array to track references
Int_t fMother; // Mother particles
Int_t fFirstDaughter; // First daughter
Int_t fLastDaughter; // LastDaughter
-
+ Short_t fGeneratorIndex; // !Generator index in cocktail
ClassDef(AliMCParticle,0) // AliVParticle realisation for MCParticles
};
fBeamTypeNum=kPBPB;
if (reg12a17.MatchB(fCurrentFile)) fMCperiodTPC="LHC12A17";
}
- if (fRun>=170719 && fRun<=177311) { fLHCperiod="LHC12A"; fBeamType="PP"; fBeamTypeNum=kPP;/*fMCperiodTPC="";*/ }
+ if (fRun>=170719 && fRun<=177311) {
+ fLHCperiod="LHC12A";
+ fBeamType="PP";
+ fBeamTypeNum=kPP;
+ fMCperiodTPC="LHC10F6A";
+ if (fCurrentAliRootRev >= 62714)
+ fMCperiodTPC="LHC13B2_FIXn1";
+ }
// for the moment use LHC12b parameters up to LHC12d
- if (fRun>=177312 /*&& fRun<=179356*/) { fLHCperiod="LHC12B"; fBeamType="PP";fBeamTypeNum=kPP; /*fMCperiodTPC="";*/ }
+ if (fRun>=177312 /*&& fRun<=179356*/) {
+ fLHCperiod="LHC12B";
+ fBeamType="PP";
+ fBeamTypeNum=kPP;
+ fMCperiodTPC="LHC10F6A";
+ if (fCurrentAliRootRev >= 62714)
+ fMCperiodTPC="LHC13B2_FIXn1";
+ }
// if (fRun>=179357 && fRun<=183173) { fLHCperiod="LHC12C"; fBeamType="PP"; fBeamTypeNum=kPP;/*fMCperiodTPC="";*/ }
// if (fRun>=183174 && fRun<=186345) { fLHCperiod="LHC12D"; fBeamType="PP"; fBeamTypeNum=kPP;/*fMCperiodTPC="";*/ }
// if (fRun>=186346 && fRun<=186635) { fLHCperiod="LHC12E"; fBeamType="PP"; fBeamTypeNum=kPP;/*fMCperiodTPC="";*/ }
ClassImp(AliSysInfo)
AliSysInfo* AliSysInfo::fInstance=0;
+Bool_t AliSysInfo::fgVerbose = kTRUE;
AliSysInfo::AliSysInfo():
TObject(),
void AliSysInfo::AddStamp(const char *sname, Int_t id0, Int_t id1, Int_t id2, Int_t id3){
//
//
+ if (!fgVerbose) return;
//
//
TTimeStamp stamp;
// Object size function
static Double_t EstimateObjectSize(TObject* object);
static TTree* Test();
+
+ static void SetVerbose(Bool_t v=kFALSE) {fgVerbose = v;}
+ static Bool_t GetVerbose() {return fgVerbose;}
+
private:
AliSysInfo(const AliSysInfo& source);
AliSysInfo& operator= (const AliSysInfo& rec);
static AliSysInfo * fInstance; //instance pointer
StampCallback_t *fCallBackFunc; // call back functions
Int_t fNCallBack; // number of call back functions
+ static Bool_t fgVerbose; // do we want actually to write the stamps ?
ClassDef(AliSysInfo,0)
};
fCurrentEventMultiplicity(0),
fCorrFuncMultiplicity(0x0),
fCorrFuncMultiplicityTanTheta(0x0),
- fCorrFuncSigmaMultiplicity(0x0)
+ fCorrFuncSigmaMultiplicity(0x0),
+ fSplineArray()
{
//
// The default constructor
fCurrentEventMultiplicity(that.fCurrentEventMultiplicity),
fCorrFuncMultiplicity(0x0),
fCorrFuncMultiplicityTanTheta(0x0),
- fCorrFuncSigmaMultiplicity(0x0)
+ fCorrFuncSigmaMultiplicity(0x0),
+ fSplineArray()
{
//copy ctor
for (Int_t i=0; i<fgkNumberOfGainScenarios; i++) {fRes0[i]=that.fRes0[i];fResN2[i]=that.fResN2[i];}
#include "TRefArray.h"
#include "AliTOFHeader.h"
#include "AliVTrdTrack.h"
+#include "AliVMultiplicity.h"
class AliCentrality;
class AliEventplane;
class AliVVZERO;
return kFALSE;
}
+ // Tracklets
+ virtual AliVMultiplicity* GetMultiplicity() const {return 0;}
+
virtual Bool_t IsPileupFromSPDInMultBins() const {
return kFALSE;
}
//-------------------------------------------------------------------------
#include <TNamed.h>
-
+class TList;
class AliVHeader : public TNamed {
public :
virtual ULong64_t GetTriggerMask() const = 0;
virtual UChar_t GetTriggerCluster() const = 0;
virtual UInt_t GetEventType() const = 0;
-
+ virtual TList* GetCocktailHeaders() {return 0;}
/*
virtual void SetBunchCrossNumber(UShort_t nBx) = 0;
virtual void SetOrbitNumber(UInt_t nOr) = 0;
--- /dev/null
+#include "AliVMultiplicity.h"
+
+ClassImp(AliVMultiplicity)
+
+void AliVMultiplicity::Clear(Option_t* )
+{
+ // !!! Don't clear TNamed part: name is used to search the object
+ TObject::Clear();
+}
--- /dev/null
+#ifndef ALIVMULTIPLICITY_H
+#define ALIVMULTIPLICITY_H
+
+#include <TNamed.h>
+#include <TMath.h>
+
+
+//////////////////////////////////////////////////////////
+// //
+// Base virtual class for multiplicity information //
+// //
+//////////////////////////////////////////////////////////
+
+class AliVMultiplicity : public TNamed {
+
+ public:
+ //
+ enum {kMultTrackRefs =BIT(14), // in new format (old is default for bwd.comp.) multiple cluster->track references are allowed
+ kScaleDThtbySin2=BIT(15), // scale Dtheta by 1/sin^2(theta). Default is DON'T scale, for bwd.comp.
+ kSPD2Sng =BIT(16) // are SPD2 singles stored?
+ };
+ //
+ AliVMultiplicity() {}
+ AliVMultiplicity(const char* name, const char* title) : TNamed(name,title) {}
+ AliVMultiplicity(const AliVMultiplicity& m) : TNamed(m) {}
+ AliVMultiplicity& operator=(const AliVMultiplicity& m) {if (this!=&m) TNamed::operator=(m); return *this;}
+ virtual ~AliVMultiplicity() {}
+ //
+ // methods to access tracklet information
+ Bool_t GetMultTrackRefs() const {return TestBit(kMultTrackRefs);}
+ Bool_t GetScaleDThetaBySin2T() const {return TestBit(kScaleDThtbySin2);}
+ void SetMultTrackRefs(Bool_t v) {SetBit(kMultTrackRefs,v);}
+ void SetScaleDThetaBySin2T(Bool_t v) {SetBit(kScaleDThtbySin2,v);}
+ //
+ virtual void Clear(Option_t* opt="");
+ //
+ virtual Int_t GetNumberOfTracklets() const = 0;
+ virtual Double_t GetTheta(Int_t i) const = 0;
+ virtual Double_t GetPhi(Int_t i) const = 0;
+ virtual Double_t GetDeltaPhi(Int_t i) const = 0;
+ virtual Int_t GetLabel(Int_t i, Int_t layer) const = 0;
+ virtual void SetLabel(Int_t i, Int_t layer, Int_t label) = 0;
+ Double_t GetEta(Int_t i) const
+ {
+ if(i>=0 && i<GetNumberOfTracklets()) return -TMath::Log(TMath::Tan(GetTheta(i)/2.));
+ Error("GetEta","Invalid track number %d",i); return -9999.;
+ }
+ //
+ // array getters
+ virtual Double_t* GetTheta() const = 0;
+ virtual Double_t* GetPhi() const = 0;
+ virtual Double_t* GetDeltPhi() const = 0;
+ virtual Int_t* GetLabels() const = 0;
+ virtual Int_t* GetLabels2() const = 0;
+ //
+ virtual void Print(Option_t *opt="") const = 0;
+ //
+ ClassDef(AliVMultiplicity,1);
+};
+
+
+#endif
* @return always kTRUE;
*/
Bool_t IsSortable() const { return kTRUE; }
-
+
// coordinate system conversions
Bool_t Local2GlobalMomentum(Double_t p[3], Double_t alpha) const;
Bool_t Global2LocalMomentum(Double_t p[3], Short_t charge, Double_t &alpha) const;
Bool_t Global2LocalPosition(Double_t r[3], Double_t alpha) const;
-
-
+ //Navigation
+ virtual Int_t GetMother() const {return -1;}
+ virtual Int_t GetFirstDaughter() const {return -1;}
+ virtual Int_t GetLastDaughter() const {return -1;}
+ virtual void SetGeneratorIndex(Short_t) {;}
+ virtual Short_t GetGeneratorIndex() const {return -1;}
ClassDef(AliVParticle, 3) // base class for particles
};
#pragma link C++ class AliVTOFHit+;
#pragma link C++ class AliVTOFMatch+;
#pragma link C++ class AliVTOFcluster+;
+#pragma link C++ class AliVMultiplicity+;
#endif
AliCDBEntry *entry4 = AliCDBManager::Instance()->Get("GRP/Calib/LHCClockPhase");
if (!entry4) AliFatal("LHC clock-phase shift is not found in OCDB !");
AliLHCClockPhase *phase = (AliLHCClockPhase*)entry4->GetObject();
-
+
fGRPdelays = l1Delay - phase->GetMeanPhase();
-
+
AliCDBEntry *entry5 = AliCDBManager::Instance()->Get("T0/Calib/TimeAdjust");
if (entry5) {
AliT0CalibSeasonTimeShift *timeshift = (AliT0CalibSeasonTimeShift*)entry5->GetObject();
fTimeMeanShift = timeshift->GetT0Means();
fTimeSigmaShift = timeshift->GetT0Sigmas();
- }
+ }
else
AliWarning("Time Adjust is not found in OCDB !");
TGraph* gr2 = fParam ->GetQTC(i);
if (gr2) fQTC.AddAtAndExpand(gr2,i) ;
fTime0vertex[i] = fParam->GetCFD(i);
- AliDebug(2,Form("OCDB mean CFD time %i %f \n",i, fTime0vertex[i]));
}
fLatencyL1 = fParam->GetLatencyL1();
fLatencyL1A = fParam->GetLatencyL1A();
AliDebug(2,Form(" LatencyL1 %f latencyL1A %f latencyL1C %f latencyHPTDC %f \n",fLatencyL1, fLatencyL1A, fLatencyL1C, fLatencyHPTDC));
for (Int_t i=0; i<24; i++) {
- if( fTime0vertex[i] < 500 || fTime0vertex[i] > 60000) fTime0vertex[i] =( 1000.*fLatencyHPTDC - 1000.*fLatencyL1 + 1000.*fGRPdelays)/24.4;
+ if( fTime0vertex[i] < 500 || fTime0vertex[i] > 60000) fTime0vertex[i] =( 1000.*fLatencyHPTDC - 1000.*fLatencyL1 + 1000.*fGRPdelays)/24.4;
+ AliDebug(2,Form("OCDB mean CFD time %i %f \n",i, fTime0vertex[i]));
}
//here real Z position
fdZonC = TMath::Abs(fParam->GetZPosition("T0/C/PMT1"));
fdZonA = TMath::Abs(fParam->GetZPosition("T0/A/PMT15"));
-
+
fCalib = new AliT0Calibrator();
fESDTZEROfriend = new AliESDTZEROfriend();
fESDTZERO = new AliESDTZERO();
-
+
}
Float_t shiftA = GetRecoParam() -> GetLow(310);
Float_t shiftC = GetRecoParam() -> GetLow(311);
Float_t shiftAC = GetRecoParam() -> GetLow(312);
- printf("Reconstruct(TTree*digitsTree shiftA %f shiftC %f shiftAC %f \n",shiftA, shiftC, shiftAC);
-
+ AliDebug(2, Form("Reconstruct(TTree*digitsTree shiftA %f shiftC %f shiftAC %f \n",shiftA, shiftC, shiftAC));
+
Double32_t besttimeA=9999999; Double32_t besttimeA_best=9999999;
Double32_t besttimeC=9999999; Double32_t besttimeC_best=9999999;
Int_t timeDelayCFD[24];
}
for (Int_t ipmt=0; ipmt<12; ipmt++){
- if(time[ipmt] !=0 && time[ipmt] > -9000
+ if(time[ipmt] !=0 && time[ipmt] > 0
&& adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt]<highAmpThreshold )
{
if(time[ipmt]<besttimeC) besttimeC=time[ipmt]; //timeC
}
for ( Int_t ipmt=12; ipmt<24; ipmt++)
{
- if(time[ipmt] != 0 && time[ipmt] > -9000
+ if(time[ipmt] != 0 && time[ipmt] > 0
&& adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt]<highAmpThreshold)
{
if(time[ipmt]<besttimeA) besttimeA=time[ipmt];
{
// T0 raw ->
//
-
+
Float_t meanOrA = fTime0vertex[0] + 587;
Float_t meanOrC = fTime0vertex[0] + 678;
Float_t meanTVDC = fTime0vertex[0] + 2564;
+ Float_t meanQT1 = fTime0vertex[0] + 2564;
+ Float_t meanQT0 = fTime0vertex[0] + 3564;
+
Int_t timeDelayCFD[24];
Int_t corridor = GetRecoParam() -> GetCorridor();
// printf("!!!! corridor %i \n",corridor);
Int_t low[500], high[500];
Float_t timefull=-99999;;
Float_t tvdc = -99999; Float_t ora = -99999; Float_t orc = -99999;
-
+
Int_t allData[110][5];
Int_t timeCFD[24], timeLED[24], chargeQT0[24], chargeQT1[24];
Float_t lowAmpThreshold = GetRecoParam()->GetAmpLowThreshold();
Float_t highAmpThreshold = GetRecoParam()->GetAmpHighThreshold();
- printf( "AliT0Reconstructor::Reconstruct::: RecoParam amplitude %f %f \n",lowAmpThreshold, highAmpThreshold);
-
+
Double32_t besttimeA=9999999; Double32_t besttimeA_best=9999999;
Double32_t besttimeC=9999999; Double32_t besttimeC_best=9999999;
for (Int_t in=0; in<12; in++)
{
- if(allData[2*in+26][0] > low[in] + 1000)
+ for (Int_t iHit=0; iHit<5; iHit++)
+ {
+ if (allData[2*in+26][iHit] > fTime0vertex[0]+2000 &&
+ allData[2*in+26][iHit] <fTime0vertex[0]+3000 &&
+ allData[2*in+25][iHit] > fTime0vertex[0]+3000)
{
chargeQT0[in]=allData[2*in+25][0];
chargeQT1[in]=allData[2*in+26][0];
AliDebug(25, Form(" readed Raw %i %i %i",
in, chargeQT0[in],chargeQT1[in]));
+ break;
}
+ }
}
for (Int_t in=12; in<24; in++)
{
- if(allData[2*in+58][0] > low[in] + 1000)
+ for (Int_t iHit=0; iHit<5; iHit++)
+ {
+ if (allData[2*in+58][iHit] > fTime0vertex[0]+2000 &&
+ allData[2*in+58][iHit] <fTime0vertex[0]+3000 &&
+ allData[2*in+57][iHit] > fTime0vertex[0]+3000)
{
chargeQT0[in]=allData[2*in+57][0];
chargeQT1[in]=allData[2*in+58][0];
AliDebug(25, Form(" readed Raw %i %i %i",
in, chargeQT0[in],chargeQT1[in]));
+ break;
+ }
}
}
Double32_t time[24], adc[24], adcmip[24], noncalibtime[24];
for (Int_t ipmt=0; ipmt<24; ipmt++) {
- // if(timeCFD[ipmt] > 0 && (chargeQT0[ipmt] - chargeQT1[ipmt])>pedestal[ipmt] ){
if(timeCFD[ipmt] > 0 && (chargeQT0[ipmt] - chargeQT1[ipmt])> 0 ){
//for simulated data
//for physics data
- if(( chargeQT0[ipmt] - chargeQT1[ipmt])>pedestal[ipmt]) {
- adc[ipmt] = chargeQT0[ipmt] - chargeQT1[ipmt];
- }
- else
- adc[ipmt] = 0;
- // time[ipmt] = fCalib-> WalkCorrection(refAmp, ipmt, Int_t(adc[ipmt]), timeCFD[ipmt] ) ;
+ adc[ipmt] = chargeQT0[ipmt] - chargeQT1[ipmt];
Int_t refAmp = Int_t (fTime0vertex[ipmt]);
time[ipmt] = fCalib-> WalkCorrection( refAmp, ipmt, Int_t(adc[ipmt]), timeCFD[ipmt] ) ;
Double_t sl = timeLED[ipmt] - timeCFD[ipmt];
//Set MPD
- if(allData[53][0]>0 && allData[54][0])
- frecpoints.SetMultA(allData[53][0]-allData[54][0]);
- if(allData[105][0]>0 && allData[106][0])
- frecpoints.SetMultC(allData[105][0]-allData[106][0]);
-
+ for (Int_t iHit=0; iHit<5; iHit++)
+ {
+ if (allData[54][iHit] > fTime0vertex[0]+2000 &&
+ allData[54][iHit] <fTime0vertex[0]+3000 &&
+ allData[53][iHit] > fTime0vertex[0]+3000) {
+ frecpoints.SetMultA(allData[53][iHit]-allData[54][iHit]);
+ break;
+ }
+ }
+ for (Int_t iHit=0; iHit<5; iHit++)
+ if (allData[106][iHit] > fTime0vertex[0]+2000 &&
+ allData[106][iHit] <fTime0vertex[0]+3000 &&
+ allData[105][iHit] > fTime0vertex[0]+3000)
+ {
+ frecpoints.SetMultC(allData[105][iHit]-allData[106][iHit]);
+ break;
+ }
} // if (else )raw data
recTree->Fill();
EvaluateCrossSections();
fAmpt->SetReactionPlaneAngle(0.0);
- fRotating=kFALSE;
}
void AliGenAmpt::Generate()
switch(decay)
{
case kAll: // particles decayed "naturally" according to $ALICE_ROOT/TEvtGen/EvtGen/DECAY.DEC
- break;
+ break;
case kBJpsiDiElectron:
- SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOJPSITOELE.DEC"));
- break;
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOJPSITOELE.DEC"));
+ break;
case kBJpsi:
- SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOJPSI.DEC"));
- break;
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOJPSI.DEC"));
+ break;
case kBJpsiDiMuon:
- SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOJPSITOMU.DEC"));
- break;
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOJPSITOMU.DEC"));
+ break;
case kBSemiElectronic:
- SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOELE.DEC"));
- break;
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOELE.DEC"));
+ break;
case kHadronicD:
SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOD.DEC"));
break;
- case kHardMuons:
+ case kChiToJpsiGammaToElectronElectron:
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/CHICTOJPSITOELE.DEC"));
+ break;
case kChiToJpsiGammaToMuonMuon:
- case kChiToJpsiGammaToElectronElectron:
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/CHICTOJPSITOMUON.DEC"));
+ break;
+ case kSemiElectronic:
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BANDCTOELE.DEC"));
+ break;
case kBSemiMuonic:
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOMU.DEC"));
+ break;
case kSemiMuonic:
- case kDiMuon:
- case kSemiElectronic:
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BANDCTOMU.DEC"));
+ break;
case kDiElectron:
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/DIELECTRON.DEC"));
+ break;
+ case kDiMuon:
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/DIMUON.DEC"));
+ break;
case kBPsiPrimeDiMuon:
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOPSIPRIMETODIMUON.DEC"));
+ break;
+ case kBPsiPrimeDiElectron:
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/BTOPSIPRIMETODIELECTRON.DEC"));
+ break;
+ case kJpsiDiMuon:
+ SetDecayTablePath(gSystem->ExpandPathName("$ALICE_ROOT/TEvtGen/EvtGen/DecayTable/JPSIDIMUON.DEC"));
+ break;
+ case kHardMuons:
case kPiToMu:
case kKaToMu:
case kAllMuonic:
case kNoDecay:
case kNoDecayHeavy:
case kNeutralPion:
- case kBPsiPrimeDiElectron:
case kBeautyUpgrade:
case kBJpsiUndecayed:
case kDiElectronEM:
case kElectronEM:
case kGammaEM:
- case kJpsiDiMuon:
case kNoDecayBeauty:
case kPsiPrimeJpsiDiElectron:
AliWarning(Form("Warning: case %d not implemented for this class!",(int)decay));
set ( CXXFLAGS "${CXXFLAGS} -D EVTGEN_PYTHIA -D EVTGEN_PHOTOS -D EVTGEN_TAUOLA")
-set ( EINCLUDE TEvtGen EVGEN TEvtGen/Photos TEvtGen/Tauola TEvtGen/HepMC/ PYTHIA8)
+set ( EINCLUDE TEvtGen EVGEN TEvtGen/Tauola TEvtGen/HepMC/ PYTHIA8 TEvtGen/Photos/src/photosFortranInterfaces TEvtGen/Photos/src/photos-fortran
+TEvtGen/Photos/src/photosCInterfaces TEvtGen/Photos/src/eventRecordInterfaces TEvtGen/Photos/src/utilities )
#--------------------------------------------------------------------------------#
set ( SRCS
-Photos/forW-MEc.cxx
-Photos/forZ-MEc.cxx
-Photos/Log.cxx
-Photos/PH_HEPEVT_Interface.cxx
-Photos/PhotosBranch.cxx
-Photos/photosC.cxx
-Photos/Photos.cxx
-Photos/PhotosDebugRandom.cxx
-Photos/PhotosEvent.cxx
-Photos/PhotosHEPEVTEvent.cxx
-Photos/PhotosHEPEVTParticle.cxx
-Photos/PhotosHepMCEvent.cxx
-Photos/PhotosHepMCParticle.cxx
-Photos/PhotosParticle.cxx
-Photos/PhotosRandom.cxx
-Photos/PhotosUtilities.cxx
+Photos/src/photos-fortran/forW-MEc.cxx
+Photos/src/photos-fortran/forZ-MEc.cxx
+Photos/src/photos-fortran/photosC.cxx
+Photos/src/utilities/Log.cxx
+Photos/src/utilities/PhotosRandom.cxx
+Photos/src/utilities/PhotosUtilities.cxx
+Photos/src/utilities/PhotosDebugRandom.cxx
+Photos/src/photosFortranInterfaces/PH_HEPEVT_Interface.cxx
+Photos/src/photosCInterfaces/PhotosBranch.cxx
+Photos/src/photosCInterfaces/PhotosParticle.cxx
+Photos/src/photosCInterfaces/Photos.cxx
+Photos/src/photosCInterfaces/PhotosEvent.cxx
+Photos/src/eventRecordInterfaces/PhotosHEPEVTEvent.cxx
+Photos/src/eventRecordInterfaces/PhotosHEPEVTParticle.cxx
+Photos/src/eventRecordInterfaces/PhotosHepMCEvent.cxx
+Photos/src/eventRecordInterfaces/PhotosHepMCParticle.cxx
)
set ( HDRS
-Photos/f_Init.h
-Photos/forW-MEc.h
-Photos/forZ-MEc.h
-Photos/Log.h
-Photos/PH_HEPEVT_Interface.h
-Photos/PhotosBranch.h
-Photos/PhotosDebugRandom.h
-Photos/PhotosEvent.h
-Photos/Photos.h
-Photos/PhotosHEPEVTEvent.h
-Photos/PhotosHEPEVTParticle.h
-Photos/PhotosHepMCEvent.h
-Photos/PhotosHepMCParticle.h
-Photos/PhotosParticle.h
-Photos/PhotosRandom.h
-Photos/PhotosUtilities.h
+Photos/src/photosFortranInterfaces/f_Init.h
+Photos/src/photos-fortran/forW-MEc.h
+Photos/src/photos-fortran/forZ-MEc.h
+Photos/src/utilities/Log.h
+Photos/src/photosFortranInterfaces/PH_HEPEVT_Interface.h
+Photos/src/photosCInterfaces/PhotosBranch.h
+Photos/src/utilities/PhotosDebugRandom.h
+Photos/src/photosCInterfaces/PhotosEvent.h
+Photos/src/photosCInterfaces/Photos.h
+Photos/src/eventRecordInterfaces/PhotosHEPEVTEvent.h
+Photos/src/eventRecordInterfaces/PhotosHEPEVTParticle.h
+Photos/src/eventRecordInterfaces/PhotosHepMCEvent.h
+Photos/src/eventRecordInterfaces/PhotosHepMCParticle.h
+Photos/src/photosCInterfaces/PhotosParticle.h
+Photos/src/utilities/PhotosRandom.h
+Photos/src/utilities/PhotosUtilities.h
)
-set ( EINCLUDE TEvtGen TEvtGen/HepMC TEvtGen/Photos)
+set ( EINCLUDE TEvtGen TEvtGen/HepMC TEvtGen/Photos/src/photosFortranInterfaces TEvtGen/Photos/src/photos-fortran TEvtGen/Photos/src/photosCInterfaces TEvtGen/Photos/src/eventRecordInterfaces TEvtGen/Photos/src/utilities )
set ( DHDR TEvtGenLinkDef.h)
-set ( EINCLUDE TEvtGen EVGEN)
+set ( EINCLUDE TEvtGen EVGEN STEER/STEER)
# SHLIBS - Shared Libraries and objects for linking (Executables only) #
#--------------------------------------------------------------------------------#
-set ( SRCS Tauola/DecayList.cxx Tauola/Log.cxx Tauola/Plots.cxx Tauola/Tauola.cxx Tauola/TauolaEvent.cxx Tauola/TauolaHEPEVTEvent.cxx Tauola/TauolaHEPEVTParticle.cxx Tauola/TauolaHepMCEvent.cxx Tauola/TauolaHepMCParticle.cxx Tauola/TauolaParticle.cxx Tauola/TauolaParticlePair.cxx Tauola/f_Decay.cxx Tauola/f_FilHep.cxx Tauola/f_Init.cxx)
+set ( SRCS Tauola/DecayList.cxx Tauola/TauolaLog.cxx Tauola/Plots.cxx Tauola/Tauola.cxx Tauola/TauolaEvent.cxx Tauola/TauolaHEPEVTEvent.cxx Tauola/TauolaHEPEVTParticle.cxx Tauola/TauolaHepMCEvent.cxx Tauola/TauolaHepMCParticle.cxx Tauola/TauolaParticle.cxx Tauola/TauolaParticlePair.cxx Tauola/f_Decay.cxx Tauola/f_FilHep.cxx Tauola/f_InitTauola.cxx)
-set ( HDRS Tauola/DecayList.h Tauola/f_Variables.h Tauola/Log.h Tauola/Plots.h Tauola/TauolaEvent.h Tauola/Tauola.h Tauola/TauolaHEPEVTEvent.h Tauola/TauolaHEPEVTParticle.h Tauola/TauolaHepMCEvent.h Tauola/TauolaHepMCParticle.h Tauola/TauolaParticle.h Tauola/TauolaParticlePair.h Tauola/f_Decay.h Tauola/f_FilHep.h Tauola/f_Init.h)
+set ( HDRS Tauola/DecayList.h Tauola/f_Variables.h Tauola/TauolaLog.h Tauola/Plots.h Tauola/TauolaEvent.h Tauola/Tauola.h Tauola/TauolaHEPEVTEvent.h Tauola/TauolaHEPEVTParticle.h Tauola/TauolaHepMCEvent.h Tauola/TauolaHepMCParticle.h Tauola/TauolaParticle.h Tauola/TauolaParticlePair.h Tauola/f_Decay.h Tauola/f_FilHep.h Tauola/f_InitTauola.h)
set ( FFLAGS "-O2 -fPIC -fno-automatic -fno-backslash -ffixed-line-length-132")
--- /dev/null
+####
+Decay D+
+0.055300000 anti-K*0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.088300000 anti-K0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002773020 anti-K_10 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002927076 anti-K_2*0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.004050000 pi0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001330000 eta e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000385142 eta' e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002200000 rho0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001600000 omega e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.041000000 K- pi+ e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011]
+0.001078397 anti-K0 pi0 e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011]
+####
+Enddecay
+
+Decay D-
+0.055300000 K*0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.088300000 K0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002773020 K_10 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002927076 K_2*0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.004050000 pi0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001330000 eta e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000385142 eta' e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002200000 rho0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001600000 omega e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.041000000 K+ pi- e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011]
+0.001078397 K0 pi0 e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011]
+#####
+Enddecay
+
+Decay D0
+# updated according to suggestions by P. Roudeau,
+# using PDG2004 measurements and imposing the equality
+# of sl partial widths for D+ and D0.
+# Include additional decay anti-K0 pi- e+ nu_e , K- pi0 e+ nu_e.
+#
+0.021700000 K*- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.035500000 K- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000760000 K_1- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001374504 K_2*- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002890000 pi- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001900000 rho- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.027000000 anti-K0 pi- e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011]
+0.016000000 K- pi0 e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011]
+###
+Enddecay
+
+#
+#
+Decay anti-D0
+0.021700000 K*+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.035500000 K+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000760000 K_1+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001380270 K_2*+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002890000 pi+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001900000 rho+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.027000000 K0 pi+ e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011]
+0.016000000 K+ pi0 e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011]
+Enddecay
+
+Decay D_s+
+0.024900000 phi e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.026700000 eta e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.009900000 eta' e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002058115 anti-K0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000762265 anti-K*0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+# Doubly Cabibbo suppressed
+0.003700000 K0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011]
+0.001800000 K*0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+#
+# Updated to PDG 2008
+Decay D_s-
+0.024900000 phi e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.026700000 eta e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.009900000 eta' e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002058115 K0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000762265 K*0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+# Doubly Cabibbo suppressed
+0.003700000 anti-K0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011]
+0.001800000 anti-K*0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay Lambda_c+
+###
+0.021000000 e+ nu_e Lambda0 PYTHIA 42; #[Reconstructed PDG2011]
+0.00500 e+ nu_e Sigma0 PYTHIA 42;
+0.00500 e+ nu_e Sigma*0 PYTHIA 42;
+0.00300 e+ nu_e n0 PYTHIA 42;
+0.00200 e+ nu_e Delta0 PYTHIA 42;
+0.00600 e+ nu_e p+ pi- PYTHIA 42;
+0.00600 e+ nu_e n0 pi0 PYTHIA 42;
+###
+Enddecay
+
+CDecay anti-Lambda_c-
+
+
+Decay Xi_c0
+0.020 e+ nu_e Xi- PYTHIA 42;
+0.005 e+ nu_e Xi*- PYTHIA 42;
+Enddecay
+
+CDecay anti-Xi_c0
+
+Decay Xi_c+
+0.028 e+ nu_e Xi0 PYTHIA 42;
+0.007 e+ nu_e Xi*0 PYTHIA 42;
+Enddecay
+
+CDecay Xi_c-
+
+Decay Omega_c0
+1.0 e+ nu_e Omega- PYTHIA 42;
+Enddecay
+
+CDecay anti-Omega_c0
+
+#####
+Decay B0
+# Updated to PDG 2008
+# b -> c semileptonic
+#
+0.050100000 D*- e+ nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.021700000 D- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0054 D_1- e+ nu_e PHOTOS ISGW2;
+0.0020 D_0*- e+ nu_e PHOTOS ISGW2;
+0.0050 D'_1- e+ nu_e PHOTOS ISGW2;
+0.0022 D_2*- e+ nu_e PHOTOS ISGW2;
+0.0003 D*- pi0 e+ nu_e PHOTOS GOITY_ROBERTS;
+0.004900000 anti-D*0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0010 D- pi0 e+ nu_e PHOTOS GOITY_ROBERTS;
+###
+#
+# b -> u l nu
+#
+0.000134000 pi- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000247000 rho- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+##0.000000 D(2S)- e+ nu_e PHOTOS ISGW2;
+##0.000000 D*(2S)- e+ nu_e PHOTOS ISGW2;
+0.001892 Xu- e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00;
+#
+0.000000160 K0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001030 K*0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000050 Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+###
+Enddecay
+
+
+Decay anti-B0
+# Updated to PDG 2008
+# b -> c semileptonic
+#
+0.050100000 D*+ e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.021700000 D+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0054 D_1+ e- anti-nu_e PHOTOS ISGW2;
+0.0020 D_0*+ e- anti-nu_e PHOTOS ISGW2;
+0.0050 D'_1+ e- anti-nu_e PHOTOS ISGW2;
+0.0022 D_2*+ e- anti-nu_e PHOTOS ISGW2;
+0.0003 D*+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS;
+0.004900000 D*0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0010 D+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS;
+####
+0.000134000 pi+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000247000 rho+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000000 D(2S)+ e- anti-nu_e PHOTOS ISGW2;
+0.000000 D*(2S)+ e- anti-nu_e PHOTOS ISGW2;
+0.001892 Xu+ e- anti-nu_e PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00;
+#
+0.000000160 anti-K0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001030 anti-K*0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000050 anti-Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+
+Enddecay
+
+Decay B-
+# Updated to PDG 2008
+# b -> c semileptonic
+#
+0.056800000 D*0 e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.022300000 D0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0040 D_10 e- anti-nu_e PHOTOS ISGW2;
+0.0024 D_0*0 e- anti-nu_e PHOTOS ISGW2;
+0.0007 D'_10 e- anti-nu_e PHOTOS ISGW2;
+0.0018 D_2*0 e- anti-nu_e PHOTOS ISGW2;
+0.006100000 D*+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0003 D*0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS;
+0.0000 D+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; #### covered by other decays
+0.0010 D0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS;
+#####
+0.000077000 pi0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000037000 eta e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000128000 rho0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000115000 omega e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000270 eta' e- anti-nu_e PHOTOS ISGW2;
+0.000000 D(2S)0 e- anti-nu_e PHOTOS ISGW2;
+0.000000 D*(2S)0 e- anti-nu_e PHOTOS ISGW2;
+0.001948 Xu0 e- anti-nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51;
+#
+0.000000550 K- e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001550 K*- e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000050 anti-Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+
+Enddecay
+
+
+Decay B+
+# Updated to PDG 2008
+# b -> c semileptonic
+#
+0.056800000 anti-D*0 e+ nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.022300000 anti-D0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0040 anti-D_10 e+ nu_e PHOTOS ISGW2;
+0.0024 anti-D_0*0 e+ nu_e PHOTOS ISGW2;
+0.0007 anti-D'_10 e+ nu_e PHOTOS ISGW2;
+0.0018 anti-D_2*0 e+ nu_e PHOTOS ISGW2;
+0.006100000 D*- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0003 anti-D*0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS;
+0.0000 D- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; ## covered by other decays
+0.0010 anti-D0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS;
+####
+0.000077000 pi0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000037000 eta e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000128000 rho0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000115000 omega e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000270 eta' e+ nu_e PHOTOS ISGW2;
+0.000000 anti-D(2S)0 e+ nu_e PHOTOS ISGW2;
+0.000000 anti-D*(2S)0 e+ nu_e PHOTOS ISGW2;
+0.001948 Xu0 e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51;
+#
+0.000000550 K+ e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001550 K*+ e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000050 Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+
+Enddecay
+
+
+Decay B_s0
+0.0210 D_s- e+ nu_e PHOTOS ISGW2;
+0.0490 D_s*- e+ nu_e PHOTOS ISGW2;
+0.0040 D_s1- e+ nu_e PHOTOS ISGW2;
+0.0040 D_s0*- e+ nu_e PHOTOS ISGW2;
+0.0070 D'_s1- e+ nu_e PHOTOS ISGW2;
+0.0070 D_s2*- e+ nu_e PHOTOS ISGW2;
+###
+# fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen
+0.000200 K- e+ nu_e PHOTOS ISGW2;
+0.000300 K*- e+ nu_e PHOTOS ISGW2;
+0.000300 K_1- e+ nu_e PHOTOS ISGW2;
+0.000200 K'_1- e+ nu_e PHOTOS ISGW2;
+# PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e
+0.0000023 phi e+ e- BTOSLLALI;
+
+Enddecay
+
+
+Decay anti-B_s0
+# b --> c (l nu)
+# Sum = 24.5%
+0.0210 D_s+ e- anti-nu_e PHOTOS ISGW2;
+0.0490 D_s*+ e- anti-nu_e PHOTOS ISGW2;
+0.0040 D_s1+ e- anti-nu_e PHOTOS ISGW2;
+0.0040 D_s0*+ e- anti-nu_e PHOTOS ISGW2;
+0.0070 D'_s1+ e- anti-nu_e PHOTOS ISGW2;
+0.0070 D_s2*+ e- anti-nu_e PHOTOS ISGW2;
+####
+# fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen
+0.000200 K+ e- anti-nu_e PHOTOS ISGW2;
+0.000300 K*+ e- anti-nu_e PHOTOS ISGW2;
+0.000300 K_1+ e- anti-nu_e PHOTOS ISGW2;
+0.000200 K'_1+ e- anti-nu_e PHOTOS ISGW2;
+###
+# PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e
+0.0000023 phi e- e+ BTOSLLALI;
+
+Enddecay
+
+Decay Lambda_b0
+# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%)
+0.050000000 Lambda_c+ e- anti-nu_e PHSP; #[Reconstructed PDG2011]
+0.006300000 Lambda_c(2593)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011]
+0.011000000 Lambda_c(2625)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011]
+
+Enddecay
+
+Decay anti-Lambda_b0
+# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%)
+0.050000000 anti-Lambda_c- e+ nu_e PHSP; #[Reconstructed PDG2011]
+0.006300000 anti-Lambda_c(2593)- e+ nu_e PHSP; #[Reconstructed PDG2011]
+0.011000000 anti-Lambda_c(2625)- e+ nu_e PHSP; #[Reconstructed PDG2011]
+
+Enddecay
+
+Decay Xi_b-
+ 0.05460 Xi_c0 e- anti-nu_e PHSP;
+Enddecay
+
+
+Decay anti-Xi_b+
+ 0.05460 anti-Xi_c0 e+ nu_e PHSP;
+Enddecay
+
+Decay Xi_b0
+ 0.05460 Xi_c+ e- anti-nu_e PHSP;
+Enddecay
+
+Decay anti-Xi_b0
+ 0.05460 anti-Xi_c- e+ nu_e PHSP;
+Enddecay
+
+Decay Omega_b-
+ 0.05460 Omega_c0 e- anti-nu_e PHSP;
+Enddecay
+
+Decay anti-Omega_b+
+ 0.05460 anti-Omega_c0 e+ nu_e PHSP;
+Enddecay
+
+End
+
+
+
+
+
--- /dev/null
+###
+Decay D+
+###
+0.055000000 anti-K*0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.094000000 anti-K0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002773020 anti-K_10 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002927076 anti-K_2*0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.003312218 pi0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002002736 eta mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000385142 eta' mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002500000 rho0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002156793 omega mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.039000000 K- pi+ mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011]
+0.001078397 anti-K0 pi0 mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011]
+#
+0.000382000 mu+ nu_mu PHOTOS SLN; #[Reconstructed PDG2011]
+Enddecay
+
+
+Decay D-
+#
+0.055000000 K*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.094000000 K0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002773020 K_10 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002927076 K_2*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.003312218 pi0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002002736 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000385142 eta' mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002500000 rho0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002156793 omega mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.039000000 K+ pi- mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011]
+0.001078397 K0 pi0 mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011]
+#
+0.000382000 mu- anti-nu_mu PHOTOS SLN; #[Reconstructed PDG2011]
+Enddecay
+
+Decay D0
+###
+0.019800000 K*- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.033100000 K- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000815539 K_1- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001374504 K_2*- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002370000 pi- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002015940 rho- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001007970 anti-K0 pi- mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011]
+0.000549802 K- pi0 mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011]
+###
+Enddecay
+
+Decay anti-D0
+###
+0.019800000 K*+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.033100000 K+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000818960 K_1+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001380270 K_2*+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002370000 pi+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002024397 rho+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.001012198 K0 pi+ mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011]
+0.000552108 K+ pi0 mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011]
+###
+Enddecay
+
+Decay D_s+
+###
+0.018309605 phi mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.022845082 eta mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.008186726 eta' mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002058115 anti-K0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000762265 anti-K*0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.005800000 mu+ nu_mu PHOTOS SLN; #[Reconstructed PDG2011]
+###
+Enddecay
+
+Decay D_s-
+###
+0.018309605 phi mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.022845082 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.008186726 eta' mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.002058115 K0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000762265 K*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.005800000 mu- anti-nu_mu PHOTOS SLN; #[Reconstructed PDG2011]
+###
+Enddecay
+
+Decay Lambda_c+
+###
+0.020000000 mu+ nu_mu Lambda0 PYTHIA 42; #[Reconstructed PDG2011]
+0.00500 mu+ nu_mu Sigma0 PYTHIA 42;
+0.00500 mu+ nu_mu Sigma*0 PYTHIA 42;
+0.00300 mu+ nu_mu n0 PYTHIA 42;
+0.00200 mu+ nu_mu Delta0 PYTHIA 42;
+0.00600 mu+ nu_mu p+ pi- PYTHIA 42;
+0.00600 mu+ nu_mu n0 pi0 PYTHIA 42;
+###
+Enddecay
+
+CDecay anti-Lambda_c-
+
+Decay Xi_c0
+0.020 mu+ nu_mu Xi- PYTHIA 42;
+0.005 mu+ nu_mu Xi*- PYTHIA 42;
+Enddecay
+
+CDecay anti-Xi_c0
+
+Decay Xi_c+
+0.028 mu+ nu_mu Xi0 PYTHIA 42;
+0.007 mu+ nu_mu Xi*0 PYTHIA 42;
+Enddecay
+
+CDecay Xi_c-
+
+
+Decay Omega_c0
+1.0 mu+ nu_mu Omega- PYTHIA 42;
+Enddecay
+
+CDecay anti-Omega_c0
+
+
+####
+Decay B0
+#
+0.050100000 D*- mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.021700000 D- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0054 D_1- mu+ nu_mu PHOTOS ISGW2;
+0.0020 D_0*- mu+ nu_mu PHOTOS ISGW2;
+0.0050 D'_1- mu+ nu_mu PHOTOS ISGW2;
+0.0022 D_2*- mu+ nu_mu PHOTOS ISGW2;
+0.0003 D*- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS;
+0.004900000 anti-D*0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0010 D- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS;
+0.0000 anti-D0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS;
+#
+#
+0.000134000 pi- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000247000 rho- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000000 D(2S)- mu+ nu_mu PHOTOS ISGW2;
+0.000000 D*(2S)- mu+ nu_mu PHOTOS ISGW2;
+0.001892 Xu- mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00;
+#
+0.000000450 K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001050 K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000025 Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+Enddecay
+
+Decay anti-B0
+0.050100000 D*+ mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.021700000 D+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0054 D_1+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0020 D_0*+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0050 D'_1+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0022 D_2*+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0003 D*+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+0.004900000 D*0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0010 D+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+0.0000 D0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+#
+0.000134000 pi+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000247000 rho+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000000 D(2S)+ mu- anti-nu_mu PHOTOS ISGW2;
+0.000000 D*(2S)+ mu- anti-nu_mu PHOTOS ISGW2;
+0.001892 Xu+ mu- anti-nu_mu PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00;
+#
+0.000000450 anti-K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001050 anti-K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000025 anti-Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+Enddecay
+
+Decay B+
+0.056800000 anti-D*0 mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.022300000 anti-D0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0040 anti-D_10 mu+ nu_mu PHOTOS ISGW2;
+0.0024 anti-D_0*0 mu+ nu_mu PHOTOS ISGW2;
+0.0007 anti-D'_10 mu+ nu_mu PHOTOS ISGW2;
+0.0018 anti-D_2*0 mu+ nu_mu PHOTOS ISGW2;
+0.006100000 D*- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0003 anti-D*0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS;
+0.0000 D- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS;
+0.0010 anti-D0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS;
+#
+0.000077000 pi0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000037000 eta mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000128000 rho0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000115000 omega mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000270 eta' mu+ nu_mu PHOTOS ISGW2;
+0.000000 anti-D(2S)0 mu+ nu_mu PHOTOS ISGW2;
+0.000000 anti-D*(2S)0 mu+ nu_mu PHOTOS ISGW2;
+0.001948 Xu0 mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51;
+#
+0.000000520 K+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001160 K*+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000025 Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+###
+Enddecay
+
+Decay B-
+##
+0.056800000 D*0 mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.022300000 D0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0040 D_10 mu- anti-nu_mu PHOTOS ISGW2;
+0.0024 D_0*0 mu- anti-nu_mu PHOTOS ISGW2;
+0.0007 D'_10 mu- anti-nu_mu PHOTOS ISGW2;
+0.0018 D_2*0 mu- anti-nu_mu PHOTOS ISGW2;
+0.006100000 D*+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0003 D*0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+0.0000 D+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+0.0010 D0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+0.000077000 pi0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000037000 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000128000 rho0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000115000 omega mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000270 eta' mu- anti-nu_mu PHOTOS ISGW2;
+0.000000 D(2S)0 mu- anti-nu_mu PHOTOS ISGW2;
+0.000000 D*(2S)0 mu- anti-nu_mu PHOTOS ISGW2;
+0.001948 Xu0 mu- anti-nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51;
+#
+0.000000520 K- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001160 K*- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000025 anti-Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+###
+Enddecay
+
+Decay B_s0
+###
+0.0210 D_s- mu+ nu_mu PHOTOS ISGW2;
+0.0490 D_s*- mu+ nu_mu PHOTOS ISGW2;
+0.0040 D_s1- mu+ nu_mu PHOTOS ISGW2;
+0.0040 D_s0*- mu+ nu_mu PHOTOS ISGW2;
+0.0070 D'_s1- mu+ nu_mu PHOTOS ISGW2;
+0.0070 D_s2*- mu+ nu_mu PHOTOS ISGW2;
+###
+0.000200 K- mu+ nu_mu PHOTOS ISGW2;
+0.000300 K*- mu+ nu_mu PHOTOS ISGW2;
+0.000300 K_1- mu+ nu_mu PHOTOS ISGW2;
+0.000200 K'_1- mu+ nu_mu PHOTOS ISGW2;
+#PR LHCb add Bs -> mu+ mu-
+0.0000000035 mu+ mu- PHSP;
+0.0000023 phi mu+ mu- BTOSLLALI;
+###
+Enddecay
+
+Decay anti-B_s0
+###
+0.0210 D_s+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0490 D_s*+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0040 D_s1+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0040 D_s0*+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0070 D'_s1+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0070 D_s2*+ mu- anti-nu_mu PHOTOS ISGW2;
+###
+0.000200 K+ mu- anti-nu_mu PHOTOS ISGW2;
+0.000300 K*+ mu- anti-nu_mu PHOTOS ISGW2;
+0.000300 K_1+ mu- anti-nu_mu PHOTOS ISGW2;
+0.000200 K'_1+ mu- anti-nu_mu PHOTOS ISGW2;
+###
+0.0000023 phi mu- mu+ BTOSLLALI;
+Enddecay
+
+Decay Lambda_b0
+###
+0.050000000 Lambda_c+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011]
+0.006300000 Lambda_c(2593)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011]
+0.011000000 Lambda_c(2625)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011]
+###
+0.056000000 Lambda_c+ pi+ pi- mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011]
+###
+Enddecay
+
+Decay anti-Lambda_b0
+###
+0.050000000 anti-Lambda_c- mu+ nu_mu PHSP; #[Reconstructed PDG2011]
+0.006300000 anti-Lambda_c(2593)- mu+ nu_mu PHSP; #[Reconstructed PDG2011]
+0.011000000 anti-Lambda_c(2625)- mu+ nu_mu PHSP; #[Reconstructed PDG2011]
+###
+0.056000000 anti-Lambda_c- pi- pi+ mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay Xi_b-
+###
+0.05460 Xi_c0 mu- anti-nu_mu PHSP;
+Enddecay
+
+Decay anti-Xi_b+
+###
+0.05460 anti-Xi_c0 mu+ nu_mu PHSP;
+Enddecay
+
+Decay Xi_b0
+###
+0.05460 Xi_c+ mu- anti-nu_mu PHSP;
+Enddecay
+
+Decay anti-Xi_b0
+###
+0.05460 anti-Xi_c- mu+ nu_mu PHSP;
+Enddecay
+
+Decay Omega_b-
+###
+0.05460 Omega_c0 mu- anti-nu_mu PHSP;
+Enddecay
+
+Decay anti-Omega_b+
+###
+0.05460 anti-Omega_c0 mu+ nu_mu PHSP;
+Enddecay
+
+
+End
0.050000000 Lambda_c+ e- anti-nu_e PHSP; #[Reconstructed PDG2011]
0.006300000 Lambda_c(2593)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011]
0.011000000 Lambda_c(2625)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011]
-
+0.056000000 Lambda_c+ pi+ pi- e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011]
Enddecay
Decay anti-Lambda_b0
0.050000000 anti-Lambda_c- e+ nu_e PHSP; #[Reconstructed PDG2011]
0.006300000 anti-Lambda_c(2593)- e+ nu_e PHSP; #[Reconstructed PDG2011]
0.011000000 anti-Lambda_c(2625)- e+ nu_e PHSP; #[Reconstructed PDG2011]
-
+0.056000000 anti-Lambda_c- pi- pi+ e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011]
Enddecay
Decay Xi_b-
--- /dev/null
+####
+Decay B0
+#
+0.050100000 D*- mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.021700000 D- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0054 D_1- mu+ nu_mu PHOTOS ISGW2;
+0.0020 D_0*- mu+ nu_mu PHOTOS ISGW2;
+0.0050 D'_1- mu+ nu_mu PHOTOS ISGW2;
+0.0022 D_2*- mu+ nu_mu PHOTOS ISGW2;
+0.0003 D*- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS;
+0.004900000 anti-D*0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0010 D- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS;
+0.0000 anti-D0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS;
+#
+#
+0.000134000 pi- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000247000 rho- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000000 D(2S)- mu+ nu_mu PHOTOS ISGW2;
+0.000000 D*(2S)- mu+ nu_mu PHOTOS ISGW2;
+0.001892 Xu- mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00;
+#
+0.000000450 K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001050 K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000025 Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+Enddecay
+
+Decay anti-B0
+0.050100000 D*+ mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.021700000 D+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0054 D_1+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0020 D_0*+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0050 D'_1+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0022 D_2*+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0003 D*+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+0.004900000 D*0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0010 D+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+0.0000 D0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+#
+0.000134000 pi+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000247000 rho+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000000 D(2S)+ mu- anti-nu_mu PHOTOS ISGW2;
+0.000000 D*(2S)+ mu- anti-nu_mu PHOTOS ISGW2;
+0.001892 Xu+ mu- anti-nu_mu PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00;
+#
+0.000000450 anti-K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001050 anti-K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000025 anti-Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+Enddecay
+
+Decay B+
+0.056800000 anti-D*0 mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.022300000 anti-D0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0040 anti-D_10 mu+ nu_mu PHOTOS ISGW2;
+0.0024 anti-D_0*0 mu+ nu_mu PHOTOS ISGW2;
+0.0007 anti-D'_10 mu+ nu_mu PHOTOS ISGW2;
+0.0018 anti-D_2*0 mu+ nu_mu PHOTOS ISGW2;
+0.006100000 D*- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0003 anti-D*0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS;
+0.0000 D- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS;
+0.0010 anti-D0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS;
+#
+0.000077000 pi0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000037000 eta mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000128000 rho0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000115000 omega mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000270 eta' mu+ nu_mu PHOTOS ISGW2;
+0.000000 anti-D(2S)0 mu+ nu_mu PHOTOS ISGW2;
+0.000000 anti-D*(2S)0 mu+ nu_mu PHOTOS ISGW2;
+0.001948 Xu0 mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51;
+#
+0.000000520 K+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001160 K*+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000025 Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+###
+Enddecay
+
+Decay B-
+##
+0.056800000 D*0 mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]
+0.022300000 D0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.0040 D_10 mu- anti-nu_mu PHOTOS ISGW2;
+0.0024 D_0*0 mu- anti-nu_mu PHOTOS ISGW2;
+0.0007 D'_10 mu- anti-nu_mu PHOTOS ISGW2;
+0.0018 D_2*0 mu- anti-nu_mu PHOTOS ISGW2;
+0.006100000 D*+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]
+0.0003 D*0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+0.0000 D+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+0.0010 D0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS;
+0.000077000 pi0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000037000 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000128000 rho0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000115000 omega mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]
+0.000270 eta' mu- anti-nu_mu PHOTOS ISGW2;
+0.000000 D(2S)0 mu- anti-nu_mu PHOTOS ISGW2;
+0.000000 D*(2S)0 mu- anti-nu_mu PHOTOS ISGW2;
+0.001948 Xu0 mu- anti-nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51;
+#
+0.000000520 K- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.000001160 K*- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011]
+0.0000025 anti-Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41;
+###
+Enddecay
+
+Decay B_s0
+###
+0.0210 D_s- mu+ nu_mu PHOTOS ISGW2;
+0.0490 D_s*- mu+ nu_mu PHOTOS ISGW2;
+0.0040 D_s1- mu+ nu_mu PHOTOS ISGW2;
+0.0040 D_s0*- mu+ nu_mu PHOTOS ISGW2;
+0.0070 D'_s1- mu+ nu_mu PHOTOS ISGW2;
+0.0070 D_s2*- mu+ nu_mu PHOTOS ISGW2;
+###
+0.000200 K- mu+ nu_mu PHOTOS ISGW2;
+0.000300 K*- mu+ nu_mu PHOTOS ISGW2;
+0.000300 K_1- mu+ nu_mu PHOTOS ISGW2;
+0.000200 K'_1- mu+ nu_mu PHOTOS ISGW2;
+#PR LHCb add Bs -> mu+ mu-
+0.0000000035 mu+ mu- PHSP;
+0.0000023 phi mu+ mu- BTOSLLALI;
+###
+Enddecay
+
+Decay anti-B_s0
+###
+0.0210 D_s+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0490 D_s*+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0040 D_s1+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0040 D_s0*+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0070 D'_s1+ mu- anti-nu_mu PHOTOS ISGW2;
+0.0070 D_s2*+ mu- anti-nu_mu PHOTOS ISGW2;
+###
+0.000200 K+ mu- anti-nu_mu PHOTOS ISGW2;
+0.000300 K*+ mu- anti-nu_mu PHOTOS ISGW2;
+0.000300 K_1+ mu- anti-nu_mu PHOTOS ISGW2;
+0.000200 K'_1+ mu- anti-nu_mu PHOTOS ISGW2;
+###
+0.0000023 phi mu- mu+ BTOSLLALI;
+Enddecay
+
+Decay Lambda_b0
+###
+0.050000000 Lambda_c+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011]
+0.006300000 Lambda_c(2593)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011]
+0.011000000 Lambda_c(2625)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011]
+###
+0.056000000 Lambda_c+ pi+ pi- mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011]
+###
+Enddecay
+
+Decay anti-Lambda_b0
+###
+0.050000000 anti-Lambda_c- mu+ nu_mu PHSP; #[Reconstructed PDG2011]
+0.006300000 anti-Lambda_c(2593)- mu+ nu_mu PHSP; #[Reconstructed PDG2011]
+0.011000000 anti-Lambda_c(2625)- mu+ nu_mu PHSP; #[Reconstructed PDG2011]
+###
+0.056000000 anti-Lambda_c- pi- pi+ mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay Xi_b-
+###
+0.05460 Xi_c0 mu- anti-nu_mu PHSP;
+Enddecay
+
+Decay anti-Xi_b+
+###
+0.05460 anti-Xi_c0 mu+ nu_mu PHSP;
+Enddecay
+
+Decay Xi_b0
+###
+0.05460 Xi_c+ mu- anti-nu_mu PHSP;
+Enddecay
+
+Decay anti-Xi_b0
+###
+0.05460 anti-Xi_c- mu+ nu_mu PHSP;
+Enddecay
+
+Decay Omega_b-
+###
+0.05460 Omega_c0 mu- anti-nu_mu PHSP;
+Enddecay
+
+Decay anti-Omega_b+
+###
+0.05460 anti-Omega_c0 mu+ nu_mu PHSP;
+Enddecay
+
+
+End
--- /dev/null
+###
+Decay B0
+###
+0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011]
+0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011]
+#
+#
+0.000610000 psi(2S) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011]
+0.0004 psi(2S) K+ pi- PHSP;
+0.0002 psi(2S) K0 pi0 PHSP;
+0.0002 psi(2S) K0 pi- pi+ PHSP;
+0.0001 psi(2S) K0 pi0 pi0 PHSP;
+0.0001 psi(2S) K+ pi- pi0 PHSP;
+0.0004 psi(2S) K_10 PHSP;
+###
+0.000620000 psi(2S) K0 PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay anti-B0
+###
+0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011]
+0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011]
+#
+0.000610000 psi(2S) anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011]
+0.0004 psi(2S) K- pi+ PHSP;
+0.0002 psi(2S) anti-K0 pi0 PHSP;
+0.0002 psi(2S) anti-K0 pi+ pi- PHSP;
+0.0001 psi(2S) anti-K0 pi0 pi0 PHSP;
+0.0001 psi(2S) K- pi+ pi0 PHSP;
+0.0004 psi(2S) anti-K_10 PHSP;
+###
+0.000620000 psi(2S) anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay B+
+###
+0.000646000 psi(2S) K+ SVS; #[Reconstructed PDG2011]
+0.000620000 psi(2S) K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011]
+0.0004 psi(2S) K0 pi+ PHSP;
+0.0002 psi(2S) K+ pi0 PHSP;
+0.001900000 psi(2S) K+ pi- pi+ PHSP; #[Reconstructed PDG2011]
+0.0001 psi(2S) K+ pi0 pi0 PHSP;
+0.0001 psi(2S) K0 pi+ pi0 PHSP;
+0.0004 psi(2S) K_1+ PHSP;
+###
+0.000025800 psi(2S) pi+ PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay B-
+###
+0.000646000 psi(2S) K- SVS; #[Reconstructed PDG2011]
+0.000620000 psi(2S) K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011]
+0.0004 psi(2S) anti-K0 pi- PHSP;
+0.0002 psi(2S) K- pi0 PHSP;
+0.001900000 psi(2S) K- pi+ pi- PHSP; #[Reconstructed PDG2011]
+0.0001 psi(2S) K- pi0 pi0 PHSP;
+0.0001 psi(2S) anti-K0 pi- pi0 PHSP;
+0.0004 psi(2S) K_1- PHSP;
+###
+0.000025800 psi(2S) pi- PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay B_s0
+### psi' = 0.34% CLNS 94/1315
+0.000465 psi(2S) eta' SVS;
+0.000235 psi(2S) eta SVS;
+0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011]
+0.0003 psi(2S) K- K+ PHSP;
+0.0003 psi(2S) anti-K0 K0 PHSP;
+0.0003 psi(2S) K0 K- pi+ PHSP;
+0.0003 psi(2S) anti-K0 K0 pi0 PHSP;
+0.0003 psi(2S) K- K+ pi0 PHSP;
+0.00034 psi(2S) phi pi+ pi- PHSP;
+0.00034 psi(2S) phi pi0 pi0 PHSP;
+0.0002 psi(2S) eta pi+ pi- PHSP;
+0.0002 psi(2S) eta pi0 pi0 PHSP;
+0.0004 psi(2S) eta' pi+ pi- PHSP;
+0.0004 psi(2S) eta' pi0 pi0 PHSP;
+0.0002 psi(2S) pi+ pi- PHSP;
+0.0002 psi(2S) pi0 pi0 PHSP;
+####
+Enddecay
+
+Decay anti-B_s0
+###
+0.000465 psi(2S) eta' SVS;
+0.000235 psi(2S) eta SVS;
+0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011]
+0.0003 psi(2S) K- K+ PHSP;
+0.0003 psi(2S) anti-K0 K0 PHSP;
+0.0003 psi(2S) anti-K0 K+ pi- PHSP;
+0.0003 psi(2S) anti-K0 K0 pi0 PHSP;
+0.0003 psi(2S) K- K+ pi0 PHSP;
+0.00034 psi(2S) phi pi+ pi- PHSP;
+0.00034 psi(2S) phi pi0 pi0 PHSP;
+0.0002 psi(2S) eta pi+ pi- PHSP;
+0.0002 psi(2S) eta pi0 pi0 PHSP;
+0.0004 psi(2S) eta' pi+ pi- PHSP;
+0.0004 psi(2S) eta' pi0 pi0 PHSP;
+0.0002 psi(2S) pi+ pi- PHSP;
+0.0002 psi(2S) pi0 pi0 PHSP;
+###
+Enddecay
+
+Decay Lambda_b0
+###
+0.00038 Lambda0 psi(2S) PHSP;
+Enddecay
+
+Decay anti-Lambda_b0
+###
+0.00038 anti-Lambda0 psi(2S) PHSP;
+Enddecay
+
+
+Decay psi(2S)
+### from DECAY.DEC
+1.000 e+ e- PHOTOS VLL;
+Enddecay
+
+End
--- /dev/null
+###
+Decay B0
+###
+0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011]
+0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011]
+#
+#
+0.000610000 psi(2S) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011]
+0.0004 psi(2S) K+ pi- PHSP;
+0.0002 psi(2S) K0 pi0 PHSP;
+0.0002 psi(2S) K0 pi- pi+ PHSP;
+0.0001 psi(2S) K0 pi0 pi0 PHSP;
+0.0001 psi(2S) K+ pi- pi0 PHSP;
+0.0004 psi(2S) K_10 PHSP;
+###
+0.000620000 psi(2S) K0 PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay anti-B0
+###
+0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011]
+0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011]
+#
+0.000610000 psi(2S) anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011]
+0.0004 psi(2S) K- pi+ PHSP;
+0.0002 psi(2S) anti-K0 pi0 PHSP;
+0.0002 psi(2S) anti-K0 pi+ pi- PHSP;
+0.0001 psi(2S) anti-K0 pi0 pi0 PHSP;
+0.0001 psi(2S) K- pi+ pi0 PHSP;
+0.0004 psi(2S) anti-K_10 PHSP;
+###
+0.000620000 psi(2S) anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay B+
+###
+0.000646000 psi(2S) K+ SVS; #[Reconstructed PDG2011]
+0.000620000 psi(2S) K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011]
+0.0004 psi(2S) K0 pi+ PHSP;
+0.0002 psi(2S) K+ pi0 PHSP;
+0.001900000 psi(2S) K+ pi- pi+ PHSP; #[Reconstructed PDG2011]
+0.0001 psi(2S) K+ pi0 pi0 PHSP;
+0.0001 psi(2S) K0 pi+ pi0 PHSP;
+0.0004 psi(2S) K_1+ PHSP;
+###
+0.000025800 psi(2S) pi+ PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay B-
+###
+0.000646000 psi(2S) K- SVS; #[Reconstructed PDG2011]
+0.000620000 psi(2S) K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011]
+0.0004 psi(2S) anti-K0 pi- PHSP;
+0.0002 psi(2S) K- pi0 PHSP;
+0.001900000 psi(2S) K- pi+ pi- PHSP; #[Reconstructed PDG2011]
+0.0001 psi(2S) K- pi0 pi0 PHSP;
+0.0001 psi(2S) anti-K0 pi- pi0 PHSP;
+0.0004 psi(2S) K_1- PHSP;
+###
+0.000025800 psi(2S) pi- PHSP; #[New mode added] #[Reconstructed PDG2011]
+Enddecay
+
+Decay B_s0
+### psi' = 0.34% CLNS 94/1315
+0.000465 psi(2S) eta' SVS;
+0.000235 psi(2S) eta SVS;
+0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011]
+0.0003 psi(2S) K- K+ PHSP;
+0.0003 psi(2S) anti-K0 K0 PHSP;
+0.0003 psi(2S) K0 K- pi+ PHSP;
+0.0003 psi(2S) anti-K0 K0 pi0 PHSP;
+0.0003 psi(2S) K- K+ pi0 PHSP;
+0.00034 psi(2S) phi pi+ pi- PHSP;
+0.00034 psi(2S) phi pi0 pi0 PHSP;
+0.0002 psi(2S) eta pi+ pi- PHSP;
+0.0002 psi(2S) eta pi0 pi0 PHSP;
+0.0004 psi(2S) eta' pi+ pi- PHSP;
+0.0004 psi(2S) eta' pi0 pi0 PHSP;
+0.0002 psi(2S) pi+ pi- PHSP;
+0.0002 psi(2S) pi0 pi0 PHSP;
+####
+Enddecay
+
+Decay anti-B_s0
+###
+0.000465 psi(2S) eta' SVS;
+0.000235 psi(2S) eta SVS;
+0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011]
+0.0003 psi(2S) K- K+ PHSP;
+0.0003 psi(2S) anti-K0 K0 PHSP;
+0.0003 psi(2S) anti-K0 K+ pi- PHSP;
+0.0003 psi(2S) anti-K0 K0 pi0 PHSP;
+0.0003 psi(2S) K- K+ pi0 PHSP;
+0.00034 psi(2S) phi pi+ pi- PHSP;
+0.00034 psi(2S) phi pi0 pi0 PHSP;
+0.0002 psi(2S) eta pi+ pi- PHSP;
+0.0002 psi(2S) eta pi0 pi0 PHSP;
+0.0004 psi(2S) eta' pi+ pi- PHSP;
+0.0004 psi(2S) eta' pi0 pi0 PHSP;
+0.0002 psi(2S) pi+ pi- PHSP;
+0.0002 psi(2S) pi0 pi0 PHSP;
+###
+Enddecay
+
+Decay Lambda_b0
+###
+0.00038 Lambda0 psi(2S) PHSP;
+Enddecay
+
+Decay anti-Lambda_b0
+###
+0.00038 anti-Lambda0 psi(2S) PHSP;
+Enddecay
+
+
+Decay psi(2S)
+### from DECAY.DEC
+1.000 mu+ mu- PHOTOS VLL;
+Enddecay
+
+End
--- /dev/null
+#####
+Decay chi_c1
+1.0 J/psi gamma VVP 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011]
+Enddecay
+
+Decay chi_c2
+1.0 gamma J/psi PHSP; #[Reconstructed PDG2011]
+Enddecay
+
+Decay J/psi
+1.000 e+ e- PHOTOS VLL;
+Enddecay
+
+End
+
--- /dev/null
+#####
+Decay chi_c1
+1.0 J/psi gamma VVP 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011]
+Enddecay
+
+Decay chi_c2
+1.0 gamma J/psi PHSP; #[Reconstructed PDG2011]
+Enddecay
+
+Decay J/psi
+1.000 mu+ mu- PHOTOS VLL;
+Enddecay
+
+End
+
--- /dev/null
+###
+Decay rho0
+##to be checked
+1.000 e+ e- PHOTOS VLL;
+Enddecay
+
+Decay phi
+### from DECAY.DEC
+1.000 e+ e- PHOTOS VLL;
+Enddecay
+
+Decay eta
+### to be checked
+1.000 e+ e- PHSP;
+Enddecay
+
+Decay omega
+### to be checked
+1.000 e+ e- PHOTOS VLL;
+Enddecay
+
+Decay J/psi
+### from DECAY.DEC
+1.000 e+ e- PHOTOS VLL;
+Enddecay
+
+Decay psi(2S)
+### from DECAY.DEC
+1.000 e+ e- PHOTOS VLL;
+Enddecay
+
+Decay Upsilon
+### from DECAY.DEC
+1.000 e+ e- PHOTOS VLL;
+Enddecay
+
+Decay Upsilon(2S)
+### from DECAY.DEC
+1.000 e+ e- PHOTOS VLL;
+Enddecay
+
+Decay Upsilon(3S)
+### from DECAY.DEC
+1.000 e+ e- PHOTOS VLL;
+Enddecay
+
+End
--- /dev/null
+###
+Decay rho0
+##to be checked
+1.000 mu+ mu- PHOTOS VLL;
+Enddecay
+
+Decay phi
+### from DECAY.DEC
+1.000 mu+ mu- PHOTOS VLL;
+Enddecay
+
+Decay eta
+### to be checked
+1.000 mu+ mu- PHSP;
+Enddecay
+
+Decay omega
+### to be checked
+1.000 mu+ mu- PHOTOS VLL;
+Enddecay
+
+Decay J/psi
+### from DECAY.DEC
+1.000 mu+ mu- PHOTOS VLL;
+Enddecay
+
+Decay psi(2S)
+### from DECAY.DEC
+1.000 mu+ mu- PHOTOS VLL;
+Enddecay
+
+Decay Upsilon
+### from DECAY.DEC
+1.000 mu+ mu- PHOTOS VLL;
+Enddecay
+
+Decay Upsilon(2S)
+### from DECAY.DEC
+1.000 mu+ mu- PHOTOS VLL;
+Enddecay
+
+Decay Upsilon(3S)
+### from DECAY.DEC
+1.000 mu+ mu- PHOTOS VLL;
+Enddecay
+
+End
-####
-Decay Upsilon(2S)
+###
+Decay J/psi
+### from DECAY.DEC
1.000 mu+ mu- PHOTOS VLL;
Enddecay
-End
+++ /dev/null
-####
-Decay psi(2S)
-1.000 mu+ mu- PHOTOS VLL;
-Enddecay
-
-End
+++ /dev/null
-####
-
-Decay Upsilon
-1.000 mu+ mu- PHOTOS VLL;
-Enddecay
-
-End
// If we have no string defined, check the value of the
// PYTHIA8DATA environment variable which should be set to the
// xmldoc Pythia directory
- //char* pythiaDataDir = getenv("PYTHIA8DATA");
- char *pythiaDataDir = gSystem->ExpandPathName("$ALICE_ROOT/PYTHIA8/pythia8175/xmldoc");
+ char* pythiaDataDir = getenv("PYTHIA8DATA");
if (pythiaDataDir != 0) {pythiaXmlDir = pythiaDataDir;}
}
#include "EvtGenBase/EvtReport.hh"
#include "EvtGenBase/EvtRandom.hh"
-#include "Photos/Photos.h"
-#include "Photos/PhotosHepMCEvent.h"
-#include "Photos/PhotosHepMCParticle.h"
-#include "Photos/PhotosParticle.h"
+#include "Photos.h"
+#include "PhotosHepMCEvent.h"
+#include "PhotosHepMCParticle.h"
+#include "PhotosParticle.h"
#include "HepMC/GenVertex.h"
#include "HepMC/SimpleVector.h"
--- /dev/null
+include make.inc
+
+LIB_VER = 1.0.0
+
+#Name of libraries to create
+LIB_PHOTOS_CXX_INT_SO = libPhotosCxxInterface.so
+LIB_PHOTOS_CXX_INT_A = libPhotosCxxInterface.a
+LIB_PHOTOS_FORTRAN_SO = libPhotosFortran.so
+LIB_PHOTOS_FORTRAN_A = libPhotosFortran.a
+
+PHOTOS_CXX_INT_OBJECTS = src/$(EVENT_RECORD_INTERFACE_DIR)/*.o \
+ src/$(C_PHOTOS_INTERFACE_DIR)/*.o \
+ src/$(UTILITIES_DIR)/*.o \
+ src/$(FORTRAN_PHOTOS_INTERFACE_DIR)/*.o
+
+PHOTOS_FORTRAN_OBJECTS = src/$(PHOTOS_FORTRAN_DIR)/*.o
+
+#directories containing source code
+EVENT_RECORD_INTERFACE_DIR = eventRecordInterfaces
+FORTRAN_PHOTOS_INTERFACE_DIR = photosFortranInterfaces
+C_PHOTOS_INTERFACE_DIR = photosCInterfaces
+PHOTOS_FORTRAN_DIR = photos-fortran
+UTILITIES_DIR = utilities
+
+##### Link objects to make library ######
+all: include_dir $(EVENT_RECORD_INTERFACE_DIR) $(FORTRAN_PHOTOS_INTERFACE_DIR) $(C_PHOTOS_INTERFACE_DIR) $(PHOTOS_FORTRAN_DIR) $(UTILITIES_DIR)
+ ar cr lib/$(LIB_PHOTOS_CXX_INT_A) $(PHOTOS_CXX_INT_OBJECTS)
+ $(LD) $(LDFLAGS) $(SOFLAGS) -o lib/$(LIB_PHOTOS_CXX_INT_SO).$(LIB_VER) $(PHOTOS_CXX_INT_OBJECTS)
+ ar cr lib/$(LIB_PHOTOS_FORTRAN_A) $(PHOTOS_FORTRAN_OBJECTS)
+ $(LD) $(LDFLAGS) $(SOFLAGS) -o lib/$(LIB_PHOTOS_FORTRAN_SO).$(LIB_VER) $(PHOTOS_FORTRAN_OBJECTS)
+ ln -sf $(LIB_PHOTOS_CXX_INT_SO).$(LIB_VER) lib/$(LIB_PHOTOS_CXX_INT_SO)
+ ln -sf $(LIB_PHOTOS_FORTRAN_SO).$(LIB_VER) lib/$(LIB_PHOTOS_FORTRAN_SO)
+ @echo "##################################################################"
+ @echo " Photos C++ Interface library created and moved to lib/ directory "
+ @echo "##################################################################"
+ @echo ""
+ @echo "##################################################################"
+ @echo " To run examples, cd examples/ directory and there './configure' "
+ @echo " and 'make' again. Examples require Pythia8, ROOT and MC-Tester "
+ @echo " installed. For details see examples/README. "
+ @echo "##################################################################"
+
+include_dir:
+ mkdir -p include/Photos
+
+####### Make object files ########
+$(FORTRAN_PHOTOS_INTERFACE_DIR):
+ make -C src/$(FORTRAN_PHOTOS_INTERFACE_DIR)
+ cp src/$(FORTRAN_PHOTOS_INTERFACE_DIR)/*.h include/Photos
+
+$(EVENT_RECORD_INTERFACE_DIR):
+ make -C src/$(EVENT_RECORD_INTERFACE_DIR)
+ cp src/$(EVENT_RECORD_INTERFACE_DIR)/*.h include/Photos
+
+$(C_PHOTOS_INTERFACE_DIR):
+ make -C src/$(C_PHOTOS_INTERFACE_DIR)
+ cp src/$(C_PHOTOS_INTERFACE_DIR)/*.h include/Photos
+
+$(UTILITIES_DIR):
+ make -C src/$(UTILITIES_DIR)
+ cp src/$(UTILITIES_DIR)/*.h include/Photos
+
+$(PHOTOS_FORTRAN_DIR):
+ make -C src/$(PHOTOS_FORTRAN_DIR)
+
+install:
+ mkdir -p $(PREFIX)/include/Photos
+ cp include/Photos/* $(PREFIX)/include/Photos/.
+ mkdir -p $(PREFIX)/lib
+ cp lib/* $(PREFIX)/lib/.
+
+clean:
+ make clean -C src/$(EVENT_RECORD_INTERFACE_DIR)
+ make clean -C src/$(FORTRAN_PHOTOS_INTERFACE_DIR)
+ make clean -C src/$(C_PHOTOS_INTERFACE_DIR)
+ make clean -C src/$(PHOTOS_FORTRAN_DIR)
+ make clean -C src/$(UTILITIES_DIR)
+ rm -f *~
+
+Clean: clean
+ rm -f lib/* include/Photos/*
+ rm -rf config.log config.status autom4te.cache
+ rm -rf configure.paths.sh configure.paths.csh
+ rm -f platform/make.inc make.inc
+ rm -f examples/make.inc
+
+make.inc:
+ @echo ""
+ @echo "Please execute ./configure first!"
+ @echo "(Consider using 'source platform/afs.paths.sh' [or .csh] first)"
+ @echo ""
+ @false
+
+always:
+ @true
--- /dev/null
+Photos C++ Interface
+--------------------
+Web page http://www.ph.unimelb.edu.au/~ndavidson/photos/doxygen/
+
+Documentation is in documentation/latex_documentation, type "make" there
+
+To compile the interface:
+- Execute "./configure" (if the path to HepMC is not set with
+ HEPMCLOCATION, use "./configure --with-hepmc=<path>"
+ or use "./configure --without-hepmc")
+- Execute "make"
+
+--------------------------------------
+ Alternatively cofiguration scripts based on autotools can be used.
+ In this case 'cd platform', './use-LCG-config.sh' and
+ follow the instructions in the freshly created './INSTALL' readme file.
+ The configure file in the directory 'examples' will be absent.
+ The instructions collected below should be then ignored.
+ Under MAC OS one may need to remove '-lfreetype' from
+ 'examples/Makefile'
+--------------------------------------
+
+To run the examples, "cd examples". There "./configure" and "make" as well.
+For some of the examples to work, pythia8.1 and MC-Tester will be needed.
+The most basic example does not need them.
+
+NOTE:
+On CERN platforms (lxplus, lxplus4, lxplus5...) the software located
+in the /afs/cern.ch/sw/lcg/ directory can be used. For that purpose execute:
+
+source platform/afs.paths.sh (or source platform/afs.paths.csh)
+
+prior to "./configure" executed without any parameters. The same paths will
+be used by examples there; "./configure" in the examples direcotry after
+compiling the interface as well.
+
+Paths defined in platform/afs.paths.sh:
+
+export HEPMCLOCATION=/afs/cern.ch/sw/lcg/external/HepMC/2.03.11/slc4_amd64_gcc34
+export PYTHIALOCATION=/afs/cern.ch/sw/lcg/external/MCGenerators/pythia8/135/slc4_amd64_gcc34
+export TAUOLALOCATION=/afs/cern.ch/sw/lcg/external/MCGenerators/tauola++/1.0.2a/slc4_amd64_gcc34
+export MCTESTERLOCATION=/afs/cern.ch/sw/lcg/external/MCGenerators/mctester/1.24/slc4_amd64_gcc34
+
+export PATH=/afs/cern.ch/sw/lcg/app/releases/ROOT/5.22.00/slc4_amd64_gcc34/root/bin:$PATH
+
+can be modified.
+
+Last Modified: T. Przedzinski, 07 Dec. 2011
--- /dev/null
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for Photos C++ Interface 3.3.
+#
+# Report bugs to <tomasz.przedzinski@uj.edu.pl >.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='Photos C++ Interface'
+PACKAGE_TARNAME='photos-c---interface'
+PACKAGE_VERSION='3.3'
+PACKAGE_STRING='Photos C++ Interface 3.3'
+PACKAGE_BUGREPORT='tomasz.przedzinski@uj.edu.pl '
+
+ac_default_prefix=`pwd`
+ac_unique_file="src/photosCInterfaces/Photos.cxx"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS SET_MAKE LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX RANLIB ac_ct_RANLIB F77 FFLAGS ac_ct_F77 CPP DIRECT_CPP CXXCPP EGREP LIBOBJS with_hepmc with_photos pythia8data with_tauola with_pythia8 with_mc_tester LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_F77_set=${F77+set}
+ac_env_F77_value=$F77
+ac_cv_env_F77_set=${F77+set}
+ac_cv_env_F77_value=$F77
+ac_env_FFLAGS_set=${FFLAGS+set}
+ac_env_FFLAGS_value=$FFLAGS
+ac_cv_env_FFLAGS_set=${FFLAGS+set}
+ac_cv_env_FFLAGS_value=$FFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures Photos C++ Interface 3.3 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_ACEOF
+
+ cat <<\_ACEOF
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of Photos C++ Interface 3.3:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-debug Enable debug flags
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-hepmc Path to HepMC 2.xx (use --without-hepmc to compile
+ without HepMC)
+ --with-mc-tester Path to MC-TESTER 1.23 or later (used by examples
+ only)
+ --with-pythia8 Path to Pythia 8.1 or later (used by examples only)
+ --with-tauola Path to Tauola C++ interface v1.0.5 or later (used
+ by examples only)
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ F77 Fortran 77 compiler command
+ FFLAGS Fortran 77 compiler flags
+ CPP C preprocessor
+ CXXCPP C++ preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <tomasz.przedzinski@uj.edu.pl >.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+Photos C++ Interface configure 3.3
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by Photos C++ Interface $as_me 3.3, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+
+##############################################################################
+# Process command line options
+
+if test "$AFS_PATHS" == "yes"; then
+ with_hepmc=$HEPMCLOCATION
+ with_tauola=$TAUOLALOCATION
+ with_mc_tester=$MCTESTERLOCATION
+ with_pythia8=$PYTHIALOCATION
+ pythia8data=$PYTHIA8DATA
+fi
+
+echo ""
+
+echo "$as_me:$LINENO: checking if HepMC location defined" >&5
+echo $ECHO_N "checking if HepMC location defined... $ECHO_C" >&6
+
+# Check whether --with-hepmc or --without-hepmc was given.
+if test "${with_hepmc+set}" = set; then
+ withval="$with_hepmc"
+ echo "$as_me:$LINENO: result: $with_hepmc" >&5
+echo "${ECHO_T}$with_hepmc" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+echo "$as_me:$LINENO: checking if MC-TESTER location defined" >&5
+echo $ECHO_N "checking if MC-TESTER location defined... $ECHO_C" >&6
+
+# Check whether --with-mc-tester or --without-mc-tester was given.
+if test "${with_mc_tester+set}" = set; then
+ withval="$with_mc_tester"
+ echo "$as_me:$LINENO: result: $with_mc_tester" >&5
+echo "${ECHO_T}$with_mc_tester" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+echo "$as_me:$LINENO: checking if Pythia 8 location defined" >&5
+echo $ECHO_N "checking if Pythia 8 location defined... $ECHO_C" >&6
+
+# Check whether --with-pythia8 or --without-pythia8 was given.
+if test "${with_pythia8+set}" = set; then
+ withval="$with_pythia8"
+ echo "$as_me:$LINENO: result: $with_pythia8" >&5
+echo "${ECHO_T}$with_pythia8" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+echo "$as_me:$LINENO: checking if Tauola location defined" >&5
+echo $ECHO_N "checking if Tauola location defined... $ECHO_C" >&6
+
+# Check whether --with-tauola or --without-tauola was given.
+if test "${with_tauola+set}" = set; then
+ withval="$with_tauola"
+ echo "$as_me:$LINENO: result: $with_tauola" >&5
+echo "${ECHO_T}$with_tauola" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+# Check for debug flags
+echo "$as_me:$LINENO: checking if debug flags are enabled" >&5
+echo $ECHO_N "checking if debug flags are enabled... $ECHO_C" >&6
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+ enableval="$enable_debug"
+
+ echo "$as_me:$LINENO: result: $enable_debug" >&5
+echo "${ECHO_T}$enable_debug" >&6 ;
+ FFLAGS="-g3 -O0" ;
+ CXXFLAGS="-g3 -O0"
+
+else
+
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6 ;
+ FFLAGS="-O2" ;
+ CXXFLAGS="-O2"
+
+
+fi;
+
+echo ""
+
+##############################################################################
+# Check for programs
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+all:
+ @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
+ break;;
+ * )
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std1 is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std1. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cxx_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ RANLIB=$ac_ct_RANLIB
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+# here is a trick to preffer
+# gfortran for gcc4 and higher
+# and g77 for gcc3 and lower
+flist="gfortran g77 f77"
+if [[ "$(gcc -dumpversion | cut -d . -f 1)" < "4" ]] ; then
+ flist="g77 f77 gfortran"
+fi
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $flist
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$F77"; then
+ ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+ echo "$as_me:$LINENO: result: $F77" >&5
+echo "${ECHO_T}$F77" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$F77" && break
+ done
+fi
+if test -z "$F77"; then
+ ac_ct_F77=$F77
+ for ac_prog in $flist
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_F77"; then
+ ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_F77="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+ echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
+echo "${ECHO_T}$ac_ct_F77" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_F77" && break
+done
+
+ F77=$ac_ct_F77
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:2955:" \
+ "checking for Fortran 77 compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file. (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
+if test "${ac_cv_f77_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+ program main
+#ifndef __GNUC__
+ choke me
+#endif
+
+ end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_f77_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_f77_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ FFLAGS=-g
+cat >conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_f77_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_f77_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_f77_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
+if test "$ac_test_FFLAGS" = set; then
+ FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+ FFLAGS="-g -O2"
+ else
+ FFLAGS="-g"
+ fi
+else
+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+ FFLAGS="-O2"
+ else
+ FFLAGS=
+ fi
+fi
+
+G77=`test $ac_compiler_gnu = yes && echo yes`
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+# Extract the first word of "cpp", so it can be a program name with args.
+set dummy cpp; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_DIRECT_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$DIRECT_CPP"; then
+ ac_cv_prog_DIRECT_CPP="$DIRECT_CPP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DIRECT_CPP="cpp"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_DIRECT_CPP" && ac_cv_prog_DIRECT_CPP="$CPP"
+fi
+fi
+DIRECT_CPP=$ac_cv_prog_DIRECT_CPP
+if test -n "$DIRECT_CPP"; then
+ echo "$as_me:$LINENO: result: $DIRECT_CPP" >&5
+echo "${ECHO_T}$DIRECT_CPP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset x;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *ccp;
+ char **p;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ ccp = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++ccp;
+ p = (char**) ccp;
+ ccp = (char const *const *) p;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ }
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_const=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
+if test "${ac_cv_c_inline+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_inline=$ac_kw; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6
+
+
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for ptrdiff_t" >&5
+echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6
+if test "${ac_cv_type_ptrdiff_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((ptrdiff_t *) 0)
+ return 0;
+if (sizeof (ptrdiff_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_ptrdiff_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_ptrdiff_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5
+echo "${ECHO_T}$ac_cv_type_ptrdiff_t" >&6
+if test $ac_cv_type_ptrdiff_t = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_PTRDIFF_T 1
+_ACEOF
+
+
+fi
+
+
+# Checks for library functions.
+
+for ac_header in stdlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------------- ##
+## Report this to tomasz.przedzinski@uj.edu.pl ##
+## -------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
+echo $ECHO_N "checking for GNU libc compatible malloc... $ECHO_C" >&6
+if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_malloc_0_nonnull=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if STDC_HEADERS || HAVE_STDLIB_H
+# include <stdlib.h>
+#else
+char *malloc ();
+#endif
+
+int
+main ()
+{
+exit (malloc (0) ? 0 : 1);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_malloc_0_nonnull=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_malloc_0_nonnull=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
+echo "${ECHO_T}$ac_cv_func_malloc_0_nonnull" >&6
+if test $ac_cv_func_malloc_0_nonnull = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MALLOC 1
+_ACEOF
+
+else
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MALLOC 0
+_ACEOF
+
+ case $LIBOBJS in
+ "malloc.$ac_objext" | \
+ *" malloc.$ac_objext" | \
+ "malloc.$ac_objext "* | \
+ *" malloc.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;;
+esac
+
+
+cat >>confdefs.h <<\_ACEOF
+#define malloc rpl_malloc
+_ACEOF
+
+fi
+
+
+
+
+for ac_func in strftime
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ # strftime is in -lintl on SCO UNIX.
+echo "$as_me:$LINENO: checking for strftime in -lintl" >&5
+echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6
+if test "${ac_cv_lib_intl_strftime+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char strftime ();
+int
+main ()
+{
+strftime ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_intl_strftime=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_intl_strftime=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5
+echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6
+if test $ac_cv_lib_intl_strftime = yes; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRFTIME 1
+_ACEOF
+
+LIBS="-lintl $LIBS"
+fi
+
+fi
+done
+
+
+
+
+
+for ac_func in atexit getcwd pow sqrt
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ echo "" &&
+ echo "ERROR: Basic functions not found. Something's wrong with paths." &&
+ exit -1
+
+fi
+done
+
+
+##############################################################################
+# Check for HepMC header files
+
+# If user specified --without-hepmc, skip hepmc check
+if ! test "$with_hepmc" == "no"; then
+
+
+CPPFLAGS="-I$with_hepmc/include $CPPFLAGS"
+
+
+for ac_header in HepMC/Version.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------------- ##
+## Report this to tomasz.przedzinski@uj.edu.pl ##
+## -------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ echo "" &&
+ echo "ERROR: HepMC not found. To provide location use:" &&
+ echo " --with-hepmc=/path/to/HepMC" ;
+ echo " or use";
+ echo " --without-hepmc";
+ echo " (Consider using 'source platform/afs.paths.sh' (or .csh) )"
+ echo ""
+ exit -1
+
+fi
+
+done
+
+
+else
+ with_hepmc=""
+
+fi
+
+##############################################################################
+with_photos=`pwd`
+
+if test "$prefix" != "NONE"; then
+ with_photos=$prefix
+fi
+
+pythia8data=$PYTHIA8DATA
+
+if test -z "$pythia8data"; then
+ pythia8data=$with_pythia8/xmldoc
+fi
+
+ln -sf platform/make.inc make.inc
+
+
+
+
+
+
+
+ ac_config_files="$ac_config_files platform/make.inc configure.paths.sh configure.paths.csh"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then we branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+cat >confdef2opt.sed <<\_ACEOF
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
+t quote
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
+t quote
+d
+: quote
+s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
+s,\[,\\&,g
+s,\],\\&,g
+s,\$,$$,g
+p
+_ACEOF
+# We use echo to avoid assuming a particular line-breaking character.
+# The extra dot is to prevent the shell from consuming trailing
+# line-breaks from the sub-command output. A line-break within
+# single-quotes doesn't work because, if this script is created in a
+# platform that uses two characters for line-breaks (e.g., DOS), tr
+# would break.
+ac_LF_and_DOT=`echo; echo .`
+DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
+rm -f confdef2opt.sed
+
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by Photos C++ Interface $as_me 3.3, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+Photos C++ Interface config.status 3.3
+configured by $0, generated by GNU Autoconf 2.59,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ -*)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "platform/make.inc" ) CONFIG_FILES="$CONFIG_FILES platform/make.inc" ;;
+ "configure.paths.sh" ) CONFIG_FILES="$CONFIG_FILES configure.paths.sh" ;;
+ "configure.paths.csh" ) CONFIG_FILES="$CONFIG_FILES configure.paths.csh" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@LN_S@,$LN_S,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@F77@,$F77,;t t
+s,@FFLAGS@,$FFLAGS,;t t
+s,@ac_ct_F77@,$ac_ct_F77,;t t
+s,@CPP@,$CPP,;t t
+s,@DIRECT_CPP@,$DIRECT_CPP,;t t
+s,@CXXCPP@,$CXXCPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@with_hepmc@,$with_hepmc,;t t
+s,@with_photos@,$with_photos,;t t
+s,@pythia8data@,$pythia8data,;t t
+s,@with_tauola@,$with_tauola,;t t
+s,@with_pythia8@,$with_pythia8,;t t
+s,@with_mc_tester@,$with_mc_tester,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
--- /dev/null
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.59)
+AC_INIT( [Photos C++ Interface], [3.3], [tomasz.przedzinski@uj.edu.pl] )
+AC_LANG_CPLUSPLUS
+
+AC_PREFIX_DEFAULT([`pwd`])
+AC_CONFIG_SRCDIR([src/photosCInterfaces/Photos.cxx])
+
+##############################################################################
+# Process command line options
+
+if test "$AFS_PATHS" == "yes"; then
+ with_hepmc=$HEPMCLOCATION
+ with_tauola=$TAUOLALOCATION
+ with_mc_tester=$MCTESTERLOCATION
+ with_pythia8=$PYTHIALOCATION
+ pythia8data=$PYTHIA8DATA
+fi
+
+echo ""
+
+AC_MSG_CHECKING([if HepMC location defined])
+AC_ARG_WITH(
+ [hepmc],
+ [AS_HELP_STRING([--with-hepmc], [Path to HepMC 2.xx (use --without-hepmc to compile without HepMC)] )],
+ [AC_MSG_RESULT([$with_hepmc])],
+ [AC_MSG_RESULT([no])]
+)
+
+AC_MSG_CHECKING([if MC-TESTER location defined])
+AC_ARG_WITH(
+ [mc-tester],
+ [AS_HELP_STRING([--with-mc-tester], [Path to MC-TESTER 1.23 or later (used by examples only)] )],
+ [AC_MSG_RESULT([$with_mc_tester])],
+ [AC_MSG_RESULT([no])]
+)
+
+AC_MSG_CHECKING([if Pythia 8 location defined])
+AC_ARG_WITH(
+ [pythia8],
+ [AS_HELP_STRING([--with-pythia8], [Path to Pythia 8.1 or later (used by examples only)] )],
+ [AC_MSG_RESULT([$with_pythia8])],
+ [AC_MSG_RESULT([no])]
+)
+
+AC_MSG_CHECKING([if Tauola location defined])
+AC_ARG_WITH(
+ [tauola],
+ [AS_HELP_STRING([--with-tauola], [Path to Tauola C++ interface v1.0.5 or later (used by examples only)] )],
+ [AC_MSG_RESULT([$with_tauola])],
+ [AC_MSG_RESULT([no])]
+)
+
+# Check for debug flags
+AC_MSG_CHECKING([if debug flags are enabled])
+AC_ARG_ENABLE(
+ [debug],
+ [AS_HELP_STRING([--enable-debug],[Enable debug flags])],
+ [
+ AC_MSG_RESULT([$enable_debug]) ;
+ FFLAGS="-g3 -O0" ;
+ CXXFLAGS="-g3 -O0"
+ ],
+ [
+ AC_MSG_RESULT([no]) ;
+ FFLAGS="-O2" ;
+ CXXFLAGS="-O2"
+ ]
+)
+
+echo ""
+
+##############################################################################
+# Check for programs
+AC_PROG_MAKE_SET
+AC_PROG_LN_S
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_RANLIB
+
+# here is a trick to preffer
+# gfortran for gcc4 and higher
+# and g77 for gcc3 and lower
+flist="gfortran g77 f77"
+if [[[ "$(gcc -dumpversion | cut -d . -f 1)" < "4" ]]] ; then
+ flist="g77 f77 gfortran"
+fi
+
+AC_PROG_F77([$flist])
+AC_PROG_CPP
+AC_CHECK_PROG(DIRECT_CPP,cpp,cpp,$CPP)
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_CHECK_TYPES([ptrdiff_t])
+
+# Checks for library functions.
+AC_FUNC_MALLOC
+AC_FUNC_STRFTIME
+AC_CHECK_FUNCS([atexit getcwd pow sqrt], ,
+[ echo "" &&
+ echo "ERROR: Basic functions not found. Something's wrong with paths." &&
+ exit -1
+])
+
+##############################################################################
+# Check for HepMC header files
+
+# If user specified --without-hepmc, skip hepmc check
+if ! test "$with_hepmc" == "no"; then
+
+AC_SUBST(with_hepmc)
+CPPFLAGS="-I$with_hepmc/include $CPPFLAGS"
+
+AC_CHECK_HEADERS([HepMC/Version.h], ,
+[ echo "" &&
+ echo "ERROR: HepMC not found. To provide location use:" &&
+ echo " --with-hepmc=/path/to/HepMC" ;
+ echo " or use";
+ echo " --without-hepmc";
+ echo " (Consider using 'source platform/afs.paths.sh' (or .csh) )"
+ echo ""
+ exit -1
+])
+
+else
+ with_hepmc=""
+ AC_SUBST(with_hepmc)
+fi
+
+##############################################################################
+with_photos=`pwd`
+
+if test "$prefix" != "NONE"; then
+ with_photos=$prefix
+fi
+
+pythia8data=$PYTHIA8DATA
+
+if test -z "$pythia8data"; then
+ pythia8data=$with_pythia8/xmldoc
+fi
+
+ln -sf platform/make.inc make.inc
+
+AC_SUBST(with_photos)
+AC_SUBST(with_hepmc)
+AC_SUBST(pythia8data)
+AC_SUBST(with_tauola)
+AC_SUBST(with_pythia8)
+AC_SUBST(with_mc_tester)
+AC_CONFIG_FILES([platform/make.inc configure.paths.sh configure.paths.csh])
+AC_OUTPUT
+
--- /dev/null
+#!/bin/csh
+
+setenv PHOTOSLOCATION "@with_photos@"
+setenv HEPMCLOCATION "@with_hepmc@"
+setenv TAUOLALOCATION "@with_tauola@"
+setenv PYTHIALOCATION "@with_pythia8@"
+setenv MCTESTERLOCATION "@with_mc_tester@"
+setenv PYTHIA8DATA "@pythia8data@"
+
+set ROOTLIB=`root-config --libdir`
+
+# Examples have these paths hardcoded during compilation
+# Nonetheless, this is line might be useful for any other programs
+# that user might want to compile
+if (! $?LD_LIBRARY_PATH) setenv LD_LIBRARY_PATH ""
+
+setenv LD_LIBRARY_PATH "${PHOTOSLOCATION}/lib:${PREFIX}/lib:${HEPMCLOCATION}/lib:${TAUOLALOCATION}/lib:${PYTHIALOCATION}/lib/archive:${MCTESTERLOCATION}/lib:${ROOTLIB}:${LD_LIBRARY_PATH}"
+
--- /dev/null
+#!/bin/sh
+
+export PHOTOSLOCATION=@with_photos@
+export HEPMCLOCATION=@with_hepmc@
+export TAUOLALOCATION=@with_tauola@
+export PYTHIALOCATION=@with_pythia8@
+export MCTESTERLOCATION=@with_mc_tester@
+export PYTHIA8DATA=@pythia8data@
+
+ROOTLIB=`root-config --libdir`
+
+# Examples have these paths hardcoded during compilation
+# Nonetheless, this is line might be useful for any other programs
+# that user might want to compile
+export LD_LIBRARY_PATH=${PHOTOSLOCATION}/lib:${PREFIX}/lib:${HEPMCLOCATION}/lib:${TAUOLALOCATION}/lib:${PYTHIALOCATION}/lib/archive:${MCTESTERLOCATION}/lib:${ROOTLIB}:${LD_LIBRARY_PATH}
--- /dev/null
+# Doxyfile 1.4.6
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = C++ Interface to PHOTOS
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = ./
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish,
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
+# include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = YES
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ../../
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS = *.c *.f *.C *.F *.h *.H *.cpp *.cc *.cxx Makefile *.DEC *.pdl
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH = ./
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER = header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET = doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = YES
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = YES
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = NO
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that a graph may be further truncated if the graph's
+# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH
+# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default),
+# the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, which results in a white background.
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = YES
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
--- /dev/null
+PAGES_DIR = doxygenPages
+
+default: Doxyfile mainpage.h
+ doxygen Doxyfile
+ @echo "******************************************************"
+ @echo " Please load the doxygen documentation file "
+ @echo " doxygen/html/index.html in your web browser "
+ @echo "******************************************************"
+
+clean:
+ rm -rf html/
+ rm *~
--- /dev/null
+Changelog for changes with respect to version 3.0
+-------------------------------------------------
+
+May 3 2014
+- Adaptation for new class of events written to HepMC by new releases of
+ Pythia and spotted in versions newer thant 8.165
+Apr 7 2014
+- Exit codes in case of an error changed to -1 (previously it was mostly 0)
+- Version 3.55 released
+Feb 1 2014
+- Fix for gcc 4.8.1 introduced (thanks to Rafael Delgado Lopez for warning);
+ Photos++ has been tested on gcc 4.8.1. While no further problems
+ were found, due to nature of changes in gcc 4.8, we are not confident
+ that Photos++ will work correctly in all conditions and for this
+ version of gcc. We plan further tests.
+Nov 22 2013
+- Fixed bug that caused segmentation fault in rare cases when
+ HepMC::GenParticle::parent_event() caused invalid memory read
+ Thanks Wojciech Kotlarski for finding it out
+Nov 21 2013
+- Added compatibility for FORTRAN generators that use different standard
+ of setting mother ID in HEPEVT event record
+- LCG scripts updated
+- Number of compilation warnings removed
+- Code tested within both C++ and Fortran environments
+Jul 20 2013
+- Code fully located in Photospp namespace
+Jul 12 2013
+- version 3.54 is free of fortran, but need to be tested/cleaned.
+Nov 04 2012
+- Photos::setRandomGenerator() added, it can substitute native random
+ number generator with the user provided one.
+Nov 02 2012
+- ME correction for W fixed; it can work for multichannel samples as well
+- Boosting os grandaughters for ultrarelativistic mothers fixed with the help
+ of PHCORK(0) added to PHOOUT routine. Resulting from there 4-vectors
+ are used in kinematic modifications of C++
+- Photos::forceMass and Photos::forceMassFromEventRecord now work regardless
+ of whether Photos::forceMassFrom4Vector is true or false.
+Oct 28 2012
+- Info, that until now ME in W decay can be used only for single channel,
+ that means only one decay channel of either W+ or W- for the particular
+ run.
+Aug 14 2012
+- Photos will not act on Pomerons and its diffractive states. This was
+ physically incorrect and even could cause NaNs to appear in the event.
+ This protection was not necessary in the past.
+- Fixed bug in algorithm for kinematic adjustment introduced in
+ update of Apr 24
+- Fixed bug which in rare cases caused segmentation fault on 32-bit platform
+ with gcc 4.1
+- Examples updated for compatibility with Tauola v1.0.7
+
+Apr 24 2012
+- kinematic adjustment for vertex where all outgoing dauhters self-decay
+ introduced, self decay vertices for photons generated by photos are added.
+Apr 22 2012
+- Momentum conservation check for all stable particles in the event
+ added to the examples.
+
+Apr 19 2012
+ Further extension for non-standard event record trees:
+- Boosting of subsequent daughters of verices treated by photos
+ is now hardy for multimother splittings (that is loops in a tree)
+- It is not hardy (yet) for secondary intgeractions like it case of ttbar
+ production vertex.
+- Experiments default, energy momentum conservation test (printing sum of
+ all event's stable products 4-momenta), which is to be repated by users
+ (see documentation Appendix B.3) is in our demo programs now.
+
+Apr 5 2012
+- New methods for ignoring status codes:
+ ignoreParticlesOfStatus
+ deIgnoreParticlesOfStatus
+ isStatusCodeIgnored
+
+
+Apr 1 2012
+ Inherited from HepMC method of momentum conservation check supplemented
+ with missing so far energy. This is of importance for control of history
+ entries.
+
+Mar 24 2012
+- Release 3.4
+- New options useful for correcting event record Photos is supposed to act,
+ resulting from interactions with users:
+ forceMass
+ forceMassFromEventRecord
+ createHistoryEntries
+- small bugfixes
+
+
+Dec 10 2011
+- Release 3.3 (sent to LCG for installation).
+- NLO installed in all options and demos: for Z W and scalars decays.
+- Cleaning of the configuration scripts and LCG scripts completed
+- All tests passed. Up-to-date READMES, headers of all root benchmark files,
+ options in test programs.
+- Several older benchmark files for NLO tests added for reference. Available
+ for comparisons with advanced options of test programs; options
+ described in 'examples/testing/README-comparison-options'
+
+- Example using interface without HepMC added
+- To compile without HepMC use:
+ ./configure --without-hepmc
+
+Nov 11 2011
+ - Long tests with SANC at sub 0.01 % level went fine
+ for single photon version of W decay at NLO, see:
+ http://annapurna.ifj.edu.pl/~wasm/photosNLOtest.html
+ - Maximum weight over-run for W decay localized and fixed.
+ - NLO in scalar to two saclars active, but demos are missing some explanations
+ and activation examples.
+ - NLO exp W decay still missing test benchmarks.
+
+Apr 26 2011
+ - NLO for W decay installed, some tests went OK, but need continuation
+ - NLO in scalar to two saclars not active, but code is already in.
+
+Mar 28 2011
+- Added instalation scripts for LCG.
+
+Dec 23 2010
+- Bug resulting in NaN's on some platforms fixed
+-draft of ZmumuNLO example/testing added
+Dec 22 2010
+- First order NLO version checked
+-numerical stability on other platforms must be verified
+-version of reduction procedures remain to be re-checked as well
+Dec 21 2010
+- First long sample tests start to come OK, demos are not prepared.
+ Note difference at 0.05 % level with respect to NLO paper from 2007.
+ Different option of matching consecutive emission is used. Point will be
+ clarified later.
+- First order NLO version remain unchecked.
+Dec 12 2010
+- First tests of NLO installation start to come out OK
+
+Dec 10 2010
+- NLO option drafted into the code, no tests performed
+
+Dec 5 2010
+- Added: methods for option complete matrix element calculation
+ (prepared in detail for Z/gamma only)
+ WARNING: Implementation of matrix element for Z/gamma at work.
+- Numerically insignificant fix for the bug reported by Savinov.
+ Result was that for photons of energies below .0001 of decaying particle
+ mass final state charged particles were getting unphysical mass in event
+ record.
+
+Nov 8 2010
+- Fixed small typo in configuration help printout
+
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<title>Photos C++ Interface</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<META NAME="Keywords" CONTENT="HEP PHOTOS 3.0 C++ HepMC Monte Carlo Generator">
+<META NAME="Description" CONTENT="Interface to old PHOTOS, written in C++ using
+HepMC Event Record">
+</head>
+<body>
+
--- /dev/null
+/**
+
+ @mainpage C++ Interface to PHOTOS
+ @brief Description of PHOTOS Interface in C++
+
+ @authors Nadia Davidson, Tomasz Przedzinski, Zbigniew Was
+
+ @section download1 New release
+
+ The source code and documentation for release 3.56. The following files are provided for download:
+ - <a href="resources/PHOTOS.3.56/Photos_interface_design.3.56.pdf">Photos_interface_design.pdf</a> full software documentation.
+ - <a href="resources/PHOTOS.3.56/PHOTOS.3.56.tar.gz">PHOTOS 3.56 source code </a> tarball
+ ( <a href="resources/PHOTOS.3.56/PHOTOS.3.56-LHC.tar.gz"> version for LHC/LCG</a> installation)
+ and its <a href="resources/PHOTOS.3.56/svn_info_photos.3.56.txt">revision info</a> SVN tag, tarball creation date/time, etc.
+ For updates with respect to release 3.0 see <a href="resources/PHOTOS.3.56/changelog.3.56.txt">changelog.txt</a>
+
+ @section developement Developement version
+
+ The source code and documentation are updated daily from the repository. The following files are provided for download of the developement version:
+ - <a href="resources/PHOTOS.development.version/Photos_interface_design.development.version.pdf">Photos_interface_design.pdf</a> full software documentation.
+ - <a href="resources/PHOTOS.development.version/PHOTOS.development.version.tar.gz">PHOTOS development version source code </a> tarball
+ ( <a href="resources/PHOTOS.development.version/PHOTOS.development.version.tar.gz"> version for LHC/LCG</a> installation)
+ and its <a href="resources/PHOTOS.development.version/svn_info_photos.development.version.txt">revision info</a> SVN tag, tarball creation date/time, etc.
+ For updates with respect to release 3.0 see <a href="resources/PHOTOS.development.version/changelog.development.version.txt">changelog.txt</a>.
+
+ @section download Older releases
+
+ The source code and documentation for release 3.55. The following files are provided for download:
+ - <a href="resources/PHOTOS.3.55/Photos_interface_design.3.55.pdf">Photos_interface_design.pdf</a> full software documentation.
+ - <a href="resources/PHOTOS.3.55/PHOTOS.3.55.tar.gz">PHOTOS 3.55 source code </a> tarball
+ ( <a href="resources/PHOTOS.3.55/PHOTOS.3.55-LHC.tar.gz"> version for LHC/LCG</a> installation)
+ and its <a href="resources/PHOTOS.3.55/svn_info_photos.3.55.txt">revision info</a> SVN tag, tarball creation date/time, etc.
+ For updates with respect to release 3.0 see <a href="resources/PHOTOS.3.55/changelog.3.55.txt">changelog.txt</a>
+
+ The source code and documentation for release 3.54. The following files are provided for download:
+ - <a href="resources/PHOTOS.3.54/Photos_interface_design.3.54.pdf">Photos_interface_design.pdf</a> full software documentation.
+ - <a href="resources/PHOTOS.3.54/PHOTOS.3.54.tar.gz">PHOTOS 3.54 source code </a> tarball
+ ( <a href="resources/PHOTOS.3.54/PHOTOS.3.54-LHC.tar.gz"> version for LHC/LCG</a> installation)
+ and its <a href="resources/PHOTOS.3.54/svn_info_photos.3.54.txt">revision info</a> SVN tag, tarball creation date/time, etc.
+ For updates with respect to release 3.0 see <a href="resources/PHOTOS.3.54/changelog.3.54.txt">changelog.txt</a>
+
+ The source code and documentation for release 3.52. The following files are provided for download:
+ - <a href="resources/PHOTOS.3.52/Photos_interface_design.3.52.pdf">Photos_interface_design.pdf</a> full software documentation.
+ - <a href="resources/PHOTOS.3.52/PHOTOS.3.52.tar.gz">PHOTOS 3.52 source code </a> tarball
+ ( <a href="resources/PHOTOS.3.52/PHOTOS.3.52-LHC.tar.gz"> version for LHC/LCG</a> installation)
+ and its <a href="resources/PHOTOS.3.52/svn_info_photos.3.52.txt">revision info</a> SVN tag, tarball creation date/time, etc.
+ For updates with respect to release 3.0 see <a href="resources/PHOTOS.3.52/changelog.3.52.txt">changelog.txt</a>
+
+ The source code and documentation for release 3.51. The following files are provided for download:
+ - <a href="resources/PHOTOS.3.51/Photos_interface_design.3.51.pdf">Photos_interface_design.pdf</a> full software documentation.
+ - <a href="resources/PHOTOS.3.51/PHOTOS.3.51.tar.gz">PHOTOS 3.51 source code </a> tarball
+ ( <a href="resources/PHOTOS.3.51/PHOTOS.3.51-LHC.tar.gz"> version for LHC/LCG</a> installation)
+ and its <a href="resources/PHOTOS.3.51/svn_info_photos.3.51.txt">revision info</a> SVN tag, tarball creation date/time, etc.
+ For updates with respect to release 3.0 see <a href="resources/PHOTOS.3.51/changelog.3.51.txt">changelog.txt</a>
+
+ The source code and documentation for release 3.5. The following files are provided for download:
+ - <a href="resources/PHOTOS.3.5/Photos_interface_design.3.5.pdf">Photos_interface_design.pdf</a> full software documentation.
+ - <a href="resources/PHOTOS.3.5/PHOTOS.3.5.tar.gz">PHOTOS 3.5 source code </a> tarball
+ ( <a href="resources/PHOTOS.3.5/PHOTOS.3.5-LHC.tar.gz"> version for LHC/LCG</a> installation)
+ and its <a href="resources/PHOTOS.3.5/svn_info_photos.3.5.txt">revision info</a> SVN tag, tarball creation date/time, etc.
+ For updates with respect to release 3.0 see <a href="resources/PHOTOS.3.5/changelog.3.5.txt">changelog.txt</a>
+
+ The source code and documentation for release 3.4. The following files are provided for download:
+ - <a href="resources/PHOTOS.3.4/Photos_interface_design.3.4.pdf">Photos_interface_design.pdf</a> full software documentation.
+ - <a href="resources/PHOTOS.3.4/PHOTOS.3.4.tar.gz">PHOTOS 3.4 source code </a> tarball
+ ( <a href="resources/PHOTOS.3.4/PHOTOS.3.4-LHC.tar.gz"> version for LHC/LCG</a> installation)
+ and its <a href="resources/PHOTOS.3.4/svn_info_photos.3.4.txt">revision info</a> SVN tag, tarball creation date/time, etc.
+ For updates with respect to release 3.0 see <a href="resources/PHOTOS.3.4/changelog.3.4.txt">changelog.txt</a>
+ - NEW: methods to correct content of event record: (i) mass (ii) add history entries (iii) program is still not ready to work
+ for cases when in vertex some daughters are history and some other are not.
+
+ The source code and documentation for release 3.3. The following files are provided for download:
+ - <a href="resources/PHOTOS.3.3/Photos_interface_design.3.3.pdf">Photos_interface_design.pdf</a> full software documentation.
+ - <a href="resources/PHOTOS.3.3/PHOTOS.3.3.tar.gz">PHOTOS 3.3 source code </a> tarball
+ ( <a href="resources/PHOTOS.3.3/PHOTOS.3.3-LHC.tar.gz"> version for LHC/LCG</a> installation)
+ and its <a href="resources/PHOTOS.3.3/svn_info_photos.3.3.txt">revision info</a> SVN tag, tarball creation date/time, etc.
+ For updates with respect to release 3.0 see <a href="resources/PHOTOS.3.3/changelog.3.3.txt">changelog.txt</a>
+ - NEW: NLO in decays of Z, W and B (K) --> 2 scalar, <a href="http://annapurna.ifj.edu.pl/~wasm/phNLO.htm">photos NLO tests</a>.
+
+
+ The source code and documentation for release 3.0. The following files are provided for download:
+ - <a href="http://arxiv.org/abs/1011.0937">arXiv:1011.0937</a> full software documentation.
+ - <a href="resources/PHOTOS.3.0.tar.gz">PHOTOS 3.0 source code </a> tarball.
+
+ Note that LCG/Genser
+ <a href="http://sftweb.cern.ch/generators/">Generator
+ Services Subproject </a> distributes compiled, platform adopted
+ tar balls of our programs.
+
+ @section intro Introduction/Status
+
+ The tar file contains the C++ interface along with parts of
+ the source code for PHOTOS (see <a href="http://wasm.web.cern.ch/wasm/goodies.html">here</a>, version from Oct 11 2005).
+
+ The tar-ball has the functionality at least of its FORTRAN predecessor for all cases.
+ An extensive number of tests performed in X.2011 and XI.2011 has been collected on the webpage of <a href="http://annapurna.ifj.edu.pl/~wasm/phNLO.htm">photos NLO tests</a>.
+ In particular, tests with SANC went at sub 0.01\% level
+
+ @section setup Requirements
+
+ For compilation, and to run the simple example, the interface requires:
+ - <a href="http://lcgapp.cern.ch/project/simu/HepMC/">HepMC v2.04</a> or later.
+
+ For a multitude of examples, one needs to install the libraries necessary to
+generate physics events stored in HepMC and to monitor such events:
+ - <a href="http://home.thep.lu.se/~torbjorn/Pythia.html">PYTHIA 8.1</a> or later. PYTHIA must be compiled with HepMC 2 so that the PYTHIA library hepmcinterface exists.
+ - <a href="http://tauolapp.web.cern.ch">TAUOLA C++ Interface v1.0.7</a> or later (we expect Tauolapp namespace to be defined).
+ - <a href="http://mc-tester.web.cern.ch/MC-TESTER/">MC-TESTER v1.24</a> or later. Do not forget to compile the additional HepMC library libHepMCEvent as well.
+ - <a href="http://root.cern.ch/drupal/">ROOT v5.18</a> or later
+
+ @section compile Configuration and Compilation
+
+ In order to compile the PHOTOS C++ interface:
+ - Execute './configure' with additional command line options:
+ - '--with-hepmc=\<path\> ' provides the path to the HepMC installation directory. One can set the HEPMCLOCATION variable instead of using this directive. This path is required for the interface to compile. To compile without HepMC use '--without-hepmc'.
+ - '--prefix=\<path\>' provides the installation path. The 'include' and 'lib' directories will be copied there if 'make install' is executed later. If none has been provided, the default directory for installation is '/usr/local'.
+ - Execute 'make'
+ - Optionally, execute 'make install' to copy files to the directory provided during configuration.
+
+ The PHOTOS C++ interface will be compiled and the '/lib' and '/include' directories will contain the appropriate library and include files.
+
+ In order to compile the examples, enter 'examples' directory, and:
+ - execute './configure' to determine which examples can be compiled. Additional paths can be provided as command line options:
+ - '--with-pythia8=\<path\>' provides the path to the Pythia8 installation directory. One can set the PYTHIALOCATION variable instead of using this directive. This path is required for all examples and tests.
+ - '--with-mc-tester=\<path\>' provides the path to the MC-Tester installation directory (the libHepMCEvent must be compiled as well, check the MC-Tester documentation for more details). One can set the MCTESTERLOCATION variable instead of using this directive. This path is required for all additional examples and tests. It is assumed that using this option also implies that ROOT has already been installed (since it's required by MC-TESTER). The location of its binaries should be listed in the PATH variable.
+ - '--with-tauola=\<path\>' provides the path to the TAUOLA C++ interface installation directory. One can set the TAUOLALOCATION variable instead of using this directive. This path is required for additional examples.
+ - execute 'make'
+
+ Note that for examples working with PYTHIA 8.1, the PYTHIA8DATA global variable must be set (refer to the instructions provided during configuration).
+ Similarly, for examples in the examples/testing directory to work, the MCTESTERLOCATION global variable must be set.
+ If neither PYTHIA nor MC-TESTER are available, only the simple example can be
+used. The '/examples' directory will contain the compiled example files.
+
+ @section testing Testing
+
+ In order to run more elaborate and physics interesting tests both PYTHIA
+and MC-TESTER must be installed. In some cases TAUOLA C++ will be needed too.
+ - Compile the PHOTOS C++ interface as well as examples.
+ - Check that the appropriate system variables are set: normally set by the script
+ configure.paths.sh [.csh] (the configuation step mentions this script).
+ - Enter the /examples/testing directory. Modify test.inc if needed.
+ - Enter the selected directory and execute 'make'.
+
+ The appropriate .root files as well as .pdf files generated by MC-TESTER will be created inside the choosen directory. You can execute 'make clobber' to clean the directory. You can also execute 'make' inside the 'PHOTOS/examples/testing' directory to run all available tests one after another.
+
+
+
+ <hr>
+ Last update 27 September 2013.
+
+*/
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 0 0 567 354
+%%Title: ./booklet/Z0.TO.gamma.gamma.mu+.mu-./M1@0001.eps: Comparison of Mass(1) of gamma gamma in channel Z0 => gamma gamma mu+ mu-
+%%Creator: ROOT Version 5.24/00
+%%CreationDate: Tue Jul 27 20:45:23 2010
+%%EndComments
+%%BeginProlog
+80 dict begin
+/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
+/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
+/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
+/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
+/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
+/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
+/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
+/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
+/mp {newpath /y exch def /x exch def} def
+/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
+/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
+/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
+/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
+/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
+/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
+/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
+/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
+ 0 w3 neg d w3 neg 0 d cl s } def
+/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl fill gr} def
+/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl s gr} def
+/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
+ sub m w w d s} def
+/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
+/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
+/reEncode {exch findfont dup length dict begin {1 index /FID eq {pop pop} {def} ifelse } forall /Encoding exch def currentdict end dup /FontName get exch definefont pop } def [/Times-Bold /Times-Italic /Times-BoldItalic /Helvetica
+ /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique /Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Times-Roman /AvantGarde-Book /AvantGarde-BookOblique /AvantGarde-Demi /AvantGarde-DemiOblique /Bookman-Demi
+ /Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic /Helvetica-Narrow /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique /Helvetica-Narrow-Oblique /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold
+ /NewCenturySchlbk-BoldItalic /NewCenturySchlbk-Italic /Palatino-Bold /Palatino-BoldItalic /Palatino-Italic /Palatino-Roman ] {ISOLatin1Encoding reEncode } forall
+/oshow {gsave [] 0 sd true charpath stroke gr} def
+/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
+ text sw pop xs add /xs exch def} def
+/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
+pop neg xs add /xs exch def} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 3 lw 0.999 0.999 0.999 c 2268 1415 0 0 bf black 0.999 0.999 0.999 c 1814 1132 227 142 bf black 1814 1132 227 142 bl 0.999 0.999 0.999 c 1 1 1 c black 0.999 0.999 0.999 c 227 1083 m 15 X -9 Y
+ 15 X -1 Y 15 X 2 Y 45 X -2 Y 16 X -3 Y 15 X -1 Y 15 X -2 Y 15 X -4 Y 15 X -2 Y 15 X -4 Y 15 X -4 Y 15 X -3 Y 16 X -7 Y 15 X -2 Y 15 X -10 Y 15 X -2 Y 15 X -8 Y 15 X -8 Y 15 X -3 Y 15 X -9 Y 15 X -12 Y 16 X -5 Y 15 X -8 Y 30 X -14 Y 15 X -6 Y 15 X
+ -3 Y 15 X -10 Y 15 X -6 Y 16 X -14 Y 15 X 2 Y 15 X -18 Y 15 X 1 Y 15 X -14 Y 15 X 6 Y 15 X -13 Y 15 X -8 Y 15 X -14 Y 16 X -18 Y 15 X 2 Y 15 X -16 Y 30 X -18 Y 15 X -7 Y 15 X -3 Y 15 X -14 Y 16 X -6 Y 15 X 1 Y 15 X -22 Y 15 X 2 Y 15 X -22 Y 15 X 2
+ Y 15 X -1 Y 15 X -47 Y 16 X 42 Y 15 X -32 Y 15 X -23 Y 15 X 2 Y 15 X -5 Y 15 X -19 Y 15 X 15 Y 15 X -25 Y 15 X 7 Y 16 X -11 Y 15 X -20 Y 15 X 13 Y 15 X -27 Y 15 X 24 Y 15 X -38 Y 15 X 3 Y 15 X -43 Y 16 X 26 Y 15 X -20 Y 15 X -11 Y 15 X -1 Y 15 X -3
+ Y 15 X 1 Y 15 X -29 Y 15 X -18 Y 15 X 8 Y 16 X 12 Y 15 X -21 Y 15 X 32 Y 15 X -61 Y 15 X 9 Y 15 X -43 Y 15 X 75 Y 15 X -70 Y 16 X -16 Y 15 X 20 Y 15 X -60 Y 15 X 53 Y 15 X -40 Y 15 X 47 Y 15 X -15 Y 15 X 18 Y 15 X -77 Y 16 X 32 Y 15 X 11 Y 15 X -33
+ Y 15 X 35 Y 15 X 3 Y 15 X 31 Y 15 X -236 Y 15 X 865 Y 16 X -943 Y 181 X s black 227 142 m 1814 X s 227 176 m -34 Y s 309 159 m -17 Y s 392 159 m -17 Y s 474 159 m -17 Y s 557 176 m -34 Y s 639 159 m -17 Y s 722 159 m -17 Y s 804 159 m -17 Y s 886
+ 176 m -34 Y s 969 159 m -17 Y s 1051 159 m -17 Y s 1134 159 m -17 Y s 1216 176 m -34 Y s 1299 159 m -17 Y s 1381 159 m -17 Y s 1464 159 m -17 Y s 1546 176 m -34 Y s 1629 159 m -17 Y s 1711 159 m -17 Y s 1794 159 m -17 Y s 1876 176 m -34 Y s 1876
+ 176 m -34 Y s 1958 159 m -17 Y s
+ gsave 2268 1415 0 0 C 209 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 517 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 845 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 1176 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 1507 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 1864 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr 0.999 0.999 0.999 c 227 142 m 1132 Y s 281 142 m -54 X s 254 186 m -27 X s 254 231 m -27 X s 254 276 m -27 X s 281 320 m -54 X s 254 365 m -27 X s 254
+ 410 m -27 X s 254 454 m -27 X s 281 499 m -54 X s 254 544 m -27 X s 254 588 m -27 X s 254 633 m -27 X s 281 678 m -54 X s 254 722 m -27 X s 254 767 m -27 X s 254 812 m -27 X s 281 856 m -54 X s 254 901 m -27 X s 254 946 m -27 X s 254 990 m -27 X s
+ 281 1035 m -54 X s 254 1080 m -27 X s 254 1124 m -27 X s 254 1169 m -27 X s 281 1214 m -54 X s 281 1214 m -54 X s 254 1258 m -27 X s
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 141 301 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 137 479 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 141 658 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 141 837 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 190 1016 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr
+ gsave 2268 1415 0 0 C 141 1195 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.2) show NC gr 1 0 0 c 1 1 1 c black 1 0 0 c 227 1265 m 15 X -74 Y 15 X -18 Y 15 X 5 Y 15 X -4 Y 15 X -9 Y 15 X -9 Y 16 X -10 Y 15 X -9 Y 15 X -8 Y 15 X -10 Y 15 X
+ -8 Y 15 X -10 Y 15 X -8 Y 15 X -8 Y 16 X -10 Y 15 X -8 Y 15 X -11 Y 15 X -9 Y 15 X -10 Y 15 X -8 Y 15 X -10 Y 15 X -9 Y 15 X -9 Y 16 X -8 Y 15 X -8 Y 15 X -7 Y 15 X -6 Y 15 X -10 Y 15 X -7 Y 15 X -7 Y 15 X -7 Y 16 X -7 Y 15 X -7 Y 15 X -10 Y 15 X
+ -3 Y 15 X -6 Y 15 X -5 Y 15 X -9 Y 15 X -7 Y 15 X -6 Y 16 X -5 Y 15 X -4 Y 15 X -9 Y 15 X -4 Y 15 X -8 Y 15 X -6 Y 15 X -4 Y 15 X -10 Y 16 X -3 Y 15 X -3 Y 15 X -12 Y 15 X -6 Y 15 X -6 Y 15 X -2 Y 15 X -3 Y 15 X -15 Y 16 X 3 Y 15 X -6 Y 15 X -12 Y
+ 15 X -8 Y 15 X -3 Y 15 X -9 Y 15 X -1 Y 15 X -13 Y 15 X 5 Y 16 X -10 Y 15 X -3 Y 15 X -6 Y 15 X -11 Y 15 X -4 Y 15 X -9 Y 30 X -18 Y 16 X 1 Y 15 X -7 Y 15 X -3 Y 15 X -10 Y 15 X -7 Y 15 X -5 Y 15 X -5 Y 15 X -13 Y 15 X -7 Y 16 X 3 Y 15 X -5 Y 15 X
+ -9 Y 15 X -22 Y 15 X 3 Y 15 X -25 Y 15 X 8 Y 15 X -16 Y 16 X -20 Y 15 X 9 Y 15 X -28 Y 15 X 8 Y 15 X -17 Y 15 X 6 Y 15 X -13 Y 15 X -16 Y 15 X -56 Y 31 X 11 Y 15 X -63 Y 15 X -16 Y 15 X -56 Y 30 X -164 Y 212 X s 0 1 0 c 1 1 1 c black 0 1 0 c 227
+ 1265 m 15 X -73 Y 15 X -18 Y 15 X 5 Y 15 X -4 Y 15 X -9 Y 15 X -9 Y 16 X -10 Y 15 X -9 Y 15 X -8 Y 15 X -9 Y 15 X -8 Y 15 X -9 Y 15 X -8 Y 15 X -7 Y 16 X -10 Y 15 X -7 Y 15 X -11 Y 15 X -8 Y 15 X -9 Y 15 X -8 Y 15 X -9 Y 15 X -8 Y 15 X -8 Y 16 X -7
+ Y 15 X -7 Y 15 X -8 Y 15 X -4 Y 15 X -10 Y 15 X -6 Y 15 X -6 Y 15 X -6 Y 16 X -5 Y 15 X -8 Y 15 X -8 Y 15 X -3 Y 15 X -4 Y 15 X -6 Y 15 X -7 Y 15 X -7 Y 15 X -3 Y 16 X -4 Y 15 X -4 Y 15 X -7 Y 15 X -4 Y 15 X -5 Y 15 X -5 Y 15 X -4 Y 15 X -8 Y 16 X
+ -2 Y 15 X -2 Y 15 X -9 Y 15 X -7 Y 15 X -2 Y 15 X -3 Y 15 X -3 Y 15 X -7 Y 16 X -4 Y 15 X -1 Y 15 X -8 Y 15 X -8 Y 15 X -3 Y 15 X -6 Y 15 X -3 Y 15 X -8 Y 15 X 3 Y 16 X -8 Y 15 X 1 Y 15 X -8 Y 15 X -6 Y 15 X -9 Y 15 X -2 Y 30 X -9 Y 16 X -5 Y 15 X
+ -3 Y 15 X -1 Y 15 X -9 Y 15 X -6 Y 15 X -6 Y 15 X 2 Y 15 X -8 Y 15 X -9 Y 16 X -1 Y 30 X -16 Y 15 X -6 Y 30 X -12 Y 15 X -13 Y 15 X 3 Y 16 X -16 Y 15 X 4 Y 15 X -8 Y 15 X -10 Y 15 X -5 Y 15 X -8 Y 15 X -9 Y 15 X -22 Y 15 X -29 Y 16 X -12 Y 15 X 8 Y
+ 15 X -52 Y 15 X -28 Y 15 X -57 Y 15 X -9 Y 15 X -38 Y 15 X -228 Y 197 X s 1 0 0 c 227 142 m 1132 Y s 281 142 m -54 X s black
+ gsave 2268 1415 0 0 C 208 120 t 0 r -23 0 t /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr 1 0 0 c 254 205 m -27 X s 254 243 m -27 X s 254 269 m -27 X s 254 290 m -27 X s 254 306 m -27 X s 254 321 m -27 X s 254 333 m -27 X s 254 344 m
+ -27 X s 281 354 m -54 X s black
+ gsave 2268 1415 0 0 C 208 332 t 0 r -57 0 t /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 417 m -27 X s 254 455 m -27 X s 254 481 m -27 X s 254 502 m -27 X s 254 518 m -27 X s 254 533 m -27 X s 254 545 m -27 X s 254 556 m
+ -27 X s 281 565 m -54 X s black
+ gsave 2268 1415 0 0 C 186 567 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (2) show NC gr
+ gsave 2268 1415 0 0 C 129 540 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 629 m -27 X s 254 667 m -27 X s 254 693 m -27 X s 254 714 m -27 X s 254 730 m -27 X s 254 745 m -27 X s 254 757 m -27 X s 254 768 m -27 X s
+ 281 777 m -54 X s black
+ gsave 2268 1415 0 0 C 186 784 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (3) show NC gr
+ gsave 2268 1415 0 0 C 129 753 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 841 m -27 X s 254 879 m -27 X s 254 905 m -27 X s 254 926 m -27 X s 254 942 m -27 X s 254 957 m -27 X s 254 969 m -27 X s 254 980 m -27 X s
+ 281 989 m -54 X s black
+ gsave 2268 1415 0 0 C 186 993 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (4) show NC gr
+ gsave 2268 1415 0 0 C 129 966 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 1053 m -27 X s 254 1091 m -27 X s 254 1117 m -27 X s 254 1138 m -27 X s 254 1154 m -27 X s 254 1169 m -27 X s 254 1181 m -27 X s 254 1192 m
+ -27 X s 281 1201 m -54 X s black
+ gsave 2268 1415 0 0 C 186 1206 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (5) show NC gr
+ gsave 2268 1415 0 0 C 129 1176 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 1265 m -27 X s
+ gr gr
+showpage
+end
+%%EOF
--- /dev/null
+
+
+FILENAME=Photos_interface_design
+
+
+all: $(FILENAME).dvi
+# dvips $(FILENAME).dvi
+ dvipdf $(FILENAME).dvi
+# gv $(FILENAME).ps
+
+$(FILENAME).dvi: $(FILENAME).tex $(FILENAME).cls $(FILENAME).bib
+ latex $(FILENAME).tex
+ bibtex $(FILENAME)
+ latex $(FILENAME).tex
+ latex $(FILENAME).tex
+
+
+clean:
+ rm -f $(FILENAME).dvi
+ rm -f *~ *.aux *.log *.toc *.bak *.out *.blg *.bbl
+
+clobber: clean
+ rm -f $(FILENAME).ps
--- /dev/null
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%% BibTeX Bibliography %%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%% copied from MC-TESTER doc %%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+@article{Arbuzov:2012dx,
+ author = "Arbuzov, A.B. and Sadykov, R.R. and Was, Z.",
+ title = "{QED Bremsstrahlung in decays of electroweak bosons}",
+ year = "2012",
+ eprint = "1212.6783",
+ archivePrefix = "arXiv",
+ primaryClass = "hep-ph",
+ reportNumber = "IFJPAN-IV-2012-14, CERN-PH-TH-2012-354",
+ SLACcitation = "%%CITATION = ARXIV:1212.6783;%%",
+}
+
+@Misc{autotools,
+ author = " ",
+ title = " ",
+ year = " ",
+ note ="GNU Autotools (autoconf, automake and libtool) http://www.gnu.org/software/"
+}
+
+@Misc{LCG,
+ author = " ",
+ title = " ",
+ year = " ",
+ note ="LCG project http://lcg.web.cern.ch/LCG/"
+}
+
+@Article{Gleisberg:2008ta,
+ author = "Gleisberg, T. and others",
+ title = "{Event generation with SHERPA 1.1}",
+ journal = "JHEP",
+ volume = "02",
+ year = "2009",
+ pages = "007",
+ eprint = "0811.4622",
+ archivePrefix = "arXiv",
+ primaryClass = "hep-ph",
+ doi = "10.1088/1126-6708/2009/02/007",
+ SLACcitation = "%%CITATION = 0811.4622;%%"
+}
+
+@Article{Jadach:1995pd,
+ author = "Jadach, S. and Richter-Was, E. and Ward, B. F. L. and Was,
+ Z.",
+ title = "{Higher order radiative corrections to low angle Bhabha
+ scattering: The YFS Monte Carlo approach}",
+ journal = "Phys. Lett.",
+ volume = "B353",
+ year = "1995",
+ pages = "362-372",
+ doi = "10.1016/0370-2693(95)00577-8",
+ SLACcitation = "%%CITATION = PHLTA,B353,362;%%"
+}
+
+
+@Article{Arbuzov:1996eq,
+ author = "Arbuzov, A. and others",
+ title = "{The present theoretical error on the Bhabha scattering
+ cross section in the luminometry region at LEP}",
+ journal = "Phys. Lett.",
+ volume = "B383",
+ year = "1996",
+ pages = "238-242",
+ eprint = "hep-ph/9605239",
+ archivePrefix = "arXiv",
+ doi = "10.1016/0370-2693(96)00733-2",
+ SLACcitation = "%%CITATION = HEP-PH/9605239;%%"
+}
+
+@Article{Jadach:1999gz,
+ author = "Jadach, S. and Pietrzyk, B. and Tournefier, E. and Ward, B.
+ F. L. and Was, Z.",
+ title = "{Initial-final-state interference in the Z line-shape}",
+ journal = "Phys. Lett.",
+ volume = "B465",
+ year = "1999",
+ pages = "254-259",
+ eprint = "hep-ph/9907547",
+ archivePrefix = "arXiv",
+ doi = "10.1016/S0370-2693(99)01047-3",
+ SLACcitation = "%%CITATION = HEP-PH/9907547;%%"
+}
+
+@Article{Desch:2003rw,
+ author = "Desch, K. and Imhof, A. and Was, Z. and Worek, M.",
+ title = "{Probing the CP nature of the Higgs boson at linear
+ colliders with tau spin correlations: The case of mixed
+ scalar-pseudoscalar couplings}",
+ journal = "Phys. Lett.",
+ volume = "B579",
+ year = "2004",
+ pages = "157-164",
+ eprint = "hep-ph/0307331",
+ archivePrefix = "arXiv",
+ doi = "10.1016/j.physletb.2003.10.074",
+ SLACcitation = "%%CITATION = HEP-PH/0307331;%%"
+}
+
+
+@Article{Antcheva:2009zz,
+ author = "Antcheva, I. and others",
+ title = "{ROOT: A C++ framework for petabyte data storage,
+ statistical analysis and visualization}",
+ journal = "Comput. Phys. Commun.",
+ volume = "180",
+ year = "2009",
+ pages = "2499-2512",
+ doi = "10.1016/j.cpc.2009.08.005",
+ SLACcitation = "%%CITATION = CPHCB,180,2499;%%"
+}
+@Article{Kirsanov:2008zz,
+ author = "Kirsanov, M. and Ribon, A. and Zenin, O.",
+ title = "{Development, validation and maintenance of Monte Carlo
+ event generators and generator services in the LHC era}",
+ journal = "PoS",
+ volume = "ACAT08",
+ year = "2008",
+ pages = "114",
+ SLACcitation = "%%CITATION = POSCI,ACAT08,114;%%"
+}
+
+@Article{Abdallah:2010tk,
+ author = "Abdallah, J. and others",
+ collaboration = "DELPHI",
+ title = "{Study of the Dependence of Direct Soft Photon Production
+ on the Jet Characteristics in Hadronic $Z^0$ Decays}",
+ journal = "Eur. Phys. J.",
+ volume = "C67",
+ year = "2010",
+ pages = "343-366",
+ eprint = "1004.1587",
+ archivePrefix = "arXiv",
+ primaryClass = "Unknown",
+ doi = "10.1140/epjc/s10052-010-1315-5",
+ SLACcitation = "%%CITATION = 1004.1587;%%"
+}
+
+@Article{Eberhard:1989ve,
+ author = "Eberhard, P. H. and others",
+ title = "{THE tau POLARIZATION MEASUREMENT AT LEP}",
+ note = "To appear in the Proceedings of the Workshop on Z Physics
+ at LEP, edited by G. Altarelli, R. Kleiss and V.
+ Verzegnassi (CERN-89-08 v.1-3) held in Geneva, Switzerland,
+ Feb 20-21 and May 8-9, 1989"
+}
+
+@Article{Adam:2008ge,
+ author = "Adam, Nadia E. and Halyo, Valerie and Yost, Scott A.",
+ title = "{Evaluation of the Theoretical Uncertainties in the $Z \to
+ \ell^{+} \ell^{-}$ Cross Sections at the LHC}",
+ journal = "JHEP",
+ volume = "05",
+ year = "2008",
+ pages = "062",
+ eprint = "0802.3251",
+ archivePrefix = "arXiv",
+ primaryClass = "hep-ph",
+ doi = "10.1088/1126-6708/2008/05/062",
+ SLACcitation = "%%CITATION = 0802.3251;%%"
+}
+
+@Article{Davidson:2008ma,
+ author = "Davidson, N. and Golonka, P. and Przedzinski, T. and Was,
+ Z.",
+ title = "{MC-TESTER v. 1.23: a universal tool for comparisons of
+ Monte Carlo predictions for particle decays in high energy
+ physics}",
+ year = "2008",
+ eprint = "0812.3215",
+ archivePrefix = "arXiv",
+ primaryClass = "hep-ph",
+ SLACcitation = "%%CITATION = 0812.3215;%%"
+}
+@Article{Davidson:2010rw,
+ author = "Davidson, N. and Nanava, G. and Przedzinski, T. and
+ Richter-Was, E. and Was, Z.",
+ title = "{Universal Interface of TAUOLA Technical and Physics
+ Documentation}",
+ year = "2010",
+ eprint = "1002.0543",
+ archivePrefix = "arXiv",
+ primaryClass = "Unknown",
+ SLACcitation = "%%CITATION = 1002.0543;%%"
+}
+@Article{Bahr:2008pv,
+ author = "Bahr, M. and others",
+ title = "{Herwig++ Physics and Manual}",
+ journal = "Eur. Phys. J.",
+ volume = "C58",
+ year = "2008",
+ pages = "639-707",
+ eprint = "0803.0883",
+ archivePrefix = "arXiv",
+ primaryClass = "hep-ph",
+ doi = "10.1140/epjc/s10052-008-0798-9",
+ SLACcitation = "%%CITATION = 0803.0883;%%"
+}
+
+@Article{RichterWas:1993ta,
+ author = "Richter-Was, E.",
+ title = "{Hard Bremsstrahlung photons in the t anti-t production and
+ decay: A background for the intermediate Higgs search}",
+ journal = "Z. Phys.",
+ volume = "C61",
+ year = "1994",
+ pages = "323-340",
+ doi = "10.1007/BF01413112",
+ SLACcitation = "%%CITATION = ZEPYA,C61,323;%%"
+}
+
+@Article{RichterWas:1994ep,
+ author = "Richter-Was, Elzbieta",
+ title = "{Hard photon bremsstrahlung in the process p p $\to$ Z0 /
+ gamma* $\to$ lepton+ lepton-: A background for the
+ intermediate mass Higgs}",
+ journal = "Z. Phys.",
+ volume = "C64",
+ year = "1994",
+ pages = "227-240",
+ doi = "10.1007/BF01557394",
+ SLACcitation = "%%CITATION = ZEPYA,C64,227;%%"
+}
+
+
+@Article{Boillot:1988re,
+ author = "Boillot, F. and Was, Z.",
+ title = "{UNCERTAINTIES IN tau POLARIZATION MEASUREMENT AT SLC / LEP
+ AND QED / ELECTROWEAK RADIATIVE CORRECTIONS}",
+ journal = "Z. Phys.",
+ volume = "C43",
+ year = "1989",
+ pages = "109",
+ doi = "10.1007/BF02430616",
+ SLACcitation = "%%CITATION = ZEPYA,C43,109;%%"
+}
+@Misc{Bardin-private,
+ note ="D. Bardin, private communication"
+}
+
+@Misc{Rivet,
+ author = "Andy Buckley and others",
+ title = "Rivet project (Robust Independent Validation of Experiment and Theory) ",
+ year ="2008",
+ note ="http://projects.hepforge.org/rivet/ http://projects.hepforge.org/rivet/trac/wiki"
+}
+
+@Misc{tauolaC++,
+ author = "N. Davidson and T. Przedzinski and E. Richter-Was and Z. Was",
+ title = "HepMC based universal interface of TAUOLA and its benchmarks ",
+ year ="2008-2009",
+ note ="
+ http://www.ph.unimelb.edu.au/\~{}ndavidson/tauola/doxygen/index.html
+ "
+}
+
+@Misc{photosC++,
+ author = "N. Davidson and T. Przedzinski and Z. Was",
+ title = "HepMC based universal interface of PHOTOS and its benchmarks ",
+ year ="2008-2009",
+ note ="
+ http://www.ph.unimelb.edu.au/\~{}ndavid son/photos/doxygen/index.html
+ "
+}
+
+@Article{Kleiss:1990jv,
+ author = "Kleiss, Ronald",
+ title = "{INHERENT LIMITATIONS IN THE EFFECTIVE BEAM TECHNIQUE FOR
+ ALGORITHMIC SOLUTIONS TO RADIATIVE CORRECTIONS}",
+ journal = "Nucl. Phys.",
+ volume = "B347",
+ year = "1990",
+ pages = "67-85",
+ doi = "10.1016/0550-3213(90)90551-N",
+ SLACcitation = "%%CITATION = NUPHA,B347,67;%%"
+}
+
+
+@Misc{EvtGenLHC,
+ author = "David Lange and Anders Ryd",
+ title = "The EvtGen package",
+ year ="2008",
+ note ="http://lhcb-release-area.web.cern.ch/LHCb-release-area/DOC/gauss/generator/evtgen.php and http://www.slac.stanford.edu/~lange/EvtGen/"
+}
+
+@Misc{Photos_tests,
+ author = "P. Golonka and G. Nanava and Z. Was",
+ title = "Tests of PHOTOS Hard Bremsstrahlung",
+ year ="2002-now",
+ note ="Tests of PHOTOS Hard Bremsstrahlung, http://mc-tester.web.cern.ch/MC-TESTER/PHOTOS-MCTESTER/"
+}
+
+
+@Article{Dobbs:2001ck,
+ author = "Dobbs, Matt and Hansen, Jorgen Beck",
+ title = "{The HepMC C++ Monte Carlo event record for High Energy
+ Physics}",
+ journal = "Comput. Phys. Commun.",
+ volume = "134",
+ year = "2001",
+ pages = "41-46",
+ note = "https://savannah.cern.ch/projects/hepmc/",
+ doi = "10.1016/S0010-4655(00)00189-2",
+ SLACcitation = "%%CITATION = CPHCB,134,41;%%"
+}
+
+
+
+@Article{Sjostrand:2007gs,
+ author = "Sjostrand, Torbjorn and Mrenna, Stephen and Skands, Peter",
+ title = "{A Brief Introduction to PYTHIA 8.1}",
+ journal = "Comput. Phys. Commun.",
+ volume = "178",
+ year = "2008",
+ pages = "852-867",
+ eprint = "0710.3820",
+ archivePrefix = "arXiv",
+ primaryClass = "hep-ph",
+ doi = "10.1016/j.cpc.2008.01.036",
+ SLACcitation = "%%CITATION = 0710.3820;%%"
+}
+
+
+
+@Article{Was:2001te,
+ author = "Was, Z.",
+ title = "{Spin polarization and the Einstein-Podolsky-Rosen paradox
+ in the Monte Carlo event records}",
+ note = "Prepared for Workshop on Computer Particle Physics: (CPP
+ 2001): Automatic Calculation for Future Colliders, Tokyo,
+ Japan, 28-30 Nov 2001"
+}
+
+
+
+
+
+@Article{Golonka:2005pn,
+ author = "Golonka, Piotr and Was, Zbigniew",
+ title = "{PHOTOS Monte Carlo: A precision tool for QED corrections
+ in Z and W decays}",
+ journal = "Eur. Phys. J.",
+ volume = "C45",
+ year = "2006",
+ pages = "97-107",
+ eprint = "hep-ph/0506026",
+ archivePrefix = "arXiv",
+ SLACcitation = "%%CITATION = HEP-PH/0506026;%%"
+}
+
+@Article{Golonka:2006tw,
+ author = "Golonka, P. and Was, Z.",
+ title = "{Next to leading logarithms and the PHOTOS Monte Carlo}",
+ journal = "Eur. Phys. J.",
+ volume = "C50",
+ year = "2007",
+ pages = "53-62",
+ eprint = "hep-ph/0604232",
+ archivePrefix = "arXiv",
+ doi = "10.1140/epjc/s10052-006-0205-3",
+ SLACcitation = "%%CITATION = HEP-PH/0604232;%%"
+}
+
+@Article{Golonka:2003xt,
+ author = "Golonka, P. and others",
+ title = "{The tauola-photos-F environment for the TAUOLA and PHOTOS
+ packages, release II}",
+ journal = "Comput. Phys. Commun.",
+ volume = "174",
+ year = "2006",
+ pages = "818-835",
+ eprint = "hep-ph/0312240",
+ archivePrefix = "arXiv",
+ doi = "10.1016/j.cpc.2005.12.018",
+ SLACcitation = "%%CITATION = HEP-PH/0312240;%%"
+}
+
+@Article{Golonka:2002rz,
+ author = "Golonka, P. and Pierzchala, T. and Was, Z.",
+ title = "{MC-TESTER: A universal tool for comparisons of Monte Carlo
+ predictions for particle decays in high energy physics}",
+ journal = "Comput. Phys. Commun.",
+ volume = "157",
+ year = "2004",
+ pages = "39-62",
+ eprint = "hep-ph/0210252",
+ archivePrefix = "arXiv",
+ doi = "10.1016/S0010-4655(03)00466-1",
+ SLACcitation = "%%CITATION = HEP-PH/0210252;%%"
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%% KK.bib %%%%%%%%%%%%%%%%%%%%%%%%%%%
+@Misc{MC2000,
+ author = "S. Jadach (ed.) and G. Passarino (ed.) and R. Pittau (ed.)",
+ title = "LEP2 Monte Carlo Workshop : Report of the Working Groups on Precision Calculations for LEP2 Physics ",
+ year ="2000",
+ note ="CERN-2000-009"
+}
+@Article{Kobel:2000aw,
+ author = "Kobel, Michael and others",
+ collaboration = "Two Fermion Working Group",
+ title = "Two-fermion production in electron positron collisions",
+ year = "2000",
+ archive = "http://arXiv.org/abs",
+ eprint = "hep-ph/0007180",
+ SLACcitation = "%%CITATION = HEP-PH 0007180;%%"
+}
+
+@Article{PiotrPhD,
+ author = "Golonka,P.",
+ title = "Computer simulations in high energy physics:
+a case for PHOTOS, MC-TESTER, TAUOLA, and at2sim",
+ year = "2006",
+ note = " A dissertation for the degree of Doctor of Philosophy in Physics,http://piters.web.cern.ch/piters/MC/PhD/ ",
+}
+@Article{Nanava:2009vg,
+ author = "Nanava, G. and Xu, Qingjun and Was, Z.",
+ title = "{Matching NLO parton shower matrix element with exact phase
+ space: case of $W \to l \nu (\gamma)$ and $\gamma^* \to \pi^+\pi^-
+ (\gamma)$}",
+ year = "2009",
+ eprint = "0906.4052",
+ archivePrefix = "arXiv",
+ primaryClass = "hep-ph",
+ SLACcitation = "%%CITATION = 0906.4052;%%"
+}
+@Article{Nanava:2006vv,
+ author = "Nanava, G. and Was, Z.",
+ title = "{Scalar QED, NLO and PHOTOS Monte Carlo}",
+ journal = "Eur. Phys. J.",
+ volume = "C51",
+ year = "2007",
+ pages = "569-583",
+ eprint = "hep-ph/0607019",
+ archivePrefix = "arXiv",
+ doi = "10.1140/epjc/s10052-007-0316-5",
+ SLACcitation = "%%CITATION = HEP-PH/0607019;%%"
+}
+
+@Article{photosplus,
+ author = "Golonka,P.",
+ title = "Photos+: a C++/OO implementation of the universal Monte Carlo algorithm for QED radiative corrections in particles decays",
+ year = "1999",
+ note = "Thesis for MSc. degree, FNPT, UMM Cracow, http://cern.ch/Piotr.Golonka/MC/photos",
+ archive = "http://cern.ch/Piotr.Golonka/MC/photos"
+}
+
+
+@Article{root2,
+ note ="{\tt http://root.cern.ch/root/htmldoc/src/TH1.cxx.html$\#$TH1:KolmogorovTest} "
+}
+
+@Article{root-install-www,
+ note ="{\tt http://root.cern.ch/root/Availability.html } "
+}
+
+@Article{root1,
+ note ="{\tt http://root.cern.ch/root/htmldoc/TH1.html$\#$TH1:KolmogorovTest} "
+}
+@Article{Golonka:2002iu,
+ author = "Golonka, P. and Pierzcha\l{a}, T. and Richter-W\c{a}s, E. and W\c{a}s, Z. and Worek, M.",
+ title = "The tauola-photos-F environment for versioning the TAUOLA
+ and PHOTOS packages",
+ year = "2000",
+ archive = "http://arXiv.org/abs",
+ note =" enlarged version of the document {\tt hep-ph/0009302}, in preparation, to be submitted to {\it Comput. Phys. Commun.}",
+ SLACcitation = "%%CITATION = HEP-PH 0009302;%%"
+}
+
+
+@Article{HERWIG,
+ author ="Corcella, G. and Knowles, I. G. and Marchesini,
+ G. and Moretti, S. and Odagiri, K. and Richardson,
+ P. and Seymour, M. H. and Webber, B. R.",
+ title ="HERWIG 6: AN EVENT GENERATOR FOR HADRON EMISSION REACTIONS
+ WITH INTERFERING GLUONS (INCLUDING SUPERSYMMETRIC PROCESSES).",
+ journal = "JHEP ",
+ volume = "0101",
+ year = "2001",
+ pages = "010",
+ eprint = "hep-ph/0011363 "
+}
+
+@Article{Was2002,
+ author ="W\c{a}s, Z. and Worek, M.",
+ title ="Transverse spin effects in $H/A\to \tau^+ \tau^-;~
+\tau^\pm \to \nu X^\pm$, Monte Carlo approach",
+ note ="{\it "Transverse spin effects in $H/A\to \tau^+ \tau^-;~
+\tau^\pm \to \nu X^\pm$, Monte Carlo approach" }",
+ eprint = "hep-ph/0202007"
+}
+
+
+@Article{Hagiwara2000,
+ author = "Hagiwara, K. and Ishihara, S. and Kamoshita, J. and Kniehl, B.A. ",
+ title = "PROSPECTS OF MEASURING GENERAL HIGGS COUPLINGS AT E+ E- LINEAR COLLIDERS.",
+ journal = "Eur. Phys. J.",
+ volume = "C14",
+ year = "2000",
+ pages = "457-468"
+}
+@Article{Hagiwara1994,
+ author = "Hagiwara, K. and Stong, M.L. ",
+ title = "PROBING THE SCALAR SECTOR IN E+ E- ---> F ANTI-F H.",
+ journal = "Z. Phys.",
+ volume = "C62",
+ year = "1994",
+ pages = "99-108"
+}
+
+@Article{Barger1994,
+ author = "Barger, V. and Cheung, K. and Djouadi, A. and Kniehl, B. A. and Zerwas, P. M.",
+ title = "HIGGS BOSONS: INTERMEDIATE MASS RANGE AT E+ E- COLLIDERS.",
+ journal = "Phys. Rev.",
+ volume = "D49",
+ year = "1994",
+ pages = "79-90"
+}
+@Article{SM1,
+ author = "Weinberg, S. ",
+ title = "A MODEL OF LEPTONS.",
+ journal = "Phys. Rev. Lett.",
+ volume = "19",
+ year = "1967",
+ pages = "1264-1266"
+}
+@Article{SM2,
+ author = " Glashow, S. L. and Iliopoulos, J. and Maiani, L. ",
+ title = "WEAK INTERACTIONS WITH LEPTON - HADRON SYMMETRY.",
+ journal = "Phys. Rev. ",
+ volume = "D2",
+ year = "1970",
+ pages = "1285-1292"
+}
+@Article{SM3,
+ author = " Glashow, S. L.",
+ title = "PARTIAL SYMMETRIES OF WEAK INTERACTIONS.",
+ journal = "Nucl. Phys. ",
+ volume = "22",
+ year = "1961",
+ pages = "579-588"
+}
+@Book{SM4,
+ author = {Salam, A.},
+ title = {Elementary Particle Theory},
+ publisher = {N. Svartholm (Almqvist and Wiksell)},
+ year = 1968,
+ address = {Stockholm}
+}
+@Book{2HDM,
+ author = "Gunion, J. F. and Haber, H. E. and Kane, G. L. and Dawson, S.",
+ title = "The Higgs Hunter's Guide",
+ publisher = "Addision-Wesley Publishing Company",
+ year = "1990"
+}
+@Article{MSSM1,
+ author = "Haber, H. E. and Kane, G. L.",
+ title = "THE SEARCH FOR SUPERSYMMETRY: PROBING PHYSICS BEYOND THE STANDARD MODEL.",
+ journal = "Phys. Rept. ",
+ volume = "117",
+ year = "1985",
+ pages = "75"
+}
+
+@Article{MSSM2,
+ author = "Nilles, H. P. ",
+ title = "SUPERSYMMETRY, SUPERGRAVITY AND PARTICLE PHYSICS.",
+ journal = "Phys. Rept.",
+ volume = "110",
+ year = "1984",
+ pages = "1"
+}
+
+@Article{MSSM3,
+ author = "Frere, J.M. and Kane, G. L.",
+ title = "ON THE POSSIBILITY OF FINDING LIGHT UNCOLORED SUPERSYMMETRIC PARTNERS AT PRESENT AND FUTURE MACHINES.",
+ journal = "Nucl. Phys. ",
+ volume = "B223",
+ year = "1983",
+ pages = "331"
+}
+
+@Article{Higgs-mechanism4,
+ author = "Englert, F. and Brout, R.",
+ title = "BROKEN SYMMETRY AND THE MASS OF GAUGE VECTOR MESONS.",
+ journal = "Phys. Rev. Lett.",
+ volume = "13",
+ year = "1964",
+ pages = "321-322"
+}
+
+@Article{Higgs-mechanism5,
+ author = "Guralink, G.S. and Hagen, C. R. and Kibble, T. W. B.",
+ title = "GLOBAL CONSERVATION LAWS AND MASSLESS PARTICLES.",
+ journal = "Phys. Rev. Lett.",
+ volume = "13",
+ year = "1964",
+ pages = "585-587"
+}
+@Article{Higgs-mechanism6,
+ author = "Kibble, T. W. B",
+ title = "SYMMETRY BREAKING IN NONABELIAN GAUGE THEORIES.",
+ journal = "Phys. Rev.",
+ volume = "155",
+ year = "1967",
+ pages = "1554-1561"
+}
+
+
+@Article{Higgs-mechanism1,
+ author = "Higgs, P. W.",
+ title = "BROKEN SYMMETRIES, MASSLESS PARTICLES AND GAUGE FIELDS.",
+ journal = "Phys. Lett.",
+ volume = "12",
+ year = "1964",
+ pages = "132"
+}
+
+@Article{Higgs-mechanism2,
+ author = "Higgs, P. W.",
+ title = "BROKEN SYMMETRIES AND THE MASSES OF GAUGE BOSONS.",
+ journal = "Phys. Rev. Lett.",
+ volume = "13",
+ year = "1964",
+ pages = "508-509"
+}
+
+@Article{Higgs-mechanism3,
+ author = "Higgs, P. W.",
+ title = "SPONTANEOUS SYMMETRY BREAKDOWN WITHOUT MASSLESS BOSONS.",
+ journal = "Phys. Rev.",
+ volume = "145",
+ year = "1966",
+ pages = "1156-1163"
+}
+
+@Article{Harton:1995dj,
+ author = "Harton, John L.",
+ title = "Tau polarization measurements at LEP using tau $\to$ rho nu
+ and tau $\to$ a1 nu",
+ journal = "Nucl. Phys. Proc. Suppl.",
+ volume = "40",
+ year = "1995",
+ pages = "463-473",
+ SLACcitation = "%%CITATION = NUPHZ,40,463;%%"
+}
+
+@Article{Nelson:1995vt,
+ author = "Nelson, Charles A.",
+ title = "Tau as a probe for new physics",
+ journal = "Nucl. Phys. Proc. Suppl.",
+ volume = "40",
+ year = "1995",
+ pages = "525-540",
+ archive = "http://arXiv.org/abs",
+ eprint = "hep-ph/9411235",
+ SLACcitation = "%%CITATION = HEP-PH 9411235;%%"
+}
+@Article{Bower:2002zx,
+ author = "Bower, G. R. and Pierzchala, T. and Was, Z. and Worek, M.",
+ title = "{Measuring the Higgs boson's parity using tau --> rho nu}",
+ journal = "Phys. Lett.",
+ volume = "B543",
+ year = "2002",
+ pages = "227-234",
+ eprint = "hep-ph/0204292",
+ archivePrefix = "arXiv",
+ doi = "10.1016/S0370-2693(02)02445-0",
+ SLACcitation = "%%CITATION = HEP-PH/0204292;%%"
+}
+
+
+
+
+@Misc{Bower,
+ author = {G. Bower},
+ title = {CP Measurements of Higgs States },
+ month = {January},
+ year = 2002,
+ note = {To be published in the proceedings of the Chicago LC Workshop, 7-9 January '02, transparencies available at:\\ {\tt http://needmore.physics.indiana.edu/\~{}rickv/nlc/chicago\_{}agenda.html}}
+}
+
+
+@Article{:2001ve,
+ author = "",
+ collaboration = "NLC",
+ title = "2001 report on the Next Linear Collider: A report submitted
+ to Snowmass '01",
+ note = "{\it "2001 Report on the Next LinearCollider: A Report
+ submitted to Snowmass 2001"}",
+ eprint = "SLAC-R-571"
+}
+@Article{Abe:2001gc,
+ author = "",
+ collaboration = "ACFA Linear Collider Working Group",
+ title = "Particle physics experiments at JLC",
+ note = "{\it "Particle physics experiments at JLC"}",
+ year = "2001",
+ archive = "http://arXiv.org/abs",
+ eprint = "hep-ph/0109166",
+ SLACcitation = "%%CITATION = HEP-PH 0109166;%%"
+}
+
+@Article{Spira:1997qz,
+ author = "Spira, Michael and Zerwas, Peter M.",
+ title = "Electroweak symmetry breaking and Higgs physics",
+ year = "1997",
+ archive = "http://arXiv.org/abs",
+ eprint = "hep-ph/9803257",
+ SLACcitation = "%%CITATION = HEP-PH 9803257;%%"
+}
+
+@Article{TESLA,
+ author = "Richard, F. and Schneider, J.R. and Trines, D. and Wagner, A.",
+ note = "{\it "TESLA Technical Design Report Part I: Executive Summary"}",
+ year = "2001",
+ eprint = "hep-ph/0106314"
+}
+
+@Article{Pythia,
+ author = "{T. Sjostrand} and others",
+ journal = "Comput. Phys. Commun.",
+ year = "2001",
+ volume = "135",
+ pages = "238"
+}
+@Article{PDG:1998,
+ author = "{C. Caso} and others",
+collaboration = "Particle Data Group",
+ title = "Review of Particle Physics",
+ journal = "Eur. Phys. J.",
+ volume = "C3",
+ year = "1998",
+ pages = "1"
+}
+@Article{LHC1,
+ note = "{\it "Technical Proposal"}",
+ year = "1994",
+ eprint = "CERN/LHCC/94-38",
+ collaboration = {CMS}
+}
+@Article{LHC2,
+ note = "{\it "ATLAS Detector and Physics Performance: Technical Design Report"}",
+ year = "1999",
+ eprint = "CERN/LHCC/99-15",
+ volume = "2",
+ collaboration = {ATLAS}
+}
+@Article{Tevatron,
+ author = "M. Carena and others",
+ note = "{\it "Report on the Tevatron Higgs Working Group"}",
+ eprint = "hep-ph/0010338"
+ }
+@Misc{Ronan,
+ author = {M. Ronan},
+ note = {private communication },
+ year = 2001
+}
+@Misc{Peskin,
+ author = {M. Peskin},
+ note = {private communication },
+ year = 2001
+}
+
+@Misc{Pandora,
+ author = {M. Iwasaki and M. E. Peskin},
+ note = {in preparation,
+ see:\\ {\footnotesize \tt http://www-sldnt.slac.stanford.edu/nld/new/Docs/Generators/PANDORA$\_$PYTHIA.html} },
+ year = 2002
+}
+
+@Article{Golonka:2000iu,
+ author = "Golonka, P. and Richter-W\c{a}s, E. and W\c{a}s, Z.",
+ title = "The tauola-photos-F environment for versioning the TAUOLA
+ and PHOTOS packages",
+ year = "2000",
+ archive = "http://arXiv.org/abs",
+ eprint = "hep-ph/0009302",
+ SLACcitation = "%%CITATION = HEP-PH 0009302;%%"
+}
+
+
+@Article{Pierzchala:2001gc,
+ author = "Pierzcha\l{a}, T. and Richter-W\c{a}s, E. and W\c{a}s, Z. and Worek,
+ M.",
+ title = "Spin effects in tau-lepton pair production at LHC",
+ journal = "Acta Phys. Polon.",
+ volume = "B32",
+ year = "2001",
+ pages = "1277-1296",
+ archive = "http://arXiv.org/abs",
+ eprint = "hep-ph/0101311",
+ SLACcitation = "%%CITATION = HEP-PH 0101311;%%"
+}
+@Article{Kramer:1994jn,
+ author = {Kramer, M. and K\"u{hn}, Johann H. and Stong, M. L. and Zerwas, P. M.},
+ title = "Prospects of measuring the parity of Higgs particles",
+ journal = "Z. Phys.",
+ volume = "C64",
+ year = "1994",
+ pages = "21",
+ archive = "http://arXiv.org/abs",
+ eprint = "hep-ph/9404280",
+ SLACcitation = "%%CITATION = HEP-PH 9404280;%%"
+}
+@Misc{cleo,
+ author = {A. Weinstein},
+ collaboration= {CLEO},
+ title = {},
+ note = {see \\ http://www.cithep.caltech.edu/\~{}ajw/korb$\_$doc.html\#{}files}
+}
+@Misc{aleph,
+ author = {B. Bloch},
+ collaboration= {ALEPH},
+ title = {},
+ note = {to contact send a mail to \\ Brigitte.Bloch-Devaux@cern.ch}
+}
+
+
+
+@Article{Jadach:1993hs,
+ author = {S. Jadach and Z. W\c{a}s and R. Decker and J. H. K\"{uhn}},
+ title = "The tau decay library TAUOLA: Version 2.4",
+ journal = "Comput. Phys. Commun.",
+ volume = "76",
+ year = "1993",
+ pages = "361",
+ SLACcitation = "%%CITATION = CPHCB,76,361;%%"
+}
+
+@Article{Jezabek:1991qp,
+ author = {M. Je\.zabek and Z. W\c{a}s and S. Jadach and J. H. K\"{uhn}},
+ title = "The tau decay library TAUOLA, update with exact O(alpha)
+ QED corrections in tau $\to$ mu. (e) neutrino anti-neutrino
+ decay modes",
+ journal = "Comput. Phys. Commun.",
+ volume = "70",
+ year = "1992",
+ pages = "69",
+ SLACcitation = "%%CITATION = CPHCB,70,69;%%"
+}
+
+@Article{Jadach:1990mz,
+ author = {Stanislaw Jadach and Johann H. K\"{uhn} and Zbigniew W\c{a}s},
+ title = "TAUOLA: A Library of Monte Carlo programs to simulate
+ decays of polarized tau leptons",
+ journal = "Comput. Phys. Commun.",
+ volume = "64",
+ year = "1990",
+ pages = "275",
+ SLACcitation = "%%CITATION = CPHCB,64,275;%%"
+}
+@Article{Barberio:1993qi,
+ author = "Elisabetta Barberio and Zbigniew W\c{a}s",
+ title = "PHOTOS: A Universal Monte Carlo for QED radiative
+ corrections. Version 2.0",
+ journal = "Comput. Phys. Commun.",
+ volume = "79",
+ year = "1994",
+ pages = "291-308",
+ SLACcitation = "%%CITATION = CPHCB,79,291;%%"
+}
+
+@Article{Barberio:1990ms,
+ author = "Elisabetta Barberio and Bob van Eijk and Zbigniew W\c{a}s",
+ title = "PHOTOS: A Universal Monte Carlo for QED radiative
+ corrections in decays",
+ journal = "Comput. Phys. Commun.",
+ volume = "66",
+ year = "1991",
+ pages = "115",
+ SLACcitation = "%%CITATION = CPHCB,66,115;%%"
+}
+@Article{Abreu:1998cn,
+ author = "P. Abreu and others",
+ collaboration = "DELPHI",
+ title = "A study of the hadronic resonance structure in the decay
+ tau --> 3pi nu/tau",
+ journal = "Phys. Lett.",
+ volume = "B426",
+ year = "1998",
+ pages = "411-427",
+ SLACcitation = "%%CITATION = PHLTA,B426,411;%%"
+}
+
+@Article{Abbiendi:1999cq,
+ author = "G. Abbiendi and others",
+ collaboration = "OPAL",
+ title = "A study of three-prong tau decays with charged kaons",
+ journal = "Eur. Phys. J.",
+ volume = "C13",
+ year = "2000",
+ pages = "197",
+ eprint = "hep-ex/9908013",
+ SLACcitation = "%%CITATION = EPHJA,C13,197;%%"
+}
+@Misc{MsCGolonka,
+ author = {P. Golonka},
+ title = {PHOTOS+ -a C++ Implementation of a Universal Monte Carlo
+ Algorithm for QED Radiative Corrections in Particle's Decays},
+ month = {June},
+ year = 1999,
+ note = {MSc thesis written under supervision of Z. W\c{a}s, P. Golonka
+ home page at {\tt http://lhotse.ifj.edu.pl/~piters}}
+}
+@Article{Altarelli:1989wu,
+ author = "Altarelli, (Ed. ), G. and Kleiss, (Ed. ), R. and
+ Verzegnassi, (Ed. ), C.",
+ title = "{Z physics at LEP1: Event generators and software}",
+ note = "CERN-89-08-V-3"
+}
+
+
+@Misc{whoever,
+ author = {Z. W\c{a} and others},
+ title = {Deconvoluting tau polarization from HEPEVT common block},
+ month = {September},
+ year = 2000,
+ note = {unpublished}
+}
+@Misc{Winhac,
+ author = {W. Placzek and S. Jadach},
+ title = {WINHAC version 1.30: The Monte Carlo Event Generator
+ for Single W-Boson Production with Leptonic Decays in Hadron Collisions},
+ note = {http://cern.ch/placzek/winhac}
+}
+
+@Article{CarloniCalame:2003ux,
+ author = "Carloni Calame, C. M. and Montagna, G. and Nicrosini, O.
+ and Treccani, M.",
+ title = "{Higher-order QED corrections to W-boson mass determination
+ at hadron colliders}",
+ journal = "Phys. Rev.",
+ volume = "D69",
+ year = "2004",
+ pages = "037301",
+ eprint = "hep-ph/0303102",
+ archivePrefix = "arXiv",
+ doi = "10.1103/PhysRevD.69.037301",
+ SLACcitation = "%%CITATION = HEP-PH/0303102;%%"
+}
+
+
+@Misc{2f-proposal,
+ author = {I. Tomalin and others},
+ title = {Preliminary notes on two-fermion group activities},
+ month = {September},
+ year = 1999,
+ note = {LEP2 workshop materials {\sf www.to.infn.it/$\sim$giampier/lep2.html}}
+}
+
+@Misc{4f-proposal,
+ author = {M. Gruenewald and others},
+ title = {Proposal for LEP2 MC workshop, 4F subgroup},
+ month = {September},
+ year = 1999,
+ note = {LEP2 workshop materials {\sf www.to.infn.it/$\sim$giampier/lep2.html}}
+}
+
+
+@Article{bardin-afb-np:1991,
+ author = "D. Bardin and others",
+ title = "Analytic approach to the complete set of QED corrections to
+ fermion pair production in $e^+, e^-$ annihilation",
+ journal = "Nucl. Phys.",
+ volume = "B351",
+ year = "1991",
+ pages = "1-48",
+ eprint = "hep-ph/9801208",
+ SLACcitation = "%%CITATION = NUPHA,B351,1;%%"
+}
+
+
+@Article{bardin-afb-pl:1991,
+ author = "D. Bardin and others",
+ title = "QED corrections with partial angular integration to fermion
+ pair production in e+ e- annihilation",
+ journal = "Phys. Lett.",
+ volume = "B255",
+ year = "1991",
+ pages = "290-296",
+ eprint = "hep-ph/9801209",
+ SLACcitation = "%%CITATION = PHLTA,B255,290;%%"
+}
+
+@Article{beijing:1987,
+ author = {Zhan Xu and Da-Hua Zhang and Lee Chang},
+ title = {Helicity amplitudes for multiple bremsstrahlung in
+ massless non-abelian gauge theories },
+ journal = {Nucl. Phys.},
+ year = 1987,
+ volume = {B291},
+ pages = {392}
+}
+
+
+@Article{berends-neerver-burgers:1998,
+ author = {F.A. Berends and W.L. Van Neerven and G.J.H. Burgers},
+ title = { },
+ journal = {Nucl. Phys.},
+ year = 1988,
+ volume = {B297},
+ pages = 429
+}
+
+@Article{bhlumi-precision:1998,
+ author = "B.~F.~L. Ward and S. Jadach and M. Melles and S. A. Yost",
+ title = "New results on the theoretical precision of the LEP / SLC
+ luminosity",
+ journal = "Phys. Lett.",
+ volume = "B450",
+ year = "1999",
+ pages = "262",
+ eprint = "hep-ph/9811245",
+ SLACcitation = "%%CITATION = PHLTA,B450,262;%%"
+}
+
+@Article{bhlumi-semi:1996,
+ author = "S. Jadach and B. F. L. Ward",
+ title = "Semianalytical third order calculations of the small angle
+ Bhabha cross-sections",
+ journal = "Acta Phys. Polon.",
+ volume = "B28",
+ year = "1997",
+ pages = "1907",
+ SLACcitation = "%%CITATION = APPOA,B28,1907;%%"
+}
+
+@Article{bhlumi2:1992,
+ author = "S. Jadach and E. Richter-W\c{a}s and B. F. L. Ward and Z. W\c{a}s",
+ title = "Monte Carlo program BHLUMI-2.01 for Bhabha scattering at
+ low angles with Yennie-Frautschi-Suura exponentiation",
+ journal = "Comput. Phys. Commun.",
+ volume = "70",
+ year = "1992",
+ pages = "305",
+ SLACcitation = "%%CITATION = CPHCB,70,305;%%"
+}
+
+
+
+@Article{bhlumi4:1996,
+ author = "S. Jadach and W. Placzek and E. Richter-W\c{a}s and B. F. L.
+ Ward and Z. W\c{a}s",
+ title = "Upgrade of the Monte Carlo program BHLUMI for Bhabha
+ scattering at low angles to version 4.04",
+ journal = "Comput. Phys. Commun.",
+ volume = "102",
+ year = "1997",
+ pages = "229",
+ SLACcitation = "%%CITATION = CPHCB,102,229;%%"
+}
+
+
+
+@Article{bhwide:1997,
+ author = {S. Jadach and W. P\l{}aczek and B.~F.~L. Ward},
+ title = {BHWIDE 1.00: ${\cal O}(\alpha)$ YFS exponentiated
+ Monte Carlo for Bhabha scattering at wide angles for
+ LEP1/SLC and LEP2},
+ journal = {Phys. Lett.},
+ year = {1997},
+ volume = {B390},
+ pages = 298,
+ note = {also hep-ph/9608412; The Monte Carlo program BHWIDE is
+ available from {\tt http://hephp01.phys.utk.edu/pub/BHWIDE}}
+}
+
+@Book{bjorken-drell,
+ author = {S.D. Bjorken and S. D. Drell},
+ title = {Quantum Electrodynamics},
+ publisher = {McGraw-Hill},
+ year = 1964,
+ address = {New York}
+}
+
+@Article{brown:1984,
+ author = {R. W. Brown and R. Decker and E. A. Paschos},
+ title = {Weak corrections to the $e^+e^-\to \mu^+\mu^-$ asymmetry},
+ journal = {Phys. Rev. Lett.},
+ year = 1984,
+ volume = 52,
+ pages = 1192
+}
+
+@Misc{burgers-private:1990,
+ author = {G. Burgers},
+ note = {private communication (unpublished)},
+ year = 1990
+}
+
+@Misc{calkul,
+ author = {{CALKUL Collab.}},
+ note = {\uppercase{P}hys. Lett. {\bf B103}, 124 (1981); {\bf B105}, 215 (1981);
+ {\bf B114}, 203 (1982); Nucl. Phys. {\bf B206}, 53 (1982), 61;
+ {\bf B239}, 382 (1984).}
+}
+
+
+@Article{ceex1:1999,
+ author = {S. Jadach and B.~F.~L. Ward and Z. W\c{a}s},
+ title = {Coherent Exclusive Exponentiation (CEEX) The Case of
+ Resonant $e^+e^-$ Annihilation},
+ journal = "Phys. Lett.",
+ volume = "B449",
+ year = "1999",
+ pages = "97-108",
+ eprint = "hep-ph/9905453",
+ SLACcitation = "%%CITATION = PHLTA,B449,97;%%"
+}
+
+@Misc{ceex2:1999,
+ title = {Coherent Exclusive Exponentiation For Precision Monte Carlo Calculations},
+ author = {S. Jadach and B.~F.~L. Ward and Z. W\c{a}s},
+ year = 1999,
+ month = {September},
+ note = {preprint UTHEP-99-09-01}
+}
+
+
+@Misc{circe:1996,
+ author = {T. Ohl},
+ title = {Circe Version 1.02 beta: beam Spectra for Simulating Linear Collider Physics},
+ month = {September},
+ year = 1996,
+ note = {Darmstadt report IKDA 96/13-rev, hep-ph/9607454-rev}
+}
+
+
+@Article{dizet:1989,
+ author = "D. Yu. Bardin and M. S. Bilenkii and T. Riemann and M.
+ Sachwitz and H. Vogt",
+ title = "DIZET: A PROGRAM PACKAGE FOR THE CALCULATION OF ELECTROWEAK
+ ONE LOOP CORRECTIONS FOR THE PROCESS e+ e- $\to$ f+ f-
+ AROUND THE Z0 PEAK",
+ journal = "Comput. Phys. Commun.",
+ volume = "59",
+ year = "1990",
+ pages = "303",
+ SLACcitation = "%%CITATION = CPHCB,59,303;%%"
+}
+
+@Misc{erw-private:1997,
+ author = {E. Richter-W\c{a}s},
+ note = {private communication and code (unpublished)},
+ year = 1997
+}
+
+@Article{erw:1994,
+ author = {E. Richter-W\c{a}s},
+ title = {Hard bremsstrahlung photons in the $t\bar{t}$
+ production and decay: background for the
+ intermediate Higgs search},
+ journal = {Z. Phys.},
+ year = 1994,
+ volume = {C61},
+ pages = 323
+}
+
+
+
+@Article{ew-tank:1999,
+ author = "Dmitri Bardin and Martin Grunewald and Giampiero Passarino
+ ",
+ title = "Precision calculation project report",
+ year = "1999",
+ eprint = "hep-ph/9902452",
+ SLACcitation = "%%CITATION = HEP-PH 9902452;%%"
+}
+
+@Misc{foam:1999,
+ author = {S. Jadach},
+ title = {Foam:Multi-dimensional General Purpose Monte Carlo Generator With Self-adapting Simplectic Grid},
+ month = {August},
+ year = 1999,
+ note = {to be submitted to Computer Phys. Commun.}
+}
+
+
+@Book{gastmans-book,
+ author = {R. Gastmans and T. T. Wu},
+ title = {The ubiquitous photon : helicity method for QED and QCD},
+ publisher = {Oxford Clarendon Press},
+ year = 1990,
+ address = {London}
+}
+@Article{gps:1998,
+ title = "Global positioning of spin GPS scheme for half spin
+ massive spinors",
+ journal = "Eur. Phys. J.",
+ volume = "C22",
+ year = "2001",
+ pages = "423-430",
+ eprint = "hep-ph/9905452",
+ author = "Jadach, S. and W\c{a}s, Z. and Ward, B. F. L."
+}
+@Article{greco:1975,
+ author = {M. Greco and G. Pancheri-Srivastava and Y. Srivastava},
+ title = {Radiative corrections for colliding beam resonances},
+ journal = {Nucl. Phys.},
+ year = {1975},
+ volume = {B101},
+ pages = 234
+}
+
+
+
+@Article{greco:1980,
+ author = {M. Greco and G. Pancheri-Srivastava and Y. Srivastava},
+ title = {Radiative corrections to $e^+e^-\to \mu^+\mu^-$
+ around the $Z_0$},
+ journal = {Nucl. Phys.},
+ year = {1980},
+ volume = {B171},
+ pages = 118,
+ note = {\uppercase{E}rratum: ibid. {\bf B197}, 543 (1982)}
+}
+
+
+
+@Misc{guineapig,
+ author = "D. Schulte",
+ title = "Beam-beam simulations with GUINEA-PIG",
+ note = "\uppercase{CERN-PS-99-014}"
+}
+
+
+@Book{itzykson-zuber,
+ author = {C. Itzykson and J. Zuber},
+ title = {Quantum Field Theory},
+ publisher = {McGraw-Hill},
+ year = 1980,
+ address = {New York}
+}
+
+
+
+@Article{jackson-sharre:1975,
+ author = {J.D. Jackson and D.L. Scharre},
+ title = { },
+ journal = {Nucl. Instrum. Methods},
+ year = 1975,
+ volume = 128,
+ pages = 13
+}
+
+
+
+@Article{jacob-wick:1959,
+ author = {M. Jacob and G. C. Wick},
+ title = {On the General Theory of Collisions for Particles
+ with spin},
+ journal = {Annals of Physics},
+ year = 1959,
+ volume = 7,
+ pages = 404
+}
+
+
+
+@Article{jadach-was:1984,
+ author = {S. Jadach and Z. W\c{a}s},
+ title = {QED ${\cal O}(\alpha^3)$ radiative corrections to
+ the reaction $e^+e^-\to\tau^+\tau^-$ including spin
+ and mass effects },
+ journal = {Acta Phys. Polon.},
+ year = 1984,
+ volume = {B15},
+ pages = 1151,
+ note = {\uppercase{E}rratum: {\bf B16} (1985) 483.}
+}
+
+
+
+@Article{jadach:1985,
+ author = {S. Jadach},
+ title = {QED radiative corrections, Monte Carlo and spin: the
+ case of $\tau$-pair production in $e^+e^-$
+ annihilation},
+ journal = {Acta Phys. Polon.},
+ year = 1985,
+ volume = {B16},
+ pages = 1007
+}
+
+
+
+@Article{james:1980,
+ author = {F. James},
+ title = { },
+ journal = {Rep. Prog. Phys.},
+ year = 1980,
+ volume = 43,
+ pages = 1145
+}
+
+
+@Article{jetset6.3:1987,
+ author = "Torbjorn Sjostrand and Mats Bengtsson",
+ title = "THE LUND MONTE CARLO FOR JET FRAGMENTATION AND $e^+ e^-$
+ PHYSICS: JETSET VERSION 6.3: AN UPDATE",
+ journal = "Comput. Phys. Commun.",
+ volume = 43,
+ year = 1987,
+ pages = 367,
+ SLACcitation = "%%CITATION = CPHCB,43,367;%%"
+}
+
+@Misc{kinematicon:1999,
+ author = {S. Jadach},
+ title = {Comoving Reference Frames For Multi-Bremsstrahlung},
+ howpublished = {To be submitted to Comp. Phys. Commun.},
+}
+
+
+@Article{kleiss-pittau:1994,
+ author = "Ronald Kleiss and Roberto Pittau",
+ title = "Weight optimization in multichannel Monte Carlo",
+ journal = "Comput. Phys. Commun.",
+ volume = "83",
+ year = "1994",
+ pages = "141-146",
+ eprint = "hep-ph/9405257",
+ SLACcitation = "%%CITATION = CPHCB,83,141;%%"
+}
+
+
+
+@Article{kleiss-stirling:1985,
+ author = {R. Kleiss and W. J. Stirling},
+ title = { },
+ journal = {Nucl. Phys.},
+ year = 1985,
+ volume = {B262},
+ pages = 235
+}
+
+
+@Article{kleiss-stirling:1986,
+ author = {R. Kleiss and W. J. Stirling},
+ title = {Cross section for the production of an arbitrary
+ number of photons in electron-positron annihilation },
+ journal = {Phys. Lett.},
+ year = 1986,
+ volume = {B179},
+ pages = 159
+}
+
+
+@Article{kleiss-widelki,
+ author = {F. Berends and R. Kleiss},
+ title = { },
+ journal = {Nucl. Phys.},
+ year = 1981,
+ volume = {B177},
+ pages = 237
+}
+
+@Article{koralb2:1995,
+ author = "Stanislaw Jadach and Zbigniew W\c{a}s",
+ title = "Koralb: An Upgrade to version 2.4",
+ journal = "Comput. Phys. Commun.",
+ volume = 85,
+ year = 1995,
+ pages = "453-462"
+}
+
+@Article{koralb:1985,
+ author = {S. Jadach and Z. W\c{a}s},
+ title = {Monte Carlo simulation of the process $e^+e^-\to
+ \tau^+\tau^-, \tau^\pm\to X^\pm$ including radiative
+ ${\cal O}(\alpha^3)$ QED corrections, mass and spin effects},
+ journal = {Comput. Phys. Commun.},
+ year = 1985,
+ volume = 36,
+ pages = 191
+}
+
+
+@Article{koralw:1998,
+ author = "S. Jadach and W. Placzek and M. Skrzypek and B. F. L. Ward
+ and Z. W\c{a}s",
+ title = "Monte Carlo program KoralW 1.42 for all four-fermion final
+ states in e+ e- collisions",
+ journal = "Comput. Phys. Commun.",
+ volume = "119",
+ year = "1999",
+ pages = "272-311",
+ eprint = "hep-ph/9906277",
+ SLACcitation = "%%CITATION = CPHCB,119,272;%%"
+}
+
+
+
+@Misc{koralz4:1999,
+ author = "S. Jadach and B.~F.~L. Ward and Z. W\c{a}s",
+ title = "The Monte Carlo program KORALZ, for the lepton or quark
+ pair production at LEP/SLC energies: From version 4.0 to
+ version 4.04",
+ year = "2000",
+ volume = "124",
+ journal = "Comput. Phys. Commun.",
+ pages = "233-237",
+ eprint = "hep-ph/9905205",
+ SLACcitation = "%%CITATION = HEP-PH 9905205;%%"
+}
+
+@Article{kuraev-fadin:1985,
+ author = {E.A. Kuraev and V.S. Fadin},
+ title = { },
+ journal = {Yad. Fiz.},
+ year = 1985,
+ volume = 41,
+ pages = 733,
+ note = {[Sov. J. Nucl. Phys. {\bf 41} (1985) 466]}
+}
+
+@Article{lepage:1978,
+ author = "G. Peter Lepage",
+ title = "A NEW ALGORITHM FOR ADAPTIVE MULTIDIMENSIONAL INTEGRATION",
+ journal = "J. Comput. Phys.",
+ volume = "27",
+ year = "1978",
+ pages = "192",
+ SLACcitation = "%%CITATION = JCTPA,27,192;%%"
+}
+
+
+@Article{marsaglia:1987,
+ author = "G. Marsaglia and A. Zaman",
+ title = "",
+ journal = "Florida State Univ. report FSU-SCRI-87-50",
+ year = 1987
+}
+
+
+@Misc{mcguide:1999,
+ author = "S. Jadach",
+ title = "Practical guide to Monte Carlo",
+ year = "1999",
+ month = "June",
+ note = {eprint physics/9906056, also available
+ from {\tt http://home.cern.ch/$\sim$jadach} (unpublished)},
+ eprint = "physics/9906056",
+ SLACcitation = "%%CITATION = PHYSICS 9906056;%%"
+}
+
+@Article{mustraal-cpc:1983,
+ author = "F. A. Berends and R. Kleiss and S. Jadach",
+ title = "MONTE CARLO SIMULATION OF RADIATIVE CORRECTIONS TO THE
+ PROCESSES E+ E- $\to$ MU+ MU- AND E+ E- $\to$ ANTI-Q Q IN
+ THE Z0 REGION",
+ journal = "Comput. Phys. Commun.",
+ volume = "29",
+ year = "1983",
+ pages = "185",
+ SLACcitation = "%%CITATION = CPHCB,29,185;%%"
+}
+
+@Article{mustraal-np:1983,
+ author = {F.A. Berends and R. Kleiss and S. Jadach},
+ title = { },
+ journal = {Nucl. Phys.},
+ year = 1982,
+ volume = {B202},
+ pages = 63
+}
+
+
+
+@Article{photos2:1994,
+ author = "Elisabetta Barberio and Zbigniew W\c{a}s",
+ title = "PHOTOS: A Universal Monte Carlo for QED radiative
+ corrections. Version 2.0",
+ journal = "Comput. Phys. Commun.",
+ volume = "79",
+ year = "1994",
+ pages = "291-308",
+ SLACcitation = "%%CITATION = CPHCB,79,291;%%"
+}
+
+@Article{James:1988vf,
+ author = "James, F.",
+ title = "A Review of Pseudorandom Number Generators",
+ journal = "Comput. Phys. Commun.",
+ volume = "60",
+ year = "1990",
+ pages = "329-344",
+ doi = "10.1016/0010-4655(90)90032-V",
+ SLACcitation = "%%CITATION = CPHCB,60,329;%%"
+}
+
+@Article{riemann-hard:1999,
+ author = "P. C. Christova and M. Jack and T. Riemann",
+ title = "Hard photon emission in e+ e- $\to$ anti-f f with realistic
+ cuts",
+ journal = "Phys. Lett.",
+ volume = "B456",
+ year = "1999",
+ pages = "264",
+ eprint = "hep-ph/9902408",
+ SLACcitation = "%%CITATION = PHLTA,B456,264;%%"
+}
+
+
+@Article{stuart:1989,
+ author = {A. G\'ongora and R. G. Stuart},
+ title = {Complete ${\cal O}(\alpha)$ corrections to polarized
+ Compton scattering},
+ journal = {Z. Phys.},
+ year = 1989,
+ volume = {C42},
+ pages = 617
+}
+
+
+@InProceedings{sussex:1989,
+ author = {S. Jadach and B.F.L. Ward},
+ title = {Exclusive expo\-nen\-tia\-tion in the Monte Carlo
+ Yennie-Frautschi-Suura approach},
+ booktitle = {Electroweak Physics},
+ year = 1989,
+ editor = {N. Dombey and F. Boudjema},
+ publisher = {Plenum Publ. Co., London},
+ note = {Proc. of Sussex University Conference}
+}
+
+
+
+
+@Article{tauola2.4:1993,
+ author = {S. Jadach and Z. W\c{a}s and R. Decker and J. H. K\"uhn},
+ title = "The $\tau$ decay library TAUOLA: Version 2.4",
+ journal = "Comput. Phys. Commun.",
+ volume = "76",
+ year = "1993",
+ pages = "361-380",
+ SLACcitation = "%%CITATION = CPHCB,76,361;%%"
+}
+
+
+
+@Article{third-order:1991,
+ author = {S. Jadach and M. Skrzypek and B.F.L. Ward},
+ title = { },
+ journal = {Phys. Lett.},
+ year = 1991,
+ volume = {B257},
+ pages = 173
+}
+
+@Article{was:1987,
+ author = {Z. W\c{a}s},
+ title = {Radiative corrections to $\tau$ pair production
+ around $Z_0$},
+ journal = {Acta Phys. Polon.},
+ year = 1987,
+ volume = {B18},
+ pages = 1099
+}
+
+
+@Article{wick:1962,
+ author = {G. C. Wick},
+ title = {Angular momentum states for three relativistic particles},
+ journal = {Annals of Physics},
+ year = 1962,
+ volume = 18,
+ pages = 65
+}
+
+@Article{wigner:1939,
+ author = {E. Wigner},
+ title = {On unitary representations of the inhomogeneous
+ Lorentz group},
+ journal = {Annals of Mathematics},
+ year = 1939,
+ volume = 40,
+ pages = 149
+}
+
+
+@Misc{yfs-mpi:1987,
+ author = "Stanislaw Jadach",
+ title = "Yennie-Frautschi-Suura soft photons in Monte Carlo event
+ generators",
+ year = 1987,
+ note = {MPI-PAE/PTh 6/87, preprint of MPI M\"unchen, unpublished}
+}
+
+@Article{yfs1:1988,
+ author = {S. Jadach and B.~F.~L. Ward},
+ title = { },
+ journal = {Phys. Rev.},
+ year = 1988,
+ volume = {D38},
+ pages = 2897
+}
+
+
+@Article{yfs2:1990,
+ author = "S. Jadach and B.~F.~L. Ward",
+ title = "YFS2: THE SECOND ORDER MONTE CARLO FOR FERMION PAIR
+ PRODUCTION AT LEP/SLC WITH THE INITIAL STATE RADIATION OF
+ TWO HARD AND MULTIPLE SOFT PHOTONS",
+ journal = "Comput. Phys. Commun.",
+ volume = "56",
+ year = "1990",
+ pages = "351-384",
+ SLACcitation = "%%CITATION = CPHCB,56,351;%%"
+}
+
+
+@Article{yfs3-pl:1992,
+ author = "S. Jadach and B.~F.~L. Ward",
+ title = "Final state multiple photon effects in fermion pair
+ production at SLC/LEP",
+ journal = "Phys. Lett.",
+ volume = "B274",
+ year = "1992",
+ pages = "470-472",
+ SLACcitation = "%%CITATION = PHLTA,B274,470;%%"
+}
+
+
+@Article{yfs:1961,
+ author = {D. R. Yennie and S. Frautschi and H. Suura},
+ title = { },
+ journal = {Ann. Phys. (NY)},
+ year = 1961,
+ volume = 13,
+ pages = 379
+}
+
+@Article{yfsww:1996,
+ author = {S. Jadach and W. P{\l}aczek and M. Skrzypek
+ and B.~F.~L. Ward},
+ title = "",
+ journal = "Phys. Rev.",
+ year = "1996",
+ volume = "D54",
+ pages = "5434"
+}
+
+@Article{yfsww:1998,
+ author = {S. Jadach and W. P{\l}aczek and M. Skrzypek
+ and B.~F.~L. Ward and Z. W\c{a}s},
+ title = "",
+ journal = "Phys. Lett.",
+ year = "1998",
+ volume = "B417",
+ pages = "326"
+}
+
+@Misc{zfitter6:1999,
+ author = "D. Bardin and others",
+ title = "ZFITTER v.6.21: A Semianalytical program for fermion pair
+ production in e+ e- annihilation",
+ year = "1999",
+ note = "e-print: hep-ph/9908433",
+ SLACcitation = "%%CITATION = HEP-PH 9908433;%%"
+}
+
+%%%%%%%%%%%%%%%%%%%%%% KK.bib %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+@Article{:2001ve,
+ author = "",
+ collaboration = "NLC",
+ title = "2001 report on the Next Linear Collider: A report submitted
+ to Snowmass '01",
+ eprint = "SLAC-R-571"
+}
+@Article{Abe:2001gc,
+ author = "Abe, Koh and others",
+ collaboration = "ACFA Linear Collider Working Group",
+ title = "Particle physics experiments at JLC",
+ year = "2001",
+ archive = "http://arXiv.org/abs",
+ eprint = "hep-ph/0109166",
+ SLACcitation = "%%CITATION = HEP-PH 0109166;%%"
+}
+
+@Article{Spira:1997qz,
+ author = "Spira, Michael and Zerwas, Peter M.",
+ title = "Electroweak symmetry breaking and Higgs physics",
+ year = "1997",
+ archive = "http://arXiv.org/abs",
+ eprint = "hep-ph/9803257",
+ SLACcitation = "%%CITATION = HEP-PH 9803257;%%"
+}
+
+@Article{TESLA,
+ author = "R. Heuer and others",
+ note = "{\it "TESLA Technical Design Report Part III: Physics at an
+ $e^+e^-$ Linear Collider"}",
+ year = "2001",
+ eprint = "hep-ph/0106315"
+}
+
+@Article{LHC1,
+ note = "{\it "Technical Proposal"}",
+ year = "1994",
+ eprint = "CERN/LHCC/94-38",
+ collaboration = {CMS}
+}
+@Article{LHC2,
+ note = "{\it "ATLAS Detector and Physics Performance: Technical Design Report"}",
+ year = "1999",
+ eprint = "CERN/LHCC/99-15",
+ volume = "2",
+ collaboration = {ATLAS}
+}
+@Article{Tevatron,
+ author = "M. Carena and others",
+ note = "{\it "Report on the Tevatron Higgs Working Group"}",
+ eprint = "hep-ph/0010338"
+ }
+@Misc{Ronan,
+ author = {M. Ronan},
+ note = {private communication },
+ year = 2001
+}
+@Misc{Peskin,
+ author = {M. Peskin},
+ note = {private communication },
+ year = 2001
+}
+
+
+@Article{Kramer:1994jn,
+ author = "Kramer, M. and Kuhn, Johann H. and Stong, M. L. and Zerwas,
+ P. M.",
+ title = "Prospects of measuring the parity of Higgs particles",
+ journal = "Z. Phys.",
+ volume = "C64",
+ year = "1994",
+ pages = "21-30",
+ archive = "http://arXiv.org/abs",
+ eprint = "hep-ph/9404280",
+ SLACcitation = "%%CITATION = HEP-PH 9404280;%%"
+}
+@Misc{cleo,
+ author = {A. Weinstein},
+ collaboration= {CLEO},
+ title = {},
+ note = {see \\ http://www.cithep.caltech.edu/\~{}ajw/korb$\_$doc.html\#{}files}
+}
+@Misc{aleph,
+ author = {B. Bloch},
+ collaboration= {ALEPH},
+ title = {},
+ note = {to contact send a mail to \\ Brigitte.Bloch-Devaux@cern.ch}
+}
+
+@Article{kkcpc:1999,
+ author = {S. Jadach and Z. W\c{a}s and B.~F.~L. Ward},
+ title = {The Precision Monte Carlo Event Generator $KKMC$
+ For Two-Fermion Final States In $e^+e^-$ Collisions},
+ journal = "Comput. Phys. Commun.",
+ volume = "130",
+ year = "2000",
+ pages = "260",
+ note = "Up to date source available from
+ {\tt http://home.cern.ch/jadach/}"
+}
+
+@Article{Abreu:1998cn,
+ author = "P. Abreu and others",
+ collaboration = "DELPHI",
+ title = "A study of the hadronic resonance structure in the decay
+ tau --> 3pi nu/tau",
+ journal = "Phys. Lett.",
+ volume = "B426",
+ year = "1998",
+ pages = "411-427",
+ SLACcitation = "%%CITATION = PHLTA,B426,411;%%"
+}
+
+@Article{Abbiendi:1999cq,
+ author = "G. Abbiendi and others",
+ collaboration = "OPAL",
+ title = "A study of three-prong tau decays with charged kaons",
+ journal = "Eur. Phys. J.",
+ volume = "C13",
+ year = "2000",
+ pages = "197",
+ eprint = "hep-ex/9908013",
+ SLACcitation = "%%CITATION = EPHJA,C13,197;%%"
+}
+@Misc{MsCGolonka,
+ author = {P. Golonka},
+ title = {PHOTOS+ -a C++ Implementation of a Universal Monte Carlo
+ Algorithm for QED Radiative Corrections in Particle's Decays},
+ month = {June},
+ year = 1999,
+ note = {MSc thesis written under supervision of Z. Was, P. Golonka
+ home page at {\tt http://lhotse.ifj.edu.pl/~piters}}
+}
+
+@Misc{whoever,
+ author = {Z. Was and others},
+ title = {Deconvoluting tau polarization from HEPEVT common block},
+ month = {September},
+ year = 2000,
+ note = {unpublished}
+}
+
+@Misc{2f-proposal,
+ author = {I. Tomalin and others},
+ title = {Preliminary notes on two-fermion group activities},
+ month = {September},
+ year = 1999,
+ note = {LEP2 workshop materials {\sf www.to.infn.it/$\sim$giampier/lep2.html}}
+}
+
+@Misc{4f-proposal,
+ author = {M. Gruenewald and others},
+ title = {Proposal for LEP2 MC workshop, 4F subgroup},
+ month = {September},
+ year = 1999,
+ note = {LEP2 workshop materials {\sf www.to.infn.it/$\sim$giampier/lep2.html}}
+}
+
+
+@Article{bardin-afb-np:1991,
+ author = "D. Bardin and others",
+ title = "Analytic approach to the complete set of QED corrections to
+ fermion pair production in $e^+, e^-$ annihilation",
+ journal = "Nucl. Phys.",
+ volume = "B351",
+ year = "1991",
+ pages = "1-48",
+ eprint = "hep-ph/9801208",
+ SLACcitation = "%%CITATION = NUPHA,B351,1;%%"
+}
+
+
+@Article{bardin-afb-pl:1991,
+ author = "D. Bardin and others",
+ title = "QED corrections with partial angular integration to fermion
+ pair production in e+ e- annihilation",
+ journal = "Phys. Lett.",
+ volume = "B255",
+ year = "1991",
+ pages = "290-296",
+ eprint = "hep-ph/9801209",
+ SLACcitation = "%%CITATION = PHLTA,B255,290;%%"
+}
+
+@Article{beijing:1987,
+ author = {Zhan Xu and Da-Hua Zhang and Lee Chang},
+ title = {Helicity amplitudes for multiple bremsstrahlung in
+ massless non-abelian gauge theories },
+ journal = {Nucl. Phys.},
+ year = 1987,
+ volume = {B291},
+ pages = {392}
+}
+
+
+@Article{berends-neerver-burgers:1998,
+ author = {F.A. Berends and W.L. Van Neerven and G.J.H. Burgers},
+ title = { },
+ journal = {Nucl. Phys.},
+ year = 1988,
+ volume = {B297},
+ pages = 429
+}
+
+@Article{bhlumi-precision:1998,
+ author = "B.~F.~L. Ward and S. Jadach and M. Melles and S. A. Yost",
+ title = "New results on the theoretical precision of the LEP / SLC
+ luminosity",
+ journal = "Phys. Lett.",
+ volume = "B450",
+ year = "1999",
+ pages = "262",
+ eprint = "hep-ph/9811245",
+ SLACcitation = "%%CITATION = PHLTA,B450,262;%%"
+}
+
+@Article{bhlumi-semi:1996,
+ author = "S. Jadach and B. F. L. Ward",
+ title = "Semianalytical third order calculations of the small angle
+ Bhabha cross-sections",
+ journal = "Acta Phys. Polon.",
+ volume = "B28",
+ year = "1997",
+ pages = "1907",
+ SLACcitation = "%%CITATION = APPOA,B28,1907;%%"
+}
+
+@Article{bhlumi2:1992,
+ author = "S. Jadach and E. Richter-Was and B.~F.~L. Ward and Z. Was",
+ title = "Monte Carlo program BHLUMI-2.01 for Bhabha scattering at
+ low angles with Yennie-Frautschi-Suura exponentiation",
+ journal = "Comput. Phys. Commun.",
+ volume = "70",
+ year = "1992",
+ pages = "305",
+ SLACcitation = "%%CITATION = CPHCB,70,305;%%"
+}
+
+
+
+@Article{bhlumi4:1996,
+ author = "S. Jadach and W. Placzek and E. Richter-Was and B. F. L.
+ Ward and Z. Was",
+ title = "Upgrade of the Monte Carlo program BHLUMI for Bhabha
+ scattering at low angles to version 4.04",
+ journal = "Comput. Phys. Commun.",
+ volume = "102",
+ year = "1997",
+ pages = "229",
+ SLACcitation = "%%CITATION = CPHCB,102,229;%%"
+}
+
+
+
+@Article{bhwide:1997,
+ author = {S. Jadach and W. P\l{}aczek and B.~F.~L. Ward},
+ title = {BHWIDE 1.00: ${\cal O}(\alpha)$ YFS exponentiated
+ Monte Carlo for Bhabha scattering at wide angles for
+ LEP1/SLC and LEP2},
+ journal = {Phys. Lett.},
+ year = {1997},
+ volume = {B390},
+ pages = 298,
+ note = {also hep-ph/9608412; The Monte Carlo program BHWIDE is
+ available from {\tt http://hephp01.phys.utk.edu/pub/BHWIDE}}
+}
+
+@Book{bjorken-drell,
+ author = {S.D. Bjorken and S. D. Drell},
+ title = {Quantum Electrodynamics},
+ publisher = {McGraw-Hill},
+ year = 1964,
+ address = {New York}
+}
+
+@Article{brown:1984,
+ author = {R. W. Brown and R. Decker and E. A. Paschos},
+ title = {Weak corrections to the $e^+e^-\to \mu^+\mu^-$ asymmetry},
+ journal = {Phys. Rev. Lett.},
+ year = 1984,
+ volume = 52,
+ pages = 1192
+}
+
+@Misc{burgers-private:1990,
+ author = {G. Burgers},
+ note = {private communication (unpublished)},
+ year = 1990
+}
+
+@Misc{calkul,
+ author = {{CALKUL Collab.}},
+ note = {\uppercase{P}hys. Lett. {\bf B103}, 124 (1981); {\bf B105}, 215 (1981);
+ {\bf B114}, 203 (1982); Nucl. Phys. {\bf B206}, 53 (1982), 61;
+ {\bf B239}, 382 (1984).}
+}
+
+
+@Article{ceex1:1999,
+ author = {S. Jadach and B.~F.~L. Ward and Z. W\c{a}s},
+ title = {Coherent Exclusive Exponentiation (CEEX) The Case of
+ Resonant $e^+e^-$ Annihilation},
+ journal = "Phys. Lett.",
+ volume = "B449",
+ year = "1999",
+ pages = "97-108",
+ eprint = "hep-ph/9905453",
+ SLACcitation = "%%CITATION = PHLTA,B449,97;%%"
+}
+
+@Misc{ceex2:1999,
+ title = {Coherent Exclusive Exponentiation For Precision Monte Carlo Calculations},
+ author = {S. Jadach and B.~F.~L. Ward and Z. W\c{a}s},
+ year = 1999,
+ month = {September},
+ note = {preprint UTHEP-99-09-01}
+}
+
+
+@Misc{circe:1996,
+ author = {T. Ohl},
+ title = {Circe Version 1.02 beta: beam Spectra for Simulating Linear Collider Physics},
+ month = {September},
+ year = 1996,
+ note = {Darmstadt report IKDA 96/13-rev, hep-ph/9607454-rev}
+}
+
+
+@Article{dizet:1989,
+ author = "D. Yu. Bardin and M. S. Bilenkii and T. Riemann and M.
+ Sachwitz and H. Vogt",
+ title = "DIZET: A PROGRAM PACKAGE FOR THE CALCULATION OF ELECTROWEAK
+ ONE LOOP CORRECTIONS FOR THE PROCESS e+ e- $\to$ f+ f-
+ AROUND THE Z0 PEAK",
+ journal = "Comput. Phys. Commun.",
+ volume = "59",
+ year = "1990",
+ pages = "303",
+ SLACcitation = "%%CITATION = CPHCB,59,303;%%"
+}
+
+@Misc{erw-private:1997,
+ author = {E. Richter-Was},
+ note = {private communication and code (unpublished)},
+ year = 1997
+}
+
+@Article{erw:1994,
+ author = {E. Richter-W\c{a}s},
+ title = {Hard bremsstrahlung photons in the $t\bar{t}$
+ production and decay: background for the
+ intermediate Higgs search},
+ journal = {Z. Phys.},
+ year = 1994,
+ volume = {C61},
+ pages = 323
+}
+
+
+
+@Article{ew-tank:1999,
+ author = "Dmitri Bardin and Martin Grunewald and Giampiero Passarino
+ ",
+ title = "Precision calculation project report",
+ year = "1999",
+ eprint = "hep-ph/9902452",
+ SLACcitation = "%%CITATION = HEP-PH 9902452;%%"
+}
+
+@Misc{foam:1999,
+ author = {S. Jadach},
+ title = {Foam:Multi-dimensional General Purpose Monte Carlo Generator With Self-adapting Simplectic Grid},
+ month = {August},
+ year = 1999,
+ note = {to be submitted to Computer Phys. Commun.}
+}
+
+
+@Book{gastmans-book,
+ author = {R. Gastmans and T. T. Wu},
+ title = {The ubiquitous photon : helicity method for QED and QCD},
+ publisher = {Oxford Clarendon Press},
+ year = 1990,
+ address = {London}
+}
+
+
+
+@Misc{gps:1998,
+ author = "S. Jadach and B.~F.~L. Ward and Z. Was",
+ title = "Global positioning of spin GPS scheme for half spin massive
+ spinors",
+ year = "1998",
+ month = {July},
+ note = {preprint {\tt CERN-TH-98-235}, submitted to {\it Eur. J. Phys. C}},
+ eprint = {hep-ph/9905452},
+ SLACcitation = "%%CITATION = HEP-PH 9905452;%%"
+}
+
+
+@Article{greco:1975,
+ author = {M. Greco and G. Pancheri-Srivastava and Y. Srivastava},
+ title = {Radiative corrections for colliding beam resonances},
+ journal = {Nucl. Phys.},
+ year = {1975},
+ volume = {B101},
+ pages = 234
+}
+
+
+
+@Article{greco:1980,
+ author = {M. Greco and G. Pancheri-Srivastava and Y. Srivastava},
+ title = {Radiative corrections to $e^+e^-\to \mu^+\mu^-$
+ around the $Z_0$},
+ journal = {Nucl. Phys.},
+ year = {1980},
+ volume = {B171},
+ pages = 118,
+ note = {\uppercase{E}rratum: ibid. {\bf B197}, 543 (1982)}
+}
+
+
+
+@Misc{guineapig,
+ author = "D. Schulte",
+ title = "Beam-beam simulations with GUINEA-PIG",
+ note = "\uppercase{CERN-PS-99-014}"
+}
+
+
+@Book{itzykson-zuber,
+ author = {C. Itzykson and J. Zuber},
+ title = {Quantum Field Theory},
+ publisher = {McGraw-Hill},
+ year = 1980,
+ address = {New York}
+}
+
+
+
+@Article{jackson-sharre:1975,
+ author = {J.D. Jackson and D.L. Scharre},
+ title = { },
+ journal = {Nucl. Instrum. Methods},
+ year = 1975,
+ volume = 128,
+ pages = 13
+}
+
+
+
+@Article{jacob-wick:1959,
+ author = {M. Jacob and G. C. Wick},
+ title = {On the General Theory of Collisions for Particles
+ with spin},
+ journal = {Annals of Physics},
+ year = 1959,
+ volume = 7,
+ pages = 404
+}
+
+
+
+@Article{jadach-was:1984,
+ author = {S. Jadach and Z. W\c{a}s},
+ title = {QED ${\cal O}(\alpha^3)$ radiative corrections to
+ the reaction $e^+e^-\to\tau^+\tau^-$ including spin
+ and mass effects },
+ journal = {Acta Phys. Polon.},
+ year = 1984,
+ volume = {B15},
+ pages = 1151,
+ note = {\uppercase{E}rratum: {\bf B16} (1985) 483.}
+}
+
+
+
+@Article{jadach:1985,
+ author = {S. Jadach},
+ title = {QED radiative corrections, Monte Carlo and spin: the
+ case of $\tau$-pair production in $e^+e^-$
+ annihilation},
+ journal = {Acta Phys. Polon.},
+ year = 1985,
+ volume = {B16},
+ pages = 1007
+}
+
+
+
+@Article{james:1980,
+ author = {F. James},
+ title = { },
+ journal = {Rep. Prog. Phys.},
+ year = 1980,
+ volume = 43,
+ pages = 1145
+}
+
+
+@Article{jetset6.3:1987,
+ author = "Torbjorn Sjostrand and Mats Bengtsson",
+ title = "THE LUND MONTE CARLO FOR JET FRAGMENTATION AND $e^+ e^-$
+ PHYSICS: JETSET VERSION 6.3: AN UPDATE",
+ journal = "Comput. Phys. Commun.",
+ volume = 43,
+ year = 1987,
+ pages = 367,
+ SLACcitation = "%%CITATION = CPHCB,43,367;%%"
+}
+
+@Misc{kinematicon:1999,
+ author = {S. Jadach},
+ title = {Comoving Reference Frames For Multi-Bremsstrahlung},
+ howpublished = {To be submitted to Comp. Phys. Commun.},
+}
+
+
+@Article{kleiss-pittau:1994,
+ author = "Ronald Kleiss and Roberto Pittau",
+ title = "Weight optimization in multichannel Monte Carlo",
+ journal = "Comput. Phys. Commun.",
+ volume = "83",
+ year = "1994",
+ pages = "141-146",
+ eprint = "hep-ph/9405257",
+ SLACcitation = "%%CITATION = CPHCB,83,141;%%"
+}
+
+
+
+@Article{kleiss-stirling:1985,
+ author = {R. Kleiss and W. J. Stirling},
+ title = { },
+ journal = {Nucl. Phys.},
+ year = 1985,
+ volume = {B262},
+ pages = 235
+}
+
+
+@Article{kleiss-stirling:1986,
+ author = {R. Kleiss and W. J. Stirling},
+ title = {Cross section for the production of an arbitrary
+ number of photons in electron-positron annihilation },
+ journal = {Phys. Lett.},
+ year = 1986,
+ volume = {B179},
+ pages = 159
+}
+
+
+@Article{kleiss-widelki,
+ author = {F. Berends and R. Kleiss},
+ title = { },
+ journal = {Nucl. Phys.},
+ year = 1981,
+ volume = {B177},
+ pages = 237
+}
+
+@Article{koralb2:1995,
+ author = "Stanislaw Jadach and Zbigniew Was",
+ title = "Koralb: An Upgrade to version 2.4",
+ journal = "Comput. Phys. Commun.",
+ volume = 85,
+ year = 1995,
+ pages = "453-462"
+}
+
+@Article{koralb:1985,
+ author = {S. Jadach and Z. W\c{a}s},
+ title = {Monte Carlo simulation of the process $e^+e^-\to
+ \tau^+\tau^-, \tau^\pm\to X^\pm$ including radiative
+ ${\cal O}(\alpha^3)$ QED corrections, mass and spin effects},
+ journal = {Comput. Phys. Commun.},
+ year = 1985,
+ volume = 36,
+ pages = 191
+}
+
+
+@Article{koralw:1998,
+ author = "S. Jadach and W. Placzek and M. Skrzypek and B. F. L. Ward
+ and Z. Was",
+ title = "Monte Carlo program KoralW 1.42 for all four-fermion final
+ states in e+ e- collisions",
+ journal = "Comput. Phys. Commun.",
+ volume = "119",
+ year = "1999",
+ pages = "272-311",
+ eprint = "hep-ph/9906277",
+ SLACcitation = "%%CITATION = CPHCB,119,272;%%"
+}
+
+
+@Article{koralz4:1994,
+ author = {S. Jadach and B.~F.~L. Ward and Z. W\c{a}s},
+ title = {The Monte Carlo program KORALZ version 4.0 for the
+ lepton or quark pair production at LEP/SLC energies},
+ journal = {Comput. Phys. Commun.},
+ year = 1994,
+ volume = 79,
+ pages = 503,
+}
+
+
+@Misc{koralz4:1999,
+ author = "S. Jadach and B.~F.~L. Ward and Z. Was",
+ title = "The Monte Carlo program KORALZ, for the lepton or quark
+ pair production at LEP/SLC energies: From version 4.0 to
+ version 4.04",
+ year = "1999",
+ note = "hep-ph/9905205, Computer. Phys. Commun. in print.",
+ SLACcitation = "%%CITATION = HEP-PH 9905205;%%"
+}
+
+@Article{kuraev-fadin:1985,
+ author = {E.A. Kuraev and V.S. Fadin},
+ title = { },
+ journal = {Yad. Fiz.},
+ year = 1985,
+ volume = 41,
+ pages = 733,
+ note = {[Sov. J. Nucl. Phys. {\bf 41} (1985) 466]}
+}
+
+@Article{lepage:1978,
+ author = "G. Peter Lepage",
+ title = "A NEW ALGORITHM FOR ADAPTIVE MULTIDIMENSIONAL INTEGRATION",
+ journal = "J. Comput. Phys.",
+ volume = "27",
+ year = "1978",
+ pages = "192",
+ SLACcitation = "%%CITATION = JCTPA,27,192;%%"
+}
+
+@Misc{mcguide:1999,
+ author = "S. Jadach",
+ title = "Practical guide to Monte Carlo",
+ year = "1999",
+ month = "June",
+ note = {eprint physics/9906056, also available
+ from {\tt http://home.cern.ch/$\sim$jadach} (unpublished)},
+ eprint = "physics/9906056",
+ SLACcitation = "%%CITATION = PHYSICS 9906056;%%"
+}
+
+@Article{mustraal-cpc:1983,
+ author = "F. A. Berends and R. Kleiss and S. Jadach",
+ title = "MONTE CARLO SIMULATION OF RADIATIVE CORRECTIONS TO THE
+ PROCESSES E+ E- $\to$ MU+ MU- AND E+ E- $\to$ ANTI-Q Q IN
+ THE Z0 REGION",
+ journal = "Comput. Phys. Commun.",
+ volume = "29",
+ year = "1983",
+ pages = "185",
+ SLACcitation = "%%CITATION = CPHCB,29,185;%%"
+}
+
+@Article{mustraal-np:1983,
+ author = {F.A. Berends and R. Kleiss and S. Jadach},
+ title = { },
+ journal = {Nucl. Phys.},
+ year = 1982,
+ volume = {B202},
+ pages = 63
+}
+
+
+
+@Article{photos2:1994,
+ author = "Elisabetta Barberio and Zbigniew Was",
+ title = "PHOTOS: A Universal Monte Carlo for QED radiative
+ corrections. Version 2.0",
+ journal = "Comput. Phys. Commun.",
+ volume = "79",
+ year = "1994",
+ pages = "291-308",
+ SLACcitation = "%%CITATION = CPHCB,79,291;%%"
+}
+
+@Article{riemann-hard:1999,
+ author = "P. C. Christova and M. Jack and T. Riemann",
+ title = "Hard photon emission in e+ e- $\to$ anti-f f with realistic
+ cuts",
+ journal = "Phys. Lett.",
+ volume = "B456",
+ year = "1999",
+ pages = "264",
+ eprint = "hep-ph/9902408",
+ SLACcitation = "%%CITATION = PHLTA,B456,264;%%"
+}
+
+
+@Article{stuart:1989,
+ author = {A. G\'ongora and R. G. Stuart},
+ title = {Complete ${\cal O}(\alpha)$ corrections to polarized
+ Compton scattering},
+ journal = {Z. Phys.},
+ year = 1989,
+ volume = {C42},
+ pages = 617
+}
+
+
+@InProceedings{sussex:1989,
+ author = {S. Jadach and B.F.L. Ward},
+ title = {Exclusive expo\-nen\-tia\-tion in the Monte Carlo
+ Yennie-Frautschi-Suura approach},
+ booktitle = {Electroweak Physics},
+ year = 1989,
+ editor = {N. Dombey and F. Boudjema},
+ publisher = {Plenum Publ. Co., London},
+ note = {Proc. of Sussex University Conference}
+}
+
+
+
+
+@Article{tauola2.4:1993,
+ author = {S. Jadach and Z. W\c{a}s and R. Decker and J. H. K\"uhn},
+ title = "The $\tau$ decay library TAUOLA: Version 2.4",
+ journal = "Comput. Phys. Commun.",
+ volume = "76",
+ year = "1993",
+ pages = "361-380",
+ SLACcitation = "%%CITATION = CPHCB,76,361;%%"
+}
+
+
+
+@Article{third-order:1991,
+ author = {S. Jadach and M. Skrzypek and B.F.L. Ward},
+ title = { },
+ journal = {Phys. Lett.},
+ year = 1991,
+ volume = {B257},
+ pages = 173
+}
+
+@Article{was:1987,
+ author = {Z. W\c{a}s},
+ title = {Radiative corrections to $\tau$ pair production
+ around $Z_0$},
+ journal = {Acta Phys. Polon.},
+ year = 1987,
+ volume = {B18},
+ pages = 1099
+}
+
+
+@Article{wick:1962,
+ author = {G. C. Wick},
+ title = {Angular momentum states for three relativistic particles},
+ journal = {Annals of Physics},
+ year = 1962,
+ volume = 18,
+ pages = 65
+}
+
+@Article{wigner:1939,
+ author = {E. Wigner},
+ title = {On unitary representations of the inhomogeneous
+ Lorentz group},
+ journal = {Annals of Mathematics},
+ year = 1939,
+ volume = 40,
+ pages = 149
+}
+
+
+@Misc{yfs-mpi:1987,
+ author = "Stanislaw Jadach",
+ title = "Yennie-Frautschi-Suura soft photons in Monte Carlo event
+ generators",
+ year = 1987,
+ note = {MPI-PAE/PTh 6/87, preprint of MPI M\"unchen, unpublished}
+}
+
+@Article{yfs1:1988,
+ author = {S. Jadach and B.~F.~L. Ward},
+ title = { },
+ journal = {Phys. Rev.},
+ year = 1988,
+ volume = {D38},
+ pages = 2897
+}
+
+
+@Article{yfs2:1990,
+ author = "S. Jadach and B.~F.~L. Ward",
+ title = "YFS2: THE SECOND ORDER MONTE CARLO FOR FERMION PAIR
+ PRODUCTION AT LEP/SLC WITH THE INITIAL STATE RADIATION OF
+ TWO HARD AND MULTIPLE SOFT PHOTONS",
+ journal = "Comput. Phys. Commun.",
+ volume = "56",
+ year = "1990",
+ pages = "351-384",
+ SLACcitation = "%%CITATION = CPHCB,56,351;%%"
+}
+
+
+@Article{yfs3-pl:1992,
+ author = "S. Jadach and B.~F.~L. Ward",
+ title = "Final state multiple photon effects in fermion pair
+ production at SLC/LEP",
+ journal = "Phys. Lett.",
+ volume = "B274",
+ year = "1992",
+ pages = "470-472",
+ SLACcitation = "%%CITATION = PHLTA,B274,470;%%"
+}
+
+
+@Article{yfs:1961,
+ author = {D. R. Yennie and S. Frautschi and H. Suura},
+ title = { },
+ journal = {Ann. Phys. (NY)},
+ year = 1961,
+ volume = 13,
+ pages = 379
+}
+
+@Article{yfsww:1996,
+ author = {S. Jadach and W. P{\l}aczek and M. Skrzypek
+ and B.~F.~L. Ward},
+ title = "",
+ journal = "Phys. Rev.",
+ year = "1996",
+ volume = "D54",
+ pages = "5434"
+}
+
+@Article{yfsww:1998,
+ author = {S. Jadach and W. P{\l}aczek and M. Skrzypek
+ and B.~F.~L. Ward and Z. W\c{a}s},
+ title = "",
+ journal = "Phys. Lett.",
+ year = "1998",
+ volume = "B417",
+ pages = "326"
+}
+
+@Misc{zfitter6:1999,
+ author = "D. Bardin and others",
+ title = "ZFITTER v.6.21: A Semianalytical program for fermion pair
+ production in e+ e- annihilation",
+ year = "1999",
+ note = "e-print: hep-ph/9908433",
+ SLACcitation = "%%CITATION = HEP-PH 9908433;%%"
+}
+
--- /dev/null
+\ProvidesClass{my_report}
+\LoadClass[11pt, titlepage]{article}
+\usepackage[paperwidth=21cm,paperheight=29.7cm,includehead,headheight=2.0cm,pdftex,hmargin={3cm,2.5cm},vmargin={0cm,2cm},]{geometry}
+\setlength{\parindent}{0cm}
+\renewcommand{\baselinestretch}{1.2}
+\parskip=1em
+
+\renewcommand{\contentsname}{Table of Contents}
+
+\renewcommand{\normalsize}{\fontsize{11pt}{11pt}\selectfont}
+\renewcommand{\title}[1]{\textsf{\Huge{#1}}}
+\renewcommand{\author}[1]{\textsf{\Huge{#1}}}
+\newcommand{\subtitle}[1]{\textsf{\textbf{\Large{#1}}}}
+\newcommand{\abstractheading}[1]{\textsf{\textbf{\LARGE{#1}}}}
+\newcommand{\code}[1]{\texttt{\footnotesize{#1}}}
+
+\renewcommand{\section}{\@startsection
+{section}% % the name
+{1}% % the level
+{0mm}% % the indent
+{10.6mm}% % the beforeskip
+{4.2mm}% % the afterskip
+{\LARGE\bfseries\sffamily}} % the style
+
+\renewcommand{\subsection}{\@startsection
+{subsection}% % the name
+{2}% % the level
+{0mm}% % the indent
+{6.4mm}% % the beforeskip
+{1.1mm}% % the afterskip
+{\Large\bfseries\sffamily}} % the style
+
+\renewcommand{\subsubsection}{\@startsection
+{subsubsection}% % the name
+{3}% % the level
+{0mm}% % the indent
+{4.2mm}% % the beforeskip
+{1.1mm}% % the afterskip
+{\normalsize\bfseries\sffamily}} % the style
+
+%% Chapter headings should be centered, uppercase, and at the top of the page.
+\def\@makechapterhead#1{%
+ { \parindent \z@ \raggedright \normalfont
+ %\centering
+ \ifnum \c@secnumdepth >\m@ne
+ \huge\textsf{\@chapapp\space \thechapter:}
+ % \par\nobreak
+ %\vskip 20\p@
+ \fi
+ \interlinepenalty\@M
+ \huge \bfseries \textsf{#1}\par\nobreak
+ \rule{5cm}{0.5pt}
+ \vskip 20\p@
+ } }
+
+\def\@makeschapterhead#1{%
+ %\vspace*{50\p@}%
+ { \parindent \z@ \raggedright
+ %\centering
+ \normalfont
+ \interlinepenalty\@M
+ \huge \bfseries \textsf{#1}\par\nobreak
+ \rule{5cm}{0.5pt}
+ \vskip 20\p@
+
+ }}
+
+ \renewenvironment{abstract}{%
+ \chapter*{\abstractname}%
+ \addcontentsline{toc}{chapter}{\abstractname}
+ }
+
+
+\makeatletter
+\renewcommand{\l@section}{\bfseries\@dottedtocline{1}{0em}{2.3em}}
+\renewcommand{\l@subsection}{\normalfont\@dottedtocline{2}{2em}{2.3em}}
+\renewcommand{\l@subsubsection}{\normalfont\@dottedtocline{3}{2em}{2.3em}}
+%\renewcommand{\l@subsubsection}{\normalfont\@dottedtocline{4}{2em}{2.3em}}
+\makeatother
+
+\def\maketitle{\begin{titlepage}
+\thispagestyle{empty}
+\let\footnotesize\small \let\footnoterule\relax \setcounter{page}{0}
+\null
+\vfil
+\begin{flushright}
+{\bf CERN-PH-TH/2010-261 \\
+ IFJPAN-IV-2010-6 \\
+ November 2010}
+\end{flushright}
+
+\begin{center}
+\title{PHOTOS Interface in C++\\[0.5cm]{}
+\textbf{\small Technical and Physics Documentation \\[0.4cm]\rule{4cm}{1pt}\\[0.4cm]}}
+
+\author{\LARGE N. Davidson$^{a,b}$, T. Przedzinski$^c$, Z. Was$^{a,d}$}\\[0.3cm]
+\textsf{\Large{\em $^a$ Institute of Nuclear Physics,
+Polish Academy of Sciences,\\
+ ul. Radzikowskiego 152, 31-342 Cracow, Poland}\\
+{\em $^b$ The University of Melbourne, School of Physics \\ Australia }\\
+{\em $^c $ The Faculty of Physics, Astronomy and Applied Computer
+Science,\\
+Jagellonian University, Reymonta 4, 30-059 Cracow, Poland}\\
+{\em $^d $ Theory Group, Physics Department, CERN, CH-1211, Geneva 23, Switzerland}
+ }\\[0.3cm]
+
+%\includegraphics[height=3cm]{logo.eps}\\[1cm]
+{\bf \Large Abstract} \vskip 2 mm
+
+\end{center}
+
+{ The first version of {\tt PHOTOS} Monte Carlo for
+bremsstrahlung in the decay of particles and resonances
+ with an interface to the HepMC event record written in C++ is now available.
+The main purpose of the present
+paper is to document technical aspects of the {\tt PHOTOS} Monte Carlo
+installation and its use. A multitude of test results and examples are
+distributed together
+with the program code.
+
+The
+{\tt PHOTOS} C++ physics precision is now as good as that of its {\tt FORTRAN}
+predecessor. However
+better steering options are available.
+An algorithm of the event record interface
+is prepared
+for the installation of process dependent variants of the
+photon emission kernel.
+Weights, featuring complete first order matrix elements, can be installed
+for general use. In the {\tt FORTRAN} version of {\tt PHOTOS} they were
+available only for decays of particles at rest and with spin
+ set along the $z$ axis.
+
+Physics assumptions used in the program and properties of the
+solution it offers are reviewed.
+In particular, it is mentioned
+that the second order matrix elements were used in design and
+validation of the program iteration procedure. Also it is explained
+that the phase space parameterization used in the program is exact.
+ }
+
+%\centerline{\normalsize \today}
+
+\vfil
+
+\footnoterule
+\noindent
+{\footnotesize
+\begin{itemize}
+\item[${\dag}$]
+This work is partially supported by EU Marie Curie Research Training Network
+grant under the contract No. MRTN-CT-2006-0355505 and by
+Polish Government grant N202 06434 (2008-2011).
+
+\end{itemize}
+}
+\null
+\end{titlepage}}
+
+\pagestyle{plain}
+
--- /dev/null
+\documentclass[]{Photos_interface_design}
+\usepackage{graphicx}
+\usepackage{hyperref}
+\usepackage{eurosym}
+\usepackage{pifont}
+%\usepackage{tocloft}
+\usepackage{amsmath}
+\usepackage{subfigure}
+\usepackage{booktabs}
+
+\makeatletter
+\renewcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.0em}}
+\renewcommand*\l@subsubsection{\@dottedtocline{3}{3.0em}{3.0em}}
+\makeatother
+
+\begin{document}
+
+\maketitle
+
+\tableofcontents\pdfbookmark[0]{Table of Contents}{toc}
+
+\newpage
+
+\section{Introduction}
+For a long time, {\tt PHOTOS} Monte Carlo \cite{Barberio:1990ms,Barberio:1993qi}
+has been used for the generation of bremsstrahlung in the decay of particles and resonances.
+Over the years the program has acquired
+popularity and it evolved into a high
+precision tool \cite{Golonka:2006tw}. Since version 2.15 of the program become
+public in the year 2005 and multi-photon radiation was
+introduced \cite{Golonka:2005pn}, there were no further public upgrades
+of the program. However the effort on documentation and tests was going on;
+ phase space treatment was shown to be
+exact \cite{Nanava:2006vv} and for several
+processes \cite{Golonka:2006tw,Nanava:2006vv,Nanava:2009vg}
+an exact matrix element was studied with the help of optional weights.
+Benchmark distributions, including comparisons with
+other simulation programs, were collected on the program web page \cite{Photos_tests}.
+
+ Such high precision applications require good control of the event record content on which {\tt PHOTOS} operates. On one side it
+requests skills and experience of the user and on the other it provides
+the flexibility necessary for the study of effects like, for example, systematic errors for
+measurements of anomalous couplings or W cross section. Methods of
+correlated samples can be applied\footnote{To exploit such methods in
+the high precision regime, good control of matrix element properties is necessary.
+As was shown in \cite{Kleiss:1990jv}, complications for such methods arise at the second order matrix element only, thus at the precision level of
+$(\frac{\alpha_{QED}}{\pi})^2 \simeq 10^{-5}$.}.
+
+Until recently {\tt HEPEVT} \cite{Altarelli:1989wu} was used as the structure for
+communication between physics Monte Carlo programs and detector/reconstruction
+packages. Experimental physicists used {\tt HEPEVT}
+for their own applications as well. Recently, to gain flexibility, {\tt FORTRAN} is being replaced by C++ and
+instead of {\tt HEPEVT}, the C++ event structure called {\tt HepMC} \cite{Dobbs:2001ck}
+is used. Nothing prevents
+moving {\tt PHOTOS} to an environment based on {\tt HepMC}
+and to rewriting the whole (beginning with the event record interface)
+of {\tt PHOTOS}\footnote{An up-to-date version of the code described in this paper is
+available from the web page of our project~\cite{photosC++}.
+ }
+ to C++. In fact implementation of the algorithm in that language
+is clearer and easier to
+ maintain. Because of its design the {\tt PHOTOS} algorithm benefits from the object
+oriented features of C++. It is our third program, after {\tt MC-TESTER} \cite{Davidson:2008ma}
+and the {\tt TAUOLA} interface \cite{Davidson:2010rw}, previously ported to {\tt HepMC} and C++.
+This completes the main step of migration of these three programs to the new style.
+
+Such migration is convenient for the users too; they can now work
+with homogeneous C++ software. From the physics point of view, transformation
+of {\tt PHOTOS}
+from {\tt FORTRAN} to C++ brings some benefits as well.
+The channel dependent, complete first order matrix elements of {\tt PHOTOS}, in {\tt FORTRAN},
+ are available only
+in special
+kinematical configurations. With the help of the new event record interface they will become
+available for general use.
+For that purpose, better access to the information necessary to orient the spin state of decaying particles
+is now provided.
+
+
+
+Our paper is organized as follows. Section \ref{sec:requrements} is devoted
+to a description of physics information which must be available in the event
+record for the algorithm to function. Later, particular requirements for the
+information stored in {\tt HepMC} are given. Section \ref{sec:design} describes
+the program structure. In Section \ref{sec:extensibility} methods prepared for
+future extensions to improve the physics precision of the generator are explained.
+Section \ref{sec:tests} presents the program tests and benchmarks.
+A summary, section \ref{sec:summary}, closes the paper.
+There are three appendices \ref{Interface to PHOTOS},
+\ref{sec:User Guide} and \ref{sec:User Configuration} attached to the paper.
+Respectively, they describe the interface to the old {\tt FORTRAN} part of the code,
+provide a user guide and explain the program configuration methods and parameters.
+
+
+\section{Requirements of the {\tt PHOTOS} Interface}
+\label{sec:requrements}
+The algorithm of {\tt PHOTOS} Monte Carlo can be divided into two parts.
+The first, internal part, operates on elementary decays. Thanks to carefully
+studied properties of the
+QED (scalar QED) algorithm, with certain probability,
+it replaces the kinematical configuration of the Born level decay with a new one,
+where a bremsstrahlung photon or photons
+are added and other particle momenta are modified. This part of the program is sophisticated from the physics
+point of view \cite{Golonka:2006tw,Nanava:2006vv},
+but from the point of view of data structures the algorithm is simple.
+That is why the gain from re-writing this part of the program to C++ is rather
+limited and will be postponed to a later step of the project development.
+On the other hand, there are not many obstacles for such a transformation to be
+performed. In fact it was already done
+previously \cite{photosplus}, but the resulting program was developed too early
+and did not attract users because of a lack of a C++ event record format standard at that time.
+
+The typical results of high energy process simulation are events of complex structure.
+They include, for example, initial state parton showers, hard scattering parts,
+hadronization and finally chains of cascade decays of resonances.
+A structure similar to a tree is created, but properties of such data structures
+are sometimes violated.
+For its action, {\tt PHOTOS} needs to scan an event record (tree)
+and localize branchings where
+it is supposed to act. The decaying particle (mother) and its primary decay products
+(daughters) have to be passed into the internal event structure of {\tt PHOTOS}.
+Finally for each daughter a list of all its subsequent decay products has to be
+formed. Kinematical modifications need to be performed on all descendants of the modified daughter.
+
+In the new, C++ version of this part of the algorithm, additional functionality
+is added.
+The first mother of the decaying particle will be localized and passed together with
+the elementary branching to the internal part of the program.
+Prior to activation of the algorithm for photon(s) generation and kinematic construction,
+ the whole decay branching
+(supplemented with its mother(s))
+will be boosted into the decaying particle's rest frame and the first mother
+will be oriented along the $z$ axis.
+In many cases, the spin state of the decaying particle can be calculated from kinematics of its production process.
+Later it can be passed on to the code which calculates the matrix element for our branching.
+
+
+At present, the part of the code responsible for photon(s) generation and kinematic
+construction is left in {\tt FORTRAN}. It does not feature the options presented above yet.
+
+
+Before an actual description of the program, let us list the tasks the event record interface must be able to perform:
+\begin{enumerate}
+\item a method to read particles stored in the event tree.
+\item a method to add or modify particles of the event tree.
+\item a method to search for elementary decays over the entire tree of the event.
+\item a method to form lists of all subsequent decay products originating from each elementary decay product.
+\item a method to localize the first mother of the decaying particle.
+\item a method to localize the second mother for a special case of $t \bar t$ pair.
+\end{enumerate}
+
+
+\subsection{C++ and HepMC Specific Requirements}
+
+The C++ version of the {\tt PHOTOS} interface implements all functionality
+of its predecessor, the {\tt PHOTOS} version 2.15 \cite{Golonka:2005pn} coded in {\tt FORTRAN}.
+The program is prepared for installation of the process-dependent correcting weights of refs
+\cite{Golonka:2006tw,Nanava:2009vg} into its public available version.
+{\tt PHOTOS} can be attached to any Monte-Carlo program,
+provided that its output is available through a {\tt HepMC} \cite{Dobbs:2001ck} event record.
+It seems that {\tt HepMC} will
+remain a generally accepted standard for the near future. However,
+already now several different options for how {\tt HepMC} is used are
+widespread. The possibility of the flexible adaptation of our event record
+interface to different
+options has been considered in the design, drawing experience
+from {\tt MC-TESTER} \cite{Davidson:2008ma,Golonka:2002rz}.
+We have also
+envisaged the possibility that {\tt HepMC} may one day be replaced by another
+standard of event record, and we have provided a way to extend
+the interface to a possible new event record standard as well.
+
+\subsection{Object Oriented Event Records -- The Case of {\tt HepMC}}
+% nd-the next paragraph repeats information that's already stated in other places.
+% zbw: this is short intro to HepMC, later contexts of our use dominate. Nadia is it OK for you?
+ In adapting the {\tt PHOTOS} interface to the C++ event record format
+the difference between the {\tt HEPEVT} event record, used in the {\tt
+ FORTRAN} version of the {\tt PHOTOS} interface, and the {\tt HepMC} event
+record, which is used for the C++ based interface, has to be taken into
+account. In the first case
+a {\tt FORTRAN common block} containing a list of particles with their properties and
+with integer variables denoting pointers to their origins and
+descendants is used. The {\tt HepMC} event structure is built from vertices,
+each of them having pointers to their origins and descendants. Links
+between vertices represent particles or fields. Fortunately, in both {\tt
+ FORTRAN} and C++ cases, the event is structured as a
+tree\footnote{At least in principle, because in practice its
+properties may be rather like a graph without universally defined
+properties. This makes our task challenging.}; the necessary
+algorithms are analogous, but nonetheless different. The {\tt HepMC}
+structure based on vertices is more convenient for the {\tt PHOTOS}
+interface.
+
+In {\tt HepMC}, an event is represented by a {\tt GenEvent} object,
+which contains information such as event id,
+units used for dimensional quantities in the event and the list of produced particles. The particles
+themselves are grouped into {\tt GenVertex} objects allowing access to mother
+and daughter particles of a single decay. Vertices provide an easy way
+to point to the whole branch in a decay tree that needs to be accessed,
+modified or deleted if needed. The information of a particle itself is stored
+in a {\tt GenParticle} object containing the particle id, status and momentum
+as well as information needed to locate its position in the decay tree.
+This approach allows traversing the event record structure in several different
+ways.
+
+The {\tt HepMC} event record format is evolving with time, making it necessary
+ to adapt
+the code to new versions. The
+{\tt HepMC} versions 2.06, 2.05 and 2.03 were used in the final tests of our
+distribution.
+
+Evolution of the {\tt HepMC} format itself is not a crucial problem.
+In contrast, conventions on how physics information is filled into {\tt HepMC}
+represent the main source of technical and also physics
+challenges for our interface.
+This is quite similar to the previous
+{\tt HEPEVT - FORTRAN} case. Let us discuss this point in more detail now.
+
+\subsubsection{Event Record Structure Scenarios}
+
+
+
+While many Monte-Carlo generators (e.g. {\tt PYTHIA 8.1} \cite{Sjostrand:2007gs},
+HERWIG++ \cite{Bahr:2008pv}), SHERPA \cite{Gleisberg:2008ta} can
+store events in {\tt HepMC} format, the representations of
+these events are not subject to strict standards, which can therefore
+vary between Monte-Carlo generators or even physics processes. Some examples
+of these variations include the conventions of status codes, the way
+documentary information on the event is added, the direction of pointers at a vertex
+and the conservation (or lack of conservation) of energy-momentum at a vertex.
+Below is a list of properties for basic scenario we have observed in Monte-Carlo
+generators used for testing the code.
+
+This list will serve as a declaration for convention of {\tt HepMC} filling, which the
+interface should be able to interpret correctly.
+
+\begin{itemize}
+ \item \textbf{4-momentum conservation} is assumed for all vertices in the event record where {\tt PHOTOS} is expected to act.
+ \item \textbf{Status codes:} only information on whether a given particle is incoming, outgoing or intermediate will be used. We assume the codes used will be 0, 1 or 2 like in HEPEVT. All other codes will be treated as
+equivalent to the status 2.
+ \item \textbf{Pointers at a vertex} are assumed to be bi-directional. That is, it is possible to traverse the record structure from mother to daughter and from daughter to mother along the same path.
+\end{itemize}
+
+\noindent
+\textbf{ Extensions/Exceptions} to these specifications are handled in some cases. We will call them
+options for conventions of event record filling.
+ \begin{itemize}
+ \item Vertices like $\tau^\pm \rightarrow \tau^\pm$ and $\tau^\mp \rightarrow \tau^\mp \gamma$
+ where the decaying particle flavor is among its decay products will prevent {\tt PHOTOS} being invoked.
+
+ \item If there is 4-momentum non-conservation\footnote{For details see
+ Appendix~\ref{subsection:other_methods} for details.} in the vertex,
+ {\tt PHOTOS} will not be invoked too. A special kinematic correcting
+ method to remove smaller inconsistencies resulting e.g. from rounding errors is available too.
+
+ \item
+ As in the {\tt FORTRAN} cases, we expect that new types of
+ conventions for filling the event record
+ will appear, because of physics motivated requirements.
+ Unfortunately, the resulting options do not always guarantee
+ an algebraically closed structure.
+ Host program-specific patches may need to be defined for
+ {\tt PHOTOS}.
+ Debugging can then be time consuming, and will need to be repeated for every new
+ case.
+ \end{itemize}
+
+
+ In the future, an important special case of event record's filling, with
+information extracted from experimentally observed events (e.g. $Z\to \mu^+\mu^-$
+ modified later to $Z\to \tau^+\tau^-$) should be allowed.
+ Obviously, a new type (or types) of {\tt HepMC} filling will then appear.
+
+A good example is the evolution of {\tt PYTHIA}. While in version 8.108 the status codes for
+our example processes took the values 0, 1 or 2 only (in the part of the record
+important for {\tt PHOTOS}), other values were already present in
+version 8.135. As a consequence the status code for
+otherwise nicely decaying particles was not always 2 anymore. We have introduced
+a change in the file PhotosEvent.cxx to adjust. After the change
+the program should work for all previous cases as before,
+changes like this one are usually difficult to validate
+and complicated tests are necessary. One could investigate
+if instead of changes on the side of the {\tt PHOTOS} algorithm a different choice of input for {\tt PYTHIA} would not
+be a more appropriate
+solution, but in this case we choose to adopt our algorithm.
+
+We have yet to decide on bar code conventions. Our programs, {\tt TAUOLA} and
+ {\tt PHOTOS}, supplement the event record with new particle entries carrying bar codes
+with values starting from 10001. That is the choice resulting from our use
+of {\tt HepMC} methods and defaults.
+
+\subsection{Interface to the Event Record of {\tt FORTRAN}}
+\label{sect:F77fill}
+
+In principle it would be rather simple to completely rewrite {\tt PHOTOS} to
+C++. However to profit from numerical tests, for the time being the numerical core of {\tt PHOTOS}
+is still left in {\tt FORTRAN}. The C++ part of the code searches the whole event for
+suitable HepMC vertices for the generation of bremsstrahlung. Once such
+a vertex is found it is copied to an internal event record which is
+called {\tt PH$\_$HEPEVT} (this is effectively the same structure as {\tt HEPEVT};
+the event record of {\tt FORTRAN}).
+The {\tt FORTRAN} code of {\tt PHOTOS} is then executed.
+The data structure passed in this way is rather simple. Only a single vertex consisting
+of the decaying particle along with its mothers and daughters is passed. Information
+on mothers will be useful in future for the calculation of process dependent
+kernels.
+
+
+
+A description of the interface to the remaining {\tt FORTRAN} parts of the code is
+given in Appendix \ref{Interface to PHOTOS}.
+
+
+\section{Design}
+\label{sec:design}
+\subsection{Classes and Responsibilities}
+
+The choice of splitting the source code into three main modules
+ allows the separation of the {\tt FORTRAN} related code from the abstract C++ interface
+and the concrete implementation of the interface created for the appropriate
+event record.
+
+\begin{figure}[h!]
+\centering
+\includegraphics[scale=0.6]{interface_design.eps}
+\label{fig:design}
+\caption{{\tt PHOTOS} C++ interface class relation diagram}
+\end{figure}
+
+\begin{itemize}
+ \item {\bf {\tt PHOTOS FORTRAN} Interface}\\
+ This part of the code provides an interface
+ to the {\tt FORTRAN} library of {\tt PHOTOS}. In particular,
+ a wrapper for the routine which invokes the processing
+ of a single branch. Parts of the interface code are still left in {\tt FORTRAN}, but
+ can be rather easily rewritten to C++.
+ The most important part of this module, the {\tt PH\_HEPEVT\_Interface\_} class,
+ is already implemented in C++. This class is responsible for writing
+ the decay branch to be processed into the internal event record {\tt PH\_HEPEVT}.
+ For further details regarding the interface to {\tt FORTRAN}
+ common blocks and routines see Appendix \ref{Interface to PHOTOS}.
+ \item {\bf {\tt PHOTOS} C++ Interface} \\
+ This is an abstract interface to the event record.
+ The class {\tt PhotosEvent} contains information regarding the whole event
+ structure, while {\tt PhotosParticle} stores all information regarding a single particle.
+ All particles used by the interface are located in the event in the form of
+ a list of {\tt PhotosParticle} objects.
+ The last class located here, {\tt PhotosBranch}, contains information regarding
+ elementary branching to be processed by {\tt PHOTOS}.
+ \item {\bf Event Record Interface} \\
+ This contains the event record implementation classes. All classes stored here represent
+ the implementation of specific event record interfaces and are responsible for reading,
+ traversing and writing to the event record structure.
+ Only the {\tt PhotosEvent} and {\tt PhotosParticle} classes must be implemented.
+ The {\tt HepMC} event record interface is implemented
+ through {\tt PhotosHepMCEvent} and {\tt PhotosHepMCParticle}. These classes are similar to the
+ analogous {\tt TAUOLA} \cite{Davidson:2010rw} event record classes.
+ An example of a minimalistic interface to an event record has been provided
+ through the classes {\tt PhotosHEPEVTEvent} and {\tt PhotosHEPEVTParticle}\footnote{This interface is the only way of implementing NLO corrections in programs based on {\tt HEPEVT} event record}.
+ %TP: we have to write something regarding the limitations of the HEPEVT interface
+ They can be used as a template for a new interface to any other event record%
+ \footnote{Thanks to the polymorphism, abstract part of the algorithm
+ is well separated from the specific event record implementations.
+ It even allows simultaneous use of several distinct event record implementations.}.
+\end{itemize}
+
+\subsection{Directory Structure}
+
+\begin{itemize}
+\item {\bf src/eventRecordInterfaces/ } - source code for classes which interface with event records.
+ Currently only the {\tt HepMC} interface is located here.\\
+ Classes:
+ \begin{itemize}
+ \item { \bf PhotosHepMCEvent} - interface to HepMC::GenEvent objects.
+ \item { \bf PhotosHepMCParticle} - interface to HepMC::GenParticle objects.
+ \item { \bf PhotosHEPEVTEvent} - interface to the event structure of the {\tt HEPEVT} format.
+ \item { \bf PhotosHEPEVTParticle} - interface to a single particle from the {\tt HEPEVT} event record.
+ \end{itemize}
+
+\item {\bf src/photosCInterfaces/ } - source code for the general {\tt PHOTOS} interface. \\
+ Classes:
+ \begin{itemize}
+ \item { \bf Photos } - controls the configuration and initialization of {\tt PHOTOS}.
+ \item { \bf PhotosEvent } - abstract base class for event information.
+ \item { \bf PhotosParticle } - abstract base class for particles in the event.
+ \item { \bf PhotosBranch } - contains one {\tt PhotosParticle}, and pointers to its mothers and daughters.
+ The filtering of branchings to be tried by {\tt PHOTOS} for photons emission is done here.
+ \end{itemize}
+
+\item {\bf src/photosFortranInterfaces/ } - interface to {\tt PHOTOS FORTRAN} routines and common blocks. \\
+ Files:
+ \begin{itemize}
+ \item { \bf f\_Init } - contains a wrapper for the {\tt PHOTOS FORTRAN} routines for initialization.
+ \item { \bf PH\_HEPEVT\_interface } - contains a wrapper for accessing the
+ {\tt PH\_HEPEVT} common block.
+ \item { \bf photos\_make.f } - contains {\tt FORTRAN} routines to be migrated to C++ rather soon.
+ \item { \bf forW-ME.f } - c {\tt FORTRAN} routines to calculate matrix element in W decay, own programming style.
+ \item { \bf forZ-ME.f } - {\tt FORTRAN} routines to calculate matrix element in Z decay, own programming style.
+ \end{itemize}
+
+\item {\bf src/utilities/ } - source code for utilities.\\
+ Classes:
+ \begin{itemize}
+ \item { \bf Log} - general purpose logging class that allows filtering out output messages
+ of {\tt PHOTOS C++ Interface} and tracks statistics for each run.
+ \item { \bf PhotosRandom} - random number generator taken from {\tt PHOTOS FORTRAN} and rewritten to C++.
+ \end{itemize}
+\item {\bf src/photos-fortran/ } - {\tt PHOTOS FORTRAN} core rewritten to C++. Since version 3.54 {\tt PHOTOS} has been
+ fully rewritten to C++ and located in its own namespace {\tt Photospp}\footnote{This means that no part of
+ the code is shared with old {\tt PHOTOS FORTRAN} and both versions can be loaded simultanously without the
+ risk of one version overwriting the options of the other.}. From the algorithmic point of view
+full compatibility\footnote{The resulting modules are however not interchangeable and the program
+ will not function if the {\tt PHOTOS FORTRAN} library is loaded instead of code encapsulated
+in {\bf src/photos-fortran/ } directory.
+}
+ with the {\tt FORTRAN } version is kept. The appropriate descriptions remain vaild;
+in publications as well as in the code, now in C++.
+ \item {\bf examples/ } - examples of different {\tt PHOTOS} C++ Interface uses.
+ \begin{itemize}
+ \item {\bf photos\_hepevt\_example} - stand alone example with a simple
+ $e^+e^- \rightarrow \tau^+\tau^-$ event written in {\tt HEPEVT} format
+ and then processed by {\tt PHOTOS}.
+ \item {\bf photos\_standalone\_example} - the most basic example which loads pre-generated
+ events stored in a file in {\tt HepMC} format which are then processed by {\tt PHOTOS}.
+ \item {\bf single\_photos\_gun\_example} - an example of using the {\tt processOne} method
+ to process only selected particles within the event record.
+ \item {\bf photos\_pythia\_example} - an example of $e^+e^- \rightarrow Z \rightarrow \mu^+\mu^-$ events
+ generated by {\tt PYTHIA 8.1} and processed by {\tt PHOTOS}. The analysis is done using {\tt MC-TESTER}.
+ \item {\bf tauola\_photos\_pythia\_example } - an example of {\tt TAUOLA} linked with {\tt PYTHIA 8.1}.
+ The decay chain is processed by {\tt PHOTOS} and then analyzed with {\tt MC-TESTER}.
+ \end{itemize}
+ \item {\bf include/} - directory for the header files.
+ \item {\bf lib/ } - directory for the compiled libraries.
+ \item {\bf documentation/ } - contains doxygen documentation and this latex file.
+\end{itemize}
+
+\subsection{Algorithm Outline}
+\label{sect:Outline}
+
+An overview of the algorithm for the {\tt PHOTOS C++ Interface} is
+given below. For clarity, the example assumes that the processed event
+is stored in the {\tt HepMC} event record structure.
+
+The first step is creation of a {\tt PhotosHepMCEvent} object from
+a {\tt HepMC::GenEvent} event record. After that, the {\tt process()} method should
+be executed by the user's code\footnote{Instead of creating a {\tt PhotosHepMCEvent} and processing the whole event,
+a user may want to execute {\tt Photos::processParticle(...)} or {\tt Photos::processBranch(...)}
+for branching or branch, where {\tt PHOTOS} is expected to perform its tasks.
+For details see Appendix~\ref{PHOTOSgun}.
+}, invoking the following process:
+
+\begin{enumerate}
+\item The {\tt HepMC} event record is traversed and a list of all decaying
+ particles is created.
+\item Each particle is checked and if the resulting branching is a self-decay\footnote{A history entry in the event record, like
+ $Z\to Z$ or $\tau \to \tau$.} it is skipped.
+\item For each remaining particle a branching including the particle's mothers and daughters
+ is created. Special cases consisting of mothers and daughters but without intermediate particle
+to be decayed are also added to the
+ list of branchings.
+\item Branchings are filtered out again, this time with the user's choice of processes
+ to be skipped by the photon adding algorithm.
+\item Each branching is processed by {\tt PHOTOS} separately:
+
+ \begin{enumerate}
+
+ \item The branching is written to {\tt PH\_HEPEVT}
+ \item The {\tt PHOTOS} photon adding algorithm is invoked
+ \item The resulting branching is taken back from {\tt PH\_HEPEVT} and any changes made by {\tt PHOTOS}
+ to the already existing particles and their whole decay trees are integrated into the event record.
+ \item Finally, the created photons are added to the event record.
+ \end{enumerate}
+
+\end{enumerate}
+
+The underlying HepMC::GenEvent is hence modified with the insertion of photons.
+
+\section{Extensibility}
+\label{sec:extensibility}
+ The purpose of the present version of the C++ interface to {\tt PHOTOS} is to enable
+all the functionality of its {\tt FORTRAN} predecessor to be available for the HepMC data
+structure. Some methods for improved initialization are already introduced in this version. The new program
+functionality has been prepared to enable further extensions in the future.
+Let us briefly discuss some of these points.
+
+\subsection{{\tt PHOTOS} Extensions}
+In this paper we have presented an algorithm as it is today.
+That is, a version which is compatible with the one implemented in {\tt FORTRAN}.
+
+\begin{itemize}
+
+
+\item
+As can be seen from the text presented, we have prepared the structure
+for the implementation of channel dependent matrix elements. This work, requiring
+special modifications to the {\tt FORTRAN} code and applicable one at a time only can
+be simply integrated all together into the C++ version. This is not urgent.
+ We are not convinced if such complication is worth
+the inconvenience for the user as it requests more strict control of the event
+record content. The gain of precision is
+not that important because the precision is already quite good.
+This is why we have not incorporated these auxiliary upgrades to C++ already now.
+Instead, as an intermediate step, we developed validation techniques
+for the program. These are required prior to a re-write of the
+numerically sensitive part of the program (which is algorithm-wise
+rather simple) anyway.
+
+\item
+Methods devised to check the content of HepMC as used by {\tt PHOTOS} are
+described in Appendix \ref{App:Logging}.
+They need to be used whenever {\tt PHOTOS}
+processes events from a new generator e.g. upgraded versions of {\tt PYTHIA},
+which may fill the event record in an unexpected way.
+Experience gained from many years of developing and maintaining the algorithm
+have shown, that this is the most demanding task; the necessity to
+adapt to varying physics and technical input of the event record pose
+a multitude of problems. The nature of these difficulties cannot be
+predicted in advance.
+
+\item
+For the sake of debugging we have introduced new control methods
+and ones which activate
+internal printouts of the {\tt FORTRAN} part of the code.
+The routine {\tt PHLUPA} \cite{Barberio:1993qi} can be activated to verify
+how an event is constructed/modified, and to investigate energy
+momentum (non-) conservation or other inconsistencies.
+This is quite convenient, for example, for tracing problems in the
+information passed to {\tt PHOTOS}.
+
+
+\item
+Numerical stability is another consideration; it cannot be separated from
+physics constraints. The condition $E^2-p^2=m^2$ may be broken because of
+rounding errors. However, due to intermediate particles with
+ substantial widths, the on mass shell condition may not be applicable.
+{\tt PHOTOS} may be adapted to such varying conditions, but it requires
+good interaction with users. The protection which removes
+inconsistencies in the event record may be a source of unexpected difficulties
+in the other cases.
+At present, such methods are left in the {\tt FORTRAN} part of the algorithm,
+which
+will be gradually reviewed and migrated to C++.
+\end{itemize}
+
+
+\subsection{Event Record Interface}
+In the times of {\tt FORTRAN}, the {\tt PHOTOS} interface used an internal event structure which was
+based on {\tt HEPEVT},
+adding to it (understood as a data type) an extra variable defining
+the status of particles with respect to QED Bremsstrahlung. In some cases, like
+$\tau \to l \nu_l \nu_\tau$, bremsstrahlung was already generated earlier
+by other generator, and {\tt PHOTOS} should not be activated on such decays.
+At present, instead, a set of initialization methods is
+prepared as described in Appendix \ref{section:suppress}.
+
+There is definite room for
+improvement. For example if the vertex $q \bar q \to l^\pm l^\mp g$ is encountered
+(note the presence of $g$ in the final state),
+the interface could `on the fly' add an intermediate $Z$ into the record and enable {\tt PHOTOS}
+on the temporarily constructed decay branching, $Z \to l^\pm l^\mp $.
+
+Internally, in the {\tt FORTRAN} part of {\tt PHOTOS}, the data
+structures based on {\tt HEPEVT}: {\tt PH\_HEPEVT} and {\tt PHOEVT},
+are used, but they store only a single elementary decay.
+At this step in the program
+evolution it might not be the most elegant solution, but it prevents
+the need to redo many of the {\tt FORTRAN} era benchmarks.
+
+
+
+
+
+
+\section{Testing}
+\label{sec:tests}
+One of the most important parts of the {\tt PHOTOS} project are its physics oriented tests.
+Several domains
+of physics tests should be mentioned. Users interested in precision
+simulations of Z or W decay will
+find the papers \cite{Nanava:2009vg,Golonka:2006tw,Golonka:2005pn}
+most interesting. There, careful comparison with the first order matrix element
+and confirmation of the agreement is concluded first.
+For $Z$ decays, comparisons with Monte Carlo program based on exclusive
+exponentiation with up to second order matrix element
+is possible and was performed on some benchmark distributions.
+Inclusion of a correcting weight was found to be numerically less important
+than absence of the second order matrix element in the YFS exponentiation scheme.
+In these comparisons the Monte Carlo programs from LEP times
+\cite{koralz4:1994,kkcpc:1999} were used. In numerical tests {\tt MC-TESTER} \cite{Davidson:2008ma}
+was used. The advantage of the method is that C++ and {\tt FORTRAN} program
+results can be easily compared\footnote{We thank Andy Buckley for checking numerically
+ that our conclusions on the first order exact YFS exponentiation results extend
+to the programs presently used at the LHC such as
+SHERPA and HERWIG++. }.
+
+For inclusive calculations, FSR radiative corrections are at the one permille level.
+For semi-inclusive cross sections, such as the total rates of Z decay for events
+where the hardest photon energy (or two hardest photon energies) exceed 1 GeV in the Z rest frame, differences
+between results from {\tt PHOTOS} ({\tt PHOTOS} without the matrix element correcting weight)
+and YFS based generators of the first or second order were also
+at the 0.2 \% level.
+On the other hand, if two hard photons were requested and invariant masses constructed from leptons
+and hard photons were monitored,
+ the level of differences exceeded
+ 30 \%. However, even in this region of phase space {\tt PHOTOS}, without the correcting
+weight, performs better\footnote{In
+ the phase space region were only one hard photon is tagged this conclusion seems to depend
+ on the variant of exponentiation in use, \cite{koralz4:1994} or \cite{kkcpc:1999}.
+ }
+than programs based on exponentiation and the first order matrix element only.
+
+This conclusion needs to be investigated if
+realistic experimental
+cuts are applied. Fortunately the necessary programs are available for Z decay.
+In the case of $W$ decay, second order Monte Carlo generators supplemented with
+exponentiation are not available at this moment.
+
+For users interested in the simulation of
+background for Higgs searches at the LHC and for any other applications where
+two hard photon configurations are important, studies based on the comparison with
+a double photon matrix element are of
+interest. For {\tt PHOTOS} Monte Carlo such tests were initiated
+in refs.~\cite{Barberio:1993qi,RichterWas:1994ep,RichterWas:1993ta}.
+Finally, users interested in low energy processes where the underlying physics model
+for photon emission cannot be controlled by theory sufficiently well
+(scalar QED may
+be considered only as the starting point), will profit
+from \cite{Nanava:2006vv,Nanava:2009vg}. In all cases it is important that
+the program generation cover the full phase-space and that there are no
+approximations in phase-space. As in the {\tt FORTRAN} version, the code
+features approximation in the kernel. In some cases the process dependent
+complete first order
+kernel is available but it is not always installed in the public version,
+because the resulting approximation is
+numerically unimportant and requires control of the spin state for the decaying
+particle. This requires better control of the event record than what was available
+in {\tt FORTRAN}. At present such an option is prepared (see Section \ref{sect:F77fill}) for $W$ and $Z$ decays. It is also available for the two body decays of scalar into scalars. Then, exact mean exact with respect to scalar QED only.
+
+The main purpose of the present paper is program documentation. That is why
+we also need to cover the program tests required to guarantee its proper installation.
+The physics tests discussed above
+do not guarantee that the program will perform well on a particular platform and installation. Tests and debugging of the installation
+are necessary too. If the content of the event record is non-standard or rounding errors are large, the performance of {\tt PHOTOS} will deteriorate.
+
+
+The first check after installation of {\tt PHOTOS} is whether some energy momentum non
+conservation appears. Such offending events should be studied
+before {\tt PHOTOS} and after {\tt PHOTOS} is run to modify them.
+If it is impossible to understand why inconsistencies for energy momentum non
+conservation were created by {\tt PHOTOS}, the authors should be contacted. Sometimes
+monitoring how an event is constructed inside the {\tt FORTRAN} part of the code
+may be useful. For that purpose the steering of monitoring\footnote{See Appendix \ref{App:Logging}
+for the command {\tt Log::LogPhlupa(int from, int to)}}
+ is
+available from the C++ part of the code. In practice only rather
+ advanced users will profit from the printouts. However, it may be sent to
+the authors and help to quickly identify the cause of the problems.
+
+
+The next step in benchmarking relies on comparisons with benchmark distributions.
+At present, we store these tests with the help of {\tt ROOT} \cite{Antcheva:2009zz} and our {\tt MC-TESTER} program \cite{Davidson:2008ma}.
+
+
+
+\subsection{{\tt MC-TESTER} Benchmark Files}
+
+
+
+Over years of development of the {\tt TAUOLA} and {\tt PHOTOS} programs a certain level
+of the automation of tests was achieved. It was found that monitoring all the invariant mass distributions which can be constructed out of a given decay represent
+a quite restrictive but easy to implement test.
+Finding the relative fraction of events for each distinct final state
+ complemented that test and is implemented now in the public version of {\tt MC-TESTER}.
+We have applied this method
+for {\tt PHOTOS} too. In this case, some soft final state particles have to be ignored because we are bound to work with samples which otherwise would
+exhibit properties of unphysical infrared regulators (see Section 6.1 of
+ref \cite{Davidson:2008ma} for more details). For the most popular
+decays the benchmarks are collected on our project web page \cite{Photos_tests}.
+In our distribution, we have collected numerical results in the directory
+{\tt examples/testing} and its subdirectories:
+{\tt Htautau, ttbar, Wenu, Wmunu, Zee and Zmumu}. Each of them includes
+an appropriate initialization files for the particular run of {\tt PYTHIA}. Numerical results from long runs of {\tt MC-TESTER} based tests
+are stored for reference\footnote{Details on the initialization for the
+runs are given in
+{\tt README-benchfiles}.}. At present, our choice of tests is oriented toward
+the LHC user and radiative corrections in decay of W's, Z's and Higgs particles.
+Most of the users of low energy experiments use the {\tt FORTRAN} version
+of the code, which is why our tests and examples for the C++ version are not geared toward
+low energy applications.
+
+
+\subsection{Results}
+\label{sec:results}
+In principle, for the algorithm of photon(s) construction, the C++ interface of
+{\tt PHOTOS} introduces nothing new with respect to the
+version of {\tt PHOTOS} as available in {\tt FORTRAN}.
+That is why the tests which are collected in \cite{Photos_tests} are not
+recalled here, they were only reproduced and found to be consistent with the ones for
+old {\tt PHOTOS FORTRAN}.
+However the algorithm for combining a modified branching, including the added
+photon(s), to the rest of the event tree was rewritten.
+Examples of spin dependent observables are of more interest because they test this new part of the code.
+The $\pi$ energy spectrum in the decaying
+Z boson rest-frame is the first example.
+The $\pi^\pm$ originates from $\tau^\pm \to \pi^\pm \nu $ decay and,
+as was already shown a long time ago \cite{Boillot:1988re}, its energy spectrum is modified by bremsstrahlung both in $\tau$ and $Z$ decays. The net
+bremsstrahlung effect is similar to the one of e.g. Z polarization. In Fig.~\ref{fig:KKMC} this result is reproduced.
+
+Let us now turn to tests using observables which are sensitive to
+transverse spin effects. For that purpose we study the decay chain:
+$H\to \tau^+\tau^-$, $\tau^\pm \to \rho^\pm \nu_\tau$, $\rho^\pm \to
+\pi^\pm \pi^0$, where {\tt PHOTOS} may act on any of the branchings
+listed above. An inappropriate action of the C++ part of {\tt PHOTOS}
+could result in faulty kinematics, manifesting itself in a failure of
+energy-momentum conservation checks of the event record or faulty spin
+correlation sensitive distributions. However, as we can see from Fig.~\ref{fig:acoplanarity},
+ the distributions (as they should be) remain nearly identical to the ones given in
+\cite{tauolaC++,Davidson:2010rw}. The emission of soft and/or
+collinear photons to the $\tau^+$ or $\tau^-$ does not change the
+effects of spin correlations. The kinematical effects of hard,
+non collinear photons are responsible for dips in
+the acoplanarity distributions at $0$, $\pi$ and $2\pi$.
+
+\begin{figure}[h!]
+\centering
+\subfigure[bremsstrahlung from $\tau^+ $ decay only]{
+\includegraphics[scale=0.35]{bremdec.eps}
+}
+\subfigure[bremsstrahlung from $Z$, $\tau^+ $ and $\tau^- $ decays]{
+\includegraphics[scale=0.35]{bremall.eps}
+}
+\caption{ Bremsstrahlung effects for longitudinal spin observables
+for the cascade decay: $Z \to \tau^+ \tau^-$, $\tau^\pm \to \pi^\pm\nu$.
+$\pi^+$ energy spectrum in the Z rest-frame is shown. The red line is for
+bremsstrahlung switched off
+and green (light grey) when its effect is included.
+In the left plot, bremsstrahlung is in $\tau^+ $ decay only.
+In the right plot, bremsstrahlung from $Z$ and $\tau^\pm$ decays is
+taken into account.
+These plots have been prepared using a custom {\tt UserTreeAnalysis} of {\tt MC-TESTER}.
+They can be recreated with the test located in the {\tt examples/testing/Ztautau} directory, see {\tt examples/testing/README-plots} for technical details. Results are
+consistent with Fig.~5 of Ref.~\cite{Eberhard:1989ve}.
+\label{fig:KKMC}
+}
+\end{figure}
+\begin{figure}[h!]
+\centering
+\subfigure[selection C]{
+\includegraphics[scale=0.35]{coplanarity-angle-C-photon-over-1-GeV.eps}
+}
+\subfigure[selection D]{
+\includegraphics[scale=0.35]{coplanarity-angle-D-photon-over-1-GeV.eps}
+}
+\caption{Bremsstrahlung effects for transverse spin observable:
+ The distribution of the acoplanarity angle of oriented planes spanned respectively on
+ the $\pi^+\rho^+$ and $\pi^-\rho^-$ momenta is shown.
+The distribution is defined in the rest frame of the
+ $\rho^+ \rho^-$ pair for the scalar Higgs decay chain $H\to
+ \tau^+\tau^-$, $\tau^\pm \to \rho^\pm \nu_\tau$, $\rho^\pm \to
+ \pi^\pm \pi^0$. {\tt PHOTOS} is used to generate
+ bremsstrahlung. The red curve indicates the distribution when
+ bremsstrahlung effects are ignored and for the green curve (light grey)
+only events
+ with bremsstrahlung photons of energy larger than 1 GeV
+ in the $H$ rest frame are taken. For the definition of selections C
+ and D see.~\cite{Bower:2002zx,Desch:2003rw}. These plots have been created using
+ a custom {\tt UserTreeAnalysis} of {\tt MC-TESTER}. They can be
+ recreated by the test located in the {\tt
+ examples/testing/Htautau} directory, see {\tt
+ examples/testing/README-plots} for technical details.
+\label{fig:acoplanarity}
+}
+\end{figure}
+
+
+In Ref.~\cite{Adam:2008ge} a discussion of the systematic errors for the measurement of the Z cross
+section at the LHC is presented. One of the technical tests of our software is to obtain
+Fig. 1b of that paper. In our Fig.~\ref{fig:lineshape} we have
+reproduced that plot using {\tt PYTHIA 8.1} and {\tt PHOTOS}. Qualitatively, the effect
+of FSR QED bremsstrahlung is in the two cases quite similar.
+
+
+In Fig.~\ref{fig:lineshape} we present a plot of the bare electron pair
+(which means electrons are not combined with the collinear photons that accompany them) from $Z$
+ decay with and without {\tt PHOTOS}. It is similar to
+the plots shown for {\tt Horace} or {\tt Winhac}; see Refs.~\cite{CarloniCalame:2003ux,Winhac} and related
+studies.
+One should bear in mind that this is again a technical test with little
+direct application to physics. As explained in the figure caption, the LHC production process was used.
+\begin{figure}[h!]
+\centering
+\includegraphics[scale=0.85]{lineshape.eps}
+\caption{Distribution of the bare $e^+e^-$ invariant mass. The green curve
+(light grey) represents results when final state
+bremsstrahlung is generated (with the help of {\tt PHOTOS} Monte Carlo). For the red curve FSR
+bremsstrahlung is absent. The event sample is generated with the help of {\tt PYTHIA 8.1}.
+The simulation of pp collisions at 14 TeV center-of-mass energy is performed.
+The $Z/\gamma$ mediated hard process is used.
+This plot has been created using a custom {\tt UserTreeAnalysis} of {\tt MC-TESTER}.
+It can be recreated with the test located in the {\tt examples/testing/Zee} directory, see {\tt examples/testing/README-plots} for technical details.
+\label{fig:lineshape}
+}
+\end{figure}
+
+
+
+We have also checked that {\tt PHOTOS} works for $t \bar t$ events and the simulations explained in \cite{RichterWas:1993ta} can be repeated.
+For this purpose we have produced $t \bar t$ pairs in $pp$ collisions at
+14 TeV center-of-mass energy. We have produced rates for events with zero, one or
+at least two photons of energy above 0.001 of the $t \bar t$ pair mass
+(energies are calculated in the hard scattering frame).
+Results are given in the following table which is constructed from
+$gg \to t \bar t$ events only:
+
+
+\vspace{0.3cm}
+\begin{center}
+{ \begin{tabular}{c c}
+\toprule
+Final state & Branching Ratio (\%) $\pm$ Statistical Errors (\%) \\
+\midrule
+{$ \widetilde{t} t \; \;\; \;$} & {99.0601 $\pm$ 0.0315} \\
+%\hline
+ {$ \widetilde{t} t \gamma \;\;$} & { 0.9340 $\pm$ 0.0031} \\
+%\hline
+{$ \widetilde{t} t \gamma \gamma$} & { 0.0060 $\pm$ 0.0002} \\
+\bottomrule
+\end{tabular}
+}
+\end{center}
+
+10 million events were generated and a slightly modified
+version of {\tt MC-TESTER}'s {\tt LC-analysis} from Ref.~\cite{Golonka:2002rz}
+was used for calculation of the event rates\footnote{ We do not supplement the list of
+final state particles with the second mother, in contrast to the choice used in {\tt LC-analysis} from Ref.~\cite{Golonka:2002rz}. }.
+{\tt ROOT} files for differential distributions are
+collected in the directory {\tt examples/testing/ttbar}.
+
+\subsection{Tests Relevant for Physics Precision}
+
+
+Let us now turn to an example of the test for the two photon final state configuration.
+We compare (i) KKMC \cite{kkcpc:1999} with exponentiation and second order matrix element (CEEX2), (ii) KKMC with exponentiation and first order matrix element (CEEX1)
+and finally (iii) the results of {\tt PHOTOS} with exponentiation activated. As one can see from the table below, the rates
+coincide for the three cases up to two permille for the event configurations
+where zero, one or at least two photons of energy above 1 GeV are accompanying the $\mu^+\mu^-$ pair.
+
+\begin{table}
+\centering
+\begin{tabular}{lrrr}
+\toprule
+Decay channel &\multicolumn{3}{c}{ Branching Ratio $\pm$ Rough Errors (100M event samples)} \\
+ & {KKMC CEEX2} (\%) & {KKMC CEEX1} (\%)& {\tt PHOTOS} exp. (\%)\\
+\midrule
+ {$Z^{0} \rightarrow \mu^{+} \mu^{-} $} & {83.9190 $\pm$ 0.0092} &{ 83.7841 $\pm$ 0.0092} & 83.8470 $\pm$ 0.0092\\
+%\midrule
+ {$Z^{0} \rightarrow \gamma \mu^{+} \mu^{-} $} & {14.8152 $\pm$ 0.0038} &{ 14.8792 $\pm$ 0.0039} & 14.8589 $\pm$ 0.0039 \\
+%\midrule
+{$Z^{0} \rightarrow \gamma \gamma \mu^{+} \mu^{-} $} & { 1.2658 $\pm$ 0.0011} &{ 1.3367 $\pm$ 0.0012} & 1.2940 $\pm$ 0.0011\\
+\bottomrule
+\end{tabular}
+\end{table}
+
+Agreement at this level is not seen in the differential distributions, see Fig.~\ref{fig:gamgam}. For example the spectrum of
+the two photon mass is quite different between the first and second order
+exponentiation result. This is of potential interest for background simulations
+for $H \to \gamma \gamma$. In contrast, the difference between the results from {\tt PHOTOS} and CEEX2 are much smaller. {\tt PHOTOS} exploits the first order matrix element
+in a better way than exponentiation. As a consequence it reproduces terms resulting in second order leading logarithms. This observation is important not only for
+the particular case of $Z$ decay but for the general case of double bremsstrahlung in any decay as well.
+
+\begin{figure}[h!]
+\centering
+\subfigure[CEEX2: red; CEEX1: green]{
+\includegraphics[scale=0.35]{{M1@0001.eps}}
+}
+\subfigure[ CEEX2: red; PHOTOS: green]{\label{plot:b}
+\includegraphics[scale=0.35]{b-M1@0001.eps}
+}
+\caption{ The spectrum of the $\gamma \gamma$ invariant mass in $Z \to \mu^+\mu^-$
+decay. Events with two hard photons, both of energy above 1 GeV in the $Z$ rest
+frame are taken. Comparisons are shown for CEEX2 and CEEX1 (left plot), and CEEX2 and {\tt PHOTOS}
+(right plot). The prediction from {\tt PHOTOS} is clearly superior for applications aimed at
+the simulation of Higgs boson backgrounds. In the case of solutions based on YFS
+exponentiation, the second order matrix element must be taken into account. Fig.~\ref{plot:b} was obtained
+from our example, {\tt examples/testing/Zmumu}, after adaptation of the center-of-mass energy
+(91.17 GeV) and test
+energy threshold (1 GeV). Samples of 100 million events were used.
+See {\tt examples/testing/README-plots} for technical details. Reference
+{\tt ROOT} files for KKMC CEEX samples are, however, created outside of the distribution.
+ \label{fig:gamgam}
+}
+\end{figure}
+
+
+The numerical results collected here provide part of the program benchmarks.
+They are of limited but nonetheless of some physics interest as well.
+ {\tt PHOTOS} provides only one step in the simulation chain:
+bremsstrahlung in decays or final state bremsstrahlung. One can ask
+the question of whether such a specialized unit is of interest and whether it is not better
+to provide the complete chain for ``truth physics simulation'' as a single simulation package. Obviously, this will
+depend on particular needs. Final state QED corrections can be
+ separated from the remaining genuine electroweak corrections and
+in particular the initial state QED bremsstrahlung from quarks.
+One should bear in mind, that final state bremsstrahlung
+needs to be disentangled from detector acceptance dependencies and is not of
+interest in itself. This must be done e.g. to measure the properties of weak bosons.
+
+One should bear in mind that even for QED FSR alone, the discussion of the physics
+precision of the simulation result requires further checks. In the case of
+$Z$ decays, Refs.~\cite{Golonka:2005pn,Golonka:2006tw} may not be enough.
+With increasing precision, the estimation of uncertainty becomes dependent on
+the particular choice of details for the experimental cuts. Comparisons of different
+calculations become important too. A good example of such work in the conext of
+other measurements can be found in Refs.~\cite{Jadach:1995pd,Arbuzov:1996eq};
+for the simulation of
+FSR QED corrections, the Monte Carlo programs collected for {\tt PHOTOS} generator
+tests are probably enough.
+A discussion of QED initial final state interference may follow the strategy presented
+in \cite{Jadach:1999gz}. There, the question of experimental cuts must be included
+as well. Once these steps are completed, discussion
+of complete electroweak corrections in the context of realistic observables should
+be simplified.
+
+
+
+Genuine weak corrections have to be taken into account separately.
+Such solutions may be possible, if together with the {\tt PHOTOS Interface},
+ weak corrections are provided for example with the help of the {\tt TAUOLA Interface}.
+A discussion
+of the complete electroweak corrections, as shown in Fig. 1a of \cite{Adam:2008ge},
+is not the purpose of our document. Let us point out however that electroweak
+non-QED corrections can be in principle installed into the {\tt PYTHIA 8.1} + {\tt PHOTOS} simulation with
+the help of the e.g. {\tt TAUOLA} interface \cite{Davidson:2010rw}.
+But for such a solution to be precise, further work is needed \cite{Bardin-private}.
+
+Sizeable initial state QED corrections are usually embodied in units
+simulating parton showers. This may need some experimental analysis as well.
+Recently experimental data from LEP1 times were revisited by the DELPHI collaboration \cite{Abdallah:2010tk}.
+Tension between data and the theoretical description is
+mentioned. This may mean that the description of initial state QED bremsstrahlung
+at the LHC will need to be re-investigated with the help of LHC data as well.
+That is also why it might be useful to keep initial state QED, final state QED and their interference corrections in separate modules.
+
+We leave such estimations of the theoretical uncertainty for $Z$ and $W$
+production at the LHC
+to the forthcoming research, where a realistic choice of experimental conditions and
+observables
+will become an integrated part. \vskip -2 mm
+
+\section{Summary and outlook}
+\label{sec:summary}
+We have presented a new version of {\tt PHOTOS} Monte Carlo. The part of
+{\tt PHOTOS} which operates on
+event records is now rewritten into C++ and uses the HepMC event record
+format for input and output. The physics performance of the program is the
+same as that of the {\tt FORTRAN/HEPEVT} version, but better steering options are introduced.
+Also, when an elementary decay is to be modified by {\tt PHOTOS},
+it is first transformed to its rest frame. The $z$-axis is orientated along the decaying particle's mother's direction, as seen in this rest frame. Such modification is
+necessary to calculate process dependent kernels
+featuring the complete first order matrix element. If the interest will arise,
+the appropriate kernels explained in
+Refs.~\cite{Golonka:2006tw,Nanava:2006vv,Nanava:2009vg} can be installed
+into the C++ version of {\tt PHOTOS}. The necessary information is extracted
+from the event record and can be used.
+At present some parts of the algorithm are left in {\tt FORTRAN}.
+ This remaining {\tt FORTRAN} part of the code
+can be recoded to C++ rather easily, but the necessary numerical tests
+are time consuming. That is why we have left these changes for later
+releases.
+
+{Finally let us point to ref.~\cite{Arbuzov:2012dx}. Thanks to this work, for LHC applications in $Z$, $W$ decays,
+{\tt PHOTOS} Monte Carlo systematic error was established at 0.3\%, even 0.2\% for the case of matrix element correction activated. The estimation is valid
+for complete final state radiative corrections, not for photonic bremsstrahlung
+alone.
+}
+
+\vskip 2 mm
+
+\centerline{\large\bf Acknowledgements}
+
+
+Useful discussions with P. Golonka during the early stage of project development and discussions
+with members of the ATLAS and CMS collaborations and the LCG/Genser team
+are acknowledged.
+%We are especially indebted to the pilot users of the interface.
+%, in particular to:
+%nd-fix
+
+
+Partial support by the Polish-French collaboration
+no. 10-138 within IN2P3 through LAPP Annecy and
+during the final completion of this work is
+also acknowledged.
+
+
+
+\bibliography{Photos_interface_design}{}
+% \bibliographystyle{plain}
+\bibliographystyle{utphys_spires}
+
+
+
+
+
+%------------------------------------------------------------------------------
+\newpage
+\appendix
+
+\section{Appendix: Interface to {\tt PHOTOS FORTRAN}}
+\label{Interface to PHOTOS}
+
+
+This appendix is addressed to developers of the interface,
+and special users interested in advanced options of {\tt PHOTOS}.
+The discussed below {\tt COMMON} blocks of {\tt FORTRAN} were used in the
+program up to version 3.53 only.
+Starting from version 3.54 some of these {\tt COMMON} blocks were preserved,
+as the struct objects of C. The following ones may be of some interest for the
+user:
+{\tt PHOCOP, PHOKEY, PHOSTA, PHLUPY}.
+
+Names of variables and structs are not modified with respect to {\tt FORTRAN},
+the C++ definition style is adapted, small letters are used and underscore is added at the
+end of structs names.
+Common {\tt HEPEVT} is preserved for use of example and future applications,
+ where the main program is in {\tt FORTRAN}.
+The interface is available
+through the classes {\tt PhotosHEPEVTEvent.h} and {\tt PhotosHEPEVTParticle.h}.
+Internally in C++ {\tt Photos} code, the {\tt HEPEVT}-like data type
+is used.
+
+\subsection{Common Blocks}
+
+In the following let us list the common blocks of {\tt PHOTOS} which are accessed
+from C++.
+
+\begin{description}
+\item[PHOCOP] coupling constant and related parameters.
+ \begin{description}
+ \item[ALPHA] \textit{double} coupling constant $\alpha_{QED}$.
+ \item[XPHCUT] \textit{double} minimal energy (in units of half of the decaying particle's mass) for photons to be explicitly generated.
+ \end{description}
+\end{description}
+
+\begin{description}
+\item[PHOKEY] keys and parameters controlling the algorithm options.
+ \begin{description}
+ \item[FSEC] \textit{double} internal variable for algorithm options, the default is FSEC=1.0\; .
+ \item[FINT] \textit{double} maximum interference weight.
+ \item[EXPEPS] \textit{double} technical parameter, blocks crude level high photon multiplicity from configurations less probable than EXPEPS, the default is $10^{-4}$.
+ \item[INTERF] \textit{bool} key for interference, the matrix element weight.
+ \item[ISEC] \textit{bool} switch for double bremsstrahlung generation.
+ \item[ITRE] \textit{bool} switch for bremsstrahlung generation up to a multiplicity of 4.
+ \item[IEXP] \textit{bool} switch for exponentiation mode.
+ \item[IFTOP] \textit{bool} switch for photon emission in top pair production in quark (gluon) pair annihilation.
+ \item[IFW] \textit{bool} switch for leading effects of matrix element in leptonic W decays.
+ \end{description}
+\end{description}
+
+\begin{description}
+\item[PHLUPY] debug messages handling.
+ \begin{description}
+ \item[IPOIN] \textit{int} messages above this value will not be displayed.
+ \item[IPOINM] \textit{int} messages below this value will not be displayed.
+ \end{description}
+\end{description}
+
+\begin{description}
+\item[PH\_PHOQED] supplement for the PH\_HEPEVT event record to block emission
+from some particles.
+ \begin{description}
+ \item[QEDRAD[ 10000]] \textit{bool} flag enabling a {\tt FORTRAN} users
+ to block emission from particles stored in PH\_HEPEVT. Not used in
+ our interface.
+ \end{description}
+\end{description}
+
+\begin{description}
+\item[PHOSTA] Status information.
+ \begin{description}
+ \item[STATUS[ 10]] \textit{int} Status codes for the last 10 errors/warnings
+ that occurred.
+ \end{description}
+\end{description}
+
+\begin{description}
+\item[PHPICO] $\pi$ value definition.
+ \begin{description}
+ \item[PI] \textit{double} $\pi$.
+ \item[TWOPI] \textit{double} $2*\pi$.
+ \end{description}
+\end{description}
+
+\subsection{Routines}
+
+In the following let us list routines which are called from the interface.
+
+\begin{description}
+\item[PHODMP] prints out the content of HEPEVT. \\
+ Return type: \textit{void} \\
+ Parameters: none
+\end{description}
+
+\begin{description}
+\item[PHOTOS\_MAKE] {\tt FORTRAN} part of interface. \\
+ Return type: \textit{void} \\
+ Parameters:
+ \begin{enumerate}
+ \item \textit {int id} ID of particle from which {\tt PHOTOS} starts processing. In the C++ case the importance of this parameter is limited as only one branch is in HEPEVT at a time.
+ \end{enumerate}
+\end{description}
+
+\begin{description}
+\item[PHCORK] initializes kinematic corrections. \\
+ Return type: \textit{void} \\
+ Parameters:
+ \begin{enumerate}
+ \item \textit {int modcor} type of correction. See Ref.~\cite{Golonka:2005pn} for details.
+ \end{enumerate}
+\end{description}
+
+
+\begin{description}
+\item[IPHQRK] enables/blocks (2/1) emission from quarks. \\
+ Return type: \textit{int} \\
+ Parameters: \textit{int}
+\end{description}
+
+\begin{description}
+\item[IPHEKL] enables/blocks (2/1) emission in: $\pi^0 \rightarrow \gamma e^+ e^-$. \\
+ Return type: \textit{int} \\
+ Parameters: \textit{int}
+\end{description}
+
+\section{Appendix: User Guide}
+\label{sec:User Guide}
+
+\subsection{Installation}
+\label{sec:Installation}
+
+{\tt Photos C++ Interface} is distributed in a form of an archive containing source files and examples.
+Currently only the Linux and Mac OS\footnote{For this case LCG configuration
+scripts explained in Appendix \ref{sec:autotools} have to be used.} operating systems are supported: other systems may be
+supported in the future if sufficient interest is found.
+
+The main interface library uses {\tt HepMC} \cite{Dobbs:2001ck} (version 2.03 or later) and requires that either
+its location has been provided or option of compilation without {\tt HepMC} has been chosen during the configuration step. This is sufficient to compile the interface and to run the simple, stand-alone example.
+
+However, in order to run the more advanced examples located in the {\tt /examples} directory, {\tt HepMC} is required. It is also required to install:
+
+\begin{itemize}
+ \item {\tt ROOT} \cite{root-install-www} version 5.18 or later
+ \item {\tt PYTHIA 8.1} \cite{Sjostrand:2007gs} or later. {\tt PYTHIA 8.1} must be compiled with {\tt HepMC} 2.xx
+ so that the {\tt PYTHIA} library {\tt hepmcinterface} exists.
+ \item {\tt MC-TESTER} \cite{Golonka:2002rz,Davidson:2008ma} version 1.24 or later.
+ Do not forget to type {\tt make libHepMCEvent} after compilation of {\tt MC-TESTER} is done.
+ \item {\tt TAUOLA} \cite{Davidson:2010rw} version 1.0.5 or later. {\tt TAUOLA} must be compiled with {\tt HepMC}.
+\end{itemize}
+
+In order to compile the {\tt PHOTOS} C++ Interface:
+\begin{itemize}
+ \item Execute {\tt ./configure} with the additional command line options:
+ \subitem {\tt --with-hepmc=$<$path$>$} provides the path to the {\tt HepMC} installation directory. One can also set the {\tt HEPMCLOCATION} variable instead of using this directive. To compile the interface without {\tt HepMC} use {\tt --without-hepmc}
+ \subitem {\tt --prefix=$<$path$>$} provides the installation path. The {\tt include} and {\tt lib} directories will be copied there if {\tt make install} is executed later. If none has been provided, the default directory for installation is {\tt /usr/local}.
+ \item Execute {\tt make}
+ \item Optionally, execute {\tt make install} to copy files to the directory provided during configuration.
+\end{itemize}
+
+The {\tt PHOTOS} C++ interface will be compiled and the {\tt /lib} and {\tt /include} directories will contain the appropriate libraries and include files.
+
+In order to compile the examples, compile the {\tt PHOTOS} C++ interface, enter the {\tt /examples} directory and:
+\begin{itemize}
+ \item Execute {\tt ./configure} to determine which examples can be compiled.
+ Additional paths can be provided as command line options:
+ \subitem {\tt --with-pythia8=$<$path$>$} provides the path to the {\tt Pythia8} installation
+ directory. One can set the {\tt PYTHIALOCATION} variable instead of using this directive.
+ This path is required for all examples and tests.
+ \subitem {\tt --with-mc-tester=$<$path$>$} provides the path to the {\tt MC-TESTER} installation
+ directory (the {\tt libHepMCEvent} must be compiled as well, see Ref.~\cite{Davidson:2008ma}
+ for more details). One can set the {\tt MCTESTERLOCATION} variable instead of using this
+ directive. This path is required for all additional examples and tests. This option
+ implies that {\tt ROOT} has already been installed (since it is required by {\tt MC-TESTER}).
+ The {\tt ROOT} directory {\tt bin} should be listed in the variable {\tt PATH} and the {\tt ROOT}
+ libraries in {\tt LD\_LIBRARY\_PATH}.
+ \subitem {\tt --with-tauola=$<$path$>$} provides the path to the {\tt TAUOLA} installation directory.
+ One can set the {\tt TAUOLALOCATION} variable instead of using this directive.
+ This path is required for additional examples only.
+ \item Execute {\tt make}
+\end{itemize}
+
+If neither {\tt HepMC}, {\tt Pythia8} nor {\tt MC-TESTER} are accessible, the most basic
+ example will be nonetheless provided. The {\tt /examples} directory will
+contain the executable files for all examples which can be compiled and
+linked.
+
+On {\tt CERN} platforms, ready to use software is located in the {\tt /afs/cern.ch/sw/lcg/}
+directory. To set the appropriate paths, the scripts
+{\tt platform/afs.paths.sh} and {\tt platform/afs.paths.csh} are prepared and should be executed before
+{\tt ./configure}. For details see {\tt README} in the {\tt PHOTOS} main directory.
+
+\subsection{ LCG configuration scripts; available from version 3.1 }
+\label{sec:autotools}
+
+For our project still another configuration/automake system was
+prepared for use in LCG/Genser project\footnote{We have used the expertise and advice
+of Dmitri Konstantinov and Oleg Zenin in organization of configuration scripts
+for our whole distribution tar-ball as well. Thanks to this choice, we hope, our solution
+ will be compatible with the ones in general use.} \cite{LCG,Kirsanov:2008zz}.
+
+For the purpose of activation of this set of autotools\cite{autotools}-based installation scripts
+enter {\tt platform} directory and execute there {\tt use-LCG-config.sh} script.
+Then, installation procedure and the names of the configuration script parameters will differ from the one
+described in our paper. Instruction given in './INSTALL' readme file created by {\tt use-LCG-config.sh} script
+should be followed. One can also execute {\tt ./configure --help}, it will
+list all options available for the configuration script.
+
+A short information on these scripts can be found in {\tt README} of main directory as well.
+
+\subsection{Elementary Tests}
+\label{sect:elem}
+
+The most basic test which should be performed, for our custom examples but also for a user's own generation chain,
+ is verification that the interface is installed correctly,
+photons are indeed added by the program and that energy momentum
+conservation is preserved\footnote{
+We have performed such tests for all choices of the {\tt HepMC} event record obtained
+from {\tt PYTHIA 8.1} and {\tt PYTHIA 8.135} processes and
+listed in the paper. Further options for initializations
+(parton shower hadronization or QED bremsstrahlung on/off etc.) were also studied.
+This was a necessary step in our program development.}.
+
+In principle, these tests have to be performed for any new hard
+process and after any new installation. This is to ensure that
+information is passed from the event record to the interface
+correctly and that physics information is filled into {\tt HepMC}
+in the expected manner. Misinterpretation of the event record content may result in
+faulty {\tt PHOTOS} operation.
+
+
+\subsection{Executing Examples}
+
+Once elementary tests are completed one can turn to the more advanced ones.
+The purpose is not only to validate the installation but to demonstrate the
+interface use.
+
+The examples can be run by executing the appropriate {\tt .exe} file in the {\tt /examples} directory.
+In order to run some more specific tests for the following processes:
+$H \rightarrow \tau^+ \tau^-$, $ e^+ e^- \rightarrow t \bar t$,
+$W \rightarrow e \nu_e$, $W \rightarrow \mu \nu_\mu$,
+$Z \rightarrow e^+ e^-$, $Z \rightarrow \mu \mu$ or $Z \rightarrow \tau^+ \tau^-$,
+$K_{0}^{S} \rightarrow \pi \pi$,
+the main programs residing in the subdirectories of {\tt /examples/testing} should be executed.
+In all cases the following actions have to be performed:
+
+\begin{itemize}
+ \item Compile the {\tt PHOTOS } C++ Interface.
+ \item Check that the appropriate system variables are set. Execution of the script \\
+{\tt /configure.paths.sh} usually can perform this task; the configuration step
+announces this script.
+ \item Enter the {\tt /examples/testing} directory. Execute {\tt make}. Modify test.inc if needed.
+ \item Enter the sub-directory for the particular process of interest
+and execute {\tt make}.
+\end{itemize}
+
+The appropriate {\tt .root} files as well as {\tt .pdf} files generated by {\tt MC-TESTER}
+will be created inside the chosen directory. One can execute 'make clobber' to
+clean the directory. One can also execute 'make run' inside the {\tt /examples/testing}
+directory to run all available tests one after another. Changes in source
+code can be partly validated in this way.
+Most of the tests are run using the executable {\tt examples/testing/photos\_test.exe}. The
+ $K_{0}^{S} \rightarrow \pi \pi$, $H \rightarrow \tau^+ \tau^-$ and $Z \rightarrow \tau^+ \tau^-$ examples
+require
+{\tt examples/testing/photos\_tauola\_test.exe} to be run.
+After generation, {\tt MC-TESTER} booklets will be produced,
+ comparisons to the benchmark files will be shown.
+A set of benchmark {\tt MC-TESTER} root files have been included with the interface
+distribution. They are located in the subdirectories of {\tt examples/testing/}.
+Note that for the $W \rightarrow e \nu_e$,
+$W \rightarrow \mu \nu_\mu$ and $Z \rightarrow \mu \mu$
+examples, differences higher than statistical error will show.
+This is because photon symmetrization
+was used in the benchmark files generated with {\tt KKMC}, and not in the ones
+generated with {\tt PHOTOS}.
+In the case of {\tt KKMC} the generated photons are strictly ordered in energy.
+In the case of {\tt PHOTOS} they are not. Nonetheless, on average,
+the second photon has a smaller energy than the one written as the first
+in the event record.
+
+
+The comparison booklets can be useful
+to start new work or simply to
+validate new versions or new installations of the {\tt PHOTOS} interface.
+
+In Appendix \ref{sec:User Configuration}, possible modifications to the
+example's settings are discussed. This may be interesting as an initial step for user's
+physics studies. The numerical results of some of these tests are collected in Section \ref{sec:results}
+and can be thus reproduced by the user.
+
+\subsection{How to Run {\tt PHOTOS} with Other Generators}
+If a user is building a large simulation system she or he may want to avoid
+integrating into it our configuration infrastructure and load the libraries only.
+For that purpose our stand-alone
+example {\bf examples/photos\_standalone\_example.exe} is a good starting point.
+
+In order to link the libraries to the user's project, both the static libraries and shared objects are
+constructed. To use the {\tt PHOTOS} interface in an external project, additional
+compilation directives are required. For the static libraries:
+\begin{itemize}
+ \item add {\tt -I<PhotosLocation>/include} at the compilation step,
+ \item add {\tt <PhotosLocation>/lib/libPhotosCxxInterface.a <PhotosLocation>/lib/libPhotosFortran.a} at the linking step of your project.
+\end{itemize}
+For the shared objects:
+\begin{itemize}
+ \item add {\tt -I<PhotosLocation>/include} at the compilation step,
+ \item add {\tt -L<PhotosLocation>/lib} along with {\tt -lPhotosCxxInterface -lPhotosFortran} at the linking step.
+ \item {\tt PHOTOS} libraries must be provided for the executable; e.g. with the help of {\tt LD\_LIBRARY\_PATH}.
+\end{itemize}
+{\tt <PhotosLocation>} denotes the path to the {\tt PHOTOS} installation directory.
+In most cases it should be enough to include within a users's program {\tt Photos.h} and {\tt PhotosHepMCEvent.h} (or any other header file for the class implementing abstract class {\tt PhotosEvent})
+With that, {\tt Photos} class can be used for configuration and {\tt PhotosHepMCEvent}
+for event processing.
+
+\subsubsection{Running {\tt PHOTOS C++ Interface} in {\tt FORTRAN} environment}
+
+For backward-compatibility with {\tt HEPEVT} event record, an interface has been prepared
+allowing {\tt PHOTOS C++ Interface} to be invoked from the {\tt FORTRAN} project. An example
+{\tt photos\_hepevt\_example.f} has been prepared to demonstrate how {\tt PHOTOS} can be
+initialized and executed from {\tt FORTRAN} code. Since {\tt PHOTOS} works in C++ environment,
+{\tt photos\_hepevt\_example\_interface.cxx} must be introduced to invoke {\tt PHOTOS}.
+
+Since version 3.54 {\tt PHOTOS} is fully in C++ and initialization can no longer
+be performed from {\tt FORTRAN} code through the use of common blocks.
+
+\section{Appendix: User Configuration}
+\label{sec:User Configuration}
+
+\subsection{Suppress Bremsstrahlung}
+\label{section:suppress}
+
+In general, {\tt PHOTOS} will attempt to generate bremsstrahlung for every
+branching point in the event record. This is of course not always appropriate.
+Already inside the {\tt FORTRAN} part of the new {\tt PHOTOS}, bremsstrahlung is prevented for vertices involving gluons or quarks
+(with the exception of top quarks).
+
+This alone is insufficient. By default we suppress bremsstrahlung
+generation for vertices like $l^\pm \to l^\pm \gamma$ because a
+``self-decay'' is unphysical. We cannot request that all incoming
+and/or outgoing lines are on mass shell, because it is not the case in
+cascade decays featuring intermediate states of sizeable width. If a
+parton shower features a vertex with $l^\pm \to l^\pm \gamma$ with the
+virtuality of the incoming $l^\pm$ matching the invariant mass of the
+outgoing pair then the action of {\tt PHOTOS} at this vertex will
+introduce an error. This is prevented by forbidding bremsstrahlung
+generation at vertices where one of the decay products has a flavor
+which matches the flavor of an incoming particle.
+
+
+Some exceptions to the default behavior may be necessary. For example
+in cascade decays, the vertex $\rho \to \rho \pi$ may require the
+{\tt PHOTOS} algorithm to be activated.
+
+Methods to re-enable these previously prevented cases or to prevent generation in special
+branches have been introduced and are presented below. \\ \\
+
+
+For the user's convenience the following configuration methods are provided:
+\begin{itemize}
+ \item {\tt Photos::suppressBremForDecay(daughterCount, motherID, d1ID, d2ID, ...)} \hfill \\
+ The basic method of channel suppression. The number of daughters,
+ PDGID of the mother and the list of PDGIDs of daughters must be provided.
+ There is no upper limit to the number of daughters.
+ If a decay with the matching pattern is found, {\tt PHOTOS} will skip the decay.
+ \item {\tt Photos::suppressBremForDecay(0, motherID)} \hfill \\
+ When only the PDGID of the mother is provided, {\tt PHOTOS} will skip all decay channels
+ of this particle. Note that the number of daughters is to be provided,
+ but set for this case to zero.
+ \item {\tt Photos::suppressBremForBranch(daughterCount, motherID, d1ID, d2ID, ...)} \hfill \\
+ {\tt Photos::suppressBremForBranch(0, motherID)} \hfill \\
+ The usage of these methods is similar to the previous functions. The difference is
+ that {\tt PHOTOS} will skip not only the corresponding channel,
+ but also all consecutive decays of its daughters, making {\tt PHOTOS} skip the entire branch
+ of decays instead of just one.
+ \item {\tt Photos::suppressAll() }
+ All branchings will be suppressed except those that are forced using the methods
+ described in the next section.
+ \item \textbf{Example:} \hfill \\
+{\tt Photos::suppressBremForDecay(3, 15, 16, 11, -12); } \\
+{\tt Photos::suppressBremForDecay(2, -15, -16, 211); } \\
+{\tt Photos::suppressBremForDecay(0, 111); } \\
+\emph{If the decays $\tau^- \rightarrow \nu_\tau e^- \bar \nu_e$ or
+ $\tau^+ \rightarrow \bar \nu_\tau \pi^+$ are found, they will be skipped by {\tt PHOTOS}.
+ In addition, all decays of $\pi^0$ will also be skipped. Note, that the minimum
+ number of parameters that must be provided is two - the number of daughters
+ (which should be zero if suppression for all decay channels of the particle is chosen)
+ and the mother PDGID.} \\ \\
+{\tt Photos::suppressBremForBranch(2, 15, 16, -213); } \\
+\emph{When the decay $\tau^- \rightarrow \nu_\tau \rho^-$ is found, it will be skipped by
+ {\tt PHOTOS} along with the decays of $\rho^-$
+(in principle also $\nu_\tau$) and all
+ their daughters. In the end, the whole decay tree starting with
+ $\tau^- \rightarrow \nu_\tau \rho^-$ will be skipped.}
+\end{itemize}
+
+In future, an option to suppress a combination of consecutive branches may be introduced.
+For example if bremsstrahlung in leptonic $\tau$ decays is generated by
+programs prior to {\tt PHOTOS}, and the decay is stored in HepMC as the cascade
+$\tau^\pm \to W^\pm \nu$, $W^\pm \to l^\pm \nu$, {\tt PHOTOS} must
+be prevented from acting on both vertices, but only in cases when they are present one after another.
+One can also think of another {\tt PHOTOS} extension for the following type of special case: if a vertex $q
+\bar q \to l^\pm l^\mp$ is found then it should not be ignored but
+passed for generation as $q \bar q \to Z \to l^\pm l^\mp$ where
+the intermediate Z is created internally for {\tt PHOTOS}.
+
+\subsection{Force {\tt PHOTOS} Processing }
+\label{section:force}
+
+Forcing {\tt PHOTOS} to process a branch can be used in combination with
+the suppression of all branches i.e. to allow selection of only a particular
+processes for bremsstrahlung generation.
+
+Forced processing using the methods below has higher priority than the suppression described
+in the previous section, therefore even if both forcing and suppressing of the same
+branch or decay is done (regardless of order), the processing will not be
+suppressed.
+
+\begin{itemize}
+
+ \item {\tt Photos::forceBremForDecay(daughterCount, motherID, d1ID, d2ID, ...)} \hfill \\
+ {\tt Photos::forceBremForDecay(0, motherID)} \hfill \\
+ The usage of this routine is similar to {\tt Photos::suppressBremForDecay(...)}
+ described in the previous section. If a decay with the matching pattern is found,
+ {\tt PHOTOS} will be forced to process the corresponding decay, even if it was suppressed
+ by any of the methods mentioned in the previous section.
+ \item {\tt Photos::forceBremForBranch(daughterCount, motherID, d1ID, d2ID, ...)} \hfill \\
+ {\tt Photos::forceBremForBranch(0, motherID)} \hfill \\
+ The usage is similar to the above functions. The difference is
+ that {\tt PHOTOS} will force not only the corresponding channel,
+ but also all consecutive decays of its daughters, making {\tt PHOTOS} process the entire branch
+ of decays instead of just one.
+ \item \textbf{Example:} \hfill \\
+{\tt Photos::suppressAll(); } \\
+{\tt Photos::forceBremForDecay(4, 15, 16, -211, -211, 211); } \\
+{\tt Photos::forceBremForDecay(2, -15, -16, 211); } \\
+{\tt Photos::forceBremForBranch(0, 111); } \\
+\emph{Since suppression of all processes is used, only the listed decays will be processed,
+ these are $\tau^- \rightarrow \nu_\tau \pi^- \pi^- \pi^+$, $\tau^+ \rightarrow \bar \nu_\tau \pi^+$
+ and all instances of the decay of $\pi^0$ and its descendants.}
+\end{itemize}
+
+\subsection{Use of the {\tt processParticle} and {\tt processBranch} Methods}
+\label{PHOTOSgun}
+
+In Section~\ref{sect:Outline} the algorithm for processing a whole
+event record is explained and is provided through the {\tt process()}
+method. To process a single branch in the event record, in a way
+independent of the entire event, a separate method is provided.
+
+\begin{itemize}
+ \item {\tt Photos::processParticle(PhotosParticle *p) } \hfill \\
+ The main method for processing a single particle. A pointer to a particle must
+ be provided. Pointers to mothers and daughters of this particle should be
+ accessible through this particle or its event record.
+ From this particle a branch containing its mothers and daughters
+ will be created and processed by {\tt PHOTOS}.
+ \item {\tt Photos::processBranch(PhotosParticle *p) } \hfill \\
+ Usage is similar to the above function. When a pointer to a particle is provided,
+ {\tt PHOTOS} will process the whole decay branch starting from the particle provided.
+\end{itemize}
+
+An example, {\tt single\_photos\_gun\_example.c}, is provided in the directory {\tt /examples}
+showing how this functionality can be used to process the decay of selected particles.
+$Z^0 \rightarrow \tau^+ \tau^-$ decays are generated and the event record is traversed
+searching for the first $\tau^-$ particle in the event record.
+Instead of processing the whole event, only the decay of $\tau^-$ is processed by {\tt PHOTOS}.
+
+
+\subsection{Logging and Debugging}
+\label{App:Logging}
+This section describes the basic functionality of the logging and debugging tool.
+For details on its content we address the reader to comments in the {\tt /src/utilities/Log.h} header file.
+
+Let us present however some general scheme of the tool's
+functionality. The {\tt PHOTOS} interface allows control over the
+amount of message data displayed during program execution and
+provides a basic tool for memory leak tracking. The following
+functions can be used from within the user's program after including the
+{\tt Log.h} file:
+\begin{itemize}
+ \item {\tt Log::Summary() } - Displays a summary of all messages.
+ \item {\tt Log::SummaryAtExit() } - Displays the summary at the end of a program run.
+ \item {\tt Log::LogInfo(bool flag) } \\
+ {\tt Log::LogWarning(bool flag) } \\
+ {\tt Log::LogError(bool flag) } \\
+ {\tt Log::LogDebug(int s, int e) } \\
+ {\tt Log::LogAll(bool flag)} \\
+ Turns the logging of \textit{info}, \textit{warning}, \textit{error} and \textit{debug} messages on or off depending
+ on the flag value being true or false respectively. In the case of \textit{debug} messages - the range of message codes
+ to be displayed must be provided. By default, only \textit{debug} messages
+ (from 0 to 65535) are turned off. If the range is negative ($s>e$) \textit{debug} messages
+ won't be displayed. The last method turns displaying all of the above messages on and off.
+ \item {\tt Log::LogPhlupa(int from, int to) } \\
+ Turns logging of debug messages from the {\tt FORTRAN} part of the program on and off.
+ Parameters of this routine specify the range of debug codes for the {\tt phlupa\_} routine.
+\end{itemize}
+
+At present only the following debug messages can be printed:
+\begin{itemize}
+ \item Debug(0) - seed used by the random number generator
+ \item Debug(1) - which type of branching was found in {\tt HepMC}
+ (regular or a case without an intermediate particle, for details see {\tt PhotosBranch.cxx})
+ \item Debug(700) - execution of the branching filter has started
+ \item Debug(701) - branching is forced
+ \item Debug(702) - branching is suppressed
+ \item Debug(703) - branching is processed (i.e. passed to the filter)
+ \item Debug(2) - execution of the branching filter was completed
+ \item Debug(1000) - the number of particles sent to and retrieved from {\tt PHOTOS FORTRAN}
+\end{itemize}
+
+The option {\tt Log::SetWarningLimit(int limit)} results in
+only the first {\tt `limit'} warnings being displayed. The default for {\tt limit} is 100.
+If {\tt limit}=0 is set, then there are no limits on the number of warnings to be displayed.
+
+The memory leak tracking function allows checking of whether all memory allocated within {\tt PHOTOS Interface}
+ is properly released. However, using the debug option significantly increases the amount of time needed for
+each run. Its use is therefore recommended for debugging purposes only. In order to use this option
+ modify {\tt make.inc} in the main directory by adding the line: \\
+ {\tt DEBUG = -D"\_LOG\_DEBUG\_MODE\_" } \\
+Recompile the interface.
+Now, whenever the program is executed a table will be printed at the end of the run,
+listing all the pointers that were not freed, along with the memory they consumed.
+If the interface works correctly without any memory leaks, one should get an empty table.
+
+It is possible to utilize this tool within a user's program; however there are a few limitations.
+The debugging macro from "Log.h" can create compilation errors if one compiles
+it along with software which has its own memory management system (e.g. {\tt ROOT}).
+To make the macro work within a user's program, ensure that {\tt Log.h} is the last header file
+included in the main program.
+It is enough to compile the program with the {\tt -D"\_LOG\_DEBUG\_MODE\_"} directive added,
+or {\tt \#define \_LOG\_DEBUG\_MODE\_} placed within the program before inclusion of
+ the {\tt Log.h} file%
+\footnote{Note that {\tt Log.h} does not need to be included within
+the user's program for the memory leak tracking tool to be used only for the {\tt PHOTOS} interface.
+}.
+
+\subsection{Other User Configuration Methods}
+\label{subsection:other_methods}
+
+The following auxiliary methods are prepared. They are useful for initialization
+or are introduced for backward compatibility.
+
+\begin{itemize}
+ \item {\tt Photos::setRandomGenerator(double (*gen)()) } {\it installed in {\tt PHOTOS 3.52}}\\
+ Replace random number generator used by {\tt Photos}.
+ The user provided generator must return a {\tt double} between 0 and 1.
+ {\tt Photos::setRandomGenerator(NULL)} will reset the program back to
+ the default generator, which is a copy of {\tt RANMAR}\cite{James:1988vf,marsaglia:1987}.
+ \item {\tt Photos::setSeed(int iseed1, int iseed2)} \\
+ Set the seed values for our copy of the random number generator {\tt RANMAR} \cite{James:1988vf,marsaglia:1987}.
+ \item {\tt Photos::maxWtInterference(double interference)} \\
+ Set the maximum interference weight. The default 2 is adopted to decays where at most two charged decay products
+ are present\footnote{For
+ the decays like $J/\psi \to 5\pi^+ 5\pi^-$ higher value, at least equal to the number of charged decay
+ products, should be set. The algorithm performance will slow down linearly with the maximum interference weight but all
+ simulation results will remain unchanged.
+ }.
+ \item {\tt Photos::setInfraredCutOff(double cut\_off)} \\
+ Set the minimal energy (in units of decaying particle mass)
+ for photons to be explicitly generated.
+ \item {\tt Photos::setAlphaQED(double alpha)} \\
+ Set the coupling constant, alpha QED.
+ \item {\tt Photos::setInterference(bool interference)} \\
+ A switch for interference, matrix element weight.
+ \item {\tt Photos::setDoubleBrem(bool doub)} \\
+ Set double bremsstrahlung generation.
+ \item {\tt Photos::setQuatroBrem(bool quatroBrem)} \\
+ Set bremsstrahlung generation up to a multiplicity of 4.
+ \item {\tt Photos::setExponentiation(bool expo)} \\
+ Set the exponentiation mode.
+ \item {\tt Photos::setCorrectionWtForW(bool corr)} \\
+ A switch for leading effects of the matrix element (in leptonic W decays)
+ \item {\tt Photos::setMeCorrectionWtForScalar(bool corr)} \\
+ A switch for complete effects of the matrix element (in scalar to 2 scalar decays) {\it installed in {\tt PHOTOS 3.3}. At present tests are missing. }
+ \item {\tt Photos::setMeCorrectionWtForW(bool corr)} \\
+ A switch for complete effects of the matrix element (in leptonic W decays) {\it installed in {\tt PHOTOS 3.2} }
+ Because of lack of reinitialization in a particular decay channel this option can be used for the fixed
+ decay channel, and either for W+ or for W-, also for fixed (not strongly varying) wirtuality.
+ This option will be elaborated further.
+ \item {\tt Photos::setMeCorrectionWtForZ(bool corr)} \\
+ A switch for complete effects of the matrix element (in leptonic Z decays) {\it installed in {\tt PHOTOS 3.1} }
+ \item {\tt Photos::initializeKinematicCorrections(int flag)} \\
+ Initialize kinematic corrections.
+ \item {\tt Photos::forceMassFrom4Vector(bool flag)} \\
+ By default, for all particles used by {\tt PHOTOS},
+ mass is re-calculated and $\sqrt{E^2-p^2}$ is used.
+ If {\tt flag=false}, the particle mass stored in the event record
+ is used. The choice may be important for the control
+ of numerical stability in case ov very light stable particles, but may be incorrect for decay products
+ themselves of non-negligible width.
+ \item {\tt Photos::forceMass(int pdgid, double mass)} {\it installed in {\tt PHOTOS 3.4}} \\
+ For particles of PDGID (or -PDGID) to be processed by {\tt PHOTOS},
+ mass value attributed by user will be used instead of the one calculated
+ from 4-vector. Note that if both {\tt forceMass} and {\tt forceMassFromEventRecord} is
+ used for the same PDGID, the last executed function will take effect.
+ Up to version 3.51, option active if {\tt forceMassFrom4Vector = true} (default).
+ From version 3.52, option works regardless of setting of {\tt forceMassFrom4Vector}.
+ \item {\tt Photos::forceMassFromEventRecord(int pdgid)} {\it installed in {\tt PHOTOS 3.4} \\
+ For particles of PDGID (or -PDGID} to be processed by {\tt PHOTOS},
+ mass value taken from the event record will be used instead of the one
+ calculated from 4-vector. Note that if both {\tt forceMass} and {\tt forceMassFromEventRecord} is
+ used for the same PDGID, the last executed function will take effect.
+
+ Up to version 3.51 option active if {\tt forceMassFrom4Vector = true} (default).
+ From version 3.52, option works regardless of setting of {\tt forceMassFrom4Vector}.
+ \item {\tt Photos::createHistoryEntries(bool flag, int status)} {\it installed in {\tt PHOTOS 3.4}} \\
+ If set to {\tt true}, and if event record format allows,
+ {\tt Photos} will store history entries consisting of particles
+ before processing. History entries will have status code equal {\tt status}.
+ The value of {\tt status} will also be added to the list of status
+ codes ignored by {\tt Photos} (see {\tt Photos::ignoreParticlesOfStatus})\footnote{In case of {\tt HepMC}, creates copies
+ of all particles on the list of outgoing particles in vertices where
+ photon was added and will be added at the end of the list.}.
+ An example is provided in {\tt photos\_pythia\_example.cxx}.
+ \item {\tt Photos::ignoreParticlesOfStatus(int status)} Decay products with the status code
+ {\tt status} will be ignored in check of momentum conservation and will not be passed
+ to algorithm generating bremsstrahlung.
+ \item {\tt Photos::deIgnoreParticlesOfStatus(int status)} Removes {\tt status} from
+ the list of status codes created with {\tt Photos::ignoreParticlesOfStatus}).
+ \item {\tt bool Photos::isStatusCodeIgnored(int status)} Returns {\tt true} if {\tt status}
+ is on the list of ignored status codes.
+ \item {\tt Photos::setMomentumConservationThreshold(double momentum\_{}conservation\_{}threshold)} \\
+ The default value is 0.1 (in {\tt MEV/GEV}, depending
+on the units used by {\tt HepMC}). If larger energy-momentum non conservation
+ is found then in the vertex, photon generation is skipped.
+ At present, for the evaluation of non conservation the standard method of {\tt HepMC}
+ is used.
+ \item {\tt Photos::iniInfo()} \\
+ The printout performed with {\tt Photos::initialize()} will exhibit
+ outdated information
+ once the methods listed above are applied. The reinitialized data can be printed with
+ the help of {\tt Photos::iniInfo()} method.
+ The format as in {\tt Photos::initialize()} will be used.
+
+\end{itemize}
+
+\subsection{Creating Advanced Plots and Custom Analysis}
+\label{App:Plots}
+
+In Section \ref{sec:results}, we have presented results of a non-standard
+analysis performed by {\tt MC-TESTER}. Figure \ref{fig:lineshape} has been
+obtained using a custom {\tt UserTreeAnalysis} located in the {\tt ZeeAnalysis.C} file
+residing in the {\tt examples/testing/Zee} directory. This file serves as an
+example of how custom analysis can be performed and how new plots can be
+added to the project with the help of {\tt MC-TESTER}.
+
+The basic {\tt MC-TESTER} analysis contains methods used by pre-set examples
+in the subdirectories of {\tt examples/testing} directory to focus on at most one or two
+sufficiently hard photons from all the photons generated
+by {\tt PHOTOS}. Its description and usage have already been documented in \cite{Davidson:2008ma}.
+The content of {\tt ZeeAnalysis.C} is identical to the default {\tt UserTreeAnalysis}
+of {\tt MC-TESTER} with the only addition being a method to create
+the previously mentioned plot.
+
+In order to create the $t \bar t$ example, an additional routine had to be added to {\tt photos\_test.c}.
+Since {\tt MC-TESTER} is not designed to analyze processes involving
+multiple incoming particles, we have used a method similar to that previously
+used in the {\tt FORTRAN} examples {\tt LC\_Analysis} mentioned in \cite{Golonka:2002rz}, Section 6.1.
+This routine, {\tt fixForMctester}, transforms the $X Y \rightarrow t \bar t$
+process to the $100 \rightarrow t \bar t$ process,
+where the momentum of the
+special particle $100$ is $X + Y$. With this modification, {\tt MC-TESTER} can be set
+up to analyze the particle $100$ in order to get a desirable result.
+
+For more details regarding the plots created for this documentation, see
+{\tt README-plots} located in {\tt examples/testing/} directory.
+
+%------------------------------------------------------------------------------
+
+\end{document}
+
+\newpage
+
+
+\section*{Task List}
+In this section we provide a check-list of incomplete tasks.
+This could be used as a guide for project planning and is foreseen
+to be a working document.
+
+(prioritized: {\bf 1} - Highest priority. The program should not be
+released without this task being completed. {\bf 2} - Medium priority.
+It should be clearly documented for developers and users that this task has not
+been completed. {\bf 3} - Lowest priority such as a long term goal
+for the project).
+
+%\subsection*{Functionality}
+%\begin{itemize}
+% \item[\ding{111}]{\bf 2} - Rewrite parts on HEPEVT type data structure %TP: DONE?
+%\end{itemize}
+
+\subsection*{Testing}
+\begin{itemize}
+% \item[\ding{111}]{\bf 3} - event record options %TP: DONE?
+ \item[\ding{111}]{\bf 3} - further plots of some interest
+\end{itemize}
+
+\subsection*{Usability}
+\begin{itemize}
+ \item[\ding{111}]{\bf 3} - paper cleaning
+ \item[\ding{111}]{\bf 3} - READMES
+ \item[\ding{111}]{\bf 2} - User interaction and resulting fixes
+\end{itemize}
+
+
+
+TXT\footnote{ {\bf remnant text to be removed. Parts may be moved to other places.}
+
+{\tt PHOTOS} act on such vertex and modifies four momenta of residing there daughters
+and eventually adds new ones that is photons.
+Such procedure is exact from the point of view of phase space; for details see e.g. approximation in on flight constructed matrix elements are based
+on factorization properties of QED.
+
+In case one is interested to go beyond that precision level, one has to provide
+more information. Spin state of the decaying particle has to be passed to the code calculating matrix element. For that it is enough to store into event record
+information on particles or fields resulting in creation of
+our particle under consideration that is mother for the decay vertex.
+It is then convenient to transform all particles to the rest frame of the Mother
+and orient Mothers mother along z axis before passing the information from HepMC to {\tt PHOTOS} internal data structure. Let us call resulting Lorentz transformation $L$. Once {\tt PHOTOS} internal algorithm complete
+its action all four momenta have to be transformed back by $L^{-1}$ and
+modification of remaining part of the event record (replacement of momenta
+add of new photons to HepMC and modification of all descendants of
+daughters would be performed as in more standard case explained above.
+}
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 0 0 567 354
+%%Title: ./booklet/Z0.TO.gamma.gamma.mu+.mu-./M1@0001.eps: Comparison of Mass(1) of gamma gamma in channel Z0 => gamma gamma mu+ mu-
+%%Creator: ROOT Version 5.24/00
+%%CreationDate: Wed Jul 28 04:53:57 2010
+%%EndComments
+%%BeginProlog
+80 dict begin
+/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
+/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
+/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
+/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
+/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
+/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
+/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
+/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
+/mp {newpath /y exch def /x exch def} def
+/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
+/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
+/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
+/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
+/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
+/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
+/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
+/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
+ 0 w3 neg d w3 neg 0 d cl s } def
+/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl fill gr} def
+/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl s gr} def
+/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
+ sub m w w d s} def
+/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
+/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
+/reEncode {exch findfont dup length dict begin {1 index /FID eq {pop pop} {def} ifelse } forall /Encoding exch def currentdict end dup /FontName get exch definefont pop } def [/Times-Bold /Times-Italic /Times-BoldItalic /Helvetica
+ /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique /Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Times-Roman /AvantGarde-Book /AvantGarde-BookOblique /AvantGarde-Demi /AvantGarde-DemiOblique /Bookman-Demi
+ /Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic /Helvetica-Narrow /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique /Helvetica-Narrow-Oblique /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold
+ /NewCenturySchlbk-BoldItalic /NewCenturySchlbk-Italic /Palatino-Bold /Palatino-BoldItalic /Palatino-Italic /Palatino-Roman ] {ISOLatin1Encoding reEncode } forall
+/oshow {gsave [] 0 sd true charpath stroke gr} def
+/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
+ text sw pop xs add /xs exch def} def
+/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
+pop neg xs add /xs exch def} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 3 lw 0.999 0.999 0.999 c 2268 1415 0 0 bf black 0.999 0.999 0.999 c 1814 1132 227 142 bf black 1814 1132 227 142 bl 0.999 0.999 0.999 c 1 1 1 c black 0.999 0.999 0.999 c 227 648 m 15 X 9 Y
+ 15 X 2 Y 15 X -1 Y 15 X 15 Y 15 X -6 Y 15 X 3 Y 16 X -8 Y 15 X 1 Y 15 X 8 Y 15 X -6 Y 15 X 7 Y 15 X -4 Y 15 X -11 Y 15 X 8 Y 16 X -15 Y 15 X 10 Y 15 X -6 Y 30 X 6 Y 15 X 7 Y 15 X -19 Y 15 X 2 Y 15 X -1 Y 16 X -2 Y 15 X 1 Y 15 X 1 Y 15 X 5 Y 15 X
+ -15 Y 30 X 13 Y 15 X 14 Y 16 X -16 Y 15 X 2 Y 15 X -14 Y 15 X 8 Y 15 X 5 Y 15 X -6 Y 15 X -5 Y 15 X -7 Y 15 X -4 Y 16 X 8 Y 15 X 31 Y 15 X -18 Y 15 X 18 Y 15 X -18 Y 15 X -8 Y 15 X 12 Y 15 X -26 Y 16 X 33 Y 15 X 2 Y 15 X -47 Y 15 X 34 Y 15 X -27 Y
+ 15 X 12 Y 15 X 38 Y 15 X -54 Y 16 X 40 Y 15 X 7 Y 15 X -11 Y 15 X -20 Y 15 X 4 Y 15 X -35 Y 15 X 61 Y 15 X -55 Y 15 X 59 Y 16 X -32 Y 15 X -1 Y 15 X 31 Y 15 X -20 Y 15 X 1 Y 15 X -40 Y 15 X 85 Y 15 X -85 Y 16 X 35 Y 15 X -25 Y 15 X 102 Y 15 X -28 Y
+ 15 X 2 Y 15 X -57 Y 15 X -24 Y 15 X 12 Y 15 X -5 Y 16 X 80 Y 15 X 23 Y 15 X 90 Y 15 X -199 Y 15 X 81 Y 15 X -86 Y 15 X 13 Y 15 X 5 Y 16 X -75 Y 15 X 219 Y 15 X -201 Y 15 X 62 Y 15 X 10 Y 15 X 138 Y 15 X 305 Y 15 X -344 Y 15 X -296 Y 16 X 203 Y 15 X
+ 118 Y 15 X -281 Y 15 X 141 Y 15 X -88 Y 30 X -330 Y 15 X 462 Y 16 X -528 Y 181 X s black 227 142 m 1814 X s 227 176 m -34 Y s 309 159 m -17 Y s 392 159 m -17 Y s 474 159 m -17 Y s 557 176 m -34 Y s 639 159 m -17 Y s 722 159 m -17 Y s 804 159 m -17
+ Y s 886 176 m -34 Y s 969 159 m -17 Y s 1051 159 m -17 Y s 1134 159 m -17 Y s 1216 176 m -34 Y s 1299 159 m -17 Y s 1381 159 m -17 Y s 1464 159 m -17 Y s 1546 176 m -34 Y s 1629 159 m -17 Y s 1711 159 m -17 Y s 1794 159 m -17 Y s 1876 176 m -34 Y s
+ 1876 176 m -34 Y s 1958 159 m -17 Y s
+ gsave 2268 1415 0 0 C 209 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 517 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 845 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 1176 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 1507 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 1864 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr 0.999 0.999 0.999 c 227 142 m 1132 Y s 281 142 m -54 X s 254 167 m -27 X s 254 193 m -27 X s 254 219 m -27 X s 281 245 m -54 X s 254 271 m -27 X s 254
+ 297 m -27 X s 254 322 m -27 X s 281 348 m -54 X s 254 374 m -27 X s 254 400 m -27 X s 254 426 m -27 X s 281 452 m -54 X s 254 478 m -27 X s 254 503 m -27 X s 254 529 m -27 X s 281 555 m -54 X s 254 581 m -27 X s 254 607 m -27 X s 254 633 m -27 X s
+ 281 658 m -54 X s 254 684 m -27 X s 254 710 m -27 X s 254 736 m -27 X s 281 762 m -54 X s 254 788 m -27 X s 254 813 m -27 X s 254 839 m -27 X s 281 865 m -54 X s 254 891 m -27 X s 254 917 m -27 X s 254 943 m -27 X s 281 969 m -54 X s 254 994 m -27
+ X s 254 1020 m -27 X s 254 1046 m -27 X s 281 1072 m -54 X s 254 1098 m -27 X s 254 1124 m -27 X s 254 1149 m -27 X s 281 1175 m -54 X s 281 1175 m -54 X s 254 1201 m -27 X s 254 1227 m -27 X s 254 1253 m -27 X s
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 141 224 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 137 327 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 141 430 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 141 533 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 190 639 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr
+ gsave 2268 1415 0 0 C 141 742 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.2) show NC gr
+ gsave 2268 1415 0 0 C 137 845 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.4) show NC gr
+ gsave 2268 1415 0 0 C 141 947 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.6) show NC gr
+ gsave 2268 1415 0 0 C 141 1050 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.8) show NC gr
+ gsave 2268 1415 0 0 C 183 1153 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (2) show NC gr 1 0 0 c 1 1 1 c black 1 0 0 c 227 1261 m 15 X -74 Y 15 X -17 Y 15 X 4 Y 15 X -4 Y 15 X -8 Y 15 X -9 Y 16 X -11 Y 15 X -8 Y 15 X -9 Y 15 X -9 Y 15 X -9 Y
+ 15 X -9 Y 15 X -8 Y 15 X -8 Y 16 X -10 Y 15 X -8 Y 15 X -11 Y 15 X -9 Y 15 X -10 Y 15 X -8 Y 15 X -10 Y 15 X -9 Y 15 X -8 Y 16 X -9 Y 15 X -7 Y 15 X -8 Y 15 X -6 Y 15 X -10 Y 15 X -7 Y 15 X -6 Y 15 X -7 Y 16 X -7 Y 15 X -8 Y 15 X -9 Y 15 X -3 Y 15
+ X -7 Y 15 X -5 Y 15 X -9 Y 15 X -7 Y 15 X -5 Y 16 X -6 Y 15 X -3 Y 15 X -10 Y 15 X -4 Y 15 X -7 Y 15 X -6 Y 15 X -4 Y 15 X -10 Y 16 X -3 Y 15 X -3 Y 15 X -12 Y 15 X -6 Y 15 X -6 Y 15 X -3 Y 15 X -3 Y 15 X -14 Y 16 X 3 Y 15 X -6 Y 15 X -12 Y 15 X -8
+ Y 15 X -3 Y 15 X -9 Y 15 X -1 Y 15 X -13 Y 15 X 5 Y 16 X -10 Y 15 X -3 Y 15 X -6 Y 15 X -11 Y 15 X -4 Y 15 X -9 Y 15 X 1 Y 15 X -19 Y 16 X 1 Y 15 X -7 Y 15 X -3 Y 15 X -9 Y 15 X -8 Y 15 X -5 Y 15 X -5 Y 15 X -13 Y 15 X -6 Y 16 X 2 Y 15 X -5 Y 15 X
+ -9 Y 15 X -21 Y 15 X 3 Y 15 X -25 Y 15 X 8 Y 15 X -17 Y 16 X -20 Y 15 X 10 Y 15 X -28 Y 15 X 8 Y 15 X -17 Y 15 X 6 Y 15 X -14 Y 15 X -16 Y 15 X -55 Y 31 X 11 Y 15 X -63 Y 15 X -15 Y 15 X -56 Y 30 X -164 Y 212 X s 0 1 0 c 1 1 1 c black 0 1 0 c 227
+ 1265 m 15 X -76 Y 15 X -18 Y 15 X 5 Y 15 X -6 Y 15 X -8 Y 15 X -9 Y 16 X -9 Y 15 X -9 Y 15 X -10 Y 15 X -8 Y 15 X -10 Y 15 X -8 Y 15 X -7 Y 15 X -9 Y 16 X -7 Y 15 X -10 Y 15 X -10 Y 15 X -9 Y 15 X -11 Y 15 X -10 Y 15 X -6 Y 15 X -9 Y 15 X -9 Y 16 X
+ -8 Y 15 X -8 Y 15 X -7 Y 15 X -7 Y 15 X -7 Y 15 X -7 Y 15 X -9 Y 15 X -10 Y 16 X -4 Y 15 X -8 Y 15 X -7 Y 15 X -4 Y 15 X -7 Y 15 X -4 Y 15 X -8 Y 15 X -6 Y 15 X -5 Y 16 X -7 Y 15 X -9 Y 15 X -6 Y 15 X -7 Y 15 X -5 Y 15 X -4 Y 15 X -7 Y 15 X -5 Y 16
+ X -8 Y 15 X -4 Y 15 X -3 Y 15 X -12 Y 15 X -2 Y 15 X -4 Y 15 X -10 Y 15 X -5 Y 16 X -4 Y 15 X -8 Y 15 X -9 Y 15 X -4 Y 15 X -5 Y 15 X -2 Y 15 X -12 Y 15 X -3 Y 15 X -6 Y 16 X -4 Y 15 X -3 Y 15 X -11 Y 15 X -8 Y 15 X -4 Y 15 X -1 Y 15 X -15 Y 15 X
+ -3 Y 16 X -6 Y 15 X -3 Y 15 X -20 Y 15 X -5 Y 15 X -8 Y 15 X 5 Y 30 X -16 Y 15 X -5 Y 16 X -12 Y 15 X -9 Y 15 X -22 Y 15 X 11 Y 15 X -11 Y 15 X -10 Y 15 X 6 Y 15 X -18 Y 16 X -5 Y 15 X -29 Y 15 X 7 Y 15 X -5 Y 15 X -18 Y 15 X -16 Y 15 X -50 Y 15 X
+ 26 Y 15 X 7 Y 16 X -47 Y 15 X -8 Y 15 X -9 Y 15 X -46 Y 15 X -38 Y 45 X -190 Y 197 X s 1 0 0 c 227 142 m 1132 Y s 281 142 m -54 X s black
+ gsave 2268 1415 0 0 C 208 120 t 0 r -23 0 t /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr 1 0 0 c 254 205 m -27 X s 254 242 m -27 X s 254 269 m -27 X s 254 289 m -27 X s 254 306 m -27 X s 254 320 m -27 X s 254 332 m -27 X s 254 343 m
+ -27 X s 281 353 m -54 X s black
+ gsave 2268 1415 0 0 C 208 332 t 0 r -57 0 t /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 416 m -27 X s 254 454 m -27 X s 254 480 m -27 X s 254 500 m -27 X s 254 517 m -27 X s 254 531 m -27 X s 254 544 m -27 X s 254 554 m
+ -27 X s 281 564 m -54 X s black
+ gsave 2268 1415 0 0 C 186 567 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (2) show NC gr
+ gsave 2268 1415 0 0 C 129 540 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 628 m -27 X s 254 665 m -27 X s 254 691 m -27 X s 254 712 m -27 X s 254 728 m -27 X s 254 743 m -27 X s 254 755 m -27 X s 254 766 m -27 X s
+ 281 775 m -54 X s black
+ gsave 2268 1415 0 0 C 186 780 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (3) show NC gr
+ gsave 2268 1415 0 0 C 129 750 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 839 m -27 X s 254 876 m -27 X s 254 903 m -27 X s 254 923 m -27 X s 254 940 m -27 X s 254 954 m -27 X s 254 966 m -27 X s 254 977 m -27 X s
+ 281 987 m -54 X s black
+ gsave 2268 1415 0 0 C 186 989 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (4) show NC gr
+ gsave 2268 1415 0 0 C 129 963 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 1050 m -27 X s 254 1087 m -27 X s 254 1114 m -27 X s 254 1134 m -27 X s 254 1151 m -27 X s 254 1165 m -27 X s 254 1177 m -27 X s 254 1188 m
+ -27 X s 281 1198 m -54 X s black
+ gsave 2268 1415 0 0 C 186 1202 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (5) show NC gr
+ gsave 2268 1415 0 0 C 129 1172 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 1261 m -27 X s
+ gr gr
+showpage
+end
+%%EOF
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 0 0 567 354
+%%Title: ./booklet/USER@HISTOGRAMS/+e-mass@distribution.eps: e+e-mass_distribution
+%%Creator: ROOT Version 5.24/00
+%%CreationDate: Fri Jul 30 06:42:17 2010
+%%EndComments
+%%BeginProlog
+80 dict begin
+/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
+/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
+/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
+/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
+/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
+/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
+/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
+/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
+/mp {newpath /y exch def /x exch def} def
+/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
+/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
+/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
+/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
+/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
+/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
+/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
+/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
+ 0 w3 neg d w3 neg 0 d cl s } def
+/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl fill gr} def
+/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl s gr} def
+/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
+ sub m w w d s} def
+/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
+/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
+/reEncode {exch findfont dup length dict begin {1 index /FID eq {pop pop} {def} ifelse } forall /Encoding exch def currentdict end dup /FontName get exch definefont pop } def [/Times-Bold /Times-Italic /Times-BoldItalic /Helvetica
+ /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique /Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Times-Roman /AvantGarde-Book /AvantGarde-BookOblique /AvantGarde-Demi /AvantGarde-DemiOblique /Bookman-Demi
+ /Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic /Helvetica-Narrow /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique /Helvetica-Narrow-Oblique /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold
+ /NewCenturySchlbk-BoldItalic /NewCenturySchlbk-Italic /Palatino-Bold /Palatino-BoldItalic /Palatino-Italic /Palatino-Roman ] {ISOLatin1Encoding reEncode } forall
+/oshow {gsave [] 0 sd true charpath stroke gr} def
+/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
+ text sw pop xs add /xs exch def} def
+/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
+pop neg xs add /xs exch def} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 3 lw 0.999 0.999 0.999 c 2268 1415 0 0 bf black 0.999 0.999 0.999 c 1814 1132 227 142 bf black 1814 1132 227 142 bl 0.999 0.999 0.999 c 1 1 1 c black 0.999 0.999 0.999 c 227 850 m 15 X 17 Y
+ 15 X -1 Y 15 X 1 Y 30 X -1 Y 15 X 1 Y 16 X 2 Y 15 X -1 Y 15 X 1 Y 45 X 2 Y 15 X -1 Y 31 X 1 Y 15 X -2 Y 15 X 3 Y 15 X -1 Y 15 X -1 Y 15 X 3 Y 15 X -2 Y 15 X 1 Y 46 X 1 Y 15 X 1 Y 15 X -2 Y 15 X 1 Y 15 X 1 Y 30 X 1 Y 16 X -2 Y 15 X 2 Y 30 X 1 Y 15 X
+ 1 Y 15 X -2 Y 15 X 2 Y 30 X -1 Y 16 X 2 Y 15 X -1 Y 15 X 1 Y 15 X -1 Y 15 X 1 Y 15 X -2 Y 15 X 2 Y 15 X 1 Y 16 X 1 Y 15 X -1 Y 15 X 1 Y 15 X -1 Y 30 X 2 Y 15 X -3 Y 15 X 4 Y 31 X -2 Y 15 X 4 Y 30 X -1 Y 15 X -1 Y 15 X 1 Y 46 X 1 Y 45 X 1 Y 30 X 3 Y
+ 15 X -1 Y 46 X 2 Y 15 X 1 Y 15 X -3 Y 15 X 3 Y 15 X 1 Y 15 X 1 Y 15 X -1 Y 15 X -1 Y 16 X 3 Y 15 X 1 Y 15 X 2 Y 15 X -1 Y 15 X -2 Y 15 X 5 Y 15 X -4 Y 15 X 5 Y 31 X 2 Y 15 X 2 Y 30 X 2 Y 30 X 1 Y 15 X 3 Y 15 X 2 Y 16 X 3 Y 15 X 1 Y 15 X 4 Y 15 X 4
+ Y 15 X 5 Y 15 X 7 Y 15 X 4 Y 15 X 14 Y 16 X 30 Y 15 X 102 Y 15 X -943 Y 151 X s black 227 142 m 1814 X s 227 176 m -34 Y s 309 159 m -17 Y s 392 159 m -17 Y s 474 159 m -17 Y s 557 176 m -34 Y s 639 159 m -17 Y s 722 159 m -17 Y s 804 159 m -17 Y s
+ 886 176 m -34 Y s 969 159 m -17 Y s 1051 159 m -17 Y s 1134 159 m -17 Y s 1216 176 m -34 Y s 1299 159 m -17 Y s 1381 159 m -17 Y s 1464 159 m -17 Y s 1546 176 m -34 Y s 1629 159 m -17 Y s 1711 159 m -17 Y s 1794 159 m -17 Y s 1876 176 m -34 Y s
+ 1876 176 m -34 Y s 1958 159 m -17 Y s
+ gsave 2268 1415 0 0 C 209 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 517 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 845 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 1176 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 1507 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 1864 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr 0.999 0.999 0.999 c 227 142 m 1132 Y s 281 142 m -54 X s 254 179 m -27 X s 254 216 m -27 X s 254 253 m -27 X s 281 290 m -54 X s 254 327 m -27 X s 254
+ 364 m -27 X s 254 401 m -27 X s 281 439 m -54 X s 254 476 m -27 X s 254 513 m -27 X s 254 550 m -27 X s 281 587 m -54 X s 254 624 m -27 X s 254 661 m -27 X s 254 698 m -27 X s 281 736 m -54 X s 254 773 m -27 X s 254 810 m -27 X s 254 847 m -27 X s
+ 281 884 m -54 X s 254 921 m -27 X s 254 958 m -27 X s 254 995 m -27 X s 281 1033 m -54 X s 254 1070 m -27 X s 254 1107 m -27 X s 254 1144 m -27 X s 281 1181 m -54 X s 281 1181 m -54 X s 254 1218 m -27 X s 254 1255 m -27 X s
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 141 270 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 137 419 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 141 567 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 141 715 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 190 864 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr
+ gsave 2268 1415 0 0 C 141 1012 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.2) show NC gr
+ gsave 2268 1415 0 0 C 137 1160 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.4) show NC gr 1 0 0 c 1 1 1 c black 1 0 0 c 227 428 m 15 X 718 Y 15 X -1 Y 15 X -1 Y 30 X -4 Y 15 X -5 Y 16 X 6 Y 15 X -2 Y 15 X -14 Y 15 X 3 Y 15 X -6 Y 15 X 6 Y
+ 15 X -10 Y 15 X 4 Y 16 X -4 Y 15 X -4 Y 15 X -2 Y 15 X -7 Y 15 X -1 Y 15 X -2 Y 15 X 1 Y 15 X -6 Y 15 X -2 Y 31 X 2 Y 15 X -7 Y 15 X -3 Y 30 X -5 Y 15 X 4 Y 15 X -10 Y 16 X 5 Y 15 X -7 Y 15 X 1 Y 15 X -10 Y 15 X 4 Y 15 X -9 Y 15 X 3 Y 15 X -6 Y 15
+ X 1 Y 16 X -6 Y 15 X 4 Y 15 X -2 Y 15 X -17 Y 15 X 13 Y 15 X -7 Y 15 X -5 Y 15 X -3 Y 16 X 6 Y 15 X -9 Y 15 X -4 Y 15 X -4 Y 15 X 4 Y 15 X -1 Y 15 X -4 Y 15 X 3 Y 16 X -10 Y 15 X -3 Y 15 X 2 Y 15 X -3 Y 15 X -8 Y 15 X 1 Y 15 X 1 Y 15 X -6 Y 15 X -4
+ Y 16 X 2 Y 15 X 6 Y 15 X -13 Y 15 X -7 Y 15 X -1 Y 15 X 2 Y 15 X -2 Y 15 X -4 Y 16 X -4 Y 30 X -1 Y 15 X -4 Y 15 X -1 Y 15 X -5 Y 30 X -2 Y 31 X -1 Y 15 X -9 Y 15 X -2 Y 15 X 2 Y 15 X -4 Y 15 X -1 Y 15 X -1 Y 15 X -3 Y 16 X -4 Y 15 X -5 Y 15 X 4 Y
+ 15 X -9 Y 15 X 2 Y 15 X -6 Y 15 X -7 Y 30 X -4 Y 16 X 2 Y 15 X -3 Y 15 X -3 Y 15 X -3 Y 15 X -3 Y 15 X 3 Y 15 X -6 Y 31 X -6 Y 15 X -719 Y 15 X -34 Y 151 X s 0 1 0 c 1 1 1 c black 0 1 0 c 227 442 m 15 X 727 Y 15 X 2 Y 15 X -4 Y 15 X 1 Y 15 X -4 Y
+ 15 X -6 Y 16 X 3 Y 30 X -16 Y 15 X 4 Y 15 X -6 Y 15 X 3 Y 15 X -9 Y 15 X 5 Y 16 X -7 Y 15 X -1 Y 15 X -7 Y 15 X -5 Y 30 X -5 Y 15 X 2 Y 15 X -7 Y 15 X -1 Y 16 X -1 Y 15 X 2 Y 15 X -9 Y 15 X -1 Y 15 X -1 Y 15 X -6 Y 15 X 3 Y 15 X -11 Y 16 X 8 Y 15 X
+ -9 Y 15 X 1 Y 15 X -12 Y 15 X 3 Y 15 X -6 Y 30 X -5 Y 15 X 2 Y 16 X -10 Y 15 X 6 Y 15 X -3 Y 15 X -16 Y 15 X 12 Y 15 X -5 Y 15 X -8 Y 15 X -4 Y 16 X 6 Y 15 X -8 Y 15 X -7 Y 15 X -2 Y 15 X 3 Y 15 X -3 Y 15 X 1 Y 15 X -2 Y 16 X -11 Y 30 X -2 Y 15 X
+ -3 Y 15 X -7 Y 15 X 2 Y 15 X -1 Y 15 X -6 Y 15 X -3 Y 31 X 5 Y 15 X -12 Y 15 X -8 Y 15 X -1 Y 15 X -1 Y 15 X -1 Y 15 X -4 Y 16 X -4 Y 15 X -2 Y 15 X -2 Y 15 X -2 Y 15 X -4 Y 15 X -5 Y 15 X -1 Y 15 X -2 Y 15 X 2 Y 16 X -5 Y 15 X -9 Y 15 X -4 Y 15 X
+ 2 Y 15 X -2 Y 15 X -6 Y 15 X 3 Y 15 X -7 Y 16 X -5 Y 15 X -6 Y 15 X 1 Y 15 X -9 Y 30 X -5 Y 15 X -8 Y 15 X -4 Y 15 X -5 Y 16 X -1 Y 15 X -4 Y 15 X -6 Y 15 X -8 Y 15 X -6 Y 15 X -4 Y 15 X -10 Y 15 X -12 Y 16 X -30 Y 15 X -637 Y 15 X -27 Y 151 X s 1
+ 0 0 c 227 142 m 1132 Y s 281 142 m -54 X s 254 189 m -27 X s 254 237 m -27 X s 254 285 m -27 X s 281 333 m -54 X s 254 380 m -27 X s 254 428 m -27 X s 254 476 m -27 X s 281 524 m -54 X s 254 572 m -27 X s 254 619 m -27 X s 254 667 m -27 X s 281 715
+ m -54 X s 254 763 m -27 X s 254 810 m -27 X s 254 858 m -27 X s 281 906 m -54 X s 254 954 m -27 X s 254 1001 m -27 X s 254 1049 m -27 X s 281 1097 m -54 X s 281 1097 m -54 X s 254 1145 m -27 X s 254 1193 m -27 X s 254 1240 m -27 X s black
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 156 312 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (20) show NC gr
+ gsave 2268 1415 0 0 C 156 502 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (40) show NC gr
+ gsave 2268 1415 0 0 C 156 692 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (60) show NC gr
+ gsave 2268 1415 0 0 C 156 887 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (80) show NC gr
+ gsave 2268 1415 0 0 C 126 1077 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (100) show NC gr
+ gsave 2268 1415 0 0 C 312 1313 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (3) show NC gr
+ gsave 2268 1415 0 0 C 255 1282 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr
+ gsave 2268 1415 0 0 C 224 1282 t 0 r /Symbol findfont 53.2685 sf 0 0 m (´) show NC gr
+ gr gr
+showpage
+end
+%%EOF
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 0 0 567 354
+%%Title: ./booklet/USER@HISTOGRAMS/+e-mass@distribution.eps: e+e-mass_distribution
+%%Creator: ROOT Version 5.24/00
+%%CreationDate: Fri Jul 30 07:09:42 2010
+%%EndComments
+%%BeginProlog
+80 dict begin
+/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
+/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
+/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
+/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
+/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
+/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
+/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
+/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
+/mp {newpath /y exch def /x exch def} def
+/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
+/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
+/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
+/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
+/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
+/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
+/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
+/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
+ 0 w3 neg d w3 neg 0 d cl s } def
+/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl fill gr} def
+/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl s gr} def
+/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
+ sub m w w d s} def
+/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
+/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
+/reEncode {exch findfont dup length dict begin {1 index /FID eq {pop pop} {def} ifelse } forall /Encoding exch def currentdict end dup /FontName get exch definefont pop } def [/Times-Bold /Times-Italic /Times-BoldItalic /Helvetica
+ /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique /Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Times-Roman /AvantGarde-Book /AvantGarde-BookOblique /AvantGarde-Demi /AvantGarde-DemiOblique /Bookman-Demi
+ /Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic /Helvetica-Narrow /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique /Helvetica-Narrow-Oblique /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold
+ /NewCenturySchlbk-BoldItalic /NewCenturySchlbk-Italic /Palatino-Bold /Palatino-BoldItalic /Palatino-Italic /Palatino-Roman ] {ISOLatin1Encoding reEncode } forall
+/oshow {gsave [] 0 sd true charpath stroke gr} def
+/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
+ text sw pop xs add /xs exch def} def
+/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
+pop neg xs add /xs exch def} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 3 lw 0.999 0.999 0.999 c 2268 1415 0 0 bf black 0.999 0.999 0.999 c 1814 1132 227 142 bf black 1814 1132 227 142 bl 0.999 0.999 0.999 c 1 1 1 c black 0.999 0.999 0.999 c 227 1038 m 15 X -7 Y
+ 15 X -1 Y 15 X -1 Y 61 X 1 Y 15 X -1 Y 15 X 1 Y 15 X -1 Y 30 X 2 Y 15 X -1 Y 15 X -1 Y 16 X 1 Y 45 X -1 Y 15 X 1 Y 30 X -1 Y 15 X 1 Y 15 X -1 Y 16 X 1 Y 15 X 1 Y 15 X -1 Y 30 X 1 Y 15 X -1 Y 30 X -1 Y 16 X 1 Y 15 X 1 Y 15 X -1 Y 15 X 1 Y 15 X -1 Y
+ 45 X 1 Y 76 X -2 Y 15 X 2 Y 30 X -1 Y 15 X 1 Y 16 X 1 Y 15 X -2 Y 15 X 2 Y 15 X -1 Y 30 X 1 Y 46 X -1 Y 30 X 1 Y 15 X -1 Y 30 X 1 Y 30 X -1 Y 15 X 2 Y 31 X -1 Y 15 X 1 Y 15 X -2 Y 15 X 2 Y 15 X -1 Y 15 X 1 Y 31 X 1 Y 15 X -1 Y 15 X 1 Y 75 X 1 Y 15
+ X -1 Y 31 X 2 Y 15 X -1 Y 45 X 1 Y 15 X -1 Y 15 X 3 Y 16 X -1 Y 15 X 1 Y 15 X -2 Y 15 X 1 Y 15 X 2 Y 60 X 1 Y 16 X 1 Y 30 X 2 Y 30 X 3 Y 15 X 1 Y 15 X 1 Y 15 X 4 Y 16 X 8 Y 15 X 25 Y 15 X -943 Y 151 X s black 227 142 m 1814 X s 227 176 m -34 Y s
+ 309 159 m -17 Y s 392 159 m -17 Y s 474 159 m -17 Y s 557 176 m -34 Y s 639 159 m -17 Y s 722 159 m -17 Y s 804 159 m -17 Y s 886 176 m -34 Y s 969 159 m -17 Y s 1051 159 m -17 Y s 1134 159 m -17 Y s 1216 176 m -34 Y s 1299 159 m -17 Y s 1381 159 m
+ -17 Y s 1464 159 m -17 Y s 1546 176 m -34 Y s 1629 159 m -17 Y s 1711 159 m -17 Y s 1794 159 m -17 Y s 1876 176 m -34 Y s 1876 176 m -34 Y s 1958 159 m -17 Y s
+ gsave 2268 1415 0 0 C 209 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 517 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 845 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 1176 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 1507 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 1864 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr 0.999 0.999 0.999 c 227 142 m 1132 Y s 281 142 m -54 X s 254 186 m -27 X s 254 231 m -27 X s 254 275 m -27 X s 281 320 m -54 X s 254 364 m -27 X s 254
+ 409 m -27 X s 254 454 m -27 X s 281 498 m -54 X s 254 543 m -27 X s 254 587 m -27 X s 254 632 m -27 X s 281 676 m -54 X s 254 721 m -27 X s 254 766 m -27 X s 254 810 m -27 X s 281 855 m -54 X s 254 899 m -27 X s 254 944 m -27 X s 254 988 m -27 X s
+ 281 1033 m -54 X s 254 1078 m -27 X s 254 1122 m -27 X s 254 1167 m -27 X s 281 1211 m -54 X s 281 1211 m -54 X s 254 1256 m -27 X s
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 141 301 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 137 476 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 141 654 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 141 833 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 190 1012 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr
+ gsave 2268 1415 0 0 C 141 1191 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.2) show NC gr 1 0 0 c 1 1 1 c black 1 0 0 c 227 434 m 15 X 733 Y 30 X -1 Y 30 X -4 Y 15 X -5 Y 16 X 6 Y 15 X -2 Y 15 X -15 Y 15 X 3 Y 15 X -5 Y 15 X 6 Y 15 X -10 Y
+ 15 X 4 Y 16 X -5 Y 15 X -4 Y 15 X -2 Y 15 X -7 Y 15 X -1 Y 15 X -2 Y 15 X 1 Y 15 X -7 Y 15 X -1 Y 16 X -1 Y 15 X 3 Y 15 X -7 Y 15 X -4 Y 15 X 1 Y 15 X -6 Y 15 X 4 Y 15 X -10 Y 16 X 6 Y 15 X -8 Y 15 X 2 Y 15 X -11 Y 15 X 4 Y 15 X -9 Y 15 X 3 Y 15 X
+ -6 Y 15 X 1 Y 16 X -6 Y 15 X 4 Y 15 X -2 Y 15 X -18 Y 15 X 14 Y 15 X -7 Y 15 X -6 Y 15 X -2 Y 16 X 6 Y 15 X -10 Y 15 X -4 Y 15 X -4 Y 15 X 4 Y 15 X -1 Y 15 X -4 Y 15 X 3 Y 16 X -10 Y 15 X -3 Y 15 X 2 Y 15 X -3 Y 15 X -8 Y 15 X 1 Y 15 X 1 Y 15 X -7
+ Y 15 X -3 Y 16 X 1 Y 15 X 6 Y 15 X -12 Y 15 X -8 Y 15 X -1 Y 15 X 3 Y 15 X -3 Y 15 X -4 Y 16 X -3 Y 15 X -1 Y 15 X -1 Y 15 X -4 Y 15 X -1 Y 15 X -5 Y 30 X -3 Y 15 X 1 Y 16 X -1 Y 15 X -9 Y 15 X -2 Y 15 X 2 Y 15 X -4 Y 15 X -1 Y 15 X -2 Y 15 X -2 Y
+ 16 X -5 Y 15 X -5 Y 15 X 4 Y 15 X -9 Y 15 X 2 Y 15 X -6 Y 15 X -7 Y 30 X -4 Y 16 X 2 Y 15 X -3 Y 15 X -3 Y 15 X -4 Y 15 X -2 Y 15 X 2 Y 15 X -6 Y 31 X -6 Y 15 X -734 Y 15 X -35 Y 151 X s 0 1 0 c 1 1 1 c black 0 1 0 c 227 432 m 15 X 738 Y 15 X 1 Y
+ 15 X -1 Y 30 X -4 Y 15 X -5 Y 16 X 5 Y 15 X -1 Y 15 X -15 Y 15 X 3 Y 15 X -5 Y 15 X 4 Y 15 X -9 Y 15 X 5 Y 16 X -5 Y 15 X -5 Y 15 X -2 Y 15 X -5 Y 15 X -3 Y 15 X -1 Y 15 X 1 Y 15 X -8 Y 31 X -2 Y 15 X 3 Y 15 X -6 Y 15 X -4 Y 15 X -2 Y 15 X -4 Y 15
+ X 4 Y 15 X -9 Y 16 X 4 Y 15 X -7 Y 15 X 2 Y 15 X -12 Y 15 X 5 Y 15 X -9 Y 15 X 2 Y 15 X -5 Y 15 X 1 Y 16 X -7 Y 15 X 4 Y 15 X -2 Y 15 X -16 Y 15 X 12 Y 15 X -7 Y 15 X -5 Y 15 X -4 Y 16 X 6 Y 15 X -7 Y 15 X -7 Y 15 X -3 Y 15 X 4 Y 15 X -2 Y 15 X -4
+ Y 15 X 3 Y 16 X -9 Y 15 X -3 Y 15 X 2 Y 15 X -3 Y 15 X -8 Y 45 X -5 Y 15 X -5 Y 16 X 2 Y 15 X 6 Y 15 X -14 Y 15 X -5 Y 15 X -3 Y 15 X 4 Y 15 X -4 Y 15 X -4 Y 16 X -5 Y 15 X 1 Y 15 X -2 Y 15 X -4 Y 15 X -1 Y 15 X -5 Y 30 X -3 Y 15 X 1 Y 16 X -1 Y 15
+ X -11 Y 15 X -1 Y 15 X 2 Y 15 X -4 Y 15 X -2 Y 30 X -5 Y 16 X -4 Y 15 X -6 Y 15 X 5 Y 15 X -9 Y 30 X -6 Y 15 X -7 Y 15 X -1 Y 15 X -4 Y 31 X -3 Y 15 X -4 Y 15 X -4 Y 15 X -4 Y 15 X 1 Y 15 X -7 Y 15 X -3 Y 16 X -12 Y 15 X -714 Y 15 X -33 Y 151 X s 1
+ 0 0 c 227 142 m 1132 Y s 281 142 m -54 X s 254 190 m -27 X s 254 239 m -27 X s 254 288 m -27 X s 281 337 m -54 X s 254 386 m -27 X s 254 434 m -27 X s 254 483 m -27 X s 281 532 m -54 X s 254 581 m -27 X s 254 630 m -27 X s 254 678 m -27 X s 281 727
+ m -54 X s 254 776 m -27 X s 254 825 m -27 X s 254 874 m -27 X s 281 923 m -54 X s 254 971 m -27 X s 254 1020 m -27 X s 254 1069 m -27 X s 281 1118 m -54 X s 281 1118 m -54 X s 254 1167 m -27 X s 254 1215 m -27 X s 254 1264 m -27 X s black
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 156 316 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (20) show NC gr
+ gsave 2268 1415 0 0 C 156 510 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (40) show NC gr
+ gsave 2268 1415 0 0 C 156 708 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (60) show NC gr
+ gsave 2268 1415 0 0 C 156 902 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (80) show NC gr
+ gsave 2268 1415 0 0 C 126 1096 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (100) show NC gr
+ gsave 2268 1415 0 0 C 312 1313 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (3) show NC gr
+ gsave 2268 1415 0 0 C 255 1282 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr
+ gsave 2268 1415 0 0 C 224 1282 t 0 r /Symbol findfont 53.2685 sf 0 0 m (´) show NC gr
+ gr gr
+showpage
+end
+%%EOF
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 0 0 567 354
+%%Title: ./booklet/USER@HISTOGRAMS/coplanarity-angle-C-photon-over-1-GeV.eps: acoplanarity-angle-C-photon-over-1-GeV
+%%Creator: ROOT Version 5.18/00
+%%CreationDate: Thu Aug 12 15:15:32 2010
+%%EndComments
+%%BeginProlog
+80 dict begin
+/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
+/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
+/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
+/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
+/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
+/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
+/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
+/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
+/mp {newpath /y exch def /x exch def} def
+/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
+/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
+/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
+/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
+/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
+/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
+/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
+/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
+ 0 w3 neg d w3 neg 0 d cl s } def
+/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl fill gr} def
+/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl s gr} def
+/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
+ sub m w w d s} def
+/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
+/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
+/reencdict 24 dict def /ReEncode {reencdict begin /nco&na exch def
+/nfnam exch def /basefontname exch def /basefontdict basefontname findfont def
+/newfont basefontdict maxlength dict def basefontdict {exch dup /FID ne
+{dup /Encoding eq {exch dup length array copy newfont 3 1 roll put} {exch
+newfont 3 1 roll put} ifelse} {pop pop} ifelse } forall newfont
+/FontName nfnam put nco&na aload pop nco&na length 2 idiv {newfont
+/Encoding get 3 1 roll put} repeat nfnam newfont definefont pop end } def
+/accvec [ 176 /agrave 181 /Agrave 190 /acircumflex 192 /Acircumflex
+201 /adieresis 204 /Adieresis 209 /ccedilla 210 /Ccedilla 211 /eacute
+212 /Eacute 213 /egrave 214 /Egrave 215 /ecircumflex 216 /Ecircumflex
+217 /edieresis 218 /Edieresis 219 /icircumflex 220 /Icircumflex
+221 /idieresis 222 /Idieresis 223 /ntilde 224 /Ntilde 226 /ocircumflex
+228 /Ocircumflex 230 /Odieresis 231 /ucircumflex 236 /Ucircumflex
+237 /udieresis 238 /Udieresis 239 /aring 240 /odieresis 242 /Aring 243 /ydieresis
+244 /Ydieresis 246 /aacute 247 /Aacute 252 /ugrave 253 /Ugrave
+127 /atilde 128 /Atilde 129 /oacute 130 /Oacute 131 /iacute
+132 /Iacute 133 /igrave 134 /Igrave 135 /otilde 136 /Otilde
+137 /uacute 138 /Uacute] def
+/Times-Roman /Times-Roman accvec ReEncode
+/Times-Italic /Times-Italic accvec ReEncode
+/Times-Bold /Times-Bold accvec ReEncode
+/Times-BoldItalic /Times-BoldItalic accvec ReEncode
+/Helvetica /Helvetica accvec ReEncode
+/Helvetica-Oblique /Helvetica-Oblique accvec ReEncode
+/Helvetica-Bold /Helvetica-Bold accvec ReEncode
+/Helvetica-BoldOblique /Helvetica-BoldOblique accvec ReEncode
+/Courier /Courier accvec ReEncode
+/Courier-Oblique /Courier-Oblique accvec ReEncode
+/Courier-Bold /Courier-Bold accvec ReEncode
+/Courier-BoldOblique /Courier-BoldOblique accvec ReEncode
+/oshow {gsave [] 0 sd true charpath stroke gr} def
+/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
+ text sw pop xs add /xs exch def} def
+/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
+pop neg xs add /xs exch def} def
+/accspe [ 65 /plusminus 66 /bar 67 /existential 68 /universal
+69 /exclam 70 /numbersign 71 /greater 72 /question 73 /integral
+74 /colon 75 /semicolon 76 /less 77 /bracketleft 78 /bracketright
+79 /greaterequal 80 /braceleft 81 /braceright 82 /radical
+83 /spade 84 /heart 85 /diamond 86 /club 87 /lessequal
+88 /multiply 89 /percent 90 /infinity 48 /circlemultiply 49 /circleplus
+50 /emptyset 51 /lozenge 52 /bullet 53 /arrowright 54 /arrowup
+55 /arrowleft 56 /arrowdown 57 /arrowboth 48 /degree 44 /comma 43 /plus 45 /angle 42 /angleleft 47 /divide 61 /notequal 40 /equivalence 41 /second 97 /approxequal 98 /congruent 99 /perpendicular 100 /partialdiff 101 /florin 102 /intersection
+ 103 /union 104 /propersuperset 105 /reflexsuperset 106 /notsubset 107 /propersubset 108 /reflexsubset 109 /element 110 /notelement 111 /gradient 112 /logicaland 113 /logicalor 114 /arrowdblboth 115 /arrowdblleft 116 /arrowdblup 117 /arrowdblright
+ 118 /arrowdbldown 119 /ampersand 120 /omega1 121 /similar 122 /aleph ] def
+/Symbol /Special accspe ReEncode
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 3 lw 0.999 0.999 0.999 c 2268 1415 0 0 bf black 0.999 0.999 0.999 c 1814 1132 227 142 bf black 1814 1132 227 142 bl 0.999 0.999 0.999 c 1 1 1 c black 0.999 0.999 0.999 c 227 1060 m 30 X -144
+ Y 30 X -32 Y 30 X -9 Y 31 X 1 Y 30 X -3 Y 30 X -8 Y 61 X -2 Y 60 X -3 Y 61 X -1 Y 30 X -4 Y 30 X 4 Y 30 X -1 Y 31 X -2 Y 30 X 1 Y 30 X -2 Y 30 X 4 Y 30 X -4 Y 31 X 3 Y 30 X -2 Y 30 X 2 Y 30 X 3 Y 31 X 3 Y 30 X 10 Y 30 X 16 Y 30 X 30 Y 31 X 165 Y 30
+ X -7 Y 30 X -159 Y 30 X -32 Y 31 X -13 Y 30 X -10 Y 30 X -3 Y 30 X -5 Y 31 X 4 Y 30 X -1 Y 30 X -1 Y 30 X -6 Y 30 X 1 Y 61 X 4 Y 30 X -1 Y 30 X 6 Y 31 X -2 Y 30 X -7 Y 30 X 4 Y 30 X 8 Y 31 X -3 Y 30 X 2 Y 30 X 2 Y 30 X 5 Y 31 X -2 Y 30 X -2 Y 30 X
+ 19 Y 30 X 5 Y 30 X 24 Y 31 X 152 Y 30 X s black 227 142 m 1814 X s 227 176 m -34 Y s 285 159 m -17 Y s 342 159 m -17 Y s 400 159 m -17 Y s 458 159 m -17 Y s 516 176 m -34 Y s 573 159 m -17 Y s 631 159 m -17 Y s 689 159 m -17 Y s 746 159 m -17 Y s
+ 804 176 m -34 Y s 862 159 m -17 Y s 920 159 m -17 Y s 977 159 m -17 Y s 1035 159 m -17 Y s 1093 176 m -34 Y s 1151 159 m -17 Y s 1208 159 m -17 Y s 1266 159 m -17 Y s 1324 159 m -17 Y s 1382 176 m -34 Y s 1439 159 m -17 Y s 1497 159 m -17 Y s 1555
+ 159 m -17 Y s 1613 159 m -17 Y s 1670 176 m -34 Y s 1728 159 m -17 Y s 1786 159 m -17 Y s 1844 159 m -17 Y s 1901 159 m -17 Y s 1959 176 m -34 Y s 1959 176 m -34 Y s 2017 159 m -17 Y s
+ gsave 2268 1415 0 0 C 209 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 502 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr
+ gsave 2268 1415 0 0 C 788 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (2) show NC gr
+ gsave 2268 1415 0 0 C 1077 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (3) show NC gr
+ gsave 2268 1415 0 0 C 1366 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (4) show NC gr
+ gsave 2268 1415 0 0 C 1655 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (5) show NC gr
+ gsave 2268 1415 0 0 C 1940 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (6) show NC gr 0.999 0.999 0.999 c 227 142 m 1132 Y s 281 142 m -54 X s 254 178 m -27 X s 254 215 m -27 X s 254 252 m -27 X s 281 289 m -54 X s 254 326 m -27 X s 254
+ 363 m -27 X s 254 399 m -27 X s 281 436 m -54 X s 254 473 m -27 X s 254 510 m -27 X s 254 547 m -27 X s 281 584 m -54 X s 254 620 m -27 X s 254 657 m -27 X s 254 694 m -27 X s 281 731 m -54 X s 254 768 m -27 X s 254 805 m -27 X s 254 841 m -27 X s
+ 281 878 m -54 X s 254 915 m -27 X s 254 952 m -27 X s 254 989 m -27 X s 281 1026 m -54 X s 254 1062 m -27 X s 254 1099 m -27 X s 254 1136 m -27 X s 281 1173 m -54 X s 281 1173 m -54 X s 254 1210 m -27 X s 254 1247 m -27 X s
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 141 266 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 137 415 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 141 563 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 141 712 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 190 852 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr
+ gsave 2268 1415 0 0 C 141 1001 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.2) show NC gr
+ gsave 2268 1415 0 0 C 137 1149 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.4) show NC gr 1 0 0 c 1 1 1 c black 1 0 0 c 227 1166 m 30 X 5 Y 30 X -15 Y 61 X 5 Y 30 X -10 Y 30 X -10 Y 30 X -8 Y 31 X -9 Y 30 X -11 Y 30 X -14 Y 30 X -9 Y 31 X
+ -19 Y 30 X -11 Y 30 X -12 Y 30 X -14 Y 31 X -12 Y 30 X -12 Y 30 X -16 Y 30 X -10 Y 30 X -13 Y 31 X -8 Y 30 X -13 Y 30 X -9 Y 30 X -7 Y 31 X -6 Y 30 X -4 Y 30 X -6 Y 30 X -6 Y 61 X -1 Y 30 X 3 Y 30 X 2 Y 31 X 7 Y 30 X 3 Y 30 X 6 Y 30 X 5 Y 31 X 16 Y
+ 30 X 7 Y 30 X 13 Y 30 X 5 Y 30 X 16 Y 31 X 14 Y 30 X 13 Y 30 X 14 Y 30 X 15 Y 31 X 13 Y 30 X 5 Y 30 X 17 Y 30 X 17 Y 31 X 7 Y 30 X 9 Y 30 X 15 Y 30 X 12 Y 61 X 6 Y 30 X 12 Y 30 X 2 Y 30 X 6 Y 31 X -3 Y 30 X s 0 1 0 c 1 1 1 c black 0 1 0 c 227 964 m
+ 30 X 157 Y 30 X 28 Y 30 X 12 Y 31 X 3 Y 30 X -6 Y 30 X 1 Y 30 X -8 Y 31 X -7 Y 30 X -10 Y 30 X -11 Y 30 X -10 Y 31 X -16 Y 30 X -8 Y 30 X -16 Y 30 X -14 Y 31 X -9 Y 30 X -15 Y 30 X -13 Y 30 X -15 Y 30 X -9 Y 31 X -12 Y 30 X -11 Y 30 X -11 Y 30 X
+ -11 Y 31 X -9 Y 30 X -16 Y 30 X -22 Y 30 X -36 Y 31 X -127 Y 30 X 4 Y 30 X 127 Y 30 X 33 Y 31 X 20 Y 30 X 14 Y 30 X 9 Y 30 X 11 Y 31 X 12 Y 30 X 9 Y 30 X 14 Y 30 X 14 Y 30 X 14 Y 31 X 14 Y 30 X 9 Y 30 X 17 Y 30 X 7 Y 31 X 15 Y 30 X 16 Y 30 X 11 Y
+ 30 X 6 Y 31 X 12 Y 30 X 6 Y 30 X 13 Y 30 X 5 Y 31 X 3 Y 30 X 8 Y 30 X -14 Y 30 X -5 Y 30 X -25 Y 31 X -164 Y 30 X s 1 0 0 c 227 142 m 1132 Y s 281 142 m -54 X s 254 175 m -27 X s 254 209 m -27 X s 254 242 m -27 X s 281 276 m -54 X s 254 310 m -27 X
+ s 254 343 m -27 X s 254 377 m -27 X s 281 410 m -54 X s 254 444 m -27 X s 254 477 m -27 X s 254 511 m -27 X s 281 545 m -54 X s 254 578 m -27 X s 254 612 m -27 X s 254 645 m -27 X s 281 679 m -54 X s 254 713 m -27 X s 254 746 m -27 X s 254 780 m
+ -27 X s 281 813 m -54 X s 254 847 m -27 X s 254 881 m -27 X s 254 914 m -27 X s 281 948 m -54 X s 254 981 m -27 X s 254 1015 m -27 X s 254 1049 m -27 X s 281 1082 m -54 X s 254 1116 m -27 X s 254 1149 m -27 X s 254 1183 m -27 X s 281 1217 m -54 X s
+ 281 1217 m -54 X s 254 1250 m -27 X s black
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 156 255 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (20) show NC gr
+ gsave 2268 1415 0 0 C 156 388 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (40) show NC gr
+ gsave 2268 1415 0 0 C 156 525 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (60) show NC gr
+ gsave 2268 1415 0 0 C 156 658 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (80) show NC gr
+ gsave 2268 1415 0 0 C 126 791 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (100) show NC gr
+ gsave 2268 1415 0 0 C 126 928 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (120) show NC gr
+ gsave 2268 1415 0 0 C 126 1062 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (140) show NC gr
+ gsave 2268 1415 0 0 C 126 1195 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (160) show NC gr
+ gsave 2268 1415 0 0 C 312 1313 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (3) show NC gr
+ gsave 2268 1415 0 0 C 255 1282 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr
+ gsave 2268 1415 0 0 C 224 1282 t 0 r /Symbol findfont 53.2685 sf 0 0 m (´) show NC gr
+ gr gr
+showpage
+end
+%%EOF
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 0 0 567 354
+%%Title: ./booklet/USER@HISTOGRAMS/coplanarity-angle-D-photon-over-1-GeV.eps: acoplanarity-angle-D-photon-over-1-GeV
+%%Creator: ROOT Version 5.18/00
+%%CreationDate: Thu Aug 12 15:15:32 2010
+%%EndComments
+%%BeginProlog
+80 dict begin
+/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
+/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
+/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
+/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
+/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
+/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
+/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
+/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
+/mp {newpath /y exch def /x exch def} def
+/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
+/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
+/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
+/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
+/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
+/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
+/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
+/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
+ 0 w3 neg d w3 neg 0 d cl s } def
+/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl fill gr} def
+/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl s gr} def
+/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
+ sub m w w d s} def
+/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
+/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
+/reencdict 24 dict def /ReEncode {reencdict begin /nco&na exch def
+/nfnam exch def /basefontname exch def /basefontdict basefontname findfont def
+/newfont basefontdict maxlength dict def basefontdict {exch dup /FID ne
+{dup /Encoding eq {exch dup length array copy newfont 3 1 roll put} {exch
+newfont 3 1 roll put} ifelse} {pop pop} ifelse } forall newfont
+/FontName nfnam put nco&na aload pop nco&na length 2 idiv {newfont
+/Encoding get 3 1 roll put} repeat nfnam newfont definefont pop end } def
+/accvec [ 176 /agrave 181 /Agrave 190 /acircumflex 192 /Acircumflex
+201 /adieresis 204 /Adieresis 209 /ccedilla 210 /Ccedilla 211 /eacute
+212 /Eacute 213 /egrave 214 /Egrave 215 /ecircumflex 216 /Ecircumflex
+217 /edieresis 218 /Edieresis 219 /icircumflex 220 /Icircumflex
+221 /idieresis 222 /Idieresis 223 /ntilde 224 /Ntilde 226 /ocircumflex
+228 /Ocircumflex 230 /Odieresis 231 /ucircumflex 236 /Ucircumflex
+237 /udieresis 238 /Udieresis 239 /aring 240 /odieresis 242 /Aring 243 /ydieresis
+244 /Ydieresis 246 /aacute 247 /Aacute 252 /ugrave 253 /Ugrave
+127 /atilde 128 /Atilde 129 /oacute 130 /Oacute 131 /iacute
+132 /Iacute 133 /igrave 134 /Igrave 135 /otilde 136 /Otilde
+137 /uacute 138 /Uacute] def
+/Times-Roman /Times-Roman accvec ReEncode
+/Times-Italic /Times-Italic accvec ReEncode
+/Times-Bold /Times-Bold accvec ReEncode
+/Times-BoldItalic /Times-BoldItalic accvec ReEncode
+/Helvetica /Helvetica accvec ReEncode
+/Helvetica-Oblique /Helvetica-Oblique accvec ReEncode
+/Helvetica-Bold /Helvetica-Bold accvec ReEncode
+/Helvetica-BoldOblique /Helvetica-BoldOblique accvec ReEncode
+/Courier /Courier accvec ReEncode
+/Courier-Oblique /Courier-Oblique accvec ReEncode
+/Courier-Bold /Courier-Bold accvec ReEncode
+/Courier-BoldOblique /Courier-BoldOblique accvec ReEncode
+/oshow {gsave [] 0 sd true charpath stroke gr} def
+/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
+ text sw pop xs add /xs exch def} def
+/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
+pop neg xs add /xs exch def} def
+/accspe [ 65 /plusminus 66 /bar 67 /existential 68 /universal
+69 /exclam 70 /numbersign 71 /greater 72 /question 73 /integral
+74 /colon 75 /semicolon 76 /less 77 /bracketleft 78 /bracketright
+79 /greaterequal 80 /braceleft 81 /braceright 82 /radical
+83 /spade 84 /heart 85 /diamond 86 /club 87 /lessequal
+88 /multiply 89 /percent 90 /infinity 48 /circlemultiply 49 /circleplus
+50 /emptyset 51 /lozenge 52 /bullet 53 /arrowright 54 /arrowup
+55 /arrowleft 56 /arrowdown 57 /arrowboth 48 /degree 44 /comma 43 /plus 45 /angle 42 /angleleft 47 /divide 61 /notequal 40 /equivalence 41 /second 97 /approxequal 98 /congruent 99 /perpendicular 100 /partialdiff 101 /florin 102 /intersection
+ 103 /union 104 /propersuperset 105 /reflexsuperset 106 /notsubset 107 /propersubset 108 /reflexsubset 109 /element 110 /notelement 111 /gradient 112 /logicaland 113 /logicalor 114 /arrowdblboth 115 /arrowdblleft 116 /arrowdblup 117 /arrowdblright
+ 118 /arrowdbldown 119 /ampersand 120 /omega1 121 /similar 122 /aleph ] def
+/Symbol /Special accspe ReEncode
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 3 lw 0.999 0.999 0.999 c 2268 1415 0 0 bf black 0.999 0.999 0.999 c 1814 1132 227 142 bf black 1814 1132 227 142 bl 0.999 0.999 0.999 c 1 1 1 c black 0.999 0.999 0.999 c 227 1083 m 30 X -158
+ Y 30 X -37 Y 30 X -11 Y 31 X -10 Y 30 X -3 Y 30 X 1 Y 30 X 1 Y 31 X -11 Y 30 X 2 Y 30 X -3 Y 30 X 1 Y 31 X 9 Y 30 X -2 Y 30 X -6 Y 30 X 1 Y 61 X 4 Y 30 X 2 Y 30 X 4 Y 61 X -1 Y 30 X -4 Y 30 X 6 Y 30 X 1 Y 31 X 10 Y 30 X 8 Y 30 X 6 Y 30 X 20 Y 31 X
+ 155 Y 30 X 2 Y 30 X -151 Y 30 X -25 Y 31 X -10 Y 30 X -5 Y 30 X -2 Y 30 X -1 Y 31 X -6 Y 30 X -8 Y 30 X 6 Y 30 X -2 Y 30 X 2 Y 31 X -5 Y 30 X 3 Y 30 X -3 Y 30 X 1 Y 31 X -7 Y 30 X 2 Y 30 X -1 Y 30 X 2 Y 61 X 3 Y 30 X -6 Y 30 X 9 Y 31 X 3 Y 30 X 4 Y
+ 30 X 6 Y 30 X 15 Y 30 X 18 Y 31 X 173 Y 30 X s black 227 142 m 1814 X s 227 176 m -34 Y s 285 159 m -17 Y s 342 159 m -17 Y s 400 159 m -17 Y s 458 159 m -17 Y s 516 176 m -34 Y s 573 159 m -17 Y s 631 159 m -17 Y s 689 159 m -17 Y s 746 159 m -17
+ Y s 804 176 m -34 Y s 862 159 m -17 Y s 920 159 m -17 Y s 977 159 m -17 Y s 1035 159 m -17 Y s 1093 176 m -34 Y s 1151 159 m -17 Y s 1208 159 m -17 Y s 1266 159 m -17 Y s 1324 159 m -17 Y s 1382 176 m -34 Y s 1439 159 m -17 Y s 1497 159 m -17 Y s
+ 1555 159 m -17 Y s 1613 159 m -17 Y s 1670 176 m -34 Y s 1728 159 m -17 Y s 1786 159 m -17 Y s 1844 159 m -17 Y s 1901 159 m -17 Y s 1959 176 m -34 Y s 1959 176 m -34 Y s 2017 159 m -17 Y s
+ gsave 2268 1415 0 0 C 209 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 502 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr
+ gsave 2268 1415 0 0 C 788 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (2) show NC gr
+ gsave 2268 1415 0 0 C 1077 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (3) show NC gr
+ gsave 2268 1415 0 0 C 1366 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (4) show NC gr
+ gsave 2268 1415 0 0 C 1655 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (5) show NC gr
+ gsave 2268 1415 0 0 C 1940 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (6) show NC gr 0.999 0.999 0.999 c 227 142 m 1132 Y s 281 142 m -54 X s 254 179 m -27 X s 254 216 m -27 X s 254 253 m -27 X s 281 290 m -54 X s 254 327 m -27 X s 254
+ 364 m -27 X s 254 401 m -27 X s 281 438 m -54 X s 254 475 m -27 X s 254 512 m -27 X s 254 549 m -27 X s 281 586 m -54 X s 254 623 m -27 X s 254 660 m -27 X s 254 697 m -27 X s 281 734 m -54 X s 254 771 m -27 X s 254 808 m -27 X s 254 845 m -27 X s
+ 281 882 m -54 X s 254 919 m -27 X s 254 956 m -27 X s 254 993 m -27 X s 281 1030 m -54 X s 254 1067 m -27 X s 254 1104 m -27 X s 254 1141 m -27 X s 281 1178 m -54 X s 281 1178 m -54 X s 254 1215 m -27 X s 254 1252 m -27 X s
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 141 270 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 137 419 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 141 563 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 141 712 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 190 856 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr
+ gsave 2268 1415 0 0 C 141 1004 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.2) show NC gr
+ gsave 2268 1415 0 0 C 137 1153 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.4) show NC gr 1 0 0 c 1 1 1 c black 1 0 0 c 227 915 m 30 X 2 Y 30 X 1 Y 30 X 6 Y 31 X 4 Y 30 X 3 Y 30 X 13 Y 30 X 10 Y 31 X 5 Y 30 X 13 Y 30 X 9 Y 30 X 14 Y 31 X 17
+ Y 30 X 11 Y 30 X 5 Y 30 X 19 Y 31 X 13 Y 30 X 15 Y 30 X 12 Y 30 X 14 Y 30 X 10 Y 31 X 14 Y 30 X 3 Y 30 X 13 Y 30 X 5 Y 31 X 14 Y 30 X 5 Y 30 X 1 Y 30 X -3 Y 31 X 8 Y 30 X -1 Y 30 X -4 Y 30 X -3 Y 61 X -4 Y 30 X -4 Y 30 X -12 Y 31 X -8 Y 30 X -15 Y
+ 30 X -10 Y 30 X -9 Y 30 X -9 Y 31 X -19 Y 30 X -11 Y 30 X -16 Y 30 X -9 Y 31 X -17 Y 30 X -10 Y 30 X -15 Y 30 X -11 Y 31 X -9 Y 30 X -11 Y 30 X -15 Y 30 X -6 Y 31 X -3 Y 30 X -11 Y 30 X -3 Y 30 X -7 Y 30 X -9 Y 31 X 3 Y 30 X s 0 1 0 c 1 1 1 c black
+ 0 1 0 c 227 750 m 30 X 125 Y 30 X 36 Y 30 X 17 Y 31 X 16 Y 30 X 7 Y 30 X 12 Y 30 X 9 Y 31 X 17 Y 30 X 12 Y 30 X 13 Y 30 X 13 Y 31 X 7 Y 30 X 13 Y 30 X 13 Y 30 X 18 Y 31 X 14 Y 30 X 10 Y 30 X 9 Y 30 X 10 Y 30 X 10 Y 31 X 16 Y 30 X 8 Y 30 X 6 Y 30 X
+ 3 Y 61 X -6 Y 30 X -7 Y 30 X -29 Y 31 X -158 Y 30 X -2 Y 30 X 156 Y 30 X 29 Y 31 X 14 Y 30 X 3 Y 30 X -2 Y 30 X -11 Y 31 X 1 Y 30 X -5 Y 30 X -18 Y 30 X -7 Y 30 X -13 Y 31 X -11 Y 30 X -16 Y 30 X -12 Y 30 X -11 Y 31 X -9 Y 30 X -12 Y 30 X -15 Y 30
+ X -13 Y 31 X -9 Y 30 X -15 Y 30 X -9 Y 30 X -15 Y 31 X -8 Y 30 X -16 Y 30 X -10 Y 30 X -22 Y 30 X -26 Y 31 X -133 Y 30 X s 1 0 0 c 227 142 m 1132 Y s 281 142 m -54 X s 254 175 m -27 X s 254 209 m -27 X s 254 242 m -27 X s 281 276 m -54 X s 254 310
+ m -27 X s 254 343 m -27 X s 254 377 m -27 X s 281 411 m -54 X s 254 444 m -27 X s 254 478 m -27 X s 254 512 m -27 X s 281 545 m -54 X s 254 579 m -27 X s 254 613 m -27 X s 254 646 m -27 X s 281 680 m -54 X s 254 714 m -27 X s 254 747 m -27 X s 254
+ 781 m -27 X s 281 814 m -54 X s 254 848 m -27 X s 254 882 m -27 X s 254 915 m -27 X s 281 949 m -54 X s 254 983 m -27 X s 254 1016 m -27 X s 254 1050 m -27 X s 281 1084 m -54 X s 254 1117 m -27 X s 254 1151 m -27 X s 254 1185 m -27 X s 281 1218 m
+ -54 X s 281 1218 m -54 X s 254 1252 m -27 X s black
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 156 255 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (20) show NC gr
+ gsave 2268 1415 0 0 C 156 388 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (40) show NC gr
+ gsave 2268 1415 0 0 C 156 525 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (60) show NC gr
+ gsave 2268 1415 0 0 C 156 658 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (80) show NC gr
+ gsave 2268 1415 0 0 C 126 795 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (100) show NC gr
+ gsave 2268 1415 0 0 C 126 928 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (120) show NC gr
+ gsave 2268 1415 0 0 C 126 1062 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (140) show NC gr
+ gsave 2268 1415 0 0 C 126 1199 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (160) show NC gr
+ gsave 2268 1415 0 0 C 312 1313 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (3) show NC gr
+ gsave 2268 1415 0 0 C 255 1282 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr
+ gsave 2268 1415 0 0 C 224 1282 t 0 r /Symbol findfont 53.2685 sf 0 0 m (´) show NC gr
+ gr gr
+showpage
+end
+%%EOF
--- /dev/null
+%!PS-Adobe-3.0 EPSF-3.0
+%%Pages: 1
+%%BoundingBox: 0 0 710 530
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%EndComments
+%%Page: 1 1
+save 9 dict begin
+{/T currentfile/ASCII85Decode filter def[/Indexed/DeviceRGB 251 T 756 string readstring pop]setcolorspace
+/F T/LZWDecode filter def
+<</ImageType 1/Width 710/Height 530/BitsPerComponent
+8/ImageMatrix[1 0 0 -1 0 530]/Decode
+[0 255]/DataSource F>> image
+ F closefile T closefile}
+%%BeginData:;
+exec
+!!!!IUZ(C_$-%2DJG&.K-a@LktJ&MQrl;MYr@BGCdU'ka$P#8S*n)As.o)'gaN@!N\Y>9+h*+$G
+<)-n-M_7jgl?-n7&&;eRX92_$qG.T1LA&hGOh/1X;8/JJLE2G5bN'eqX_1c76M.46u@:c1[c2,]>k2
+(U[XB/ah.3*:DbBTY;(2`X8b3E9cRATp.cR6"TJ4Ft@4KWmgn^dM>$83(9R'amSM-VINu9e6cK2c!.
+C;,)58:,FV"<G50FO\^P@;+W]GL6u"QEEPjL=_9j$AQN'3eQ\iU>`?R0*[##4&7n%?Ai`Fs<,?;oVJ
+A!rCcX7d<)%1PLhr'WD-)L0DfKYi0Q*5uDeDse8JQ>f&9NYjG%3ISKMZiiZ?WY8H)8o7Klhd;RY3aM
+Kj&PPAQae$8;EYPLf@$'F]jPu(l<?,M05kWR&Z*E15rj-NK0$ZE/9NrC6"2UNipfmC,D'1F-^>RQ>'
+BcW481-8!eC"Qc83VF[qgR>+!4ZR\Q+9`4DJEEM0dYTY03VSdM2p4/,tMU1tdEHAJB.E2S"pW,ahqF
+\\s&M5m@sX-BTa]$IFmH*##(YcEqkZ*:KoDR$!OZ,PD%K0$?C$+%d"ZcqU>Lf(RuPI?dq\"e;ZUfk7
+gd(6\<]&`UubGN"YEkn-N_2UFj]`u=&LW#X<`5\4`bgsb#CrP&r`l>L-f:p<N:rgSRa4JDR\?!^"\]
+EgRaQCso[E$J7bfeJgbONm$o$Ye<Qd<R0d].?9Z]3D[XO>n1dcgARUfc-o<7KFIe]Pq_d4Ntk\(AjR
+f@S3tkK;H<Xk;jef^mPE`MhJ]c.g+&h8G-+_L::o#iFHki36MFg`>>/<8lXZj1C--gZ.A(GNA,_jl&
+5^oZcR[<9V;HkiLI\p=&9JPj.Gsl1k2AgWAaTl0ITQm-LnBe?83(F7\\do^1]2nX0(9fD+LLq"Vr.p
+ZVSRe,K@GJ3Mmf3$]7K#D>EP:q1$o*=mrn*Q`F$<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H>q_R
+=Al2Me'EL._:1mM9jS"!dRtY<.3[GQ$8#/JBC?O,*SPQ1`C/m<k<ioH)<bk^Hj`\=EYZP^B4!g3;B=
+(iZ<7X26h/Bf!6-d&9f'R[o;&XQ"?2"5H^gM+`4=1jRLW!+u$u:k^*Bscg??_p:="SQ?ZnIf:k'&t\
+ctIN)4XMg(Vpk\Ibe0NS?*DmI1HE,qf55/JDKf<uk4a;=i,EpG4sq/+a5h8d>eXi0S\2/?(AaP?YlB
+ah0=AD5kBAG_g\?.s#HN9\kOa(K?GC-^h=(,dIU>=;fBr>1IXb_>kFotE/'a?W`e['IYjFO!9GF;8%
+icSpWlL>#$,Ve*/ITH-bV]dD$L@osXq3,omD3cn9SPj;KN/bZ:m'!9`Y"/@)7D1\3j(j7ciuIn-(s<
+#&>J@s;$90F1.md^!#/+j-&IF.Q_kTb!YVeIEY?;U7&jIJTG[r=P!S)Pm)5$^bjRtTACU-98!M=Yc4
+c/tJO[uoVO`M30G%(d+PCF3%,_Cb&--7>NWg4c3$_g,,T+;u(*`e\/!M_9"u6]3!)QAljtt#e5nfeW
+]Zi6<9[ZYC*E?+iN3)=U:?fh$-5mM-p]6H]:d>#87A2JK;!!3m";aAF!&@F5Ur4DjPd(F*8VGG;,*O
+;!(GXDsD7#*u[6;1KeMc7&ESQ@-?Q<)qaF7SG!!lV!	IB=peX\BjfS:/WWDd_U&K=Ou0R$*>5+6Y
+qk+E8b[,WphLI\iE2*d38EfSEh(0j@4!%Z,&draL]Y,-9Fud5'MMV>/W;D]jPb/*"@6`Y!)$3te-S^
+0:(N3?=CrSGY]tnJU$.SE.]m1M!cr]em7bWrgj/UEWNY"kTr[JfVN.bB3`9mn5^Imc<bbg8bd;-8@I
+.?oLWPj*+NJ2YZ)GZN`e'Wu\e9+&D0FaF0)F;,Y3Xg8`O]#q0$hM<HV+cWM^$6E^;_N3>JM=nLjW/E
+`9<W--tfck6(jtQk(K?OppSeG_Pof5E([kO_SdEY5ripWZ0jINIIDIk&?In[@h)f6,[DGX\JP\gbnh
+@P%t_?X9a;Z6:Wmeab3@4Cn4E$gqTX<R..`7OcupKUYlK>sh+(GeT&1^cf(J5umN[*-=(84RIA<b.S
+[rca,uf,BE"Eg.5[4_lm'MfRkUqacnI,CK'0qXI!(-LS)W@'(Pi:O6J4'f&00FiA^rS^[\5X"A`(hr
+dfKI-FF:t_VC;UVH-jRi#)8X[&O's:S"7'o[K'!p]5pRFSkk#N?^ikQ3p-(pdaE#Z@)8rE?4(3rO+(
+B=9Ld:/O#UD9^0n=Y.Lk-,2CgS;Pg),Wt">/TbTSV!cH3p5u(ZPX7%ZZX!_m&.WU3pP`UPsO+7c6Hu
+aN0=FS]o*93'>0A'ahfWI)B'<5_aAk'.r!d`42Nr!H:Mi@=UP\R)0jGLi%9Eg+N\_"X;omqi"BcGf8
+S8'4QVM+EBqCNe",VAOC[%E<\ITM'bT^fi9b8,U,q8SMTD]d@+!/C/%j$[U9LF1IZt5"-ACJ#<38'7
+8.r[TEH!aM2E4F]KVbb+9Eo^MAktMk7+6B6Qn7R#QgZ'!.a&[7u1"QU<kRuZ1^&l&@;ukNZNo$==$I
+>RLc-'.a$_5#XaE8#RM>4KD+6eT3@Kt"5G8]J]%bE\=!_V!-X$X:ch"BI2:eWFpZM@+%4$A+@B*Q$U
+Fq`#M>IPim9hKnSA?,a@6qTZm^`-BhHF=>m'(cE7#hL(BYfU(ncOGM_XW<.WB57A*>gJ3GhSZrBq"Q
+hL2qrU+GRE7!3VnUl-t1$\RZXTH[o=2So)A64iLRY+/sRn_=ra(tAnC>Zd%@g]tbGR\Re,G_?Y),_3
+[7*l4S%egc7dKZK,e"2mM65tLbU;q2s66n=4"H6jNtGHW6cLC$g%'*iK^TQO_G<QMO7Ak>rD"2%iq+
+Ye!)7EN)A0'6EnSTDc#L,G0+geG)i1-fWk.H=Z,%[*>E7)\U;6WW7W9>2lG:#ls$d!Q.MncOKJQkkB
+@Hj4Nn38c+((D(gg%[#^in!Qrn!l!^OK+p%/h>b,62Xh$(1-Pmn&A/$;":.:"3cFuV*uAtXiLtuY#J
+dQSOE@nI63nZb&;1FB>]pK_B)4)f!ZL#7EJksB50$JI)%MNf%mb4Z!nK:J+Kb8?R9Vj?)grL;fR/M%
+^*kBpqg/G37tf#g/B*]K+HCaCKichh`[4k0=XLR%_)7BEYX=9C(g-uPQl89clO-V%-]=*8(c'Z5DIU
+[0M*Wm9629]c1&u\)e9E7F5Y<,-a<hDdJXNi6C*(313KJ-*k6Hu$Es''#M`+(6KCEq(2BgY_EVB9"\
+2\P^j@-q0;AR7uQ4kGJ)idafq+)(a'-^%sO-$E=6AV9OT`e+NN@a67URB/"5YQp6o(>P%_(()M@uP9
+,[J%VngKST6D;DiZL,at"G>`8s6FnO0,L%[Ti'.5/e38QL"1pmQ&JK\)#__Cq&c:&X!Z2b8QFSpS+V
+sM\iPYgb(Bl9uL`gXJ9m29L,S*1<YMGoE4@=T!!RlFE%\S%a6D+\f%l@_uEc(lo83.+<i(,SXJhfTF
+g)gA$IK0@VI`Kh)#iV.2!:TsgGYTQV`&AA98RmqRKI<'N`,U`$1_N+@Y1Y&\4pCk8OKp#)aNeEDfg'
+^8K35;fU2#<l4KFad%Q>MUERs7AM@+Z[CTpu,$U[&*R_uq7#WPpY$PDS>+'\!pg#K5J^@i]QUgP(VW
+$(7hmLFl0(5ZP>*KK(2$N$_j`O\]7CjbLb!FteN+q.$NJC6'%I#?FBrUr:#;l[a!Vq'eJ*-]4Y48$,
+dVh,Rg3R"gFLE&no:On"Am?0SOd#SON'>b8#TeZi#2b*tbl@!$Ap&<"bqd4:0I8MP+[jL2f"5l+H;.
+(pY\BuB"KEkeVl4\]hefOs8#6k.+.f^"<*s#%8!Ds1EiG8O1n:70@qN%Eo!;>89RN<!br9+t>!JgkD
+N#)NO(k<[d+n-(/(B1#a*8hS:/%coGVZ4Kh*[&#oJV"t0Z33ERSHk;s+E@V$FrfO6:ksWE!R:[Q`;5
+&X"!BE:OF"V/llG%G!FT([Ts=e$$KgTqjDKXBiYJ.1#3cR4YV<'t_&a!FR#=\%*t<*0+T1O6MTG4sM
+;Zkk+U/u1A.M1:m*)Q[Tk"C?i#F/RF7.a)6!go!15euAFlDn/DXQgUn/.7g*fkpB!V[,*<m+9FYMaS
+k8JKKiX<0^#NPY2rNi3MH4<EFS&((CKN@NB8pCP13&an/m!/_:QO:sn%F6uF.@H\.P9[sSOM<e7aLK
+Y(%Ao;Se+$cca_:FbLKV(sm#Kj7mB?hRE0)2Vjpu"mc-r_9s,8$&Qq@BB7iBI/M_G'.t.UhUE`S-hj
+OofFg)'Boh@Di9KY.MO.%8_-g60\SJ@gN-#^CEBdJtO0XGi-B,(;b(uDK5u434mMf!3QqU$-Wh*fEX
+)qjcS^05^3;;bS2`pi2c,D%WMRn0aIgP(=F8e+K,EYbSYjqi/e]]?k+WZOo\rG)K:!7?n1!pd-,35k
+s>O\J_CPUN!gbeFmSl5JFt:mV@UIM$S6lOCkiF;$6WbL!l7\T5cP+0i=3q5'aJq1DWL2D]HBq(-ifE
+i_-\QtXHh08(.%9sdWWb#rpV'U.%mT`61PLNN"5sQ&b=?a!U^>GZ3uWTYMbRa:6ZTg>h%3=E`1!n!V
+-j06lNB2/)gaSi.q_+fe?2'YlXRe8H0H\b+,,`$G_#s@Ib(0dZ)(R#KJ)*B/Bu=b,qn`!=(Rt#9p':
+T.rV-V?^H'!Ket,ZRtC4%l3;d`m#GL&K>7h)ks,K:(Z.<Ne=%N"A-?O"W$3M!!6OY3hRr.Z^=p6$5U
+DY]2D2Z_Ohkl@(a>J*UTp>+;T2F\,ZL43l!'H$.Am58N@7e+$^2s^d>Xup&L+lj/t;uZ4S?YH4`D0,
+E=eiJ7K`fmL@N>K>=>b9>''g[35M^"X;I7_?M#p!>K5J*eBUpBnYe\p(,2EI,Y;s_3[Mg3$:N<ORVH
+V@Hg5>cu25@Dc$ob@DZmr;+F+K7jsr>mZb0Bi#MiaYLIG3FBXOn5&XCp'QcQ.8*<8SPSn*18;>tDP_
+^.=!,pj%8<dIPoTMYhktAl#*%(+ek5dujh+Vor9*(=u1fS>AW0R"s)&1su_=A9j-VdW"9MppH[,`6?
+[N<qo\.>>o0sruoB/mc&)):"j+ERisdMRKQS71=_?m("C^7I"/!au9^_&.hLRb\6;.KS$%5ZKq!'Fu
+;jH(c):#S7A"q].3V+$mF<;FlD<&QZ+/"tW=jZ-Ff?]0S2;"V)7mPq38M+t;L##;D2<Ea$;0GmNo20
+/W5*dXV]5ISA]W#Vpq_2&%r'36U@sg-jIN<Pq[LX@'fI,OO%ji)CU[S-%ZNk9-W+,,F%F/L-=t!_MA
+\^_Kr1SfRm#!>8r@Q3.-f,ugV1]+/?dOldN(5s,4=*h[Wt!V'V//.Z+g^B(PDJ8-OlC]UH&*YkS]YO
+`e8Ep+\=S$DH71b^>6E_2&W7Ubj*Q>'VL?lpP>Es*.]`*$@]FZ?e[/!L-9:"Bo,1^d2';W&-5c>j^U
+fF,*Q.A?#0%YIq#"Pn)Hk4OEOOF%!\A/5SESa#,T!2p#S;^@N"j/M9DokPeQmcQ>'4//2iOo\Qj&;.
+E]SM2/h;rA``cWDpu]-@,a2MZ8u>A+.@BNGm6FVlRk$KV8OEhLRH+]p)Bg?",>EhJ3i9>'<8M/Y]_$
+KDg-DGU]k`.Pkd!H+NMTQl(jRN%T!F20JT[^B:(>._W9$=FhYf.$p+3@!"g*8j'a$((bo[%7ln!<A8
+kd!Jn_'G;3C#mH(H(PjNV+97]F-?,YupV:$8(e%LHHm?3F%lT$Mo`]t6i=LcABN#@pP$2g+32C$YK>
+&3Wi\Kp/l7*rbc6;h3$J:(JS?S@/iRJDPQeh1F.qFJGOhkB.6Mq`;@Y6bg0]Osd<hUTg+Ug[;VDb+k
+;'g!kCk:MD1I7WA88++0.AG5JaT7BI<FrL/SkZ,Hmb)Hd>OE:HQ-SW:]3XkAS(6s&ID9.Y(`1q@[5,
+)InJIcs/de4i]^T&DQ;8rVJO)#YSCVU=S^1s@(opB7/#Bm*'G$GG+maW#>9<Y.2OW=*IC7QD4kB'&K
+YqJJ)B<ofH,\f`o)'P10:C)JB!cr6j5e^7H5I2(&doo9l54=5=9ei$^lU/(hSt]Ipl4',)XWSQ[cR(
+`oo+)J+'=`X=*>See(,Z^CLO4gLVf7laZ%Lm)T4US<$M]&mS"W/6L_oKZT9e09^B;CgUcjkX4tYb]^
+)ij*'8i?#!36O@G2umB<^%g+(copmN6(tH;lJOLnHjPB?<IUSWW598j!\0pBEu]`$$JMEh_4oaqDY!
+/MlnWWk02<na]/Y-b/G]P@R'Fm72'a8G5-#Yj<GsCN2m=Mh1MTC^`]CKd8fjPJI,%_ueUN#g]=-pcU
+FUfODO9/9i6B,b)l`&d&"#24XiSB!r@IbISOujcEqjN&:q$.%(7#G46R4V'9nWa2n0*/Z4Ck<#DkK]
+Y-o-gRTcpeg&'_fJZ0^AK\;GMR^Di6/"HPk7E)c%jN@M?CaA5?s*b)R*nAEAft-`%q+@XH\qtmOp_h
+<]N0H[a'l"`T/'P[-:n^#A07FTl.egekLimZ(m_Gn/ef(PmOHZ*fbb*_G?G,@]]W:@I?m]$lnAj'Lk
+%IK,fn[]SRZ2bfF!c?2B'XQP^jh26I91DfupdSA[iKsEM#)=5'N]6E-7YBXbY!G5T6F@Y]g]^RJ1N%
+;e/Ab(?*Vl/;g,@GH"%:aV6$=+e)e45r%KuZl`r-c56p581["G!V#+#R"6sBG&/=&i"lfV,lE)/e@X
+"ROs3k!>6o"Ynj%jPaFh)F5mZ[@&;&8rGDEP^pW?"oUgY5FnmT$A[HG(W*n353hjnG>mX*OYC^,OEG
+5]<AUNNDXekMA3M)/4KqP6O2]1%KUFnofqYp'f"(fo7Q3%!'Vm-ABX.Lpo1f%6Gpc#eBf5oG87%%c_
+:DmfKdp@Ch/#aB`HKBTA%T4ahF4F*=MXWdtBk2t2"q%;q[IB_g"0jPr=7\M9NL8AeT$Yuqi-8F1>-n
+nt5Zk\4TFUaY81-@lWBGgm`,<]))Fq\$7"ma!CNA.BF#I'Iui3[Kap"2$+OuN^sOZs7Sm_D5Jq]@"]
+EJm1d'gt<o*,DWT0B6@lL-X>qaNuiM!?_bO:f'u_fF7o1gcOMrN=eI8fH]AGk"B*c#V(,,UTrede0t
+,'l1f"miU3IKbS5]L*XffP!*p`&I?9P5h6_1g)O@Zl?3BOZSRrZDP@-ik8ki(j:o\j_@o<ZM,Ta0Z&
+8T>-U]ef`mNbq-OORZ(%g0%FKRejj7iIEoM2"WTi3qL]OmER/@.4L@4"&lE3^j>U<P=LHb=@K.*[i!
+M"B!$?7]9?QM%FIF:ja+A+RtX<pd?CK,p+B].Za-)Eu+QV39O4.ORo!Y4Q_*AUNGoi;i5^ZC!/Xe2!
+LV'ojghNoO"MK5$jHVnBYhG5%lbiT9K,,-&M^ik`lgSjq``6RMA704Un.XFeZ_[2+VEn`M!t%N7'SA
+7k"$\3L!!t;Yjd-Be8SGoYi:XW``(k%5+O-p7E,CB0*#o5=0JOSQ'Yj:F[Y`Uicl]e2iu%L`K$dPdG
+9;60hQdeQ])>G-=pB_,tIfA#tr]ZW;D">&.,RXd-?(%pGMIC5#MF'i(d\H?N^IeU+Kbp:j]+!FT^YK
+<UXW_cV6Y-\P3MZ'I;g=Sj7P:&Q*8FjT-tC@Pn-;",IBP0[;.6"k*MUU6>Qdoq)qC2HtO[=^:h"G"-
+6m:EW4QIaepHZ<^h23Xd.<m)Go0kRR'_c]=A/dJ*,,_VH$\VOGH>OuKHDJdk6LGX41TXZ_4.(9Vno'
+5'&2fnD<V7K`[o3QJP-3E+g*T[,N?JEkT9NC)bAl-[3Mt)77ebd+JpA\Lt!J#,)"2L9?"(6KgJoF`u
+_3d.d@/KJ:_VhZ5J`od9$o*KUef2MoG66Ypl=>[;b7_Z2'4Q>dMK)ZI`L++N@f0YnEL&E#R+E9eHuY
+0deiUp>oKrfo?4q6cH3O*@,@l1aP&aSr`^2X^%_P,l8!r6Ob`aPgI'JuXem$=cG;!P*_3f9ZA'C@-1
+M2$^RWDMFc%9L/LJ58iZ\E>BRFaN5I.<eKpp:jj6R\[&VD@cZK@$&'6YLl[U3'Fod@*!aB`0*MFI&-
+=RTE-rI5.D6p3b9ipd,)@atL,(F:>`n;eg_XWc_@Cd\]5njWWbKhX7`$Rb(bZI;uE4f"9P&pKq_7JZ
+s;5_q:Fp@r-R**<Jd"f>E7sKop)Q"n5Y74!SNXIBg5(f%\h<`8YP1_74\$V&<\9Aa9uq4N3sb&=N=*
+%_YNFpQ9S:,9M8NIIY$qf)+?opO@,\!PipqruQtm3cKN[_K],iiLDi^E;h$!GaB*'S/aMFc8!=`f,N
+b?Ffu=\IDpIJ,NPA]KEp?qb'@&=jd^EPJkcdnGt0=sTi_tJITsgDY[?QUpRcO+J^A]Z6g1'WUN@A3>
+X\AVl('c2FT.u`HC%RqSQDk7I^.E-&B?Ha/-'hl_:X)NA*fbQZZ^fFg3Zn:m@AV5#`dm!H^AgAS^iu
+@^rtJZf6ctWpTO_%lem.,KCGGM21f3i'nehQ#U*:l!cJ2V_(]6c^!o7@%kHdif:2B'GL(R760N_5S=
+$.kH&;FZ@Kqq6gZ@XEMsgQ1I@%;6SWF6e!GChKf=UdKpYH5Wn8S\8=n]THj*$N4mQL<fq4BV/$33U:
+6\l9]roc>]hg-Y4@$UQF1a)bC]D-jlj8>O9o6u2:qL;T4pL/!kQLWSl4\99)6DsREJ`\;.5PtJQpY3
+GmgqEkT#7)TiliTF-jM1liKBqU2E'AuC8qI<j5^V?Q?n]5moE0n"5ZA4YljlAZ&4$]lK%kJWKD<3Nq
+EM3uLKj^B4;U;1[Xb;O5Yt8Z>QMVk(dZ?Y!V@8G'BOoJ09e^oJ>aOkYYYK'5/K]/^!l@4qt:0O6p^G
+o6C]MlX<0_N\VCRg5sU]"X8@gf(-=b^Jk--_e/\O>.g"ce]qcN3U`0\P!]rX\![KQ`5QLqj14]P]60
+'OZe0)L+'*0nJ!luq+n32F4$bua=!mD!=lpjHk848BkK%j?7N%IBSZGQ5K_/$@W:fMuZZN(O?]0I,8
+TooK+Z[`Sg]?i(I6a6Us#<P0NJg`fO"5:Y/772<J_i(i$#Tna.Zc.kX!g/WK#QOmA@lkZ=4#d]Qck=
+;:fu)l#K`i:+BM*o55(ojJ!72?FMqs'hmD.p=^8smr/9=<D%Rd*G`S<&`^k9SP^-`:7`:R7q+>&6;Z
+iUeA4&@7,N+b:T1'7W`J@Jh$e51c/1VP\N5@b\K]<fKK?oob>"eZjI5V7Z9"b6k(JHT>l(^L6m-G)M
+]a7J$)PUXO26pP,n!XK.M9PhE.lblI,^l3A,XIDeo&]CWX7(d^L7!K*pGrl!+Je1!GkY)$8"U1T^`\
+7CE\WR!O*JQgm"OI@)&X!4Z!!.q>!h=[2&2==3UOX17K:kd<-s;==;?=_1KD5\&A?Z-.!!-IaKBQ!\
+QiKYcYla\oKDB_HTM,E["A>CF!*BiO?pOkhEJAEd!#^p?^]4BTYXLehbFg`n"Mf]7A@iP0^KcN2KH*
+&R!Wt!e";G2HI(B@>b=eKo!9sH9a=RB;\ce*+!$%m>cjL#Qe2me?J.+OBlt6D3FbS&Yb4n+oQnO(G8
+OOtMKR?qG"H(HS9S6.A:4PQZ>hT>%5tEf98Mhjt1mpZi=i<\b7fX[MC_$RU--=*u:L%t]:q90YSqo4
+qMq"E2p],r^@K?HEL+!Xfi&Lc_O93(&!'"TljEnl8@SF"5!_>r,YQ+_:7tL.<"!C,7!!n=h&;?K6])
+7#-=;1sme,U=<;".nDBHMs_*.U"XJHULR+B&B`!JBSla<2#o+AN!b!<ZFa;#Ip*&42"/!.eN!:V?^]
+^a"@@,_6BZ;2?\'gk`Qfc+d6'`SAeNp]XL@!J;LWJbX#3!!Iuu$W4D6Jm`-1QlLVn6A(@"!NC*n<&/
+u#=@fOL"UG*](ek!T+bX*]JnP1;`=7Cn8:[pN:tPaLgj]<c/P9\Qe*RTr0FS(8<!'Qo!F7WG,jmqu9
+#dh'67aA`1^(MM3.^^B5n"2uAQ)Sk8'c9M7r7tHR(UbD!!!9[;c"$Za:ZAh=T\gLeVHD@,^Y%Q-%o4
+#K+KkjpfrIe#EUVbJM9EBDu]kT9S(.;:um*,5[q\L!.efM"NY'"1jsls<.X-Hc,?K3h&68iBnX8g"c
+,]MZr,6CKRcA3"c,/=3+9l^"4p('f:WTWTKPfGYgSI%d[XW*"F:%J+,&.(J1sh$Lfd$k$\g5h7.c@e
+5[8iPUB2PA"uP,Hr8!"D;usL,e(=^)(gM_:8qiMac-8UNYV1YP:'Cn+"\guW5Z:`\8qdNW"=QT(UTm
+e2%`\P^!AnVEZ^ngd5(`\$6=;;F2"O!5:fRBm>+MZYrDcGF<_;[[$cQ4D]OLt-CXop,<KK=q'b,[18
+qI3KckTkd9e:q@Y1@hab.n,_a<&p"!!6P)d.M1)!!J"+*W]hiJc0M@eStZk!`pKrR$<3DQm7-##@$;
+6dJYVL?jKWV"U2Qg!,r$o\0,%1GCeCE8,KMm'D,BQ.Y%YtdN(\W=B'j*E6?72;`+PJYRH77#Cm?sKZ
+Fr4*9dG'#QS.kfaX(c"d4M'a8dg1fjI@$-m=9m$.'F@J,fn+77^\a!!!_S=9&>)":eUK8qJ`+5R:+M
+S3p9j$pjMT>-7L*C\?Dk\'Ka&LXiNE"AVas49h`I"=QCe'j1WX%u$Z3K+L<)&6si]aC#i]JA<^fpf^
+;NIFX,f0&SpGc'>m8)24_AJ_e&pW'(7M_;$W[hH0d5=9Jcb7tGV."<]IP-llB3m*Y`6Kmfd"Pbs,L3
+Wj3<@:1jA&/[Eh8(*(_dZe$>/Lq#"9EU)Q!>X2ei%'K!]`RBue$'reZ^CoW#m2S8KYS-!i(Scr08,j
+U;l,QU"d)aI8HL"TK[(?bV@1m)IfXF,"3!;%\6OY74TK^M"ND4/!"7f5;GP]EhXgskPaK/-a$AD96>
+`R9SPn?g87[YJhgi1CPub_#Gi-2:K-3F0e7X:;$G-!<6RW:m+:hOu%7L7&!?`),GQ<90&cjTNJ=N<&
+k"gN/BE/N<!#AaL&/"uG=o`_LAH2nq*b&FY14Y*[jaL69c<fX%m""R<jW3]<elLq9<b<sriY4=BF0L
+0k>_4(270!AN*aA[\CIPH5!;9J`i"8_m<b:]!JL!Bj(2.:;!!%1cAmc=(#%QeM=+NmL__,3q-=Q"j<
+e)69],j:(>K2@#nP:Q9`lLd5CYZ_6+i9N6hbHaVmZ1nO[cFiuAAk-OeQGgM3pB<9h)"ZY6a9`WPs_^
+/^GnEf]GZ@c$JJKVkce4NA4Qb[Sn*pXBWe(/bN<K@N4mf:5%%2V]Q&Q#PWe`7lCP"=n4m.^VhD4550
+,_KHmHNDO@+`'a*%6fISBeB%:g6AlW_,<A+ODUY^d9!h'TQrG+$*%+MHDeJA;V$1^_bKUr'"3kk!V6
+L^NK4`,"b<^jljoW&VM'`l'DqAbZ9f!!`MN/Diu^JB#NDma#]57`'n4=:Lujqj6ZMYCN,+_%*]iAbj
+Z<P#%s]l`SrWDSYRe,2H#J_:H65$^u[O:'6G@BYLU^cC[LiW9u83"70-?Qjdk]BB3"W7:+%"Z`hn#V
+#`BUm'mZ/+:UdO'3\W)J;3UpL0fCRo'[paKq'8S=9)nbmXVB=J/7K:#Tl,,php(YmT'#'ebJGM9PZ&
+feV;oL//[cdo';&5D<D$d#Z(R.,6Nm>!Ak8*etg5HR7Aj,C`ll4rd;8rX+I]\J9:BH+:7<CM7W]Ol;
+/*Sq8id#,OPgH3rEo2DPDcAYCa3_j@!!uY8oqnVLm#lJ9Hi7+94V*(rSN&>.4HAY5goP!=P\=>_aeL
+Y:FY./99&gEo/Kimk8_]0O0,7mp(TV-nOs#1ilGMF'gX'2[7"[8qA:bKC,B"?:DmCFC]i]!]IE!YUa
+^j_XG5p4m*=U/k1Mm&:a`^n#P5sW!m"1'QEOACg5\Hr)N?PhfJPm!]/Zs`U<$Jrbq.Gkn^RANE:e3.
+6a(uF^J0lDc_(2=ET[-Fe;i[Y?O2VUIEB-otOgUmpC5;<CY;2^2AhmkRBePN6-GS`(+7RlmQq';qd$
+-!B,s)+!\Kr:2sqimT/]U%.s/S7D<CZFCX+ocjB3O#]o=nK]ZG<`$P%/'uHj!od9b41].FG.td;=GM
+djnmsfQ]J9VTUGTVN^08"L6@:njc7`U1,DhiReLdo]-CNq')#SKHu:I78OcQ>8@^%LUQ:1Xb^^#s0O
+?YaJAm.Sp;"7F>&>XLqePXb[@g6TU-%hHDIi*'JPnK^<mT-qHF.#XI<Knq=l5GNNhUcK<(^E"bY=>b
+b%V#$.O38^RGkT`DJ.fdSHJb>`1gmE7qp%-a*KC9O<mn%D`)updI5_hl*5Yu@MSn^I3o]+e]Y8R55$
+Lr3#F5RACDaO1FY]=WCq>:!a#e:2-?\9^9HsCU/cuju]BRF=jCj8R'n-sL%i:)rf]P"Xm7Io[:*-@g
+RB?Wj:rtE+K3.NCYnR$'WVn2bphgJ#qDNioKf?V(U^-ll$?DlPnpRc;IK)@FRHr%k3B;U=%Wr=OAr2
+a]#GLTV-WVHH`pBHY)-Y^9ORfIW0rnMM^\-i&_lb7=1q1hZBj6ZM2#<qT?!/<u7k='7nH$gC4IKfRl
+Ye0g'`I:k)IQunL!mUrOJjEekGXNkn$\h#Vk7KIgN(-"IPD*\G3].k9T1IAO"GS`O!!XRD&Kh'#Q%B
+*g')@4#?l2X(a<1J9Z4q]gJ.(je0E<U\JtHW%pfRAc7"Ha85QE3q.jBrggb1VBB!kc\Vr(MO"bt!+Z
+<;"pHUXg^CU:C522^50j]Zr5b`ti?k4O)8650X5?"MT3:g\1oHob5S,U651B@7*9$])qR0tBur&NMH
+V(\>URXRmu^btGmh4[u>J0,$V#'@=`o'0uV4+MqLdCLmT!bNJAjjS*d#:`Mg-n0o<#LoXc5<SM.VV:
+4^PD79>6B")opk'Pqa"=jG&IGjpM+%LTBNe'X?1TsO:X],#Oc_)_QR!nIT+(aJh5le\s#qFgTAE$o)
++_:ap#="8a?6Gp*]5!&7^]KUM&u%2O!"1FNRd@TqZq1nKd5'M?4%l'QqSgj.o'rqX,[hUt"6b+c]of
+TW3/Z,C6nbI3ng5Rh,5D$+Ms5U1a//7#$313b=XrHecTIrV+L%ZKKF6.R'KDrRb;0^4E?%b2bu7ff'
+ZFt>>9H[>R:dC"Z)$VHUJH!$4Wu*3,sNQ0\2?IC_$C#S4QmKF!%F#BIYCGQ.t3](LbbKo:sWp;#U,'
+7.5Ipn'"p2&eN?[p:%;][5ul6!m.46MRi`WjFeT5%f*EZXLnTL]8IV97:b%&h+nNVYV,b*uo99Qk$M
+kn)Z?o-9<,=bB9[8&Z<*RrMf/H]FPiH')bLL)b>k=ceFeK*6geK.P%&i4?c6+e@?A4m\P0mqX-SDgY
+c&i=Ja?_>(f>q42T2\Zc[kq>,Sg^hu<u\VLh:UFAFPllRi]+5'rS/Jqom?*,?Kar>!e=Ac#:eh+.uj
+j<80GYE9'A8pj4bt=KE,DYZZ$!.'ZKZ!>?)ZhDW86U_2I=\c-)2`aA+n!`V48WJdU3p?R:5*]Y.#_"
+,^B8@A+)N9%oGn%&77aj,ZekDClD$hW'E?,hUA=<l<[-N[:WCeMa8'lFQF%XRV?=+\M:dR/=\MD<N"
+(f87"/PII3d*_n0BW.HOA_D@7_+YE-&Q7&=R9J#hQbUL4aD5U%Uh]O>"OtU&],H#M[*7Mjd*+((oES
+a>B:^YNuR.di[22I!O#tnHTF-5-*gcm9=X\G*r#W9j@!r?3kKUIANANr9.1qn2Af*gSecF8dQq&YOO
+jo:$3[i6Y^A=rbZCl5kI!bT567,TBpclGRWB.SO!#UT\)O:['&ir!2C'/Mq'$UJuGVTpS:">F+c*Z*
+s?*Y\:%a%?3/\+]o'g\uq\ENbVYB`oECI:r')OWLbemu+uOLr=$O*uJ$BhlJJf`MOKLph(-QHo?k80
+Z=SMq#MZA-Aq>@jtt&f'B::q<D?2f0rVmi,.),6&8[:ma.aC.>],S?2C6;ob9"h0;+5J"4/</:+@V]
+UJ8l1^Y6bLZj2>DGNAu.n.4$8#Um7+k?;*qY2(%DFSWgt-Mahs<eO2ZIPgZ.&8sr[/j^bKYd_8gV).
+bA\Uo+e/b!DB!5qQ[/]p9fY$j'h4)T,Zs%<D;U9>M0H#a=81Oto/,iQ*pSUt(p_?>N?([5R1.h4)lB
+E"6SK`#_$U'EKm2cC*3Dk@EtNe%U'&)<F!DV"L>.hK=U+>[S/6La5onHr(^b4G!>'!WX>SJe018-li
+bi+YnNYaE'0$Ta$r3L2%352+Hfk*M_,5OAZuc8EhEHUiT4M:,pU+-T((U1qo>U)J(KefL%a"ep\um,
+0+D?1T/[0@T3,W.]6!&-Yj'Hd98/)-D:43FZua()PgVnJD-hSp/*fL=q`BV?)uM)YYq_d9rH\*<^p,
+3ef*(BlX`kjV=:B^C6K2Y=^S/9[_,\)j&Kj)?]W=GXk0TW@-bdAVXigcesctTlt%]LjmkH63g3i>eT
+\:,?DprJ<E%KtTEo[\bZYrR>jO=ZT<C/l>!#_o/9uRTX7")#].%<n?*u2+C910#ojDXE]s*feVUM!Z
+@P%"9\(;\/g==O^VKK/$p<7AQl]GrL`I=jDQG_DQVfqB+^o%p8FVoI`G:t7=\OGf)h!8MrSdcOJ2jV
+hH;>";Ac(2IJ_YdFaa`)/%EZs%pr886pH-=Br]iVAm7)kd70GT2R=4(&SRmD[GTlRcr+M;(j.t_df)
+/"1845C:@L?lhi](YS!?*WDUL.3FWG[B?8'+K\unFd@/,8V.I3aO5++H>$2`K--($o)I:)W9g7&!</
+;m8bRC6BF;?Z"+,,\Ekh,gBlWnnf!#i*u8G+I#/D7O\:^)$[F6L?+aTqD+2IP6aSIrj%^T7@.=JQD,
+lUTaa%m]!4E3Vs"Uc<(W$Fr$JGZ=W_;0(lk&t)J4i%jU"UQA!:^1X.jie^2HIl>FOHj.9VF#@D_=$D
+#iMm:AcX"WZMAM]U,5VZD)%K_h;>U4UGl@2iXS5`AI.3&6t^?*MT;An!LMt5Pt.L;RrCh&+W2:<P!*
+k[b0L'lAhPO%JRLBYO<,Q563I9^+:$Qh$UOD;J5@?qm2f"T>'*&fnCB`)W1_XbVW8#u(')2eBe*<o<
+c.fP#ra!ogu2oMJH/oSDE_jepCc!0/U(8$&-33-fHQ#780#dnnHb4]5\:QK!.f[,*MKJ@L+KDT!@Hj
+8]-ST1,[gG`J-G)jg!CUi^E#kLI=m@J#8kqlT=3R.gS5m,K9.2g5nFYD"&p7p+OgEWOB:8LC>>.1M@
+`[qpBoVE/6sts"2IB+eQT;XFKfuk"\-*2iV3ZN?5[[kFZRdUY?car#SqqUJBkq=,ket+%flr-#iIs6
+M4d6>!jKEHI4QQBnAmc/!%&!q>IiH/?q<\a=Z9eh50"lY"&qr5'90VoR6ji[%H%6Y=8X1k?W`6_/re
+9W+<9QqC]XbF:^hZn9\8%^M9!]E(*i0l%(43V/bZ'l)o#C25+u%@hN\=.?VB5#lYu;/&[XUcQ[fY;S
+O)AW(k<#[IW5QUa&!caHP^1Q&07>I\4m1fPT57IKJ3.G6dZ+BH=r`M5VN>#%Ql#N@:L?ri;-A\3"@I
+-2<&9o@[-RrJ-<Xj<c;`V:6+Qk3#OAopWnBTmtAOgQJW-DeF,.7D?0MuEXZCM(lrpnDm7f.VYb1?0<
+Ajai,[F$b0Ju>*)FrZmDp>%gt884gooi^@I=JQDB6QB%mWMam38kI2C'M0?im-cTL/>2oF;uH:ned;
+TI,5%d.QH,GGEmnk9tGn2BZDe8RO#(`4H&j9RJ'B!TT&QnFQas0JgS5&tls\_CG1%M\&_Y=+ku5DuT
+o3o)jMa"40=;bq/.a7akf>)PFDM;)ZCQmPW2V"V73kn66(c@f"Ct"Kphjc"b,tW<Z'MiaT@K:k8KST
+QVsu'ERD+!!W_&E!a<6$SN^ui%>B[JCTQZ$Go'9iWOm#"piM!>lp8Q64c_"2G<A)5K#<gUjN6:2!2c
+_1LaleA,6>QXouN[1iV;b^l0Y6Jn6-8.U`*!-1V+F^'#bU$H88Mk4E7?f]AbU!(_Pa&K7h]_?M0F*[
+%E:JVjOQB-Alo&g/Y-Yq52mrZ![H,8)X#0#G."mL0)N"[Vhr+B]ifW8iHE!pqHF5is.36R#Dp[;^$`
+j2CiB?jf\`.kV7Q+k7k^p)'HQ!h_m:dX2<5;V][2%:Rm2+S#T,8H!Ois2-O:#@oRWI__T`!bi2R+:;
+WKfHIMq+Cr2@BJpL+CabDI6NJYLU50>Q0EX_+'Ee9No#,rse.`ES-dpL/TIL"\Hu6`*>/73?_tPeAZ
+7,nn!Q[2Pi&(*N6Qh;%+!Dm>P:&,&>-Ml!Z]CKa!V-us.5G<ka!.i::@C"inJNN:%LEKqBaZE-W(C`
+c+Xdt=!.8HlYQVt1HtQFsJ,hbFfLr-F-"C2'""#E=83u0c6,Ep0jLR8PD%'ti=+UT+B-[W/)^&qKIZ
+,&Ul_YahSEA`:!+<mQF"f*fXpVLL4TKlZ7Pb25VB6r,45^>0b]>UXEAY!r.O-?/@g\$%M?hPW1EqGi
+@ib_O$QII/5bf5-1^tD>*C.N,B7NPT63L-g\krNbHLn6X,:4VpOs"ir+M]<,0`V2I58fZ;2^XPWV`H
+u6^&iCY,Z>dKlD$Iu7l++V]X-n_&:6nTOYl2],:*<l5YMI4eMX'f57kthoHYhaQI+R)8Rmf1W%N[2N
+>uO)8kEu86k0;u?m%gU0o-GBTJVRX5t`UCGCsHfAU"6pHo:Q/CVj'(^jH,I.XH2H3s\s9FF("[C+Dt
+p4TK[]aO<;Zq"moj`\M.A&o1=iqb]Zn$O5DL`9Mp61J&ptLsR,QoeJ5"K[=cR;j""G`12VD$:?)="=
+#`+Ne0gA^-@lV+Mr@j,+U_@@k_C#/?mPF_LgJ(A..?H-?NfrV8lBY<YI_n'*,``TVUJq#nu[3=DO$h
+:V0,^U:!sL,E\:CO=DLXNuA%2$S]F@!0'_T&3$BJ8S9;B7BKiAN@i.7?(q]\7'qN<-8EAT>;<E+jYK
+He*EZ=C4&q.[+R0L=Xq!&J:gs)CQ2omO&C#e<(*b(<+Kct%?X]%s59hl:.1-@'&qe*_?U>Y5;M629.
+n%5e-KF"hdeY)MO@qol>"#AMB=2<&$Y<i,?DS\EAYP)N0jeCT?`=s[-7$En/ld&te%t#N_4V5ML8C.
+CBZjCZ@L<c#`Y)ZC'af4i[\C0q1,>%kOJj.Mi.G7n677NS.AApZ_)MN1C4Um_2?bck,:4*=\g`E<>Z
+5ZH7H=Lcp,1FfJUg&gWGrp;VD1=`<jKn._OD!V;HK-9:Fm5VG.D;SYe&#"'0t.u?o/++_++/IZPKD\
+QDtK3YA5=@@b3lL<Nm^%!&1M\.D[JD2W?BDW-/4i!p?jSj5s.qZOHOo+@N7k(P=03A109k!5W8?m0n
++'5BoP]9"*MJi%QAkhuphB292tG'IO:VK6a]4+]\Pa'oF)All7t,(U0lIG>tq&[LS*6@Y&t;-l`_*B
+69J6(5NU#nnDl`fWR59,D%ZYj?J0&I:M>I,n=eqeUC!Xq(HE1&%([GP1o'KAi(!9&&TFiZ31qR`9'd
+q!3kN=7J7@e8ETHt+IEf(^]Y"qJtgjABTooTb,KF-L:9J&pu1oe(iqj*T8%RE@D];f^j6E?ILZBD&m
++?2?qqCPmK;EA%=jf]@4?<mq1n8BJ-%Ye-lZ8(gP+3/MrW6AApK>E)GB9(4_,@fV(ms=o6aUg?pQ%I
+DE8.a4_bh:YYOI#TL,&U"qJFr"ms?e_*AV!W5&!CNsaEq+uMT03]*+QN@]H#OjAt7Q%fsZd?sH35kN
+)5apL%t=i-XB)%s/uoE9F8(Z<pNiBS%VE"EkWCEYG@5XpQr;j<0SO^^0#EoKY9EEe<`&%?-N\2[;eh
+eSS"(08Kli41!#4d8s?QKnp70e`k5n/(%3'EHbk@:g'R"_th:'7eXJ!GD_3!$RbIROY5%+rtJ%N!IZ
+k$If<D5sPJO!9cEnP1GDP)5=t+6p-(\*e@i(!)cZj9o%EMY=r@"6coh18-Rq#(1Am"-mb)9BF#a]'*
+*1i!;(lqV4@>nTaIWeB<5L=9Mc<&chSl30Gn'jNG9uD*T5'H2pX9>n"_GK]>47I!6X9nWM\suUgb5e
+,9S5H8PGRPELL0Hb;::A0F8lo'MK-s=$NVJ]X4T_JD(e9N+\q)Wf7pK+bY5N!%J'P.8fr'8",]PlDb
+_q6jnP;*Ul^i`9WY6]W:>;$YDh][1bBcmA*dq1F+k*T]/3QK7S3hXU^2NpEu2_WX.N4#_:&.5f*nZb
+;7m+ZP,G0TX"b5lj1BeJ%GQX!B:>B63;B?G+1#mJBHR7mBt\U[Mr_b+L2(,J$`DZXQ1/-OV.o9UO4!
+n:Kl:WMQ.72L^Sbf('-*"5r'4FS%7:G\f74S+Xd[n6^Su.[bG`#^kN#F)6eXf\UeE-.-\=tbIlTU]c
+5<.+BuH>['A?c1H*$oab"\_J7G(&?jcZLi:IC#0s4W*GT\<$)r/1naP!PP@J"cZS):\!(3E*S"'Z.V
+>O5jHnQO+T(r4>)q>Wq,D@>B*^gpNaK*47Zf#lc;<I@KD4A`?LJ4!^r(YX5:RmO0l_ca#G*eD0KHs!
+C7kp?ThX;Zd(L3AD9-s_3P=tAYI!4g.=VE:Rj#Q+cAQ4i5NHkd6)b0AcO!<sI8I0tV6+!@r5.bYpd:
+Wr&@_Vg-GNpT$Ij;HaOV.#/`;s(<8lj\K(%'7IM&sjsRc+XX_>;^qa#W&_*N(=qN=F'ecW;^:.B<JI
+>%5YrYiHuYsljg+#+$D'r5mAC$1dtjD&[I-/S8PDjbKT8f`YrQlE-"m-,L<Lk&m77a@It"s5d5g>$N
+\6gJRca_0GXN*)BDRXI"GG_Vb.Di&"lX`r=&Ch(9*[4OZ1@979WjPn^6=edPo;biKt93O4,8l(nb+B
+6"A@pX<!ui'0S(nIEUFEd)s1qh8/e'i.qZ43$!R<di64<XK9N0dG?(S(H\#,_<`!:ced#M]KraFetn
+g`<j!HHcQ3DNbj#P.L#6>5gR^#=iI2Z\/)28cs.0'$0DUE0]AK*s1]k/C*\R5]1Za1]jBX5H5ZA8f_
+p_oMh#WYj0NZ\o$0.`4h5jd#TW/6*.NDmOh`b;eJ_Clf\`A\Scf6g*JS'O)6m>nEfn<e]'cYk3S8s.
+c&KS(0+c1bXkQrCt*PTjm<IaBk*"IN*%A8D(>db\9]H+`E">5i(i7,oTJ)\;a$ioc=+Z'PB$1EGt*o
+OC2^uu55,mGFI$F@Yi!+$&l#R[_%n:9^0TL[X;9B!*piV'b2_=eij.Iu$s#_6@p]ts32b3HgQ"=0'C
+OSfcCckA\N%mY`cTo8GKl4\a4&\fe'NQF;UK/-jcn:(cS/?0cK(%Hg_*MD6j5iNRZF;j)C&:hT_JK[
+-AmK]F^(k=q:@?9gTim+4("eSg/XRHpr$4X0m(;M1'i:I<2:Y;,Q;DFaue]G;[!4.5Ai/h%t*YA^46
+K+$YF?Ui[KpLLI2r%^o(N?;0;:j92[/,a&jH<Y&Sl$r%9')1ZK5&FKI5I3DBl%5?^G7@_`t\U`R3[0
+K9TQV)[Fk@HQJJ@%6em!dIFD1,QYQ>S;1+`BD\;RapA$ccln&R[iK3ac*9-)__d&sEHk[8*EiL;Vl4
+_elDbDhkK^<L`/.3Wu*1jLLM!pOTFJUraS\UHo[p34iGYgf%e++KD,@ka%*,i42rS2dp^5@]'`\G#N
+IFK`B[mKn2<'WX,L^:Vui0@Y#L30!JZ1dO!gg>7_"5&]f]\_;9G@SRCaAD)S%`F&;BZ/S(QcfF68KU
+6HVb;F#hXLTS'tYNASj\ft6d=dYM8A`c3/Aj\iXu_Sj:;AZ0N8hm1PhcAOs=\(5`mejZnDhT.=,Ha-
+BNgsS;`.%Hr)3Z;DOrEW]H=8Wf<aM,aN%]Z8.E5EiQ8mb5noU+(i0!/d0?if!^VD.#aso,1-D&'F3=
+NnWi)fat5:o^f[D:`k/Q)[SY2^aKfBH.a+H#bP)46D"Bp>9*a2[e@Yh3VD=(m@CZ-AC5Z[c7Y0Wf-o
+S(Z>Up5X./Ka2ihZcs8IGg>5T[eDSL>?cX01fT5qpG2Nt1csW0idjiu1D56e(fN+mQjjO2=b1)]aeQ
+n<:UC7+-bp_sGArPEQk637l^"LLOAo1_Btgd#pO!9D3M#BHn)BAIh,T#eht9C'''_.*=l@-:QD;RSY
+j.SH>poWql#<X<[;X<>c,_OLHhMP3F=:Wr_iK\&FT62_`HC'Ql-rN%Ha.9X?Ft=L21%d%=qT!n9)'G
+bEq9BXI:tcZ7agIc$O:I-*F;\b%mGk>Rc2;H0EilT5;:*\W^&X%Goh'b'\`h![M2MnP0miE0,J9k]_
+keiF:)M^TGn0nVatK;IkE[]a/n.4pjGfsj5\YU+I_3h"dAppUl?;*$EGgX0TLV]R0\MFskER>M^jKG
+8?HX2UK;#nVb5Amtif+PTng,m]L"XiI+6.raNOfmM5K#pL4JK*D?-LZ_eA,7oIh%Bu[r9.>S=fPQJ#
+Uj.nIcCKZNN(fa^39!73o=XZ2SY>Pe4\tZoJiXC;iTNf&,GpQt#K*4u9(Dh8gWAR/eM!=)+n1X?Ldd
+iB3Y&s1;,Jbh^@FQPl7dfRS8Vj1`K5_VUipFZSSJ+=#T.ts&toT;&"o:m^;omI?o/*4A6!1Q`L'2%/
+.[=8\<nj;b%&Q7/IKKpD3@2P=9l(8,3-%5O-+ff7qe;+0TfKG85M)L8B`&mWY:5O1;'<R^P0SlHO5f
+o4!<d9(G+3s_F$pZ7>XTk:s`d4\9/&dYePrj"E9=pOT\6;VbD!)1U,p18RW<-KJ>`=$]up?L3#70UY
+[C7(eR6:@$qdl^p&f#:f9fZ1_YP&3_!5&&;ps;Lr6M/QdL1A"%sL@6'-K4(i\R]=S[Z&`Z1%1a>i2W
+OClk,`=KJ-dU13%-_eg[!^Ser8`NWu&uJYo<j[Nf@pOZ5>$3Em`^a(2()A$l?+-_F04j\jM[>N#.s0
+5*Ac,RMJ\31`OY@JIFN5Tm.KYCX1+^<;-3FMl<R&(adcG0fCP7.=bmDH`V5Z8&VDrjZ6j3da>ihOj*
+alsb<j:^CnSA<[69OiY1a\F_'!nrJLDdKYBJg#\PC/>7(;2m[F:ps(g2s%hb;Ekm�\*H)=]PlQY^
+6U^KM=^SQ'>.5`J=1an;Zai?qb,j1KU3,jN.[[NlF/uK(<NQaAlBBdZ*-M3;!1tkf(C,$3p6u#fK,V
+)\;oe<+NZpFq,`/1L:=!mS,eP&@M4mL!nRPK<o5K]$iCG>sk,OUjsdT.u5kkhL#P\1i5j&bMt+!lQ@
+/;]gr:"&rt>ZY]8\Zi/%)fO@$'Hg$M;V_"Ng7?GVdt-:S2^L*IqO4P<V6AuWa9CD)B.g,b3sCKV
+o$mS';XVjLRQd7#=4F=&9.mRi1X<<pWbG_[,t/)!:4#Jh9*%rg55XtW$n./M^%,5=;'e%[`8P.R+OH
+l5A4I@]S1,DhQ6*/c#g'<9&&%KKKD>qLu+WoC3!iP;qCc/'j86D$Y-j@Mg3.ilJ&m#lp1\*4?pC@r4
+f?oh"rWa-&Y"rd(G2ss9iOcEIPb[LXIO>-e68.RI(9c]AY2*pTT?%L4X%q,/HQ]SD`\%FSYiE'V,PS
+7kui0B$o1/=gVq_@-l7u"G_Ks4ciEmi8*<Q#c$ah@)^jHs'Q4H`/e^.fl*W:&.D!7cb_N51inDW#%Q
+91Zc(*l7J`Kp:pf`5&#_J<UcQ@E4eaH@9KE4A6,;g7L^>_[N5NfF`/RV#^k#'K3b`$3aEceS4;1#1W
+02KbT^P"th0F9Uh'HOui-?mNeR[4U%)^Cr47r[6q;bN)6j!"t1o'_9q!_m-CS*d+9oQj@X&MqCBFEi
+u5Jh]FPR\#[ka=<eKI,"e>"E_oBU%7>+>BSF<\j,b#XM4';s]!X&QYGTQSJGjKiD;Fe0@]Apgk"_um
+dnf9k=UYef#_X\iC*h==`&4tdHUTflN)+VOdCP5E0pWLRFe>4N?lN5&'eFp!TWB<%TD$e'LhP:Ltj*
+$8%ZYO.?<GL6//TJ=$QQU-]bP5=eKE-l_`/-bj+lINt:p)cJhAIBO87.?QHrR50ljNp=I#\f/%tjrM
+$6jG&#Q49X:11L7j.nJc8<tu'h?o'S]Shbg@hDc+(X]_)(rijSUoKN@6o`tq#JdK!"JEgt!cW+6kB&
+b9866[;]J<#q>!CW]C(d9%+<;VAB@N#n)uu=kNmS+c`jo7d5jVj<_31lfcr(\AAb#kpehY,$dYC,1'
+FXHN,Q*=[m`L&Z0Mseha&"H1K+lCQ@0Sm45a<5h#ULG*n1t79:aFeeO'aft-DZfq+(HQ!HVh4#3EUn
+O_%Qc(Om2"^qYqRfYT]%c*Y>tkI3$1?Te5&lK?"8E$iuH9#pEb6JuF2A-]0./,*4M\(Zc";oAPYdPG
+BD3(i#b`VfC&Y.j.]kYWFKOH]\s!E";2uY\OZ)QoZ8oh`8<=M[2hY?t'0$kCZ=k#e4>p+>8rBVh+mn
+2#&X'R!/Xo,m_;5/RpH:8>mCCG_%!:#I$o'F,Mc!Lo3TX#su<1>HkKP8:lB+*)W@@n0#D!M?e+*Lq0
+%2GUeE7H]+PF]BUD$3q=I[Ged]-(\8$K#TF"B-\oc6!`9]!"$Qe5kmNlX)iuef#sAGWGaL;9]h*.'8
+?@F<3Wj%0#B2RBnUq=5KdbsQVCKUlbF!pT+q#VCLWJ"1E29d-,_FZp'S.WjA*FFZ/OGC_![+/Mkk.:
+SG(br?!X(A9OJKX!FG#^7Ka?"sZ(n0Xr#/]MZ6T@fO^Ycj=?-KbPeaLg0Qo]L<]PC[3WM@'bQe2ZS-
+r_@!PkZ<O<B4T=p:\("csaYTO*U+]cohXQfL"bQlIC(8AYp^YknQS5`CDZ2_L:2.$P\X3)"suNAS5)
+LrgY])2OH#m"\Ob6:8?dfQVp,'*7@o6A*$>R5YVk9Y8e*\.BSaGsI1q:r<]%%oMXZF>O-e'+Xpu6ZB
+7sKJ=!.@Ram@,(Ob<clX:Ta$%kj^#>0-?oWk52FKP#`(2WeO=:IJ7`X"L%J5UtT[Sck^5'ptKqL:A"
+AOcAN").(`Xj^j'.LmKh(naD_LYgnC0sDLV6(G7b/%OUWhp(I"W<GZ5WCktLl8LZO0iTn`[dR7YV`k
+PO.jurYBnpA90PR"I>!P23EbK0JfQFj%$;ZZ,(P&nr%1E$)_$[_L%KRA^ler,-k!h'LE'ujaM>j,cG
+DX2RE0W)GW:AN4pFZB!UIN7E+4CNEJKLN6sM=[+Rfj,N_#!uM[2,(UaHW@:rXo!T,;pp8A)W(f+(p%
+#I%?dTdL(B/h5(/SO>]]M$5C$1P__"6pT9,.."4fjhuO;ajAAFK>*@bI"TY:O.-B-Hm'5$Vohj#MZ`
+YXE('i\qA?S>_5$n.&d*fc,>-2WQ,Kf/6]f:2YXRMS"s>!H,FC'u/kU3jK:$G*.IDaiI*!3N[OC:ZA
+#QM_h$T6gXhZ35K#EGo-d2&J5Btk680icX'+$Iu#uGSm8;fdpGXiqEK!96MYXb;?q[:Vq9Z2@2dG+h
+<TEhtY:__9IKVO+f/:n"pJfl9A6cP,fg]@f<9m!rnG\b`LP(onZ!XL:`coD-r4@n7`#KTdafHCCuH3
+6thJgC,MK]F?$jYoO2"7Qs*81M`,=Ue2R"H),i-lo$Lk"`idN;Y9QZg7gS3B:U-cNkj&^`:gb08DeN
+;iiI:@!_t@T0H`LdW8X8M5+!I#YM(+K``l%`DNU-s.sch`OLl$W?d>9M[.BJLRhPA*Eec[=JA5g#g@
+Ds\I[60>_sJ'LRK^D!0g>GP_5W&e_GAKY`dQ(>1H`=eTbP%j+jq-I+AR^,->W\Q!LH0@?(4t<R#C3i
+JgikDj`Iif!qs9']Z3nH;7TGZ8Hd0rH4#->$!"hf0r\@%<U1oF]UG;.)euJ4KI!YJr#Ba5SC:?%:Y/
+W'a_ij/+UOYX:PGkbZId7dpc`8h)EutYZMKI5LkBh&;XFW<7pJ>7mn;Q?qLPJLWioLLI*;tFd&:'PH
+RqO=edHBRKJW?L'*5=J;'ZM'qs>-U=qK"g-qgk<MeD\VV4!C!o9g/Q)WK6WnOk]g8Y:r;Ua=@YZPIK
+""GWu9paT!YZ\=ua\B(?FcVhGJd==hJ-EI;Q+>YG]%aX)gVph[e\0`!^>$F1V.Fl(/[ZEYYDFB5K..
+('D.VKHX4o\<fu:t0c*eB;J;@#u!k#dJe]ln2cJ8*-f6ga;&;4:/aVK$:#oGFOV-MZ***k=Ygj:7#N
+Rt)IaqcO?#Y7\lc-P5-hVIk^!/8ghYV"]CK3^(_&A?RB==i"af%r``h2)<@2<Un1SY/4u(<D.a^#.]
+.mb[WKh?j-e+GEo_GR)4ZhaR1p<V>6\p>:#ehhCj_Q1p'9Pfu+N<]sgGBOkK3rnmDKi!'2>('3>?!o
+Ps=i'mk-:h0\tN7W*Ai*H]IQ3lKH$K+Y5(*TQoNU>Tt!<FMXJ:6=*fM-m@$@lF-J-[?Qa>IBhi*ImO
+@=#:\12n^FDM\Q:iPlkrefE`3*oZ$XiV"DR(*VYd_^^J*/(L'@EgmTb-K91rieAl@Q7:gj.cRleil3
+P/egK'd2a-"Lis%3t(,=hr/_p`6K]"!3MGXF4mX]m2!!!c=?o!?G;Lo#/!8(9On4J6`\q#ko@;WW,+
+@:Y(mb\>P?PnI=fQ.8b7c\__jG$4dQ:^/78HSB[jK;2;ekP4UGp&qh#e4&.D>br_/V7S5j[N52<`S6
+n<onL+jb?n!Q<E=H>3/:C6h6fa-o,AB?KLlfjp#5TYV"lqX4qTEi8qM"E!_&6!!!cGJ,ffS=9/Dh$/
+miE!%qjFQokM-&-60JJ,fWRW$?fm!9UF"k$DZ^NcX?=#A0%tAuHDReij'DD!%r%JbW[T(2%8lC]Kh-
+J@JkccirSjJ(ouu!1ni+AqK(Q\R[_$jA"'2RY@bDR:s$ekf/SFer>NJ153H&Ba0[`(5q([OoikGjX$
+%n*K;U^Q"b8=>d/kC:3(nJFp,l5Jf%Vj=9JcJ+<A6kKQm]Q(h/.@6A+g.#&lJP%WDDE=omO^K"8]#c
+j/iL3X!50!??7c-qF=T:^"Qs!>#qKTK%Yh@Un%'lOZAbkY6Wl6&0,:!Ht+##U+oC63>LaLHnE380."
+m@Y"L\"6`&S^b'@&63P@n!,*m9^cH*S\nHNNj&gk)hN@0%b369pCpqRScB>,./Cn?Ul$B,hA3auAd[
+Irn,s[(HSj@tl!!0T(!>o$l&/BlN(@1Z[l,K7o<i^iq5@]LgUOXfo=:,4^&HEY3JtOWIJ,iaY0a#Js
+!'j]gkY;3aE.fVlkJhf55[3RR631D`B9quQc4b_i>%>&Q!-eNt-lrD&;?2/\!WJVi+AD*73F<!3b1?
+K,T$;39Nbl`7n-4m=i/CrBc]]-n.7V_I0*H6&"d[/r@r8aV+AO*d9S6.H!t[?m`"<3B)?dhs!Z4aa!
+!<Bq*c:=)L+!%R(h*JI"Rt[p!['3"4h0rW.HYS5JaROG[R0$"Z[kANJ6kNnT'q23(%HbanI<"s-kH@
+a-&&j&L2\17W)2Gd+bkRe"HXUR6t'S[a)ArE?RCW/?Ae4_15PZ(o/AMZ;.X'H")r/]i.!]WO^_+dY%
+a7(K?!*/O;=^$&-2K-A%m!S:D.Y$8:Y#bk6P5m3!F/a\:=i8nIQE9-nU+.!!"u`JTi,U^c;B#12Ad3
+EW7/70-Tju5P,I$E=`+j?Kct'<cRm>JC#EU[YB;<-?W%nm!5VpLkG0R2/idWFnYn*(k((FP>Q6YVXF
+\37qJtX;$\M:k6O8FTJgN:5(cmVJ_pt=!$QNq!X+l%BrF;u^eJ$h,(j8-JS,Joa8ppL9SFj-TqEG,#
+VuMC\:?8"KZH4X&.*u^&HN_3!*B9rVEonY%ee44p>rf75XJtlAV@iPJIhg5&nZBLM1irAVTNL]0/$Z
+JrGrUJFq6G'#E\E;@G;<&D$OZ!=(QYYQB0rWW%MV"NUQ\@Rbd.3iJ0,@h_KI(bkW?Pm'd"M?I*me"8
+Qs>q.HK!:kjVhqe]E&q7!=!Q+d"0A+e[<Gl"gnkFcXhTDI]4n/*qF7lPa$UiVU&q`ogO8#Q3U[ek3Y
+qPdtN\:XDBYNZk,Ha]#PkFm`&A,AiuH;D<R&o1h"R<sG$qffQ=c]<A/]_V8^r-$5!jnss"^O-o/Hk4
+Et7PpCFBRE=rhXCmCr;?J%"oOD'qo@1L`ff=W^A1RL*G;_WLU,G;?&0%e!r*T6&)I3IhYm3+rWhB\(
+ZG?@ir1msrWk$&))V5^)16AQHb[XNL5osr=p$1;r3t@V0A1g+V/Ulo!k9b5l@OL5o)CZ?s$u_]=7uT
++pA]@2s$/c$YN:jak(k+jrgq=4Qi-'gJ2ENE2r#/W=^OIg:oBc[aKp[j@So+\<\5,H7Uo<*jE<[*:`
+A//='=KJ+-]B/;Rp>H>q_R6c_P6;E7Sesc=^(djS"!dTMT<$3[GPjS<M0,7C;,`[c)g)i3!dklE+-h
+<bk^Hj`\=<19Km94!g3#!iWr'AX\lV)\8cMDHAoaL.;''dVbD`jnAY&Ni334fS"uQTYt;Z=M/6)*KS
+9PE`kN%3roqj;lUVbh,;LicrX"D/In+7BSDjTRE/o#0<a#5DUM*7a)/<@DIR2Jr'j#/h/IU9SBP<3B
+nb`Wgq,<*7EjssoakaBB()gLg\?32%aOUPmWa+c35TW_8`0>,>95>"O.><RIT<Opcg=fu_,D^OgS'^
+WT#L$pKtC,c%(X!nbRXlnNNe@*YbPER#/Z4Tg5<T0CZ>6*Dlbqo^F.[>AY13p#(2ITn9/feNH?ZeU[
+Upm(e0Xf<&h@`S'r<HLtjV?6Rn<Z&%W>EM!.&Lo%8>MK`S2,SYCs,(9S89XU)*!<3ImsKW'ina)^7[
++/3c`P,cUkN/][$ccQfI`1mnc4<GfIB.?SPlt!e*1[JFE#fNfe#uB")aGEU3</3@g1L1jE3bqn-Gf<
+-<i\/91Co]n>Ze[W;_2[O]$.KQh%a6_JeBpdnZuoKV\mus>lq\?I)c'MbbJNj*'I@l<eEDT!l;_tR5
+?Ct4Op:9kBJK'P#UJBq9V%HNIeD;.]sQQ\o*r/2fHm)CWS"XOa^eZ!j%roDLb527NWc?K4'L54_ee2
+]b5=5Vf(J\*gc$06Enr5<d=SDN7@SK2U`"2FcE`uuJ%M&e.>t&YnLIsV%h8\@aB0c#Xl0!nXL&e].M
+R8mUZj0jRDR2:M;t_h/Xki/70#O3REL5D\J/(5P:IM'9S"3oUK3'hUAtiJ!Wu`/RV0m*DO?Xj`jMr7
+RdRkmll-GRZ0[r4c*Qce,LeB(g$0rdm2M)I\aGrimBoIn,MeGTqBcX6n&j>e[CYQVcrq)/Ni/mlXa[
+F?$%a6Famtt*/^*`*cS`u=SF8Veo>5&5nWKU>gkcH1#?B=ISSqfcLgjud6uPoAq4VaWk)GLr6m^T#'
+2tSk%0uf7$Nfk2E^\W'HH.>DH6/-Dl0Oq,RdgY-QY)'E,:BJZr#ZF/aH$fiCERfo-ZbFa+'oRZM'cC
+B-56]@Z<@S]7I0$<r-DTr*0R[Z:_!Ol=:G;h6j@tY*&rPJ[R;*n1P%5T$:.cG"iJ,CI&FOHVH;3V+)
+tEr:UUh?E:h;FRO/Y5Xbaa$pg7Cu/V!j3$c?(`%H5,,JS5lq!Z3ga@#R+%;%=cga>4@]adQlrWY1S1
+7h\D>dKkg`KoL&!&4MuR$HNX.4G[<NTnt=TE>C<!=G772=I]X?`/DPN&iIS$R>fP=,/e]M&s%Z4E%s
+O'MZAo"95*r6_h<=EZ$oo>FC0t;/FU8m?PqcFoGfV\C6+J;'V7,sP#>%?7n=41%oAo+_-/aM3$`YO+
+<CTW<$NLZLAm4Kq&D/#c4+`K+;99d#8(qA%hOO$K38Bo5a3!2EUkh1==b<kL/ie$3A2L'l]+dK4$gs
+WWhP%?O-#Sh#=f-5Sd>-'+G:n0R(X]%ggMLL66V'0!B]F?q$LN<=qIs/+(qQN'=5=O!/Y+ba0:qqnX
+LcDjsh?:1ldR<cqo68JenFf-lnJa=q72J(uQ7L"9Hb,#N.0j%,f)-!&t(Qna[CpGRtPkj@Fg*?ku&t
+<t7J(,6aJi!XGr8"`P5lTnkb(+Su811N!bW5qs#0U\5RdjqgdElQ[%iFau1VGl]'D+Fn](*Ri;]OC:
+0OW#9Fo,!ZD=&Mb^`m(ENf.PaTua@JTPJqt&.!K%dq-%Iid"$tEY7C!7L!VLj\A&Kr!&2Y%*f]o[a"
+oSs>g(/c`m%[O!H;W`%-DJ#&+(J8$$BUnlA]5i!+Eh!e@)5HjLcGQq<_3P#,g=;RC(->K0b1Gl("/J
+g$Go=U9$mJ<^_fD6"h(#@PDrC<>O/5KX@rf:QO6*qRY?[I``2"2<"YP(Wc8Ak>-[&mJc/dU^uPK!Z1
+^&kjR39t+BniM!!#>^m@D#m#u\$b47<VhXMVo"cS>,WJs\k?i>_gt+Ko=+YXee&5WfPrdJs8@7BOUh
+OG,#m>jD]5Y/+@7;&Ub^5gVn"@+9U_?j[3koar4Q'G,r/7>_*\YG%Wa&;WA)56(Zd)$4m\KA_OhK`r
+Y$!;dUlMF8;5cnhb2Hr,BF5WAa\ZX(F'IKUh@*.UlP*[#P[#2gU7JcH&o!ltOrTR6jXBS!!=$3Ap]b
+>6YV98!mDjgYol(BoN=MQpDc7B)t@m]j(0'H.ip\8sc_J4U"H'KOJ^"rG0R%h*[_#mV$q"2\Hk$U>7
+Z$h4o6!r.'H+LHJ!5V=2]Lr^2Bn.q%grJlY0'b!CO8qu,O0`ZGL&:igINe'"hJW6+SQq[#eA']l[XS
+`.a::gc=EWSb8>.&%<][:IJ,]V3.(-iEsM^iB[7R\4$64cHe5V+MhTF_AP&-mq^77IFd":u9'1("RD
+/HPoV)*'Zc!$%f)"D4;<Jobc0;*Z^`5a_j"?mLCj)B]3F'+b9,2ZS3d:>dI:G*?3ne2U"rKn+#.,Ud
+f#(mgmP$WtbedWT;CV>u/m5#)i5mt@Co!:?0J$@puiJ>&&f_>lG6KB,5s@GE*D-j1'U\4?UN3',Whl
+3(>@&;reA!'kK,!!1;Q![OWa5Ws`&[Bg09<"<i`b\SJf/F6GH&]mQpYEIX*/Q"!#[:m6)bX:`+!RV*
+4#,isP@?Sa[h9HQ3&/k\%O??DiE%SPbn*3/;$OVme-jNQkSr(7)>3NIZ_'hVWJBW7i!!hN"+J9K8<W
+.(Kj9$jl)NOP63E.Qoa5+i3%mjcgY2N\'`;oNGPF=o1SHP6ra\([!ipO=ejZPW&nH*l(#6MI`!X52W
+"bVb\AV&V_7]9Pn!Y;0E+nQKMJ3X<K]H%%bX;OARZg4gY89Q%i>C/+02rVdbOZqDTMX4eIiWDJCmV5
+i)b%gN@&codI%fp2D!/q>ZGdZKeVP$<]Y6sKD//DY:!mf^2m#2&I0*4Bb"<b_DJ,lKc/s=!d![+u[^
+uPOsZ4*Q`+!D?a0MW"Zg^Kk6*KO7oTFMtBZiL00RV7ZR8Z_WAo&IeX*T4FJms6'a?3Hq&%fu$]MOO=
+\roIZ%d*J'dCWp)0BWY_6$_SK)5TH*kA?`l='Hd_b!(t]@mL#UL"Ad#M!!34p49T<h'n?A5JbB]fcO
+Xm0"Ae7J+moSc"pM0Pd"@'3jLg,Kr\K+A"NgYt;(Ne3eFiq,%j2hn@!7pQj8m%s*e?WZ?lT;[VS)sL
+"bC8&TMh*Wne'eL)%(Bb^`:E&6jk,*"%tJa$9/lQ/@.X!'#XP[0lR8(AeVFg!Pf+n6,3N:,[-o$#k;
+j6c,'YIoFN,X*Pl:+/2A\M1c#Qu=A+a:7f:Q/L_Bd\MCeC&`Yr:L>.UrFOmol\88,#S1^lm5'1q[7i
+:N?:ljuFf$SD]M!:1(=V@ui7%h>?WTb&;S_'#DVYJKY(aX\Nt.N&8e%&<e:ljjFgZ3p+?m,\L=maeO
+t4G*#B-"o">$@LlgqY'+-*rqH@n_C)E)A@iH*l_b!1$Y<Lm^l?f-.7c$iY:%!mSJW5,r*:d#R)N[TR
+d]p=Ad4G;9oQ,R2rSR/ZT-X!2'=46QVDBN)GE+:q\?!eGg+#3()+J7n424f.L`V.](*6joi4<e.&(\
+&;$u*!B(=9ar5j'*]!L$U9#:6\-mip+$oB1J@H)?dN8KH$\6GA+nQh^(GPs_(pa>`@^R4G&0CtjAF\
+MjNQ;a3B]TlL,tZWEdaKh4A;7CS@\nJ>0E!1qB/aj;M%&8g7rTt%i"BI?QGH6:6#6hCNYnHF*WW2NT
+qi9oX;k0'(t0<@+JKZ<MAJR83C-si+k-iBFrEWq&#&7q!E'ipBf%J^BRu*NU#.]Nj;rsYP"?3`F'C3
+AOY*nJ.'n1`kU/9`[RXe>2_q!j'G1WBI,f11Rf]r;5kGMYGS$S,$@rC2iN`_F5r$1i#VY*AJA`HnM)
+%Bh)^'Pa61>R2I/X,Q#bg/a5dN.rZkEHc\Q!?.6JEae$6#rC/<fX;;U0R:rBW8r<g3b"ja7_q![:P(
+8@4m0dd1WYQ7F-D$D@_B@&ZJCWArn>4/'hNi8b:)DbOT6*s%<2+A<?RbRQm3(I95NeA`9_UG/Ac"Of
+=\&_Qh#P<LgBIUnliU$PBLJOe`&80VI;BSnk0M@U!T*\tbcFH8#n3"!s\JeN8uoeB&O@(=5Mp8&NEi
+-Z>LiX<-C%R@ueTqEDkTGIXu)PP:h^kFQFN#El!(LceE+O*qqn-qY$(k@5p!TFmri"o=R$I^_*'"Dl
+0nimd_+JCV!_($?(,aGbB:kCu0aWEDhKGu$c;1\ER.QB#RR(-X.*O#Yr6&A-QO]!F8@upFWPqQ&n0h
+O4k.l2he!+#sgZ6)B:#iLLF2-:P8?3lgT*WY%#i-YpkU)O)o#_7LC!OH4-Jeqka?rdS55dUfII5.J&
+=_<KsdW&EKj;e7F!)W&ee9tN;3Aoep;$_kP+L7@XndU^6+[FnN#RV?maMUaP;@i>&"un`qiB[(t5S`
+NC#ad,.nS(=o*u:.lp7F#3UM8;KC,6h[Q98]o?jsKG$7H'8Q;q,[p>qRHL>h\;Q$Nd'p)`.`#ph&<J
+9hL;@LqBX"MjL;5dD_fWX>DH#p<t)+c6E<E"HGK#=)!/P]j8R[N9tc&I"eG5`uUce-DXu'ER%t!.AD
+fLM,j<B<uSUeqn(HH"cggj/AYe-:[`BhTeFH&#'GSYDGIZ_bde^$anK>+kd;IO;d&1Yom#B@)*=]nd
+K4X*[#VHJaNn=B4b]<&&=PNi/IPa6#DZH8jW"`2ff`.Np$L/&ce.<+eBH7=*t:s?&!0.T_aQ_6$-*_
+FHnp[BUa,K$6Ad5F^h.XNJ/SMCMXf!,8OBo<m$05+O%WW!C=^@5dioX\/&MU$35Ms@DmnOiXVbeH@b
+Dl!<s/2'6WQ^+MitgU%WrO`k"eUU-[cG$0WH2fbN,^F+P_OZhPlW@O&ki#V+q-\(O"?gih42*>-n+-
+:SVIDCZ6DAWe6&!4./nMgr0:>6k1Y-nZN?W#iaG'`fM`!Jh(KI<bga]o"cfY^;&(,bZA&%"[sciRf,
+O&0R[(GbNJ(@BKsRedfL:qk-t-n$i\_5TCs<%aB\QU+-uHnftu"#a]*1B(8ccf7u2RLM,"iWO%%Bc$
+koQLm=G:5_o]^-3`=;#hSm/Jh)?3@u:OBO0uhH+Vk`AkRHHt"f3ehMe<m"n.^hW+!ABfi2r"T1hoYu
+/8S>l^n_rYMRHrOP9A]l@I=RS@N>IkQkd\so4s'u$'<$`(4^uEB(->408CD_2L-9pfcbJ4J7,o6CVd
+"W+Ho=(;j8.eM9QEOq7ASLC(ha%(*NGdTY:cl5SG9SI%b![)>F[b6'.f^(*miO!AY:\iX4WU5@E%d!
+IdNW*Yr0>%g6hs_"7[.@LIK1$i1o,_OI$_j">VkW#<L%3Q>=Q8/;F6P4lYIH.d]#gl,B-UiP!DTX5)
+8BF*Nu$fIZ]:Yl7@!##>p#XH*2TRIRm$l0tk#b^Af+s%,b/dpUI"Mf0gi-HR)lj-dd$%Z\!+=%5cap
+%kX%mVkE@58*5GS":q#ft\p>&>a89$TBRKXi@1_2ep!>BPI$"X#W*0_nn`@Q3"QSU,(S2:mQ!-)Vo"
+#JfI;@7UK/5SbKB$XkaBH70"!&WjgS#6<`oT^2g_5R\RD'-KaU!G2j-AeQ;5$K1ak>9jb&<Yf+k#Je
+Cs+@:6;0F%U/.3U1!)W@q6O03KIV#'JT-'Ad@LOR;+&`BH%@,`'We9LguY^+uHZ15>&s/-cXZ.gB'@
+8X>"/[GI6F#aX>:Y_1\+1-T2(GSpt+D)8e>R3nkT0WM_gM++NE-=NV%Y0??A0qPt.WQ[_]2Np`P-MO
+<6a#NRP(hFhVs#&WiZ<X9>iW0%]<#lH$U;952g`*?]-"=?_m5si"PZe_HSu:`0lit"(ZJ6(S(o:d<O
+J;;7mUe%qsk/HBt$+f'ENRgWD"(;GR8nL#Wt1,>S/VKHt;"L;;ih3'`)BL)A*5@&:g@FGsB2,7>@9B
+aQVg)qn9pP`Mf9i#_9C`5fa]`dKmra+oGc^qc"70oEZm9X5%^'][@0Q/dgPCVR`iR!bMah=tQ8X/UW
+agg/)2Yh?tKc/$P`_i5?]gR\oo4_^,Q"&rFu@kF+F:RR(CLG[[o:.M&I:e%kk1Jg&Ucj:d/sT&!3Y@
+4Th/:(nbPbonm7j[>(nIKbLVdo)=Tr"ORqD@EBSfQOC-L^o?Z5S5$)ftEs0rLqq.V:p?sg:aWBrNY*
+?[FrFib@:Xt]mXs4p_'m8,'tttEeTVuN"^`C"b84+IDa\02`LJ(->8n$AeB/k*Mp_gGl^0N-Xkps"l
+Oh8F3&jcelUWIieJq*':/3l68tLVqJF&6$i8W]^b-co(F\*jY,F_F"k.pkO4adJho?uNSl+T5<TS[4
+jh>$^raFqQA`eGUk.YX?J@5_oX5O+GiEeEsa/fr)iWn0?_M:l%@,_G7*!$(MkOMp=ZlS$%Lg;un=\i
+hjW=j^h&a@`:':s?NSM;]6iTlgg%QrG"UN0_Y+qL=hq]<h=StU8_V;s]0/(VE"*d2]jh^JK;kBo4"^
+4#H`&dVl/!u_:Jgt5,(&3$t\#fCs]g>!HQBC\8666=At+"gAr/_tf.nH)Gmh[h6O5p48!c@Z^I-2ZZ
+:1]g5Zn4:[h4m[j95Zp4=b!&Ja55"Tj4n$,#H'ZS=Is!Z"J+Na#-R/rmh,E*^Fnl&(q1<W\+.a6V3V
+kt<eREPC+058\XqUl=%=aH7?!moqIrmo,Jq%2g53?+cbGCf3JNcfoJ'*_bGY9-,G2M;8B<2`\6/iNC
++:*[k%LE7b&Ctd0<%]$tLI:&5(mIcE'oPN?B7_#\$QUgs,I-D>c62(A^82I1<3B@UQV6HRKt3LZ24H
+e#meK3iP5(KQPqknK.H\B#5njGWAIb,&Vc2jpjP^T0"&KolE2Qjt5p<F5lkNtI%\mUA=mZdt*HbtB+
+I/`<)jS_5?E:lBn9@[)q0g"H,>lV]I_o<Oa^k!j<\@l<`ae*=A(:;GR%$o#<&uU2B1\rWoGS_a.]8f
+;emER3A_1(UZ0:m#)L\cMED#P@)k''qnQrnF\/Z@0DS_"ciSj?DLG!K>4Y.[WkJ<FCbaPf\Y4e+S00
+uJtknL9:Nh#`K0CP?8hP4)^\l*@9:R;H'me^m>p'q&Jq67ZEX,@2C+jO#g"!tp:\EKfD&B^V1l#GQ<
+S`Gn)PS?^;?HbLr1W%J4-7I%L&u\Zb31OX7nj^QRFA3Gk,`sR"'TisL4<J1JC-J2Dg!q"$-CH\F+_Q
+Vp9TN&Lau,m5aYZ2]#K\.i!Du21od\,$[&uUY$fM$-m1\e<9P]j_]V,uAd_<K_*!3;tbfUk+_@rX8l
+&uFAhB\K[W`jV)L+ooC*TJR@%&M>)R.)Y'qAt$F?jIcE%$Yu^A05HoF<APZ@Ickh851i_*<MT0$%cS
+gfM6r2O;ojEF]]UiJjkLV!`JTF/4'SlDuil@']KmUMIC@RL)qN-k)#\h!*]"H1:oV![5-OYONZ*QZE
+qbU[CUt6c1KD#>\\Z>2pKGQi5AEtXRo1_Um9SuMhI1u"PtSe'$WeN@O->\^q#POLOe(54jqj!2.K'3
+rB_N(FsVf4!<nnZ/qHN43Wp0'=c*b!FMNnPTi`.4LfegLg.[pQ+Sp)LKQnIR`ojT46:?QJ.SPjJ&0;
+;oVoa"L8b#Q0)':-L>:Q@JMbbo^G4Su6gmXsmDJD)s^lZ<WY.DD.PA:O,c:gso"-PuAOtIYW10-/aq
+ak]2VAIZ87CCW]R=H.ZW-B3<^^s0]#_6bML==og"pX&e(jmD:#L4Z!i*`E<`/<_i"rWtd\2tY%GqMm
+%*JKRp&HDeBYCV3(!"sI6*FK(,'Hh?9!JDJ$>&&gUN^-ElhuF$N&fq#T<2+\UVY9<oQG)H*HG>k&lU
+^HSkPFCJc#hbJ']OjBBgL['r-p*;o6gR.e+J+.fSBcs^L-$sI(AIVD>egQlAP)sp&$a0^]4QB!fq=R
+&]6'F)$*uGU]M#c6oc(a"<_r[EoXFGZ*>DPe@V@YN1!0s0k:F:TNqQXN-KnMPWm)0%1;**/HTnn";X
+i("@pCD$'?MC7sH-^6a0mTO?a0VaDV.(EMaI<f$iK=fHI>p9Snlk=bj4b&7dnMKi!@D$h3lrO_DK>T
+MGd5PL4\Hh<GPQXI%X+S7->DL:s<DpBW863A$JD%fsC&UXXXOOnM"0q#MUJn;.GA$:@@/qBpp.L)Zo
+;PeWqDrso\R?f3%[LCt5r<4\KJlNr<MQ6=8i;iq+^HpU76o#@CY$67t43/#q1aWToD=JEkK0u3Ae@6
+>tQ0E;(S@,;*Tj>8EIp&G4MiWK?,$6<%>!D9X?nkW`FCCr7T#nU4`O^UTu_9t%p(rScG-ru>,6>n\`
+_HLFPkq,11W('as)9=Sm+`hf9NH[(67<jVF6f_AQ,^12`N,XesaFZoM#p"f&H5r/-LJ[gj6thi!U6J
+&Xd987oB[mV4UM+pDo=Ufaj*6't"^s*12SttHT2\FE%L_=C"j>UK';.TSSof3@J]JR\8J51Bq.hS&g
+pr*RL`_O7<sqF;YnSu#cpL\(/:\j_LER(MK901]6thsg&Nq!oLldoLSF:5?]S?e.?RWotS/hn)BHD1
+.4bc5c(W1qH!oWTSLfJ:6,D>Xrn^u%dfWdr3csJ)&j>7&8oWE>dI+Iqi4%8gX+(J7kLP*uY;,&`Ip%
+H/%)]rV3<K+)Gk^8>o@lh],A=a"jGn;s`4bJq@+!LV-O0S$d@e$*4_4XV$+sfN'4U*$N+gM`\(,tX^
+U)m9[O?MhQ8DicuDfhP'8]DODPm!a#@86eWLEo4jA,lULGX_Z5&K%&J5]i7uU(:YClUS1)!H,+\eCf
+UV*F#BHA$AZhJ.O+4$b-0:)KLq]V%TA1eff10+p8*1'u^0l$R(`cUN()S6EjSu_TY^T:lR_1aC#QhZ
+m#Z]aq[:2nI%U80<cS*L@FF((;O0+L9ZUBOUs[p!E:/9KTHp9,G`6YoQ19<!'LJ37`?P0bi4"JZB6U
+\#Li0^A"^sW?lhrK+]^;N\_V%"-*J)(Uj\2g2EcZM5\'sr+H,bF/HY^?*l:H'ck57`=*cqLbcESFEU
+p`h4.sncXW@j$MZpGkE(0TC3PBcnEGco*\BfVX%BGb7blu@ejJ#0W=X;ipE:$fh02a%2nh\;lld_H2
+H&dd_6FBYeZ;tpmlNN51WIV^eQ0u.5+e],5DQOq36G!b$.BGDs#s?_QE/oi*C#Ifh).Pg7<qF^PFo4
+`dcRNZe*#M"qL_pB5"p]u#5VYS"jU)&3FcCNo/V.+Z%3`rBK@s=^nLdf`@tA"q,rRqT>g#__?Q&sQ/
+iWl`QOh5TG_:R/4geD1#fDUJ"7(D!1-ih<W:VIA/hfK0'#h&$4@k/Y6jj^=Ig]ac.#``J0lm0<bW1Q
+*S&=n^#[$R$\A1ffZ!J-"5[=PF`-$p1.P1_%2]3`k0ag7V)$bsf#bq)g6d[_*qQNE4i#ja*q^`ZOn9
+4+aBH<%_kSHMBZ"\'%8EihrV+=hK\N4M#h!I6q=4sI6AO(YJH$fU1l*;B@o(#4Lab!QiA6R`@IGj*#
+3e@q2&3-a3";]HH"gBn:_5'23IIi:#BLu]dX+.+Rll"gPZ3FF[c>V'=O#^[:#6LQ5[ZH:R34C'k63(
+-l,^G&uLdBuM!dutgJWKUF4;$O+@KhF1C:U7$k/OkcAmt6F".67uK=i[mJG^9/S6d7g?pY%"$o2-K`
+!B][9n`Ui'4ikD"CiZ5/.q?l7un`\+_r?Tdj[,)YST=)/qAX;UJ*bR^U3"`OQ4&4&>k2&-bu1=NIdb
+<RO>^]CqNX,VQ-s.CWHcXI03#D!\ed&^aLO^c+NAg\%uK9'@IKYe"Ep*16>=j,Se"FfbJaYJ\YSDR3
+$qfh71WR5@GT<GUOQ$i]$2`#J_f5e).\LP!3Pf\EiB()k+L>pHH3[0PDthpc5k26GZ:LXn[9r82#Y;
+0L&.hL+!hPEng_p9S*7(Wpk098l!.DhhP/WYoGI'68puNit)n,#M]G=bQSC8#!:$qLmq5Z8iK#qDjL
+"8"Ge3FH74R$@Y,e8LY,<&YY9_dbX#JiK>;kf:b.6W;8In5_4-Pg#X3pW.#:P:LBH1agY'F,<!<OCK
+ZH#;&:B-&<3eJK#A>T>&57^i/Y($2\+<Q$?m:9>/O!,_Jn$$Wpe3I6FpN->6I>J;_)&m*Knd)]6#]>
+Fo/)'!hn_QW7LSk!:jdq@.0kYQ,,fVcG[<=C'TYXE5JrT"6JmQO'YWiu^_uOT.<UJ?]#9-+`)qFEpk
+hIeL)t_65,%5VpkB!O3_7rMLTjAngH^CbQQ62b"e^O3.W'm_ZinJl#I,-OCeUq/3[DP)/br'P?tUb/
+Q5QV^"c-KIi-:["H-&oW"<]`;@!YCTS!;iSK:kOgj'#$khhPp3L0U@W"H,b>1<0E7`t3q0Btk8<Dug
+"S_^Q:Pi"\$5oWbVGJdKQ(3%TY))hoadK#fL?>^hK64V:4Z!XL?/9.*7RlpMMsRi>!Q6j1SuZcI6E6
+uqNRm)9mEMP=@79SkUGm&^oeXr?(JLfee_W-k\ne<Jt,M&@@!:j%O"'L!@:LC1^(93%f.%1PS)9o,o
+*3N>auKHmS:6q#3*I)\7q]1dSX:&-WiRg%$;it(4p9ZXESjKAo;obIrq:0<Cud,W%q6dDp6:(.4.Go
+MJ\*th\1aHZ*+<9-=7WR!R":2K)/]Zm%LcAHqY'^0,S@,[%Y!`$smM+!'D^l(tX-3Ko;#Il%4,e$Q#
+i_TY0:J5Y%<<`nkpJ6'Qc\aPTSHt2hlpN,uLXc@NaGA1T_pBP?#GU*P<!UeNq9X4U:k]Vn"UWPL/.L
+sk:5p'JoaR+4_`O>\c1N$3AJ#2]=+W5e#Il939_2-Vfhl4acWqh)r><qHkYcZPdE-LXg]Psk.T-A]8
+:9A3&53[tHNg*sdS2<Q%442S(Ddp(Vr3I;WR$Xm.+"e>dlB;,1-!P4K[&mG#MgMYCM4;Jg'Ct?;s:s
+E9/4mu0F+:$Kk02!H[ni+i)?0?e#8!+:`Hf-:mh<@,.j*Q,\`D!C4`L,dr:(tBJc6#):\%O2_2fR(j
+sgM^/D6(d-V@lV*Bc<C4^+2]_F8170V0pcr<DkdW'+,d*L3\Mq!S:e>28,Y_C):'SM&PeE@s*6r(\i
++r*[[-fBB+)KLVC,HF@^f)U[fHu4\QBi2i3-nRS74G?I'1Y'S]K<R-7TqDLhRoC\Aee#Ss,'_IbG_4
+iq!r4=!drM[P<.b%@*-/E?GTR"1Qj"TS;EE3Xcs2.k'8>P$-com"n>1m?&qGYE"^iJTbjj>!+$K[Y#
+.P`UfKB91G?BQW%jbj^c"IA_BcN);K?t\A&;5f=0j3ur#94e<+=n*iI0-?5!EaOKMntQ!,<:99-<O*
+?lF;JST9Qj*!u7pX`H2Af@OK<G*6j6N9oK,B*!HE[*,=;f9j/d4/4;?I;mgo`:f%>:8r''#`t^qmn?
+^aK1JUboKmT0h;Iud$FpG6KLN#-u=C-_ICOt6n"!f,qRoho-A2PR@K'?6gO:)0-gk6Mh\TiOV#c6*;
+K`tilcn!NL"=;!kc9<F)!Vg07rQ\QQ/CB]adA6S1n8JCF3/"'uJl$iIi>]7Z4+NJ!KA\>tkZf^f'`n
+)0!EaGr491cq,E[LBLU8G:TLp\9I"Pj=#6A:g8-q)F/d)0!JaIfHO^pJ&4p*+QTWgY5,IEaejk!d"c
+d[TnjPEst+&[N57*m32YX[@&'G0rQ=8K.eP-N6-@l9o9Jk-N+@!oel]g52CK[:>q5Td9p:PZG34$%]
+.<$i`qWeHNN!Uq@d,u!,kIF_EGKaWMaW$$k%)[KAm#=]?X9aP+]h?sLW\*`-\+>!XkHi_e7![%k8Zh
+8lc>sZ'WKg9MV=E;.&M;IeT#A?^3:`kIA-=M-&5I8X(/b\(J$Nk'-#J1J"%M+.ajG-u*#Dt4mj]U2M
+iR`Ipi"\H6/56.i(P39C>Q+haNPQ.3E/2dg";lG87L['?Sg@K8Jrk9=\l"2)&i_RjiFG^,1hR'='nR
+!:jLH=?Q5Th'6%k7;ZZ[?t]h!q(9e/d)ft=Fr/Y1IcH\-cEA@RdtRMB:qg>?R)!YBe>]r0A+;1r5R\
+,^`(kZR$=1ZLRC>6oq:GUnLs.0k#gk*1I-Y[h7_\7<uZA*"b1jh"FV:PPktLPWGGG!fe"VrUN'c;YK
+6TIgn,X5$f`LN"^T]uYr@-&6/1#AS]Npgu,Q8)_0Y('[V<,<#m'K.;kHAOo&j+<Zg/8r%#;#@]37ph
+2&59fYYu9$SU-S"/=;j&tL6VHA0XG\#WH@,?7a`Ae;=^+4tHFTLlJ"^[6%4$]_(WLWj9>]H2nAnhFf
+CL5@R,1'f_aF/e^:hKPX_r`'KNOYoM\^'&R[-]M!J:*!r6jL4U!jtg[ApEL#VWX]*:k27@0I2:U-&8
+-UiH!h1]i"onEOgqB!kX?m:`hCUfB`dVLTi\Sh+[,C\X[U_Pe.\bkZ\dJhOk]`*#?4"85Ojk*JBM6L
+IT'Z?<Z>(PL"s?:qWu2`D%3MG1[o^,)Bc\?o$B5A-]fsC9s$B0OiQWEtR_lLX!b0rN/"0PO2i:L>\o
+i&4*&$`rZSta,R'rf"RQ$_j&'F\C&@KAcG]S!)q`=C?u/P(f1FH370U3MC!`;:pTCpr)?_h5+^0Gf$
+^Ie)[N<K?uE'K0!3m,^?1Z9PE&ukp.S71^>$.l!rL:K[D(R%IYr;m5gYCAePcg2H3;aoQQGf/_oH\/
+MWM3`@OR.-cMM6!\7[ZMk<QDKRK,:8.=au2#.P3[:hkU0fX*>C]F+Xm-k`(Y![<GI"Ub+d/;E=f0A=
+Ol8u4<34e4A'I0-&g4q&5F-&)ZKX,*uBf#Xf50T:%;8Q/(`RWHI+QOO:?%RSbXEsgjq'LC-rm;L@Y(
+`I4C!!0>Q*W`3n"s=D05\kr/$n@o"0.`cKa8pnf5)&c7!<<O]+@uS6",3+F!,>G?i3Zl?CQT`^!]LD
+R2&(j]/hQjCJPAqS=GK>lMt3gQo"^1V&Fo8%lO+OlF`1?(IopiS=`p??Fg#"l^Kbp-?$3n:^8rph-X
+HEV@<N`%Ft[;154$mEmFR$k=-0co!"OXM<:c.e3iHBecijVU0Gr\.Q#RLk:_9K@&qN@YKRr(bJ,lls
+7aCHGCBXb`\2lr_ZuSR@VH@:.M_-n"0o!adK4l9[3$SUZ4FhAa!n_nRFe=d]9`aH#f@W3;[MQXX@KC
+-p!YHQ+n/s&[H38CQ!Uq.r:jZ28%\fQIJaP/EcleI\Gh"-qGSh(q^Or&![>frA%:E!<33i;*SU'+aH
+1.ANs.FZD'ES6,qCeUi5GWGfRkl0=qG4#8J#I[SWHsr:muDG^?9\(#!K/@1!,*SYi!K-#@P=_]!/]O
+)o.to?QNErB"cru=i-g8g!/@uq!#@mh=*Dq3nF%A2pRb-8BNY@LH36](hjAbBGZ4nZ&>IYJFV&;>_+
+TKD+lm77L3SE)fG<0p-j0XLb+)I=BN.&d+2'@JKT@IfJgn2`F+HcXq,?9]fObi\a&#<C\:E!&W7D)A
+@t!6DJd<n*kMULoX)EHO:4M4$5NI8hi(1=6d_@[00XMOF;h?G4H]UjS=CQeo+bhBKX%ZoOJmj5g)f3
+:nU@<M]BFg?;F9BSco;<_ro1t(%.qMP(!k#deVVVN-/?1ra#Qn=@lu<D=O10rLOS9_E+)<#Jpj>IQ3
+t``J)iaS24II:0P^t9H.tbMK;)$Flk[6YB"DblM[Pmh/W$)4cM)7p?&?6Z/ij-ifqh@J*O]U>dD*t1
+!C"3!4D)am</F(@[>HTmM4=D]0qZV_nA$T6RepBi_bXOeMXk*B'`oV9Iee&]k`THi?^06G/b;!kNo;
+FWIn#Sn@lIp1+ES0Hr9N_U[j?o'-:^kFs&.df:+TU@/`=O$Ll4@*Xp@Ln.N/Zme+EB!Qm:jlne&rBP
+<8f:PA'qF2pIsZsD`.JoY!XO7k(WB4Z/R5r(#Nt44=1jRIF7i;[u".Iqi8_E7QDG/27.^p,uVj*nBW
+kcc"?>uV(RMu:kbUc,Im1jO0`[)WX>5[=fVnWp9#phllcY:b@Dn+_U,ls26QGe3=`sM6N4d)Cb$"6Z
+#"4bgE%JNL>s?5k^J/P+;k0&LO^9g&->H:*X9CH+<Va0i-8FL&O=]j'S($W;VJShdh(A%P&$0_PR_/
+q>64l:fR4*WOTt-Ea?gU7TuVt:RiWfjmP5fE&b\A?L-af?Pn-J.(;$7bhNj`V)3@BY-=JBG50&ISA/
+$5MfR")U=Sd`saP>!m#H=ta*P:lY%0S3N>.1TOoc!E/<0]UCYV+I#=]V^\$Hg1Db&\!0YtS^ga.=J0
+&>iNOlaeT)-b-[C,K^lq9dk'JHm%&H\>gVVdH,DIam;T,/e3bag+!0Q@*7-$P-$r".J;D\@TZ.ReLh
+qVB]t)9Jag+$#pJsYI?ZXT`-ml'aLPq*B#)ucNM5jc7[XM&oV!>cq:L(X.KPWW%[_AUI&,aWCiro+_
+O5\\a,TO)g9PQY%)J$J?'_R72I2]e2-sj_k/Em!Z;sgKD%l"+rdg`ac,oU%P!VFVE2gn"*\.kVWU`+
+(Lu$/6\[iQ]XQs'CpQWKdbsM`uokn3Cm)silZgCa>Ej=eBI;9Kt)Wp:qWXZeW;$eHrC>S2bTg2lJ"0
+;*p3B&Ro]5_(^mB9J#D+1k^q_'8<X?030becGV`OFE\.hSCnSK>.`'r!Z7/eUOuauU*)IpbSMU+i;i
+M]jdhfTRT&#U5>Cpu3(Z4XZ*GjU.hKY]:[!2%4MsD^EVR*h)9;/3NKm\F_kTNUFp%0Y@o)UrQS(GCM
+j&2M,>(69+oai92_GK"'qg".gUJr;Tsa>P>924dJ6!/G%d5@sUre";Z3_=<>:PHV3*.5I_t;dWi5/J
+`p2pjZ(de;W`RMIF8G;<WE-H5mkI$jZjXq?XP-0AhY8B6P?L&b5;\sE';T8#XGf<GaJd<kp_k5WYgQ
+EeIF'H%OH>h%\dH;'7g$,#LMHA5qn^C0Z^rEfW_D"KNj!]dM\c;i92;:9ke'%#qs]s-UA+<.O.n4R\
+WihbWs/S!YM8beUTf7ao=?g*NKnER-qnl#9Lb[ToB?5:rffF-tBX:Nn;Q($;9P16f_E7EKE7mEC1V,
+Ab8O$3&(G#Rs9W\'*lm9-NsKO>Al,I(PoIM<?tk9O&@YfLrAK0leIH=<]!:EfdM`"E/mI-3Y/!1dY_
+`6O$q8WPh;0)O4\1Q_9a[1_2)c\pjSUl0Q@1M%S-Xtq[t$Vf.mBB#X^:l#U4eGK@b,e"T[Nal\T:9n
+H9#db>U.U<KIpBg*L+R;[#Ke085NK$=&P!/eZHb+k^^#>h$<=`,6Pfigr::nB3S>TO/)d1d8rFlPX1
+-KoH+^8OchJ)>&6:/P8<"LtLo2,DMF)Yoj@,Lq\u`Xu=^#6V-JU8smNWAW@[k9bt''8haqUN)5$3KF
+ek(<>!+pBrGT18KL$h!c?4C]Mmu%j!5l95Hdt>3$g'f#NZZuKi2G98j\#l6f_bfMLS4BM"D;;lr^46
+`\[o+oU1q_?]h&08F0VKV0(:c/QrQ)70$?roJ,K*6IA1/J@#O_!mML<-YQbM(7/rO1..>P(4ZAc,Jq
+M6!!!!-"do)nTU68j!$i?\=92'I&.X@Y('&q?49,@(fSiI4!!'^?%D[_RgkgOa!@RpJ@Lf%>Mj8+]C
+#-3?+AbQ.a>#sl<teWW;Uj3i19,n"*[-g"eV^Zl)I6VsJH/MI)7qiM*G$JgT!Xa)fYg/`6`pS$7ti-
+N*0OlV.DpZL"d#N@`/n+1XDiE<TL'I6R'm(TA2T<D$pDJK<XU'uFb_:.5%a<S`1^`p%</$Z=G%tN@)
++apTS&+G]qhuG['5H)iYBE4^'m=>.0tldN!ceo%p5>u$P;"p!\dgo@f$gM@:gj+/X_ojNup9,9W[VL
+]n.ge561cR/jk0X#9^6X$(sNs%#>0"U&5(GJS5b54k^#=ZrD[>"rO\.8flp]K8MoZ&BAa-!.jl2bRF
+b'!T5@HdBHjX^gJI1:dZ;>n-k.N)C8mD<X1o)F9S<s-:=lQ,BG-eAjVl)[?19SE@cKlOL@1Qd[D#/i
+/%M>pdW:>^^%Z4EescMZW65I"(NH`"47ZC_>u_'B#JJ:V!&:)((Me"XG::/Aif5`Z=Li,B90='O[N;
+^*FlH)LbXc!83f6R41BEf&O7n!&G$o_R8/Dh=cPq<Pm>2'*p+*Xo>@e!&#%K8$%PVU6bo53!VA:'0k
+PAlkZ%mtJ4TcL[NYnE;$u:S/d8M!'EYda%<cM@E2IQ@g#I+sjYV;fU.BM/)^$3<:`GGQVEot;+uI/(
+5)_`l92gr4*['qu%hKjRLTkF>_718&i-5\X"DJpnJ-BY+67r&%8IXP'WE,_e)uuoK&Hh)qKE)+6>J3
+eFRacbCo;k-q]'EUA!Y4OHnd0n=7:&o6(2Pe133W8A^br2!"I;#t,OtF<@V?pd[/kp(RGA%_-dY80b
+X'4P2B_muFG=a7kSW7P$6pZr"O;H)4^bT;iRf4l/8Xka\2t'F&f#I3`"@[%@2D303L0+g#]0R/"i5R
+>L<q=s"o*0IiD^i-+.+UtPk#4@E"iVoTFd4@']qUdR<(p>R>Qgo%UF<VNrU-XLJT2BSIB[`?B<N\>&
+c=cT$Y8@,-IL@D&V^mT'M=6]EE$PNl2`1"?Jem"_$9i!LsoRi!SD&"(BOe!SS.D+A%A;m`f3Zig(Y1
+oU8PUM+d,9i\nPI'!.-2S;P\\62&*'L;;f'(;PS2-%I;`6lZ^u(ne+6%n7XZ9(_2%_1J%`5k#9"5T`
+8P5(\M-i1UKjN_7+<%&i[j0@266<\,D-#HL*>_(Z$Z]_T@W%PD!#!7D-<iqj7nZiK`B&Cq@#[L7UZ$
+LV:h:qUhpe<c231!Z#kTU6b8ncA&[-_hmLNf5&tOO)4>s6cOh;%`jO0GOWZlOL<',!Z-9-3+#K%Vr?
+]0eF%>ndloZ!!!9:$&n)@KXH=1"=FO*X^Ji;.MG(](*V$<!0!%WDZtk^nI!8bbP_WR+p^\^OjIuDJ9
+ha"1)>S^*WSIk0/R*U*sU%P*l-22iA)&J4<!.0&u!>P%FcN:e-Ie#%)RZ=-ZC3u_\qCH)$(um+YX0T
+.glTF*FQ/d0Y7kB^aoM8#Qh#kON]6%`;(Qc&HQhV!6,d^hYT"Fq4M[ZneE<D\-202MpK][`Ea#`b7I
+#\(oLWBTeHt8E[,"MTRlMBK45alqAk.A-*I$)U$*-kC`bE+@e*GEZ>M(!WY2"G%Z(P[Ea^=<kpKtB,
+f>K\_'HI_EY"k7.1p80YX]Jg2BAI?!+:=7aH6Wu[Nf3oC2*u$l24G:#`,4.)R>G7L-QgNLa-qW/V99
+1+XiM1(c\5[%8$[MP0bX$#S)C^/g2qqU#IMAhMAI48!<0jiV+`u:`eR@%[.f4-QFW[Hj_*`Ts?]pEW
+@X%kQiJ[+Mt2j5[cK#X:Kh,?LP09i4oL]Xqi/I1r,%\!IP1rJd9)Z&!+miL<Ut,*477QQfksrcL<(D
+DOHSaX%8OAU!OZuT/l5uDSb9(o7f0P/1X#"`"Fp*'0IfH3"htd(3@DDe%n.4IM/>('EfHm1Xm1]d6'
+5.4Y&lEPBp4BIYRHGk4>[!Z\g3jo.Uf=%P`G`o9_G=i!V@S`3T;\Et(?dCHDSU%Y.tMP;t_Rln<GG6
+NotE$8FbE*dcB6.D]<l_"7uLoET0n(_f8)NWTY7(`XZMi0/LSoJS?:2+GMG6_X4K1\X>9'gtlc%\X(
+Fi8TfSrC(gX8OO'_L;%5,iWRSc7[,Dn,3_T#//"W>jlJrJlR9-IW-[c*3"O\6B,O5bp2C&^$fU;gPE
+`eGb>&+o673lc+H9&*KgrGL/i9^^+aspIOtM;p$\5?PA3Lcl1J?dt37N:M1k@.$C1BN[lekH61u+0>
+Z5OCPOQRB""r<uN4r/]Y*gJo=+nDntP:XeG8Z2XKWY8!HoIi&r/.4TLOM\?`d1"Q?6fCQ>V^k8[),[
+9s9^*U\_;]D8SOk/[+!@sEJqb+q`brU6$%])]d4uCY@Lo9^*t-lq@J1Q]C>]<&:1P=Y!0'He]h^Ln/
+_+A^iA(Rg]F]Vi$STR7+KESGmh`<E4lGUS+MJ,3+:%Mp%`"$g_X8%%N;Sl1#f)F#TkFcUN&aoK#b^E
+*a'8upMJPQW"h"Uq9Y"U:CKL-m==397A.)NdEZZFj-:-"CeXp(nZ!'HaBgM(liZ2W"F^)8gA`e\OAO
+I4EdeHEG.aZ"F<R`W9fee5&(1Ck]5Zm+JL)(o]"V]Au5ZeYloE8S&(>qF`;pl%=C<9<-&tl`;+Qa;%
+<"Aun2?;/1i@5:%DC`PF#L6'QY!<-Jq@>hZ%"W'p5["\pkUODt$D9]r!=/hDk8qG8&l5rJ2FC0(7Vd
+0>2V(VJ@;ZtrOHSR00Hq#ZiGoDO8-f:L*J&5Z61$?4.:pfV,i`A_o,B:PU^s0T,f5jR&r%fTU^eO6$
+%_=_Tk"6*X:pqF,=1]G"bA9l0kVV0'/G>bA9]#uWA:k^ZN@4n<:9\&.1?s9B\&4TU@Jc%!Z*c;(1?J
+6iI24lF;?!DIUJ<E5u85&4tFHg$BcDd@5/uLZp>i]GMoP./@5r]")oB=.^C<5!#,t\br8>!#a9?H!.
+#.UW!,Gf#f(Tu&(>jG_bkSGEX,67j`>I#Ct3BKp&Oq)JCFs8fH!4T#d$YZMZOD3n/d,H$K6"8Uu!61
+Y8JK;Wo8gB_.XI8`J#G1'-OXc5l.\EU^AiJ$Dp'32\Z=dQlVi_(1E((_V9qk:`Z45&>=+PJH0DOKF5
+/.!<C)FT^WX?X<,11$L9!a7TQ4XT_LeK>%q&u=1<O?GV3&$2aK<&Tk4Y)[MC!\+i.Oh+N+epmM944#
+(isXN]-bp&d;]BCEgJ&^ig21qEn\=$3V"d6"Ua;4r")b"^u!Y+FT@QBF$+R(@dmt/l+98>B/(YK4_H
+16Yh>4^e>pC$"7if+PJ$5e-'L*%4%?qlt!&[T(OhLqlB<`_i,U34'G"+:<hMs^k?/cO'5YgXr*lK@:
+TYaGAVo,$0,LLeoW(nJ!ocr]dAAEVjOd9KF5euN`;j8_UW?;)@g2)%@@t<JE@LfI/,^_ZkLq*i1WsJ
+-3Y0J'FlAp6$&31e.&'`4nPNd^j7K(HkZTp"i10SJ;=5WIL:Uib@#]bG8:bkIs^-QHrJjQeJ./D[n#
++`AGKspq/;TD3YOc[&:i;tmlK&\L^sND#fDXi!2p5p?;`_,$VdcKH.!d[U7NN&$"<NETOJsmr1H'U#
+pE08@$23)63nrF&qOO5)9HMK^cS2nN?JK=0PY7rgH5+ZiB\rNRGXUDf6a7U'emWC+J('n<Y,:Z#_5k
+_JR`Y,I3LOd(1@0,@:g/Q?3UD3T[s;L^k1\:Q6K'\.`!qE+FR`#ILAD7#XGBrRO]Rm*tEmG#Z%F9Kr
+'hC4bDp@K/XmL7Y@Rj*L>gP4eX>h@NVMYKV1;2*[%%&7[7-8h3sRQ*J)'e@'h7aSZ2hZ&gc<H5bpVu
+(`o$iRmX`UKEN?I`Z=!1-GdN2+Bi2^*]h,n"\#;()W3._X$\\p^0Bd7S*RfCn%Th5^EF-q^]XeW]>%
+SQ^g%,[LFm3C'Ir3..d"^a>SE?k85nN]_42jY1Y9K+)8TQ1<Eq+d)e,Q6H%T=9BH(h=3'I_CN!gc.$
+K9bU9KiiRIP^V,*-bdIJ:bX?CcXh]_SE;o@5&'3\JNthRK/bE5u8UF\Ns*F$UBXX`Tb!D*K&hC?u2K
+#J:bKE\0GFF_r.g+-6*8UTq.S)i?H$3Za_UF[Kq90c!8lFSD2<Dhp*5%c6.Q;!)_$Hn'<!FcTm3mI*
+?38%PIi=JpdM-fjgm!6tfgr.N3.al,PgCegjd=19-M5SK&MV27r-h3[-f;@k+_J8%F7Re#Gs<4YiFr
+6b-J^).g`.+eY[<PIpFVUii"-]Yd29`[goQ9&.i$SU8uEJ(PcofNj9bSVu-nJ(WS@fj0rtJ=4YF#_i
+-G<AWC`&A?H3bL%;"K;^^oVO*ViZ<&4"b8]3[8RO)83Nb^29(+Rk#^+h`/'o4&/j6AF?.sZ([S!+%.
+Fg62`);_p[CsU5%Np1kPkWEcqLeb'H9J+]6pKOlL#E5j]l6QtPF(8WRG]:'&thbt5Y)%4@P$?eiog'
+p7b?K\)D0efVERKQ?7.5s-f864JmL2^`L7Hk35Ri/i;R86^.N6K:+a:;$:-oj29nS*,uC>U(Z=U\7U
+>+^H/_28jnWcU5+m8ZBFgan4@(G&^qZ_2fB7UaFImkrrdZRd-+.s2/tND%6%07OZn.UaU4/ZNeAXX6
+C$\`ujjT3d^8p]O:Y`1c%Nn:n*]=/Nltmf]n)kGPL<])%h@(56/jA>Jfh+OSa*uYj(1D8])e#Shf&j
+g?oNt,\T1eh6:\>f.oj:enT3Ltsc//Y&Eg#FZj;8sbAfbG1+!K2T5Ag.YOJH=IVWtG\PGR-mC$,K%/
+YPECSd/\5YFZrajBi[BIi<jo(bSLP"MdRO:V$]pZK"4r"Me/ji6i$\5S!kLJ9b&7T`t=&WY/>7*l/*
+f!!WSCWY0fj2cn33U&ZhV+r4r\J=)!U5V,\t@3KK"ZUkZs"i:+*0L,YrNscW*QsNIBaQ/Le1nIPk/Z
+0mF1>@NFqjC.?:)*TjE;FmhVj#g+rddA/;!=-I2'#kW<mdL;QBJ+T1oXI:D`.?R7\Cog.Z\%i"L:3R
+51;rGPL-glICr?E'$1@%m4=S,<WcR2Ed#!P'9BWFOHNih].01Q2BNNf`F@tD_B!)0TJa=C::%fh9Um
+YrPD!@!(jm/B6qcN-We+A%XUt#kg68ouj4A,@P;]FR$+7^5aE`V[s+/#EjIi"l8[M[-8Vk_"JPlM^4
+<^R)C'D`<BKbPh&-ejIbk9(\XCB@0ctu%9'-'NMKD;SoaA=.mMf<Y6@T=a@M+]X$3)DUF;jc`/!Wkb
+mQfCnZ"HBU9BGV(p1a\H`BkgtQWbJbZI3&UhNt=]/)-T,?;)3N"KL._cTpqs[S>\?'ZQNDO9&c^pLB
+U!;=TsQu"L4S3\<9Z/U8[Ru*[)eP[>+rQA9A+\!b?6Ok!A"ST4WFjh+P'FBZET$P:1jbc14UnK1"l!
+*rlAIB/GVpR#ESm/R6#h*[7P1*t$GAL_34B_<s8.Jb5imT-T)l4><nucO*Q,P-QsT[$h=AK0_1D24*
+?d6sg2:+`\2$beYtI'a5i/4U,HtWe_F$a@/f*,K%MR!iU[!1nk/m1JNj?R7IZ!"o+fDP!NP$5mCl%J
+PK.o"[n05ii96LNb+Vt+@_U.-OW8?K*r.+QSm*2>rPd8F.M;]-<o;mQ0)Q[iZOCU*VZ"p%(3@/ZE:-
+]\:g7c6#"n(;$VoOEK`^&EdJ5TRUgCAX<Hpg%#LD?*gHt,H:1W@(.Q281o/5L,p_Dr09<LhJiJG4Ge
+OV"Za4q?(k?it*s;R(O[)`:.H1pG9Mqf0Zp>67=j]'2T9:OCID;dAc6fMjbiS>F#nm=o!/QR6;*[E2
+":Q,=#U@\uh\/:E+A@TAlm,pD2UO6gUkB"eJuh=S/mem9@5.=!HJZ9;U*ZSF@I<0EEp[VN"&b@N(F!
+dCo/tRc;$__tgO4-k&bK:dU.Ia9$\gh+IRZrD!?8%-OJO*.6^cjQ/-<nK+.^;[K-:ST"puHL;T/c`K
+I&qT:k[$+UZc5k1EsrHXL_S-MSUE/:_05$%R,LIl<?@2AfrJ[OoQY%@KZdhdm&)oaKdIe#GCu"JjR$
+#H]5_.4!,YTq@5EF',47K'Ed,OM3,"j"XEUG8N^I;&L8,ZM7FA[ANpJ$9I!rN>\$Q'a[.d_V-9SB%V
+#?"M?aVEJq+^OYDh`Q_n7NedLm39PS,3.kTC'(CP@<N/V_e\/HPFr(EeEK6Esu7+i$&L#9[B/:f8:O
+`(G_[Z*$FO@W.<+?oirl0G/P#E*!F4>\-cQ\iA@)a1tpj6*rD(Lt_!FJ9l>?i)'WBik!r[ZX;i`J<_
+i5#(c8'0;GHZM_W(.6c`IR!<M/C+g))E+ScI?BRPh9<,@DQaTW;^G(eO*oOTbgH>(joVH9p=_s92gi
+&Dqf<b,qZJL#WEM=uY.F;2Mh5Qh'P'S,m.0gQ?^"2I#/%03s@^_eX@_+nMB!$irt!$D?9?nsQh"9X0
+)q]6m@#QbS6'`d_L!2-E@M9l;.-U:lX@b:ndJ1q_Ubj>Nu(/i!_HPpJePZ#Xt?\Zoo64CYm"<a?sKc
+r]&J`nQlK#B/EL?dD$M;KRkO:[$8n/[+k"`DAB'+k635sc8:#ATioM3*)lK+M.?e<Y_!+@6Ga>D<G@
+5[Vmr9GQ[%s!:E:PIYAVjs-uu?"->f3`1hP*=YPF6=;qdn?V?!4FLL4r7=IRCEU`lq(3l=>8k?O5(e
+rI+$fn7(Z>)Y8(dMBWZZ)/VP$)hK+fS@#-pjIphQ]u@sZZ&PU@$J$%_T9$g)m-P%es3=jR-K!'mg'd
+)J8eE!I@,"ndq]3WTBd6tjIL!LBG)!5fqu"/-PkMtW59_^Jmm@H)7W6(B!KYTa)m\5'hjg(_>1pBl`
+OHOJ3l!XFND"`6^@<!Z%FmU<sBe>DEb4/b^14[Y2WC84c:\5"MemrY>g4UEXM\jVd)&m(3DUDX'tj:
+ee.@6pcS+n?hX_Dt+pp`U+Zcm-C@:`^c,q2]L%(<9PE%?KjbM,Dii)%D#2"tm[5[Sh'4j5UK^9J;;X
+9GbU(VQl*=o)\op0893WBHuk7=b,!'N$-%?epX9fb<.u/J/o#-cshTg+;Nfe2?X$iUbSS2%Y,r;!I!
+O!Je=)-K%7UA!3Su%na7"W9-h&l<D2-6Zq83O-YsZE0h,BM9!696NH^\e7u'VQ8(CR]H)V8YW9?>.F
+mED319Mj4E#fSLq%?]W3(\)]&jf:h*MQC`%refe68XlJ+kS&oQA(!6Z%^&2U/md2<YrUYPmG3.e.R*
+HSf^(Y`<lhb1\!:(_N9EX?qDl$^c3A>-m/^<&24+c!&6eOKF$K^U]S@<+2A<>#:sP2!$Hq?Jd+ihR5
+bB]OQ6NGpj*DNjXXnIY/p1Z@mYH^E,Ih\#kKJkW0_9[?,;Ob1MJfcofmTf&oi0f_lc[5HV<h@pgQ))
+JO4rf:0=/\@&iU@Z-T)3@[pIS#=*R?!$JZ[Sfe'S5bS3d!!&gQO(:X#*O5]NER#=W[/^1."X'PqD&f
+-N_;G=#GuH4uWVa50ZmOqjkFFUi0:BqZC#*nUnFRIGS[XdHX$k<V,k::U>(JNVHg?.R5,^[>r2ei&O
+<Xc.6VsW!,3ljs#]9QbWB&"1m2`(iFm[T&M4[&sOgh%Y("&QmAaHJVkX"`(Hk,6-<P?q+pi\:s?[BF
+$6C&`$KP#/>4>2bfSS,=t0%K'/cK?IBV_h\nko2^VSO8Z$G=V)j9ZP4r'E_;fNe!ju49kWNIRDdO,9
+Fu%!g=.g#I[/V*UNapZg=8fb"qO_(-IqLo"JT!G2d<#4Th2Fs#ceU>-ZL=/bBQ>Le!5Onf;Y@YBCue
+nKn2GVUUnRYZdC`rj*.)I':G.6=jAmAR1\BplqF9+QIjD,NcQ6k<>#R^5M5='@J\Yj#cKUK)<<>PGl
+0Qp-=/G^FS?)!%S_0&A@E9^sIMEF1"5`8Hf+O"c,"5kVnLc1PP`<MTce`bSCjOha%Q>6".`b,RQcbF
+?SC?^cU\o$.4I:4[J<B,Feip_:V&4,Jlho_GhhuA1#08-c1Nb_NZLd3'9@'l87!03mfqo/+l0_#f,c
+J]/`N;a=[M_+ou@R"0`"95Y_BZciFE.6RX#W8<F%j(BO)jLkn)*i"H4.9S$#l)fSV@i#_tT'SB4,!_
+SIsBF"W:O28I,_9;hl@"#Y?+I?927)5<5/('\NUqJHV4j\Nb^o9ANhF0h3`DfjVA6-Zk=2fhlJS\H-
+UftaE>E]^-5;>`_W#ln`YJA@8^LT%16k>;3?\75)L!UqD:gF+dD%M;k"%XNOE/4VkoE<Sg#obOR=Ta
+ANKd!ZH"IKr-!Ngt,^r&_+&"0joMk1_!*Q5;b7+lZMe4ls9@k,[fMssFAkVr^DH9Ut"4:#)B+>(YkK
+?-H6aAdl7A;80ILWDFdJn0[.Ul*7#M\NJ43l/p$b+V/o@6\"+4"OkO&6,0->QTF1L!&X8prj8q8HA%
+-Nt<uV5m2gK9dpqLJquNZ)#VLlC`HhW!LW@$,^,1]rX![=`4UA^4F4s$V\_Hl$h-31(gM`pm_*]Ha;
+gr]Bg^&$i(2>8)PAb!]A?*^0?FluaWTN1aB=23mRe%HK[>X2p`]e`<l%1gS1l#rOHGgd/!d\P7X1(3
+:s9F==b>_'b4uF`S>=2YV933V8q\=^HT90,I0[h_KBPo0k[tR1JJRmsM*.t9&e`((&VU;:(^+6i45\
+4SSP*)C,"O;<l+mOj5lkXe&'0l&E&iT6:'AWe#V!b/W%J*a8q\?iKFeCipeVLB(!](#":u^lg*[&k/
+OlPaOK?I:o=)c)aGJ-__?`g;/5Hi<W<_(!K)c#U!!jWmW(Pk4#oqAhP$CH*/IiU>/6n7\CYqj5SBZl
+J"Mc5`1\l`t,=\=e#U!IUq-sN'!Xc_M!k;29+C>Q37u2spK!R/X4TZQ&8enj<K;l'X+<s:-qRk&?8l
+Y9*!.@WW*j^Mqa3^4Z5[">a=J5l"9aqe4V%b4Te"J#AN5Y]kle,)2RnsP9;G`]W<6*Bsn54QSW`9p%
+3.-D.mNa2&dE8Ui<?BOUYf5:qK(pn5$a<MZn^9L>dS2%87&3TE*`6WndYn0mFRogWWBE;gK#h*sMb;
+FZ+&_TmKTN8;e+pfOqks36:i/!e4P)Tp8CLj&:R*k9>r^;t+AW(2be5L<cq+=EXA&ji<!\]jaTaFLi
+D`-n"Q1DTm7(&jg!`T7</jID/P8o`91PgP9SmsS4S/if*s)^I#ANtZKcSLA;2IG6cFI',4Wl-B2?Ea
+,<I;S_MfI:<>"i4+*4^-G^g[AD+p+ujOQ\Wi\6Xm:C]ZjG!r.0K^f^^]+p/C(#Co%j!,Dgi5$(R$LV
+Rk1GTqo6Hj%u?b&(EXMn;bJ)2Fkl#7,V[>8,Nr2GGBX#Z-?Yn/'!mAM>Nn%/g#USM41)$%n$?.s5RP
+ogcj3CU2;h\2;4V_mR&B>F.$g"Mf,7J1:[MHj#FY#DcOseXM8;Ee[;-LVPbM-uf:oEefHaL*.]G^hS
+U[E<8"IKEs::fI-pUG_O\!dthK9D"CTE.u222JI.+aI3m,^[Y4]RM!-gP!*U<!=kLMAbC-b4br&KnI
+t[k1JOP`$FcY(;0tT\XK=&T;0IN1:QHWp,f%G,!c#8.56J8;4$-f4M.%COX70+]YJLE;Z:b;`&BSXr
+W![Z0J^efS6GC`:/LO_&Z0O@c(3/>:-KnY0-X4.B1/;@_"gFY%:^gBjDD:kclMT*)ZTHZ/p@b\JD"T
+TXt*POXiC:=A2/tc<uNFN-fG$IH&gesl53KJmHHioYT!i=!F`M3X6b61Wr(H>V"E'B,o:k<RPKai0k
+0Q@+fqFm(F;.sHkjA/^n6A3lba:2V/(#IdE[fHbgK%8i10j'+U$sY*j<d!M(Flth$kVF7D#p;inXUl
+![3.m.bKoQ]S-q`G#q1QgQgLL,5M)GI'=Q*+M(/R>+$!@`f(#I2P?K#s3n9"cnRtP@&#,k^2'q\Y0,
+@<E4"i+R"\3C'L@>2LE"(4<J&0G7=CP4*Y"=S[%%<.Xho@:W3h46XTSR9qW@Cgk-?mph`a]AVD24F#
+""NVWlAS$P9X@A_BhF]QO-4;d#$o8Y.#oG`(W$)7F9S/'N!m'Pii#RFH7ter+K!7#!pg!pI(]sJ#"0
+`OBp`]`l2$+=BWUP^rcjJj(6^ucCgc^t^drcH\Hit%.K1JUrkWFG>/DU;Bf6B)QATn1E1C$HqK*GP7
+R!!!X.p();=*QBR.!t'[,hFq-USUTe\1F0ZoEX#oMMqYdr>n6>ed,0)N;+f_O?j0a2M3,EJuI#%%+o
+(Dk2<1["n5k&N!;BeG_&=@`Z:7-ej15\p][$=!GFZLe@6K;bXnK2JtO&,\\!DhbQN2m!mi-UJ2J9j?
+\6WN)TY&oQ,I6Lc.0XOirr'\GV[=TI8<+UKma/\TNY7KpsqUC5"1MbA1n(A'a#j6Js@=f#^CnaI7Xo
+tBq<$RLfhj)Jq7o&!g#ec[$m<%nY1$/Lkn,fT`5;-6:4%3'nL4ji*:gM60^WRdVZtf#b:-"92?li6.
+f7i.Z&qc2r3:TBpDY*Sj$P\8>h't"9<h)(j1e1I&(LQ#@>1N#i(2;E0DW_#G?$pW,Uq._sBp6ls%6k
+3^jsA^2,d^Cf\Oh0#S'nbcda1NR#Y(50"<85VhbW%`tqinZWG;=Fp!JS9X1(5XC$2=I]-,U#+C^d"o
+s5[fJHb7U4thS>0cps6D*DCH^;j<g6:rW_0Zq?mUVH/S;]0]PG6oSe,F_a=Mq)F9I[M!oj68TJ-GO,
+6B%eL:FntnW8M+'-PYEKm>^A@$u`uq<r!FLCb:En0!Db^Oc_>K'&\^OB)Bl7Y1nKL;s!%pA'<]*g0"
+n!p6&/YWG6L,)7"YK1I8OnN@tkTFH(o1=gpX_W_TV:'/L!.Gdf$r,RCf*J1`PL%W=hLe.VHZ4>5NjH
+pZe3(s=V(kSt7MSNSNQiq&>O)#dWmRVbD>r[Oj2cIL]K]K0=[*S02ZYlj!CT_nIcFaD7@K@<V#"T>g
+fOARIZ8'N(Oq9#S.)I!lFpA'0#M<dC_'b!Q/I@M^N$(rfTQ(!0VX)'PKp[7B-NXP*<WQlE#KT(2+D_
+'u.J+1ZR.!S#G]s;uGVk=_!]J.*(h+>,Fm8'#l4m9&W<rfc948kWQED'\O&Y'h&ReL2)7NZqa?4TWY
+#]/>?J\b(?RF093sIP6#Dar35UZUMrTfJ^;eDIJ#+H&7s+f6;ZB=8Y&O$Vj0HM-+8PqX%.>NZY(,:%
+HPW*+uhej9VMMrZP!aoJh0dQBHZ'ZpXL<"7Rpad]#/N*!?YFn)tj^822$A%CuLDY@?D#J"Qi,p"5l6
+O?&p>4ZNQUcM1DGOV:C@pZ(G(^u)"Kn>.m[3]SGKiVDM5P'38_OKBo(L-_"=`:Ai%&l(H3Q$L$BT[]
+B/fQMZ3"ELQsd>rHEm\[-?kio#7!u(0/e+(:C"s0VqO`EJkZG!]9;n#0!9[aaBo%/$@$psnkWS:Sn[
+EqG>CJM)MZ4gT8q6_A5+^hDT=B-J=63U[=X3#L%%b=(jZ8I%L%Y_!SDT!=<WCF/U$l7#I$%;=C26S9
+aAiEKr;]kB:JWlF9;Lt"fDBiJ5uY85)%*Gq?\;HW%eJF9lR#OL!r>C;br,:63RDsKqL8T^e=jt4uGU
+ZqNC,iVl[L"j3IBFM8tKuW%cVd=,T!teg'[%ViUE+OMJqBMs-RaM[,/B14q![mjLAP.Jh@dkQRVOcU
+^6efK'*_22RuLrl=C2Dsdk_B+*pHK?u9*^ep*4>64Lc!rqh@0d2#?n8lZ6"#&bjW.5aZWQ3cH,\90O
++OGmRmMugo6t0!P)%Aj;N(.;S\E%fr+-8tA#.-dQ9dc/tAQ$'L[Tm$38.0;OS5&_9:VN`*\`EI45G1
+hd;l#RcLI\.<B<Qn2MJEfOSJ2XuYstW&H*>GTlK*1U5)\$o<]M,%*:#^hCiUr*g>*Bf(_@J[V:Ok=+
+l0>']AujACVWGNEa0(j%>VkkV@tDSg2Ta+A8!f)Q<,P^4^"LNU9\@#H6Y0h24EAL9cUBOohgW!T$rK
+l>ApnPP0[dMM7*p6NTT(JC=UM3FsZt)JL='0n1,P=#>^8=bj"XKITrpH4]/fh\e;fAiJG,Y+<_:`GG
+D9][/-Cq^t5$^Eij[-cM-`#r-iOQs(o0!Y82\.k*6b!litBA!=8c*YjR**kqU<'\I#1od7"C0$/)+"
+'.pgf"u,LV5eo7TgZ$jD:XiAZ`J`dP&Z$$8g.[0<P.F<lEO9,W6-/C8M7Tq80agNK_5'F)/t*i+O/R
+/fL8thYG.#7dR_'3NloXGIbED5)^IM2.=HY4'aKA[0"2NV5N.euu,*W9,)Es''0^r5.6&I?Z#U2)@=
+q@stQs*7h3@#`'0H6BG#U0"/8I0i7E_0$ePis8UAbbR\OH;TCkb]tj)^%IF/12W@cJbQuN3MRiI$(3
+C*.*Si6dX91lK#!NV/jI\/O_(=cuHfj7%l9e%HLl&,Z>o"3sXl'WXt,B&.g%L+n3Q[#Q\?&4U$NCTN
+I0sq'n:WAH;?/MWBjV3t8Q9lkYb[&5H%8!184/LSG_r/I5nKV/;"gjOJN^K?uJO=c??J#LmXf92rLq
+7O[S&AY@3m<Wkag>1WI`>@$;]2171$p'Mj'N/u*I.]W2;AA6`B/7bmk,2<MWQ=V1.5Sr#!EYC]K^f3
+]/U1#_gLr.5b23q`K>#6"Y$jV$@+XgKk9]XPa:`%!!``ri^)/(.S)QX-+#Zf.R>j(o8*6(Q@KS,2gf
+XC:k<G)TC?Qpe@La*O@G[k2T29+^@jIBC:PJn'4,F2ooL1e]5H*0T*V58uq0p<c48jJ-MR:mZRA<;J
+'&jb21,``&3G!:tg+MjW`JO2%E$&"C8234OO0K4iBR5,Lo2n[KS'Ek%M=ne,#/klOtE\SW1Oo?Z?]%
+biHV,_0"1l37t8<PJ[=V%TtEPG[7aB0FF+?YTNaU$WAUu?>dSVD+i+Wj7^*<Hd9\;0u/85N:tYRr9J
+kR'MoaLQcf@@=[')WqE7W<]-ueqsKI'a#@f#f;*MK<]$qJn!CE$dCZ/EHHbcRdh/&rN_8,^+@4$Z\.
+b#8M1T%#6dB!'1h5*__?l``/lG_!b<>S8(RA>gY*i'h=$nf0,705i>uE<n/&GqqhYFBMuq9!(hC'CK
+@gtM.I^jVO:W5HW7;B0A3g>AfKB<"/.\HP-4dAa&4;7q&u2*EK+RktK%Tr;TijX6;=Z6SYa>n.*XX4
+W/@-J8.h_oVFT_A4$l`TI%3Yif!qdQ%U0'(5Z?TWXEIQ>)R($_fclrN&?4_ejZj-jf4[NR2#(^0'>[
+^'m$UbFU!AHtHd"UdS!u/[_RhL\`+n&,\K_S'lj%3Xg'S2oT#h?8<N+?eZ&VEt$6gWi]kIfD%K"2cS
+Rk5^+-o$[B:m;2uZkEH3<#69[4@(s>%RnUA3GJON_`2G(5i>TL+G;E/X"ok'nk>R_@$QG&,t<\CB!C
+oU1`NgMR`,VKdP?;1#FK'?A2nsmn>%bULsCDZWc^[ZK/nVcS-Uh2R`7qOM3\!NAOJQ$&!7tIL.Eg<U
+JrHC5kG@1l#Ikf!*t:M_Ehih-Q4.).gJ?'*(E3e%Y50?8P11bBUZK+V?.3(`-/Rg6>)/IH0ir\*u-4
+Z5btgKSkXe0-:=U\.RRH#O$N!S89A4:TmSMO1;RHLl=3!m"N&Iijqc!Fq@/#XUlN:^-pdf1T7t4ocj
+Bmqa4Tu)CqQaoE7nt<1+"#o`$eW3cWU_RMlgRm\g%58-#MsgRD`\d;B#=,leTT'<VU^4QlmVA6fel1
+4PNU]+t+nm4qF=_i5Q&GASN(Z%q*1+L7%@@8(c`&_9b)n$DV<$362r0pb.^`d8i_%f*K3?3X'NS6/@
+f<[cj`uWV^mME'n\G:"Hr)/!Nfs9ujHTlp<2\?5Td=(p(*mSqdl`1..'.]B0=@&FnI67I[umKA,UOO
+dI^(ps1+Y6"1@eIRA+"Yp#knL>u__1^0PW`F@1t5+Djq-ZW/$pa64"2m6MCFa1a`kWK:^VGFF`o/l'
+f`DbNq!F[#nVs.fe5:hk`njAGZGr!J%iFd.LDHA4%P[!<#qC5BD(!DG)N!OsUTC`>=crprHBO)(@oL
+=<;5R\fLSK4KtL6*uhN=oP;dA>1'"\`(&2H*l:S2-*7b'DGt+ft0$#$>"a7D?__67],0L9]<5cWY*i
+D6<JU/(Y^.?>JAEXu)jDdb82?)s_P"[,E/@Y0f=h0_?';=L!%#pEYl_od:%"A7:15B:?LuPR5'u_>9
+?ngq?HN'kqg@TaW7Sc/$#+L@O,)c['M8mCi86q;5EFIL3g2&G?<<ZC$hals:*,[*i".,^f`I@&sqA@
+%[mY%$1kdiK?RT+UZ%3E0:e^ZUDu5,Ak<,(!u=;9ig/fRYPpIXi[P]Sl#kWX$.I>qn`*Ep(NqrN9h2
+!_0O?m,!75!/E4:`"djlDic$.H]7<@=Y>HMMd+=0sU0)`ITaa+\>_5o[e9?!^\+]_JKCWKMHE`YYnG
+XQbqKPJUaIFI6`)(RH1#%;\MD75m#kHC9bO`1t+krnqF'[JG]Kpr.Hj7^[;H\j(:Q\<gX.pENH:A#3
+-k`4=,6X)RJAdO5#f-3^#uIQ'!\eC&Tl;-,kE%7sML?$;r%15IEXSPu4nYoiVh?#3"Mmo4'7g-DM]Z
+%46BIiPnp!b0OH%0aaKu;S+<Ug'Hked--7a0(+G>i)aa;k"ao&>]p[8-Q]FarV_.W=@T+0'CQgl8+0
+:qYd*3XYno&/=9*Up?s%`rZ'+C7d8/.@:r9rF(K!(IP#oED.I;8H]KJ=(Vu5jj:,pn5D,k1kb`PRZh
+oR)BbX!C.2cVWuKdKckaR!Fl3U1(E=b(4^oD@<)FB[Zj%+FQDk*cgE<Dpf*<ucE57f+m'8i!%lIHrW
+KeJ^ace9DB9pFOX_RSM^4jk,1k2D$LN'Cn?E@?\CQab6'(pgTXY(h9EaDl&4`c+"e^!gJeO/>(2.#Q
++K,T::A[H+!+8J'`6O^Q0EklM#_P`>%b:eqaI.iZ><qNW&G"h40Gb7U9a#3T+]'!5\-lu),4Ns8/lM
+U@hV8O8e8Ts#%F-.@1(:>nfFJHbn<F<3,Z]d.9@04:#qH?TI.=B6$aF[ZJ3MR^Eu1s+i\)]6K"1m@1
+_&B-Ged8i@(>:uh?ZD,mic<-!AaBTAe73V"CP7T8Ept!I,Y0GL(9Cd+askcL2*aD(4_P[%^mUD5_^B
+k(1?psJRSn=^.0KZjUjCgNr%k@cH>V(+iq2"ce_*!lkeX-(X-tCE0Lq8I)b0E(Xa5._2&/#MDi<B+p
+!'`!ML[2C`23_)1d/Q!U(Da'-cui1f7^(+eYPB%jWHb(63dkU/hQAdj@`sntK>/U+ff45R8[c"6BRg
+!<<lXO:"l&#G?MVTW/9+1(3%:$\2j_OcJ/2?qu5Z#"Omn@0-V:<::uX$F5g)LcAW^oE*tI&<3A2@"8
+UBkQh/h(*K8#C>+Lq4V@(p'9,9TZ2#(e!u,2g(XYo'd#LP'C]aZf!!!4c+`%2;;_\At*[%fi!!!'#a
+;uIF1-cHn_#lGX!Xdo+)W4!`!"cC:W!Zp=!FPm/i3WMm"Haj`!V7Q=JS,`AM?EpH(t0Z/'4b5Y@/eS
+j/(/,jm5HBo=;SlD,6O;WmQuY9kR,Y!,68&W_R:+#X9ut?(\=@.jPqdX1_qm9%g.t1N^S!)X:"Q_4F
+jLuF-eu;WaUH54J=MB",\;oN<6H#3?s.]Vme<s>9E0/Dt=,TA5j>[*"-2B$=FPgPR%WTBEs&#*e>L:
+!<s@U\cGIb!aqB5!Fu5h[M`Kr!.b+a+:&H#)BaVU*l+WR!GE"Z)@0:\!?r3o.-LY=k6\qW#=*q__'/
+rrq@`jO(.>bnZ#)He>rXZss0IPQm6**74CVaW*`Sh*1o3fdWCjP"9(]+l!EDc,\P'<C8n%57n(N6?!
+u2B/58+A=!V-dE#T44T+!C/2+LOZ>p(fn!'`lecTZ/'^6UJW_*C)Xr!TFQ=!f95i712F%5UnBonc7Y
+((pbkMd$t01"qLb%2_u_d,ellHWC^!#-FGuF'U)KE_*:Mc-\9>X<E3%A=]Mk8<V9d$2-p[,4]YR"<q
+UH4U!67tg`.i7,#\_3?m#qfljKHq5u<nC'HR]K&PYOa!5Xdn.2!C])D5H7!.b=iiA_JNGQi4"$?["Z
+@J<Wmcj`5S'-T52Yac'm.N2^V7tEE//#l7m32dD'8Q:[KKA-eloMbEV\AEGi6-We\$"11N@.k1@2AK
+WYPT/0i@J1jR2@3A,a]F)LYQ?1S,P<d!-3+]`+]X_$+kR^kGqr;2+(=VKTFr:g]/+tp*J%cZ!![#A:
+L!qp;,nK2_)4(M+^Ip9*C+iQTj_K<&S@<lkE)TJebUQao4_]9?^@3PFoKZE!ZOGts$XL@!OZC=9`;<
+seRBV16h:U^c@H#i*Oa01V.:ZVWdj4,+kG@J6/$hJ&g(QG'*/DVih-qd#Thq[1dS,SW$$Q*.MZtl'*
+2]s-kU<i#fJNEBb>,Z[\>"tRrW!PC)8EeQDWc0X(q@499uu$Jos;p*e3j65ZTcF&Qh7`mKpZLFl45>
+L-.[DoEi!8FsG9s<U.ep1*]jNGH35n@_<I23*2-iA@FKN6?Q:04`f[eF>b^PTZ_-Z;fr35N^jXLU$*
+)_"<^>U5=K"-TZRZ683Zcki-0`rpOGYuKI%dj%Y1hm1S5+c`Y1;j$QuQXi^,o4[T>DNDYKQE`*7O'\
+h9Z>(5ceffED1Tc[SoNI94uNQeE_lN!j%i$j@W:!^7ABYl#%2"UA`.i`1Vu4<lJ?A68b>GQWM-<IgE
++0>_PU,aE1J=Qij+Jg*"&(iW+B-7%c7H=/AiJBSDmZm,S7$fd0]+RB0FMGE`2$gpG4Y!`^rn/'A<(T
+*lffV%M<.u<-rM--.uVi7m48ePN73LHJnJRT1@^*L4r(djjJ,'eleC-NP?gt'+]p^XmVaV?f$L=[Rq
+2^aAI]fMN#bZNdL_'F<ah?IC<#R["'^r@2[!"L-^)8OZ%5iN@ZZG2-M(Ee;<^rqmQ`$6Uf,2gsS+KE
+21ZsV`D$fJP]fe\h3)@+'S3NnYPq'ZDsiWt'.&J+u!nD":BqiKfAN`S<'q!Dj@U+Q.OCcAJa:(N*SG
+E@DM(-'5W@5?%c/TUtK%A6H++Nl0!8-)21>>Hmb)1[pkTQmYR#(];Hm@"gK3WpR!QN:b'L=1]^qu`A
+*#6<mO.!S6/fHX87mKSl>jR?L6^m>=%#oXdJ\WM/\XdVWENqZ'p!6]p(h+ZNRk;fMs)6>)D(RW^/S&
+-idTNDTnSe+c*#7-2_&D@R"MM;Zd?bjef/guome/,ol%V=WbTS8>Xci`8]%B_,hi\6b=4;K;Q&!F;`
+_(lB`@6Hl_QoZNbO3)nj/#2-EUDRAj_.^&63p4$OX3HKs3$Vc`N!.*4Gee\0^d_)qS."7K>(J@5!!W
+QK`YZG#"MdPYB$Lqg0ErZB"NQX]>2>;rD5@GhN'Vn$&WUPN<usg2'9N;6-K5Y+'I)K]7\Km?_D2qcf
+Eau9WJF:nn/@$hZjBWd<rluLaA-uqJe8U''-L3/W)"jO@YG`,+&IBR3m]d2_2gLk$S#5(\imQLduZA
+6R^-ZEi:rMP.LuiEqe.l'+HIHb88J&o9c2#ZkYr1&1b3Re'.J+6oTc6[gA34*LSZ$p^p4:rE*>M8!5
+Q)K#+Q*U#R`:Vp4-.m%R^k,&r'fJ!p&VsERtf<kH[2;,6<6&-FO?%*a[eN"OjA9_'Ea"PJ^e6"e-AO
+//KCS.=&Om03a;eEriA;=fhNraSOG8FH$(d$kiV[,2n"_&`tT]8\=iQ"X$JM)o`!DJe#S/);n#7],Q
+O"6L)EE([?:faD_["`7]CjG(U(RD49.*YrN<Ng-GM4NoYq0H-4FjG)k]1]V#eIe//%pbSj3CqR+7mo
+o>PK0"b(8F9.,dm]?=rI55PmGtl<BN<%]ha/M)+LJ,YBK_s^UaFS!F_CuU18Y);Gad@9n>j&UZ9@'@
+"cQ`$l*;S().F7a8?QeoF/jfgE[M!2%a*T\JLm?@RAe4flaF&jL@5;JOAOuYpdj#I!I-[iH81iX_0#
+?,h>t<PEB@PNh%D,(<)VdViZ38FV(*Ko!g[!QY`t"cWIj&NU+Y\%Ln-\,7YPG`Wr'T*PV:0M[e%M+q
+h2X,.s4Mh\EUOcc=<lN?fn*M]hkWQj>j^D-+5Uka#pGY(4p`P4SOe!Fhjsk(Sc@[ogYc@oiF3hc_Wl
+U,(#p'jh_paTINd^'rR2fY1u9h&hD+%Wkg^h,\UH^#Sj@RefAqBU-!c#_ik+;9A)fS;J>6_WhI5T]5
+5r8:hfk"A6NuQ-PVBgskIt*\V7!DScfg$dg".h<hO5]RF6d::l2G2X/QmQEWTr"miP"pH^6@m$a5VR
+#0]'Y+hSfc?c7Cph5?@o:@mj@JYO=g7*l-dN6DtHf"G23lDPM4;(FSNThBSW(nY/bG,Oun,Qh%'&*f
+.BLAVR%R.NC!S*'YtFU)ifUQ5h32*?RrD]"dG'?b"ZB(Z8:?^@#"ZrWFQW+!BVHT2ZuM1^S`e$9&S0
+@V>H.js"6n#7QP8+lWblOs4?!HR-6!J"#n6dH!J5m=*aYru`Xoh,O9)76s!j;a`*D63.1)+$c>$iRf
+0Dh_Tdc=s--/5QCk:fG^E>1Q'<s+Z2)6.Nf83'FkEQK0e?'V^(IDqIqEcE-RTZk.`&OQ>8>Y%%.<IR
+YZR)A-paK$aLsq,h-u?p*Zjd0LprY;$V?-B!F4Tr^S]89P3mar"V1Y1.GbC[p06jGYh9f'cN?4WE$!
+!lP5l)"Z]bi=6p\A'oo;e252XfRoQWED64T>[8Pb6,6r1ciNK--C%Xj.5"hRpb%O%-I%,ZWLU_H7m4
+O$NCI@kJL@eYX#cgDk>^.DUY"M#9S&?439U\`nl22kE%>Wb^:UmBA\JgJuN@&+f_=EL;N$SpQnG'1M
+@ZQ:W@Ul)'^ISH[`\(`Fp@7+b*p1l?cpos4(lq&DZ]D2@+&3nrA%/!oqeuj.";ufTL22pbb+nEA)<+
+`o$:^E2*tW)<niseOJqA?-,m14j$YgT;USB=pQ@5a4HJK#tC@c3N6h(:GUob4C9+s_Y_VhIID1W,,Y
+:J?'fVU%CF<R30+<DjO!cTDEP9]i,6'NK0&:klGi#%TB5\U5jMa0UDE<9TXYQff='P<1ZMp#HZ,,6:
+WN$E%G#^hUV+Thuj6.q26*+gUBPS+%[ff5B)\6L@$U.IUsLT,jk.[1.9G*.q3g%%$0LWLVdTLMI=6,
+:@JiZKJC8:GalOG,6Q-ZWC8HOEe]'KMdsl?\%%!?gmL];GX)3$nhU%%EQ7W5rc$a4UAH-h*:]$E8o)
+;.D1SooEZeFqW,5=n[Ht'eW.R,o<8[N3nh?5\NJ0KKqh"G_?&#aoDGG0W)e0iS[af&g/ApG_\4u"C_
+DK;=Z^I!E2p695%;9LeHk+NZaCh,B,CTTo%>jMe@iRBp(@Ng_cU36<-1pZi'tlQ9fJQ,`%#^UtrV]V
+'(mBAft9M]tm"0PFj*s`dQ>Ad*F(OiVm^&hoIOf(sqc'mMlrUDFWP^_0F%E'1!s5+=E$=K*j&.,Vs-
+"B[HU7[\X!TY&&(*bn=i^7al(OO_(W,>79QlM&@Ea1_L/;6';Ka#FX9q"QkM\(+5r_)cO!!8k9,^LS
+42D2hi_HFm_dO\CY,.SA89f,-m+^TQ<*75n5*tB8E!dp*sk:\B4H0c]e#%o]+pCep3j"@Gi3`=\8<t
+j^p,MoGea/Ak352iRsaaAWUYX)8cGM<?QT'LjeL+5o(dgAh%cc&4/+5:l8PnEF:3GCb6'42L.8,Ce^
+kf0E%N;_m=g,`LjQ<HYVrWON"Ne'/5ON"MfR!Qj?@j]'UK9oTTiYG^!K*oH\s;(6B\M#Q_HU&uZKs\
+Ms^WS?WJqc=MTc0fT_3_7(PiKq!Z^lGQ10Z<)WG.5Q)T4i/E_Ft@l7%<KlX70)reMRZAH-[Z*:!;R/
+J<T/O\g_nZ;nRUY#+V)?Z,S@Q[%>q_,]nV-ca4hJF_XKuVJO9*_#eU]l$1<s9K_`u_8UX5Hr2a;?r6
+"(L/hu3I'drGlj:WVcAP)l_AZl(QN$0L@BFUu<7jH(,l3'm*8,sbT"[JFu5A$#`*g!r5J?524!tZ*f
+0Hb@GA0PD.\5=DZ@ciB3?OG/b1C%DfIM-Vi#gm$S*&+NTcmY"Z_$E1.Z-X7TR.^k:"?+3)NXp^j_$Z
+k=1BiAF1-o;Z#Jg[V%a_NaijeLdLRo!H:pbV*Z3LWTfpdWPLsQDMlAG#>28*t'1'^W&4(2[j4rCdN"
+ap4T;[KJ<L9DV$e:U-jJ09\P*Yj<e%&&ggMG\EG+\I]K7F1nF8@]R#K@KIf9DEae@sB=%aB=cr#^1o
+3p3K*V.pp3T8Q*-0.cD65%&"qcYXmm_Jbu()E!bF83f?m5RoYQ/ArIo:`".KX%&rdnMcErb=/aMCUP
+'7JdI_!JWtf+ea`)V6J<Ct-&hPcbb#s;lM-1:DghN+3BUgc(SRDkbY6WR0<5jTGj0`#A_&*K2k.P1F
+X]Mc.2FC!dppFK"0VfH+b>aW;1IVj[%n"&Db8<uD7&U`2[U.EdGXGjW`IadsCetCq@;KeGZaQ1NgKT
+#ED?@<X#hJ.q>Pitj6q+5-(,2[jqh9'.<Qhq>2Wn=;\RZsCP*$H)!8<@8[YRIE!hg/g#GApM""89(Q
+^75LHd!?oa=mtQZm,R/96P6=o-/@XKh+IaIW*d6^R+Zo?i0qTE"Euop^713HkCs$jj8FB(o.@0'ngO
+l'>g,<$PCD)A'nT3UUF()hb6:'a@M-nJT+9j!@Ak@aL&pR[hiNO>UDi];@g:e3.flELiLtC^=>4SOg
+'QUneOU6R27)YI$'S4<_LQ&2^`/6R=9*bBu._u-=e*iQ?(P\bF*Q,AT7-DY*BsDQ$Vb!>^)W2@.0t%
+@aCLCgqn,-F0sTnekk,mSMSefb#/0gM`e.b1Z!b)OKU@Hbf<d@.0HXF?UA*Y/2;c0-C,Odd$nil6-$
+KL#W0JINY0,ham?5R1`6\d*Cm%c"L&nmTRi.u6:Eb3#1MUf;eo7I8G0uqQs-t'->c.9p'FE5RG%8nr
+:?]W;DZY,=_AID"1%W_6dXME%G&cARIL2:*l:HCA#Mj\KYUj@[C8fl,((p"\HER2KHjQ\fM'DeT\H/
+./;0G(4Tpj<#QTN/Sh\q?\$/Gh6W>Z@@$6Y.&<?tDY'Z.)lkDc[.OA<o,#0ht(BBgg$R+GQJ_gqKZk
+3*M^eIb@E'VqYK=tJn)St.pPI1.J'A9YJ5OBM)c:BS<d2QB#@I/-6fs9X`fS=F*.:5me'Xf>44=cLi
+rhi%)W#Q5IICsgEGgIjRl0&i2'%#;nLPS>0"6_`qn^1.Z."#L%<$(H&-4,NZI-ONFFZ\323sVEdPNQ
+$nammjd6&`\L/^'Jl1=_IHf8Cc!ebo#XLWKC+1Zshj7$NS@[X&*G*MUJZ#uT><K[)(nA"ZMY0q9dbR
+'-WXZq_,tE\[m(^%B0RK6e[r/89'k'"XN$FE]HQ,G+*AK2a+Ki-Kg++<gmuL'*/4g,s\KXEap7I2fJ
+)!M+0r-)qF`/&VhKa3[utDbPK]_tH8]k?WDm:d>P`TZ[tc.Ni3Rj:9Ob_RbQBStaj`](fJ2)e,a4VR
+*mF5SM8Me&O'kB8W1K5YIM-Wsoi>C^:\DZU+Zr#RCEt!X55N(FT:o-s6OQ-NmfbL4C_>-j,2X*Wju5
+!>#rq!!%U!FpGN>QRDt>(jc=W!!!]'W[m!mW1Pl(VEX5h,,"X_H-_8Uh1s':JbX>>O;03H.ZWehL_r
+sj.%@RT5:$%PPrN6)!BCE&G_+>(!k;nFWL]Wj+9b#W__<Kj1\??VQ9-oPJquMq)si>XI$@Gm"s>"UU
+Q_&A_m@8a5_GIi>/e9jWBb^##,j;?bX<5nH\8VoM2V`hgWPDrbeUQ%.S1fd+E3!i#6Y$GK?+)tS.WR
+cPD6"J!N>QTBQ,t&BnMKM"dia!BJBY2/qI\NJ/BJ`TK]AAb!HK4&>UM1W$dEeI"TP16;i)Z)L`4%5D
+929"d18:;)3pK;AZPQ-4kS,Ud9cmfagVBJ[h;C+CDO`E]FtG*ftLF3*Cp_0gbYd7]:'QGaJ`_704<5
+"bVpB\pVR1>"9ufV^q6JMukO<A!#`i-!56moSFn/AuDYjaH0aj:qm3^N<gA1JP5A\'La+=a?5Q95$/
+$iE"rms=TGObLcBd:>Mf^Rc5\f<!48)KOEc@:#V4;g!>#\NBRGOW$%R%k"gjMEE#?\NK*S&VU;CA2H
+$R#8T1$ic\amk3K5JEF%2qJr!'$*q-k:nM<JT?C#!jM!]NG79-O$k]KSaaM!Jpr(&HF(b_?*c3,N+A
+&e;gIg4+N2I4Cj5#A\SOM`e4,=YuO;P>m1MO"FqEs(i5c,:kE1_!hl)"I#B8;PDBpn6QdG2g+F-<!4
+Rb0Zk/_=Z0;MG4I,^%K.?Np0L,l#0dBBB]JP>E>_]eB6_OcKQS8^LR)?r=TEC.@LlbgW0FT=nQit4S
+LX7CKq(06bS>n-&Y\Zc9N(4.!U]N5*JH,iYA<tN@H%;s\M25sK!Lk2s!`'qjL:A4RE!6`EI"OB[J/K
+^<#R,d;8V3$p!#Qp^i",oW@L+)Q`OL>N-or!bWJgDL4N'sJS5+jp$d./F"UqQ,6rJeB7R]niK,AfaR
+$3[u'o*WLb?VKp\L'c"gkU\;_"&$[$tCGo4Tn#s!rsmeSA;iYA=(XpLKX&%7)TWcRYW.<+?Qc^&/,3
+.+:lm&KCmB_(`7u%F9KsL#C&Q?#^1jiQ5A%:dC:BU=EFXB3gl\2'GH\$>(]^4IDX'I!ih]Q5[l+>CO
+lM4c,8Mbe!HOSR%P#.J<3BW+q4cr2\NoK[4ll]>@<62",,]?<)D4H:m&Q?c[k0HOM+3k&_kbG/HA=a
+LWmK^^lcp9!n>H[!ZT&s,a-G<#X<]9#!c;kQn&4<+O?]Y!?`!\^rHF'#T%GqJTqe.0_U:+2M!&j:JD
+pd5X<Y/I%#QsRW*M'LeIlC&<0BY!XK9q89fZ8,QOc.#Ikb(jGF0J84C'dJ5BMQX]uSP2?Td\!<<+Mc
+o_JpJ-14)b<R&lF`l%ZJP^_h:lPe.XADOQl@S8@J/C""NIq3J'T"hIJ-6V76]smJH\6<YJ-[6PBlZM
+1IP0-_Lig>'3'&5X3/=.`7(a]ub)l`tJqstC\5<<\P`UVLF,.h/1_=,a&o!m:8N@]Y)&'0.aB*uO,a
+ne($4qP5kTm]"Rgn:I3)FkC]`b5mC4h=T!r/@BaAN-XC>#OO&0q;*b58t8<K''QJ`%Eq+:S@u!!&,=
+J`1X"]N"r7Ee7,2K$eUhd/jM(\fuh1K`uPD'oUHfCOkUm98EWP(cOPq%"JKF:8PS=O;>cs\PBad:<9
+A/g\QG>.g)FaJ5#J5H#Fh0H%h=bJUf"s!"K3`2#o$<!kgXG0I25-"9ed.!#Qi0kWDX8`!&D1?,.q?^
+d6GJ"C7SPc[[NuO9u53:4X6Vf(!WIfLQ!m08%e:"jNbC+9@*3HNKQ8R[)Y@(_$Y92\1o(8t!bP#UFs
+P0*jFb:mHPf>YdK9<JP6k$0ZQG)pgb#8qr$i#Mo<kG[.+J>c&'Uhq3:h(efYYI>4fMc9,Rgq_t0-9`
+hiS#G=-"23c%K`^DDa,[eN?(`reZ"bRj-K(qV3GU3U!/r]Jh!Z`kC(c[6E8:Z4MKYSW/3Dk=:9S5T0
+"UG,00HpL"Sq^b&K2pr_!"Xb(9EI0W"K6Iu=D&Tb9EL/X!>&'1L]dhD8HCC)*2Ugt79,.'>?da#!?@
+D+nAF530ML_U-e.`dD"`Y:Ct?g8JM9%f7.cHm9S1Um"Ye<$JK7[gRg("_:Ok$NO:HrB,D'<4?@W%4O
+`LP6i<4TAJ/C$H-n1h&2UFl$"eZKj]gKr08:V%r+LQZ*HEFj!q,!k_i8hN[CqW*8K9N6WKHd4"hH2e
+`%nLh,S=mdZ#TjLLiPgTk#D`_KJ9qB]8'>paK$fj;$$_/K&qCm.Ka7[0#iZ.23gV5r+nuTg3&qsL_h
+!VQJ0["d=A"/J\?s@p@guFC^nb5^JH`G^dPR:bAi<9d3<_Zj@ub70J8eQ1F9Z\+!-f[59_Fa,5\:d?
+j<9fh(d)=p,XC9eA:8BIbg+=iEl4IkJd+nZe-&T-l=Blj]?p*La=W&T;^M]JJf@(i[&bm^qIS@];4H
+N*??^+i4lu%e>:;F(l3#Ng@mbPmLM/,fR!),F^]MlHQd>g>E(Yk(2Lq/Lg\??YfK'+8Dptk/9*TEk-
+jGc`?ABK]K]"E^YV31*9B-1T1\Q)LZcL[-24;1+K?+.ME);(3Na5S.JIiBE\]DXYg..MI!oOXk?A0^
+Gp;#$"2u$P4+=r*)i8d3UJ,g@I`G[fI"bD;QK"sLq6=GB]/:t$dJt)rIO8skAnHJ\?J:i'UomFn/a+
+DR'?ZqepZjJhkX_Hl7@$J?[TOmO4iW`YcLb;tMo4@1Z5#(HQC'^?l.3nqg-3/FfJ=.bi!!S_+%"NGo
+K"-.0<2+no+l0-E"7Q<kQjW-HE0)]<!0Br\=D/ud$-C-N&]b:IY1oTbGT.\YLbN:9E.RKaQirGne7)
+:m)?^&=(!7@-J>a'?TQl(8$HcIcJcqPLUh6G?&;3J5eX-s\+F&L3?b?ZoLBT&2.T:mp=bR+u3>hYoW
+$;@o4;Ac1gUI[p+B]c[$?=uaLWE[G(_%k&M.K]^_A.W>;7UDVl@ZC-nou^;q(1r0,r?t2$Zq0"?rqu
+;l%OLn[co.Ea@Wl<\-J[$"">T%.t>aPGcssG#/(1r+FC:g51!MaZkIt^T.^FZJ:boRLQ=EK,*edk;q
+4YCCPtGnRq:mW#]_hkYjUB=XcI%YO?sMGnt\j4c&V3Z&9>:ho$9l^hYru+s0R0BoPWHpmbQ%.78UHi
+M>&>%BM&CT>'6c-ae)6p5Z#\WM8$Xs/@SC_B2E_t&9Skmoe0c-T1=$1RWOU$MB>sY=(sh+j@g>[Wuu
+fnVbN?$BOG5?2j4#\#ds@JB<KQj(6<!M.b&WE[UjA&pJ@7J@F,3g(6q[1dGl4SJ7o+]5n(!B#Mc4+E
+0PSQJbPg>L4Wh=5[">IEJL2gJK*I$aCYV>Tm0C;$)i%B:fs<]N<g)-,/l-Y=p'KBbpiF--`CY]TO2l
+rUA#>>jo9QW5BE-GFSUg;G@JYa7T]DjJ97XpL_+$GZf?Y9'Cqc2#WPrfn1oX(!XHe.!jM0I5]mtbE0
+,W1L`.B<TIr;OK7^<_K+N3YO:-]6=bV:Lo&1gFa>sF-i!7%EK$UBO)$PWe15.u@5/8:fJ/&tk.sfPX
+LN$B186>[c>kqhuH#U.b-_;iTR?i>kr*$@N_WgmIRf%\epQ5NR^gVkQQf-JjLc5D@*%"t])k]G7M4#
+=n+Emoc:WPXCPQ=/r`D<%<2-<E%"&WFG#Vh*7g:pRpLCl'X^j+3K@U#!J"9<BB&n)k!H4<,^!Urii@
+[=+1`![s3.T9-"kYb$IZ4HEA/@WWbB?0qUUAU31I&CV,,$'!^OH;&VL:B$I`KYcG1BUJU#>c*>-n'-
+C6jNnME4@GG$Hure+nkeKP[&.8i6C+T<'oJ\P<sj:`@V[&E4:AW'`'VY)h[lpfXVoS]oL#u,OL:FIA
+f_u\%)ZeOY+Grk!u[&5aic19.,P'-C%6$;e_**)3JQ1:`A//[oqZU;m'2;eb]Mq5XQ^DXO_]-Lb2/G
+UeZ$_FFMUQG0;=n9.eH^H_oCGFrU\k"bXTj;&B@C%cr)X@r^0!L,ABe4CAP2bR&.'o;9#rn#Z]V[+]
+q=FP;.31#Uc+BO=I[:3)Tp7\1[_;TRl7$[Jr@<C.\^Q+)gUL9GU`<SC874c4r&]Jb6TE"SomTsM[;$
+AH180j/4jHM_gkiD#.A.)u.-P':i1+J%;G1-SH6p:/)mI[Igi"9IL5R03?+e?<V>IT`\N\b<,.lm*^
+V/8NH<VB4`Qau,f(d+D/Q8(m%M+!Z%8M`+)L57f_AYaBS_0a]O0VD2%DfgZOQR(ksBgj$Z>bX3*b85
+^F`V_W(g_TT8:gH*Zf/K7>,b#0`jf!I#^;MuHn6.@<bOaDK_3%A(\KV'^PniqpuaO2d`LWL55'F0G=
+'Lg)GWZM]qTW%"4K)%/qS8Gdq?^9Z.0Hd3O\@t9;KGj-6+bGW^G)h4udOUp+WBfMgVBCP;P<puX1k[
+/D5]N0A\M?`D;OWdP6;"PfX[fUK-RkZ5d)9B#8\fWtLV_Z*<<o6Q3(JUpnHq>c+u*\EM'<5*)P8=#H
+m"M^G]Y#98?o@4MeA^L6s"QQOu]!4m1adP!Y&K\a%HG^+:E2BI[F1&'Rm9k/_sici(N-kb;0R6R&2[
+aFJ49Eb`&RR9+5lg"KZJRP'[rm=e(0f,bYK9U;h1'2jZ/V(4;GoaaRhja(YfQj2I]I=l\Qem.M'FU-
+<skZ$%t"RDbsqT2"D/?=0=;YqeM3iRuk,j*=K-6=guCA?&[lD/F^YM^52#R0L0SI@L=mCbQE1bNa&<
+3eM=G+!Y1uI#l-VT/W'K\=]!+ie]pJQfi/f@dX9]5Y)3:ad-'5BA(0OhJ3,f_nn@V'<`q*n>n54b6@
+p$oN`B#K#ou7PD#o[>b9AcSU/\>b3b(R=,Q3EXt([e"t_S'(!u/.Q@hi^hk,5='s5=-dfWjrVo\E?L
+Vb/JEL'2]<G76j=kI^@kD8F?*Yopc.$.te$@%A*\b9M2BNtUYOm._Q4!JaQ3OEfn*$2;HV//b\_"qV
+1X-FH0`(IgAqC!?!ZPVTm5):tl!+:>M(,-/r_"]T7i!W75i^aI\,,G<.WEs[")AFGu9NVp+#YQFGef
+"`3$=QT51^m(2LsfBgK#uq=ab8S,LhMe_Y]ODPU#[?(CB%UK@Vc>blB(Q&'?)Yf-L1E!\&".V$[C23
+#eBel_.3\&S+@^G`U:?Y/29^]ckup".h8fM)$dZl#,==IK_QBJ6aA"1:/%jFTXHER+@Z_h*%M/R<$2
+=Z,RD4g+p>_I9Eg5pOMM&SM_MpN6EiWX&f;[T+R(,f$MP)S>Uoqb==42a&-`/?9S<t_'qG'*K^fOW)
+L,:aiG5EHj=V:<-XA?1KJk^Ud+O8MX??c,7Yf"S+<[S10d`TlM(^<\`6uBkOrSi\%&?CM^s!b6n3Tr
+[<$)g*^^5Y/Ub.Wm*sY'p36&Vp6USd6"a'/q_Z2k-6a1$aJZ]RdaDDDsgbaZAeia.`rc`/"rYPqF+U
+X="!eLDSKi#3)!AK$>@UL/]Jmb<?^m,EqbYSKDIn.;YEu&3:)2XH$)T8S;"(HdGK!@QoJad.c+G;'I
+MEi?h"9"PW<hpNlG#tO,/9OB2@)G$g_ko7M.7;$*!<@oXVpS+GWJVj!3lG2K\dWk*C2Loca'-VbJ1K
+,C+&_&g#/s"KUL7?/M4)dc"4.kj2>euQOI.T<a<N3WS4it;rX_D]3!R7FSd%f::dp1O"lTele9]eOl
+<.DlZLXoXR\MS'g/=rW+JlH]1,#815BjMidb7mJ''hu#6C,Wrf&F;H/!Y4Z_IC.c0f)?lJ<EbuF>-f
+Y$Xr:U4eou85hPrX/Lgjg'-UDmQ-2%&.RfmYQ@>]7(grQ$Q))$JimZ*Ad9#<:kI*:nY!gHK2_T;E[m
+b>o$TdHVB[E+LTa3X")($4)Lg7^rd_X_.$"8OY-PQTj".6-aA-)B,$UC@:Ld6V6!XkF.GLg#)ihq#P
+p#;>TP$oXV5\b41'UgRXVD7eIA4O_(`b!I7j*TU0.m::6<o4Y8S*j7oaG>H0Cg%%KVWD[qI1,#8Xh\
+@S*AW(30]L,!6,P0'6\o*R2[IRAqXP5MfWc!U<3G3XK*j=EZc&2['0-ItBZGYucIq);B:SXdoB(JIg
+&F<N*;hro@hQ0Qo(Gd.?qpu!W?*=@`p!>CH1BtKa4![(B"2Q:bU('=>$^44=A4fuefcf-)(".=Ji?C
+FXju.?=DJpgXS&Huf%T"dBNJhmMa!!;"Y=D@)d6cB!&N8=c7nLb/#VO[o[L+C:)G^!*-D9i?`o#ZD"
+pquF+,@Z1B_b.h8Qnu-KX%;T6+tAe[kKemG5\'6YjQ`YGR^Z(kDm3&qTNj6aG&[+[@+Q@)"r/Li4UC
+>bV?53'P<C7@]1XMi:fc&Q<qC&:mdt&YY#&67EkS\ko?+3mFM+p<MDfs(Le"DmdaeC?4f@DE<ZGWj+
+jmk1njaF.RO"q<'p(h#EtrD%V^#W>60j?rRZ0ZlI,B*@<#L.#7ul$V-k="N&JV.ZrF28'$'])^Y3l5
+dVBSo]?fQ8Ml3TZo\N>@%6r[OL;5]ZQa<7jmJ9s#M;\lReJA_C]h;\5%CTjDa<gK+2iDr(!cXfHet(
++Y*7?$*6(Y,-Dff*.C.em5sXiJ?+c[I_=fj>\h<Pa>Xa=>iX!V%RT!K\:C[T&I<JsImbS,&Y;&!KJi
+A&FS?+U5/CV%Ua+Dh/T>E:bCZ>>+c2$3H`g<kM;TGI]=9>-d*k(E/8$GDGJJa(KA$UB9Yji";4AMCu
+,YeEfJ/EgdKn]Tii<DRn%fs#`EX"*R4/:$nmttL>r"FUp:JZF\:Ajm*!<<<,n7Z(rYFbk-,6CV\qBG
+(uC9@e,n/ieV$%^M6JgtZR[N?Y6"Mm?\,iJ$AOrn,&TE)&fj4$/kS0)/r#@ZC8KJj/<5T8Rd*+ACN!
+(),&B^R72mVcpD:_rdJL'upk$gqR+`-VLm[.o`F!KW7pOIWs9B``7_$]gn]X4HKm?lgGp$]4EpJaNm
+Km[jK<&>8;.@>[EI\g!i*"MfC06!coEoFHb*)X[S4:jRm`E"**0X.a>2n.`S*L5AR`#gG.4KjY0o4p
+)'+#f)$!`"`oX^(tX2$&CSSXf)c84r/-)#U&sZ@,eB[9bdY[KWpd$6"^qL[L0g%=TN.N@'UGs3!^X+
+$He560e="LFp&pOBi,pZE#P(i*t,??)301Sm<]6kOrbaGs"<70E/NAQrtr\/#[i)hi/A'-&n(7JJnP
+6+UG*Af&h@tMJ)h=b;;CVK3.W9O*`:r=EAnlR5RQH#@.E>#TRN_W[gJpn$La.#DjM?I'-Tr-hEmb7l
+)<pEiku@C)_d<q8H+*i.g^2i$1EE>:o+a:/jch)k&HY0E_dRXT&+I^,XrduNBnL]=u?KH'HjLc&isB
+\Jk-MA-:r=eaa#6"i<rO\.$9iB;B7'HH<(Ybddgls6QgDX5jqTi7rY1PDI"^O+XDt3-uYUsTQgGL_>
+jQk(ILM'+:&\!>TNmV![5uK+lX/#5qF,[#f1I%61>?3`@jIV"C\5N!NH\d_uLpo)C%Qj!Nlg9jp48q
+q6H#0Xlq=",;N1F16X4Ddk<Kj1G_rg1QsmVdjH("Bd0f&.jIaL18oK(FC3Cm1o!bqE3gh9QlP$P"p"
+9+5i)L6,SsrU&V(HP@mV2$EX"lt)^(.@@'_c,^]ALu*s#A"_#=>,6T2aP'-Zi\5XYTnV?l)["u?T.6
+*^VY&N7G]!n2VgEuZWgHndEA4d4V`e)*>&i?46ua0M0Ydp"ZO,;g)s-Zec71LA#*](ppH'He;*UHfn
+%(]\Xf*WV]41DhqlL]O1F1]afcJ2@nF$ka[$#dW5B!R:aSXu4%O"9;j__a#7Cc2]!+0&YLc'FuhThY
+GXI.;]\`8rH1RF%92R8!J?je:1"'K1Jss8<f$&6G#FA8A9065JnR"oCgne<8/%28YYlC&qr4s'H[>G
+!.f_Y+ZhtuoH(A"6c2/'+9sJAn.0WX28RcF!&>I&65^mn7KN-&+H?I8dP\kN!HWu:TQ<j>,t<d)RP^
+^7eIG*6P5h`s8X-50Pb1eW[3P7G23f.hP('BnK%ncXnT*1]<'26&V?%=r*'a`tP79t0Fr`g`"uOIZ'
+`J/4]H7.O!d+&V6#6RD7-;>2!FT(Q<#\Pn+])fs;DjA7_S]5J)FC.[f]5<SEZH<u,?c<j;ACE+a_aq
+`/P=PIZdgnWc+bD4&NCmX70)lYTY;Ein.G^(#f.fm_'BY$EWq$:*u)Ojo\'?(@mU4S$U>sUPRn5.d,
+s<*!!%m5!O;h.!XMb$7VrY*eI,LQ,?iFh=[JDl`i9QO-H71h5bk7]Q're/n<rafi&%AeiN>7S"'W)E
+>4Sn>@I.Zn5d[o%;fo>82@ooiHj@H<<Kdb3!9GkSk<ks4%,`6AQ3IBJKgWfC=4LU^2.G_,=[dED(ip
+;l<9j:EL:,SYCR-=e&n+@_+pVO3%aS`<_(ZH*36'pnA)`puMc_Eh>Xnh_$fVn<p1-Lu=&ATp$=W?4U
+UV/?rZ^<-O2mh-5_N[L=([`4;i_V.^]FU'?3TGX1a1c_i'&('n/Hlu7?Y@e6$VPBlZ8:7"9=cJ'j4P
+d>=IRX3l!u_<Gakl*;W\ZCU\(([?EFVR0MX<$A.+P_.XUF9Q4Di)8N6X8C/BS4;i]`Bi`kT_9mK3:i
+V'=*esq8Q]ZO6clZ\h(4gdU@G2\EBGP%'(3d9#f=LV+IZ4C!(na51f;9Wul$*euHD0)>p@'_9oha67
+?j#aB,glb2.T:>e83uSe/D"lO20#f35rD-p'J2:c$k`O`5kdE`'\WeB&PL#-EV/QsF^!qD_up'CFZ%
+YKF=ArRAHLItG1^!legYeeQZls=)X6;jJ@6JLih1u:#_6"fTuI]HH;n;:Dtfbe+Qs>$XAYh-*C*p=i
+9;/;#D^G%$R"ZjU(e4?0,u.!Ma5Di^p/auH5MM"$D?l0JM[H@_B'm6*oQFBpr[F*SVe6i0t6gJ(\fF
+fP1[WN#QrWrTRn!=0GcHi*T6Pt+Q>i+iXZ&EOQ'.KTrJJCb%&75$QuSqiRAA=,`CYs!jP?D3=Ug3/e
+\8(-HeDRMn`KK'kYc%*rqjH%W3.,(LH\#%R<C''N+uH1GHWH!4c\S!!td<@6;t8X#?#\+QZ]a@p3ti
+KpZ/6bNFTq_%FL-#N;!RQ`(d1Q5"k$*+@iH!\Ou#a+tod,NCe$KB<PMQ5R`e+_04@!Rq;T'G`r_*SJ
+:sDt"t??kNN;+(:<9TuJ.(Wd]TE*ndh0l2Del.udu!(.E]=+kUW"=pT?A/K!k>Gjm\&PEGr'oV#Ru6
+-p"4:`&*G'1"Sr!4X@!OoYR6)?A1oPjSgNIrOT3%=,;cq>(*lqJnJ\#GCU["POh=A0E,[$_THql5ls
+M'3l0_"B[qOiBdN'?qu54/_0+d+CR@Je.<`)?W.@?H!`2r<!q,;,Cfr>_=SI.BgDbe:%eO?3L<Qt1R
+\+%XVYuG=*+Su.O!c.#p?M\U(a5G_43d"YTam#J^P$"A<p\-S\`in\`]QYH62/n-D6SFG_.)IOp8Co
+%4"Oe,Kpo!q?Vl.Tf,4b:i7@`WWiLEH-R;"K-R,>;542U+#eK]5aWSMWYkfd-kG#XTd3EhDXsT.<#Y
+lsiH,C!XbtG-O%7hDnEja5qBGC^*e:Y;WlM)@(@_&W='%]t^^(jr>T5JQEhKuD+?aa16ig\RQup7O3
+h8U1GQ8jW"lN8]5TgKhWX6HaE^3M'p`3eSiE2Q5^l=hP1[UWA$9lAY*#en*UslPZgbF*#"p1'p]-!W
+4llSXmT-Mso)>gaKl*Ifb"Q=XDRMu[nEM5]3'I_HJYKsVekG!RS[PFhj@["d)!pW%d&>CRO@PgH&iY
+I'p\5+XmTNeWH2A73`GZX;N4'j9RTM24Fr^#c8b;[$n<q*rD#r]&TFpp7EYR7hD3m#b,453cnPD'fT
+&iOh:^s!l&>TP$<B3`sg2RJnkjhSP';*5?L[_opIA-O1_%9sl7JRf&*"c+>m&0QoCR#>JLeda7V/mL
+"tgEE06(^Rq:%n!J)j2\K13O?WI%tK<EJ@'`7ljD]3TlHq<_'f\We&EMZ*I;!@'D7dKDHm0u"[OsNR
+.aI0p)aidH5hM>L27JFYD5M<)ZZHJ@+['pc_%kD\`,Fi@Pm!$;9IPT]=C\TGuL\_Mqh,VcNHP%]_U@
+s;eu:B.=mjLiA)$sI^PL0-)CY_@cD*Mi+$3^iG_g1L2%pKo6<FoSYe@%`_mSCr]?\?4b?cRL-0"T?k
+X]M(noq%JN;S<g1P)ChkAa?q?+>%+4h?8f3-f5i+@056*f9p,2iG'^lf&:KEC);>;!,cJBA0@HYk(G
+#p>0U*1sdrTH>=J#K<Ph*Oj34]Zo9K]3WJAcOns>D;@CRh,?bFoU6\rFk64%=T1oOLY+uT;F^KYH^1
+#+_3+(p6::-qls@[R2J;8K]5a@Kl2Ku2hP8m*WUEZ?lJ:,bU"a+pc,R&/lbagSDp$J5"j8Qamb\uK(
+f^tap$[AXY29+]6QPZ?Db<c/>9b+/RZJUPGO]#"l(7/0hbN#Z?1M>Mmp@Tko1ANL/*(qZn@rE`h\RF
+8;>3j(ne%SgIp)&d>tKNSp;3Bl0VA'RMCG0:WYNGGIs(3%J+t&3pfcu\^Q^1^Nr\($qZ;uWMadI!TC
+i/YqL=(mXd_n587s/@)S$DM@H7=)$l##VDa.lXhmhb//D1!c,[pa@4=oEP==J)I#)+VODASf1+VBMi
+;t$Zl?83=W7@8_XghoD$O\"Pr(T@uO-&o9s0_gmH@1ddgb`KBBhJkQH:?Rhoo_sD&:`A/0#?g"O6(Y
+"\A3#M-aYBboT.B\h>bp_cf'AC+:nk@'Wn:nnLE#XOO$$K\OXb2pQ#X=\d1_+?%;.A6%I6fSM2p6_+
+psSI(Ps,5>&09k_s:T"ib?Do<#3Mg&558-?>FJF?"r;!Zcgc#]5=qF!h;S)0\LQb.4UEA$AJ6'iA>E
+-)br,3_EW-aEppJ!U9e"p`80k*X2i'2G$f@2>:*=n@t&%S`L@*%UZp]L-1%B^c$l5X1Rd+4T&4b,iA
+RCW?Z^XM`X>J<9I_*?M;f2:&+g(0XGYd6!@B(=9`_AsHgqA+,?jB%Y3b-nE%DA_+=/]bk`H&kAC-.N
+R\B=&I$AS*,/G`Vg$D>MDtn;Q'1(ABa9N,'VUE;\Ro4g7m:01P.SYiBN0tgq9RRtUhujA/+d6eH#?$
+@)#6Z@T/:)t7FJ8hj7Yqj.JRC%'%2Xdr(GCAJBT2DScNjk$4(m'o!Ka7bn4nT'q=$o[F0isZ6*F646
+r>d>gA.\i72#PJiqSZ\1rm^/`es*L0HUWp3USB%a,%)'KYtXU,+XK#XufR[AM,&1JI'i2Sg**?,="a
+!MEOn=3NaG0,LePuPbRr_/"P2O4EcYu.*-e%<Jo@:"@0b]=d5qCg;sR&iZLMuN+iLg61eC<\h;1Coa
+MusjBkrB/?-Q3eY9=1H\V_HN3f,XW<<s,`/'f`*C57<I#YRc66F0ZB\FO4/'3WK<QC&3I@L=8ODE?&
+nb-DtU>W70!PpIuG)J=G?H0:Ul.]Eu:eZ9[2/#[>o:f,FOY-uZ)>&!'8P1[V"9JmT.KSNY/YJps!$O
+KL_WZn>)h>koHk&D-EBTO/5emf<BX,&Q"M.fT3<cS==;Xdg710.CpHIcODQ"j"qU+q(,+&mLBuYLW"
+T`-W<TESOIINa\Y'c@HM0a>2(s#g&)'G&,H4,BDMo)#N*bJm?"63'm"=-;(2%KqJJm"\_<JX0Jld$8
+mnE8[SGh_D;HG[L3JN>BSK4<DSGDFi+(7g4^.+?u+ZB]OK[p!*W!<]7&/I=qgq;NqFYs<\tik=nf$F
+_1A+ddg`dPHntH.jq1"Ha7B$A8HRG5C:Ynhq'sbK5+kfIdF60#@aI660NCFq8!5qh;6]19=`t]!7>O
+6/&M27[/3'Qi&fDRPH_deKH_jKTSia4(j/t%^^fV/V((A,6P_+K+j?:K/b4sKA]SCo55p@W_>>01bf
+s.+:-HkM?GLRn-)(7f:f/<&O<9[`*r:#60(BW_QX[_2L%ETJc9O_4u#M_gtiRIO=@"gW35'E*1q9p"
+f(3=&HR[q=TYod#R/>\:hm&K87ZdoY])Vn,!/.g4p4;6DA\Pb(<.SQ/'AK!KYl+Vj+Fh%9S$;sLO+R
+o"1pfcj?/e0_#'J@4"ZLS1).)B\raH7OCDg)4d#.B9ZTU'_OtG,R,KL5#W3[><)cDnaqZ.H;gtq*F:
+"'(&''(+<Zif$%$5<JSPVQS_%7BT+lX5'+<i9ZfnR+\FR?pNdh4'^I@=$m%]-gkAqm;tRb1;M#cq;R
+!H\UFYl"P*+IEfDl5"q1J=a]0.Yf20IgLZ-"-'W\C'7dd"e[Y:!rrmj$31Ko&Vp[$!ON/CS.^V)oJT
+kb(DEpZ0#dG0(hHu+V?I7".-'`K)rWG7Z*I"m;=Yp+I!$V8fKb!rOQ;0!PSl4JI)kc7&HVA_6K@8X5
+B0$L,[.B;E]gHH=+7!Fgid^)au_R#4'+q&4d7,4;G(ZGK7Y+$VBk-aP@Q5V$gJ]R!CB`r\TV#KXJ^8
+NkTLJJXsdhSSIol6L^PZ%nVE.RRa;cb"4t=1V[<6P;jqf'WRqm;RQ_o,LmoYL9$Ttd-p3.3*/7oR4i
+5PG[K$FSO+?d&PSrE`K;OL[!!!3*0_cjP,RmRPX`"4J;.pPHI1:^Oe7,Y7*s#%PN_tT9P1sZZ1p!"A
+@VK(bp"sZZc+MX1j%[UVHNaM1Gh8WUiE\k1]tsIqO-'4r*T`H_na\mK6!b'g84de(6E(4kll2a"N'U
+rQ*kKs0=C)">(>$LR%sO"8R)gn(\-:e$5cF3#/>XG/S`\N#_-EgPdZrlZ%+f^1)[_Dp&$ApUO$M21n
+IUc_"g4ndTNo#4aHU]u`-dCfa?)^L0!U&@(F&AG?RDmJF\H2!<cLqt6LC*`'p<VHJVXkF_!H\L%hP-
+(ifJ!s,d_XBQeI(&3P`O0*C0*INr8*$7t=kKUh;ZY1"C$ZGda@Z''t`mMBPK7SY@K^4FnYR/]COKBB
++l1&#QulKa8Qj;)0cClaGSdmNp?pOu#%m,C,*$Je!Mh[?$G,@o]49eY)e@N)LXQKF*YZ7:^Be@2e:F
+pu*4p"V?R_1*$I$),ioh8J]!Q&VS5E/0`0UlHNR970l'cKABacnBhBUWn?$$iENQ5_#K2"=L7+0<GE
+JiKe&qI,$O'3M5('ge\RLg+LEo)mE[^/<lcdY<D])RDQ[)6/fs"7`iGZKXr*bC&K@7GD*X%#TCBce,
+1mtmK1%ml.kO.XXdE)c;Lbe\$ac>!dh+V.cN`E6,/[q$gk3BVd[@f`+:TZ3-En35WcAH:gl"MZ^,uI
+dB,H._hHL,\%Y-joc_6cf&TQ;+K>sCWL7X`LcFBVA*TTC&Ra<2/D"d3[A*k;4XmWmU>f^2n6+-HpG<
+Y9ID%-!Zo@&tc]\#iNe6F(_-^YKcmMA-Q:Sbf7Tn%_Y5(m;KCg"b/)fZu$cC]f_A)K9J%2ph<(g7(&
+VV2+k=r`(:6>Ngrm<>kHf)"j=VUp\]\%'oCNB[JC.-''/Zi/W9%rNOr_#]K[LBp'+a8$b51NJH%atl
+sWjf'@t`Nh$?!7-0k@`Se*ORsfNGRk!'7#M>d1CZbY"S&7C&PuX%kmb<5*2;1H`(6)_gGo$F^b%[H/
+FfV0j44Rlf0+cfUFY"T,+C`rjM4^u],TWb"5jG@iBUo[^n@hj3/'@ck<%G4M'uRlTR6i'T8::0Khr=
+4Jq"th-G^=TRYi,TEn)aLgP#nCKr[<M(g@!=:'[^<4IIPsPK&?m'"O^F[-B>%quT2Q!fs,0[4DHrX=
+(l8Lqn'E^jq$PPUODe#!f\N5g0X#HIKTanco^;]PIO71c%8Bl+chkMeiD\9K.h"YG4A]_TY'V>UciZ
+.Yo?#_mDV>Zn7(qk/-a"_[+p:.BZ$#7&&mdJTN'P,QJ1A2a`6iM9ItCUcLm89Y7Ag0)Rj9S3B?j:pV
+U?44,9@.$Y%Q2+2OT7:;44^d,_p28Ui/_E:FZZC+$a"-:7r!b>WVoO#T@@)`mh`[#$51h4NnAB%SY`
+8^5Rn@Q\FBZ?9N`h[@hW2@:6$q(d^6Mm';Ci@>sE528;%pW>Z0Up"c6jpN%a(0A6FEbcYGfQ%oa/"%
+%[!Tj3H\,b35^O0$YVJ_mJB/FUa<ZAY0W)=#k!^a5`B8-2FGG\u2@F%e7m("r92^HHN6'M.aQ/B&oT
+.)sONA3!aX!%k1m:0M:J![6a^g^ZFI1+&N=B]@LcfRejG(a/SB9-98<C!qUl**dMol0rarl=)oV0A_
+0#ls=8_g2cFE+\[Elpe.5W!p^S?'P\UWUM78lV8%A>dTRLWSl5`N62ZI%a1i[(mZ`92kr7k^j7c;bI
+P0`sf5g%'n&lfLnWFbN(d<==o.N^s!M/bTt'L1rIO*`6;3"b[e`;FN;UY^k-*c98&d"jLS%$SkHF]b
+J_-,CoY_Od)3psK8e7'1t0];eBLtCc",DMFP"cjfZfZ6c(rejm)fTEb=TXrc/=c/fVqI?d4($fc4o9
+-YYG>"50d-hc=H(_FQ^r&kg#FWcD9aN[-Q#Um*8F"b-]sHr8,a#6:IBG9^LdiN8dVioTXl$:-_FtFS
+F+7ps53#c_UE`[/81fr6NmkcfG&NADBrP\PEY8c1LPDD">nM<R4):ct*F,1q:V<!`4u@:&(+$%0miC
+"jk3td,_=UJ=$RD9*B3$d3TFQ2&"A+'[]nqd:F*@FViGZ'ngO37"jJ&==_e<*7<:WdH)FsocMTc+OU
+uJdNp*c2'R^T-%rBFdUacRFXPUk.+4A0d\SGA[4B\E/CN&jK%To+LinFB=]6%idj6cu2)E]M1t,G^d
+q(Gd:g+'/)UP^-dg\67[6)jV4O_hDe)`OqE-[1?>#XNKe0RH22+,k^7+>4*e7D,!F[q,+?W-B\#FKI
+b=C5%H9[qTeeE'HTohX*A:t6:XeKmuq=Cp!N0N>GXeR_e3F][+I=OiC0LL!-">uT:=>h.A1e`C,foj
+?8R@+H'$eg4c0>al"LH&%c0en&IEF_B9ZB\&G_etm-4[;4@4C"?4fel?P;ol&FcE7YhEf-P9jQ"APn
+FOsN8f4B-WFa)GkGh84+f;3dp1f7>nI+QnsfB%J5ombTtJCkTffHl.%21sOMK\0:YfO]fiFbeV'LtI
+uLfVOJX[>WY`>7:NS"d<GQGYk8!\d)f/fd2g723Z]^Oc#OP4ts.*P?5VOFp:C'fqk.j[@>jbA3J:fM
+bo37aF%.pT\:-Sg*NKI!.9a01>1<_#I#b<W:U>A2CmMnK<oZY0YR\r'a)6aLL>=Y/ZVt+`j2_CfYGs
+ia^g(B1(ZJ@fB@P_rMRM_@th%qgSML9[Cb2/>)..F#KTTn!7QY,(D(GDM0OE$m?"q[R9@eRggFYQ.#
+<Y/-oi]!QQWDcZZJOTeAsar>S.d\k_KJ*D-[n(h'LM*2:L@mGme#)\+nF3%C->sW7mV_K&sb#dqjWO
+Ft/SM),7ltauKV*79J3NL!@ZW&7PX<'o7BLX)/DRKqAI/"L9^"MdT`h7E:1Vq?=)2gOps[!!lgt$3^
+5e?R>:#2=o]jGD6ZBMWf-e#d]<2p]m10Jk/1c4nfC+m#!3;<2fWuTQ#YlX]u-fhrXT3XoO93s+_&U2
+?6GR?20:7_]sU-4%OAHD@>.-=hE=6L1+/=Sc=t#od((J$ggQi:s'-r!+4"a$UtmnYUtGHCISFS#8)O
+nJ8tk@DMJ-2iT;3?p)i8_DMHMY7#hmc@0'a1q?P:Y@U8_aL"hY_s+_XAN>R'$TRG_mEnZV$@4g2B7M
+c<?Pm4`6(e,"kmOV`GrrI?Oj(:40FuSH92urG7$K_;C5WN-4,R7WY@SR,8#]p.+4:==V?qrl9?"Aj9
+H=E0CLCO7gQuiR>-Ar?-<CjP#fDkmo_S!"V#Da"Sl=9s8+,6^6hAql6O:GIp8:W\+Km59-Hj,30&DE
+W\LRd2Ecsqsk`Ic/^"TWe5^eFoe9`XZ-";km*81]@K:^=3Y!mXjLa=@>5ap5.F!m&Ceh>rO":4f]3!
+[_S<OkYKG/:sfPLL<gX#V:SS/V^bc?.GoZ3.6K-A!alH#7+Jj`d?Ka8u`.L"dm8]cn5@o@tOaa!g%,
+KemoKA=TU96";jsc^afQg@Y6ou!SCofYVq)h/;2r."1D_f;n7h"h[_tq5Y:@>5];D(Hom^?@Ml*J(6
+!nf,DTr&k,Hg_GU!:2=bV<GTC@7ekthI2:kL/AJdB5Hcm45$,_Z5BJuC5Q-m/[Y8=t'JL5"?:\2NJ8
+(Bu9@[Km9C-u"<6hAK.6lG+h'ldiXR[-Lc#lW>p"fR&6GVZHip"UHiZ(7Zj,A*-LWB/i)/+;BBW49d
+]_k88CFO=Z!f>aRL!KDIO%O>;FH>_d3WOZ@VtL2Q.P[H9AX?KePIcmF;L$*T^FSk3USDK5u,.KEQ[0
+F3)p?m>d)FpEg5K-H?0G[c7S",@bSJapY`^a>F`VLf(72aBla!!.ZW=G*icVWinpaErMp9S,eT+7O]
+e\k!*WC4^sX"<],VYV\4.3M!-WhW\DK_=.Pg&\$LrMt"aS?n.eY@MkDhJll*+\P-nVoES],)grV3SZ
+&0j@Y92T"F)?YXepf?rZAXcK7J%FW>#HU[=ri_e>ReM.E#i;_[S?;#8hD)Le"(X!<o,DKg<Cc<d%c6
+_hZ#UnLJ26Ta8['!GCY%l0r3g!^;@>F9f-iKoiC@$\i$qe-/<aLDY;l(h/a!H\4eM&8mTb9E^,K_2+
+,9BiDERAg.c_F9fm0i]ZXu82:FUWJa'iLkp$XEDQf@$5Xi"LVFHA80[N,I>t,&lBj):W+6'VXLIW;+
+7OOB0!O1"qZgasMdU\nB1);XfE07IE^d-_VRgQKbB"Qq#,isUId_=0I"SXg$VF>!85fVQruJ%'DLhq
+Ga=nVo7YF8b>R>T]Le*nH@KDVYn69R3E"[d7.KK6WJ^>p&TK)uh*s)ECK-DfG%W@a8#,]HHJD!p&+@
+$'eBa[0b!!j5>pe:aV=FaL6LPQ:hfPG_-+olik(`(YR0O0/W0o&R:!=0bJ!!OE?!!%du!)@<[E$#++
+(O'50JH,ct&-m`9+G@fcGA%Qgi6e:'&:u#=#C%JD&/,'U#oCB,GF0(p*ghN"/Y]HPBS[3%^b>`g'6Y
+DcMXLG_ph=[9Lp_,GT;]uAOELi=8t]L\g5hR&=EFX9]_*/(!g%Sj#Ts0ICQWcHD0+]l:_nhp]na\p?
+-1$;??PFE<*VD0J^DO,W?5*C(^PSkp.$!HJiO!))u5"#%%(Q/OTl'&K*@@\JTt.9C-$\b>]O6RnoM2
+&+T73mNsLLjBjR+6T[=+V^'KH<LPWs%!ssRYK86ZfJUg&U;\7c`HZO.&Jl$]b\?>q"(L<?+#MuIdW*
++J(R<*+\F8iEK5YZTcFpi4UFALKR:IU3r`a#\RUp!;oa?ZB.rcrH5r33EtdfOhl15+eoLkdC4;mW#b
+"GI+:&MP:-9)4-kqh3>F#6?9+B:E%;Qj40."9n)o`UJ(RV[$#uJnNj4K)p,CU4M7#"RYN-E!V?JH30
+[<LX7L<5U$2I5R&>;K><!WJP(^.9NM%8JBX(_+Gg;[J\FeXB4Gm#G]Xa0lX1RsBZPV9:V_ZOjLPYGZ
+9cjFO=X's&IKLr\3T+SEETqEKI:5N,fjEs@;J1HicI%P#(joU'&^>=EOPuT$)L\)=/rpg.JMA9]jJ!
+GCeZ5)cEUB3)!\;78bB$UHPBEiP[1;'Cg"hTeOC]R?;bqtLp+4n/jc*h^=D:'A#NT,8!`*:A_k&d=t
+R=AcGmBq;2BW8C6j8pQF*tpC3<^nB")$OE7q9&@cGY8<d$Z%8r!Dkf^U1W-AsF=mI.l<PSF^<WhY*c
+G-BWkbqE/#1aWdXLQ:PA^#/='aCIBCg@J<_[\"RiA*r4.EbQQU'q<m(nLUsZ7<cmEMLC^>Z%sp%/]3
+N")$dC;<'UL`6FjBK."m#<%.RFOT-O\qBL*2lfW(F$.H2,P,>g^L^G(l*WuN5b>o1KmN+ElW!m>,\\
+n;n\+;>@q19*R?1%tpEL%4:^Nbj=ni"qM2BTiQQA=bXoB?<ItP>K(>1*7cnW@XZS!+c)3d9:3[KP!O
+0&-^uX5[j_Oiei(*b,OA5M2,Lr&.W@"c4h7lb8>YuiR9&p!apOL'bG<I/6rMi@9sKgA[4lX!l_s*'q
+L+nNWbok<75uGJmmk^P^o:PIBr81Xq1kSUsaXO+:q'V#O.[jF<2VMMIH[gR,f#&A;CM%9%/Xb,D.0_
+bT.+j;5tW[AIP=i-AP_T7pD;H]l2[B#op7^Vm+Ym#U@0C/"MDCicc-rnF1a/pQ=Z&,R;FJ:`j;ZeoV
+@pnE;tXKGpjn.Y]A&KJ7&cflTN7\=b+/K>SfR$faNMKHUEYd=,:,ZVK+_R4D=j7d@8GHlaMjE^uB"d
+%DO""t6Jn#C3HXisY+>MB<*l`2e-=g),7.6hq+i/\HCISYt`kMoI(jL:[Gd*/;kQXm;GD]s$c5K1]4
+&!\lraNe\M+/dN\q#23\oR.ZN)QsEjB*lG!C@PKj(I<K)Zra=gF6]'/N=Tp.4+WR58Uj2A3H"XK(B?
+=_[lL)6k)KVG8>oPW0d!R?U(e++Z+!^cF2;P!WJj^\m.%i=93-^%<nk,l*"R.?@oXpIM7b>*,f@q$l
+*C@>(2t_/pF;,aNTXk+t.L:VaKL"LY;?GnF5'V`G\B4u*BI+jUYfBY!KE>S4atJs6aOCP6i@#s,KE)
+kiI$:3?X=qK\$5t'a$O'qFSAN[f)ZY#'"5q<5!?*%_?m%4WO9-:.]?jT/&2Ju@>a*&b7LP;3:on[)#
+u"a#!ML>eJDartbd[WTK'Xq:pTumnM#%KED;M"leh;^#6&8AJ,",Ol/IdV1M,>lP7+(^/U'*rC;,/8
+BiRZ.\FBOMH+@JZN]bf]3@>mMqo841o<JN9^NDZi:7bHN9j&#<)7A)QE#j.-KP]nUpX=T$lr?()'JW
+Nb<9Z;h[HN_eZOQWipKqN6V"OJ>IMjO_Lk%Hs!TO7h8jH,2u*!O5n*#rIe'S\?\!Y$!g!_`&68Pfs@
+jCgE9TL^tkE^2U7E!dB^BS2<F-3JeFLc=95WXM;N4i:Y@!<R7nbb4>Qa)$b_M!dm07Lf]SJ6*_!jk^
+LZ?<X4bQ((0p4okZ)4+hJf6%Xar$TT+9iT]_[6S)S?=m\B8`;-#M/9T%ErBJT;lPq_/I8F)U08<_'T
+G0#5'nOap8'(J"<)/<J=tN2,OSP!uU5"^tFWo`=[#1*.+q*ZN6VBE74Og*k;VGDLb..$aA$28!>&@!
+u`Aj_o_Oa0<B231F6)Lq+T%$r';<gI6SmsCM<8*mAl@i"R1\RWp>-1fi`EB6ADQ[!n]iXK!5H%SBRS
+t\m=<c,n~>
+%%EndData
+end restore showpage
+%%Trailer
+%%EOF
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 0 0 567 354
+%%Title: ./booklet/USER@HISTOGRAMS/+e-mass@distribution.eps: e+e-mass_distribution
+%%Creator: ROOT Version 5.18/00
+%%CreationDate: Wed Aug 4 20:03:25 2010
+%%EndComments
+%%BeginProlog
+80 dict begin
+/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
+/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
+/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
+/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
+/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
+/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
+/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
+/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
+/mp {newpath /y exch def /x exch def} def
+/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
+/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
+/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
+/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
+/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
+/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
+/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
+/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
+ 0 w3 neg d w3 neg 0 d cl s } def
+/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl fill gr} def
+/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl s gr} def
+/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
+ sub m w w d s} def
+/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
+/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
+/reencdict 24 dict def /ReEncode {reencdict begin /nco&na exch def
+/nfnam exch def /basefontname exch def /basefontdict basefontname findfont def
+/newfont basefontdict maxlength dict def basefontdict {exch dup /FID ne
+{dup /Encoding eq {exch dup length array copy newfont 3 1 roll put} {exch
+newfont 3 1 roll put} ifelse} {pop pop} ifelse } forall newfont
+/FontName nfnam put nco&na aload pop nco&na length 2 idiv {newfont
+/Encoding get 3 1 roll put} repeat nfnam newfont definefont pop end } def
+/accvec [ 176 /agrave 181 /Agrave 190 /acircumflex 192 /Acircumflex
+201 /adieresis 204 /Adieresis 209 /ccedilla 210 /Ccedilla 211 /eacute
+212 /Eacute 213 /egrave 214 /Egrave 215 /ecircumflex 216 /Ecircumflex
+217 /edieresis 218 /Edieresis 219 /icircumflex 220 /Icircumflex
+221 /idieresis 222 /Idieresis 223 /ntilde 224 /Ntilde 226 /ocircumflex
+228 /Ocircumflex 230 /Odieresis 231 /ucircumflex 236 /Ucircumflex
+237 /udieresis 238 /Udieresis 239 /aring 240 /odieresis 242 /Aring 243 /ydieresis
+244 /Ydieresis 246 /aacute 247 /Aacute 252 /ugrave 253 /Ugrave
+127 /atilde 128 /Atilde 129 /oacute 130 /Oacute 131 /iacute
+132 /Iacute 133 /igrave 134 /Igrave 135 /otilde 136 /Otilde
+137 /uacute 138 /Uacute] def
+/Times-Roman /Times-Roman accvec ReEncode
+/Times-Italic /Times-Italic accvec ReEncode
+/Times-Bold /Times-Bold accvec ReEncode
+/Times-BoldItalic /Times-BoldItalic accvec ReEncode
+/Helvetica /Helvetica accvec ReEncode
+/Helvetica-Oblique /Helvetica-Oblique accvec ReEncode
+/Helvetica-Bold /Helvetica-Bold accvec ReEncode
+/Helvetica-BoldOblique /Helvetica-BoldOblique accvec ReEncode
+/Courier /Courier accvec ReEncode
+/Courier-Oblique /Courier-Oblique accvec ReEncode
+/Courier-Bold /Courier-Bold accvec ReEncode
+/Courier-BoldOblique /Courier-BoldOblique accvec ReEncode
+/oshow {gsave [] 0 sd true charpath stroke gr} def
+/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
+ text sw pop xs add /xs exch def} def
+/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
+pop neg xs add /xs exch def} def
+/accspe [ 65 /plusminus 66 /bar 67 /existential 68 /universal
+69 /exclam 70 /numbersign 71 /greater 72 /question 73 /integral
+74 /colon 75 /semicolon 76 /less 77 /bracketleft 78 /bracketright
+79 /greaterequal 80 /braceleft 81 /braceright 82 /radical
+83 /spade 84 /heart 85 /diamond 86 /club 87 /lessequal
+88 /multiply 89 /percent 90 /infinity 48 /circlemultiply 49 /circleplus
+50 /emptyset 51 /lozenge 52 /bullet 53 /arrowright 54 /arrowup
+55 /arrowleft 56 /arrowdown 57 /arrowboth 48 /degree 44 /comma 43 /plus 45 /angle 42 /angleleft 47 /divide 61 /notequal 40 /equivalence 41 /second 97 /approxequal 98 /congruent 99 /perpendicular 100 /partialdiff 101 /florin 102 /intersection
+ 103 /union 104 /propersuperset 105 /reflexsuperset 106 /notsubset 107 /propersubset 108 /reflexsubset 109 /element 110 /notelement 111 /gradient 112 /logicaland 113 /logicalor 114 /arrowdblboth 115 /arrowdblleft 116 /arrowdblup 117 /arrowdblright
+ 118 /arrowdbldown 119 /ampersand 120 /omega1 121 /similar 122 /aleph ] def
+/Symbol /Special accspe ReEncode
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 3 lw 0.999 0.999 0.999 c 2268 1415 0 0 bf black 0.999 0.999 0.999 c 1814 1132 227 142 bf black 1814 1132 227 142 bl 0.999 0.999 0.999 c 1 1 1 c black 0.999 0.999 0.999 c 227 790 m 15 X -5 Y
+ 15 X -13 Y 15 X -5 Y 15 X -8 Y 30 X -6 Y 16 X -18 Y 15 X -8 Y 15 X -17 Y 15 X -7 Y 15 X -14 Y 15 X -10 Y 15 X -10 Y 15 X -14 Y 16 X -10 Y 15 X -13 Y 15 X -19 Y 15 X -8 Y 15 X -8 Y 15 X -17 Y 15 X -12 Y 15 X -15 Y 15 X -10 Y 16 X -11 Y 15 X -13 Y 15
+ X -14 Y 15 X -9 Y 15 X -16 Y 15 X -6 Y 15 X -11 Y 15 X -11 Y 16 X -8 Y 15 X -8 Y 15 X -9 Y 15 X -5 Y 15 X -6 Y 15 X -4 Y 15 X -7 Y 15 X -1 Y 15 X -3 Y 16 X -4 Y 15 X -1 Y 15 X -3 Y 15 X 2 Y 15 X 3 Y 15 X 2 Y 15 X 8 Y 15 X 2 Y 16 X 9 Y 15 X 11 Y 15
+ X 12 Y 15 X 17 Y 15 X 20 Y 15 X 24 Y 15 X 33 Y 15 X 42 Y 16 X 55 Y 15 X 74 Y 15 X 103 Y 15 X 131 Y 15 X 108 Y 15 X 36 Y 15 X -13 Y 15 X -17 Y 15 X -16 Y 16 X -19 Y 15 X -13 Y 15 X -12 Y 15 X -7 Y 15 X -7 Y 15 X -8 Y 15 X -5 Y 15 X -9 Y 16 X -8 Y 15
+ X 4 Y 15 X 2 Y 15 X -22 Y 15 X 14 Y 15 X -13 Y 15 X -1 Y 15 X -2 Y 15 X -14 Y 16 X 13 Y 15 X -14 Y 15 X 17 Y 15 X -4 Y 15 X -13 Y 15 X -2 Y 15 X -10 Y 31 X -3 Y 15 X 6 Y 15 X -9 Y 15 X 7 Y 15 X 21 Y 15 X -42 Y 15 X 22 Y 15 X 11 Y 15 X -28 Y 16 X 6
+ Y 15 X 8 Y 15 X -13 Y 15 X -8 Y 15 X 22 Y 15 X -19 Y 15 X 13 Y 15 X -27 Y 16 X 24 Y 15 X -20 Y 15 X -3 Y 15 X 18 Y 15 X -11 Y 15 X 29 Y 15 X 13 Y 15 X -42 Y 15 X -5 Y 16 X -13 Y 15 X 19 Y 15 X -22 Y 15 X s black 227 142 m 1814 X s 227 176 m -34 Y s
+ 263 159 m -17 Y s 299 159 m -17 Y s 336 159 m -17 Y s 372 159 m -17 Y s 408 176 m -34 Y s 444 159 m -17 Y s 481 159 m -17 Y s 517 159 m -17 Y s 553 159 m -17 Y s 590 176 m -34 Y s 626 159 m -17 Y s 662 159 m -17 Y s 698 159 m -17 Y s 735 159 m -17
+ Y s 771 176 m -34 Y s 807 159 m -17 Y s 844 159 m -17 Y s 880 159 m -17 Y s 916 159 m -17 Y s 952 176 m -34 Y s 989 159 m -17 Y s 1025 159 m -17 Y s 1061 159 m -17 Y s 1098 159 m -17 Y s 1134 176 m -34 Y s 1170 159 m -17 Y s 1206 159 m -17 Y s 1243
+ 159 m -17 Y s 1279 159 m -17 Y s 1315 176 m -34 Y s 1352 159 m -17 Y s 1388 159 m -17 Y s 1424 159 m -17 Y s 1460 159 m -17 Y s 1497 176 m -34 Y s 1533 159 m -17 Y s 1569 159 m -17 Y s 1606 159 m -17 Y s 1642 159 m -17 Y s 1678 176 m -34 Y s 1714
+ 159 m -17 Y s 1751 159 m -17 Y s 1787 159 m -17 Y s 1823 159 m -17 Y s 1860 176 m -34 Y s 1896 159 m -17 Y s 1932 159 m -17 Y s 1968 159 m -17 Y s 2005 159 m -17 Y s 2041 176 m -34 Y s 2041 176 m -34 Y s
+ gsave 2268 1415 0 0 C 194 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (40) show NC gr
+ gsave 2268 1415 0 0 C 377 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (50) show NC gr
+ gsave 2268 1415 0 0 C 556 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (60) show NC gr
+ gsave 2268 1415 0 0 C 738 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (70) show NC gr
+ gsave 2268 1415 0 0 C 921 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (80) show NC gr
+ gsave 2268 1415 0 0 C 1103 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (90) show NC gr
+ gsave 2268 1415 0 0 C 1267 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (100) show NC gr
+ gsave 2268 1415 0 0 C 1453 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (110) show NC gr
+ gsave 2268 1415 0 0 C 1632 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (120) show NC gr
+ gsave 2268 1415 0 0 C 1811 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (130) show NC gr
+ gsave 2268 1415 0 0 C 1994 91 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (140) show NC gr 0.999 0.999 0.999 c 227 142 m 1132 Y s 281 142 m -54 X s 254 175 m -27 X s 254 209 m -27 X s 254 243 m -27 X s 281 276 m -54 X s 254 310 m -27 X s 254
+ 344 m -27 X s 254 377 m -27 X s 281 411 m -54 X s 254 445 m -27 X s 254 478 m -27 X s 254 512 m -27 X s 281 546 m -54 X s 254 579 m -27 X s 254 613 m -27 X s 254 647 m -27 X s 281 680 m -54 X s 254 714 m -27 X s 254 748 m -27 X s 254 782 m -27 X s
+ 281 815 m -54 X s 254 849 m -27 X s 254 883 m -27 X s 254 916 m -27 X s 281 950 m -54 X s 254 984 m -27 X s 254 1017 m -27 X s 254 1051 m -27 X s 281 1085 m -54 X s 254 1118 m -27 X s 254 1152 m -27 X s 254 1186 m -27 X s 281 1219 m -54 X s 281
+ 1219 m -54 X s 254 1253 m -27 X s
+ gsave 2268 1415 0 0 C 183 122 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0) show NC gr
+ gsave 2268 1415 0 0 C 141 255 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.2) show NC gr
+ gsave 2268 1415 0 0 C 137 392 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.4) show NC gr
+ gsave 2268 1415 0 0 C 141 525 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.6) show NC gr
+ gsave 2268 1415 0 0 C 141 658 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (0.8) show NC gr
+ gsave 2268 1415 0 0 C 190 791 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr
+ gsave 2268 1415 0 0 C 141 925 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.2) show NC gr
+ gsave 2268 1415 0 0 C 137 1062 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.4) show NC gr
+ gsave 2268 1415 0 0 C 141 1199 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (1.6) show NC gr 1 0 0 c 1 1 1 c black 1 0 0 c 227 1011 m 15 X -5 Y 15 X -6 Y 15 X -5 Y 15 X -5 Y 15 X -4 Y 15 X -5 Y 16 X -5 Y 15 X -4 Y 15 X -5 Y 15 X -4 Y 15 X -4 Y
+ 15 X -4 Y 15 X -4 Y 15 X -3 Y 16 X -4 Y 15 X -4 Y 15 X -3 Y 15 X -2 Y 15 X -3 Y 15 X -3 Y 15 X -3 Y 15 X -3 Y 15 X -2 Y 16 X -2 Y 15 X -2 Y 15 X -2 Y 15 X -1 Y 15 X -2 Y 30 X -1 Y 15 X -1 Y 61 X 1 Y 15 X 2 Y 15 X 2 Y 15 X 2 Y 15 X 3 Y 15 X 2 Y 16 X
+ 4 Y 15 X 4 Y 15 X 4 Y 15 X 5 Y 15 X 7 Y 15 X 6 Y 15 X 9 Y 15 X 8 Y 16 X 9 Y 15 X 11 Y 15 X 12 Y 15 X 14 Y 15 X 15 Y 15 X 18 Y 15 X 21 Y 15 X 24 Y 16 X 30 Y 15 X 36 Y 15 X 43 Y 15 X 46 Y 15 X 19 Y 15 X -29 Y 15 X -48 Y 15 X -43 Y 15 X -35 Y 16 X -30
+ Y 15 X -25 Y 15 X -21 Y 15 X -19 Y 15 X -17 Y 15 X -15 Y 15 X -13 Y 15 X -13 Y 16 X -11 Y 15 X -10 Y 15 X -10 Y 15 X -11 Y 15 X -8 Y 15 X -8 Y 15 X -8 Y 15 X -7 Y 15 X -7 Y 16 X -6 Y 15 X -7 Y 15 X -5 Y 15 X -5 Y 15 X -8 Y 15 X -5 Y 15 X -5 Y 15 X
+ -6 Y 16 X -4 Y 15 X -4 Y 15 X -6 Y 15 X -4 Y 15 X -4 Y 15 X -5 Y 15 X -2 Y 15 X -5 Y 15 X -4 Y 16 X -5 Y 15 X -2 Y 15 X -3 Y 15 X -5 Y 15 X -2 Y 15 X -5 Y 15 X -2 Y 15 X -5 Y 31 X -5 Y 15 X -4 Y 30 X -5 Y 15 X -1 Y 15 X -2 Y 15 X -6 Y 15 X -3 Y 16
+ X -2 Y 15 X -2 Y 15 X -4 Y 15 X s 0 1 0 c 1 1 1 c black 0 1 0 c 227 1013 m 15 X -5 Y 15 X -4 Y 15 X -5 Y 15 X -4 Y 15 X -4 Y 15 X -4 Y 16 X -3 Y 15 X -3 Y 15 X -3 Y 15 X -3 Y 15 X -2 Y 15 X -3 Y 15 X -2 Y 15 X -2 Y 16 X -1 Y 15 X -2 Y 15 X -1 Y 15
+ X -1 Y 15 X -1 Y 15 X -1 Y 15 X -1 Y 76 X 1 Y 15 X 1 Y 15 X 1 Y 15 X 1 Y 15 X 2 Y 15 X 2 Y 16 X 1 Y 15 X 3 Y 15 X 2 Y 15 X 3 Y 15 X 3 Y 15 X 3 Y 15 X 3 Y 15 X 4 Y 15 X 3 Y 16 X 5 Y 15 X 4 Y 15 X 5 Y 15 X 5 Y 15 X 6 Y 15 X 6 Y 15 X 6 Y 15 X 7 Y 16 X
+ 7 Y 15 X 8 Y 15 X 9 Y 15 X 10 Y 15 X 11 Y 15 X 13 Y 15 X 14 Y 15 X 17 Y 16 X 21 Y 15 X 25 Y 15 X 31 Y 15 X 33 Y 15 X 10 Y 15 X -32 Y 15 X -47 Y 15 X -42 Y 15 X -34 Y 16 X -28 Y 15 X -24 Y 15 X -20 Y 15 X -18 Y 15 X -16 Y 15 X -15 Y 15 X -13 Y 15 X
+ -12 Y 16 X -10 Y 15 X -11 Y 15 X -10 Y 15 X -8 Y 15 X -10 Y 15 X -6 Y 15 X -8 Y 15 X -7 Y 15 X -6 Y 16 X -7 Y 15 X -6 Y 15 X -7 Y 15 X -5 Y 15 X -6 Y 15 X -5 Y 15 X -3 Y 15 X -7 Y 16 X -3 Y 15 X -5 Y 15 X -5 Y 15 X -5 Y 15 X -5 Y 15 X -1 Y 15 X -5
+ Y 15 X -6 Y 15 X -1 Y 16 X -5 Y 15 X -4 Y 15 X -2 Y 15 X -4 Y 15 X -4 Y 15 X -3 Y 15 X -3 Y 15 X -2 Y 16 X -3 Y 15 X -3 Y 15 X -3 Y 15 X -2 Y 15 X -4 Y 15 X -4 Y 15 X -3 Y 15 X -2 Y 15 X -3 Y 16 X -1 Y 15 X -4 Y 15 X -2 Y 15 X s 1 0 0 c 227 142 m
+ 1132 Y s 281 142 m -54 X s black
+ gsave 2268 1415 0 0 C 208 120 t 0 r -23 0 t /Helvetica-Bold findfont 53.2685 sf 0 0 m (1) show NC gr 1 0 0 c 254 193 m -27 X s 254 222 m -27 X s 254 244 m -27 X s 254 260 m -27 X s 254 274 m -27 X s 254 285 m -27 X s 254 295 m -27 X s 254 303 m
+ -27 X s 281 311 m -54 X s black
+ gsave 2268 1415 0 0 C 208 290 t 0 r -57 0 t /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 362 m -27 X s 254 392 m -27 X s 254 413 m -27 X s 254 430 m -27 X s 254 443 m -27 X s 254 455 m -27 X s 254 464 m -27 X s 254 473 m
+ -27 X s 281 481 m -54 X s black
+ gsave 2268 1415 0 0 C 186 479 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (2) show NC gr
+ gsave 2268 1415 0 0 C 129 453 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 532 m -27 X s 254 562 m -27 X s 254 583 m -27 X s 254 599 m -27 X s 254 613 m -27 X s 254 624 m -27 X s 254 634 m -27 X s 254 643 m -27 X s
+ 281 651 m -54 X s black
+ gsave 2268 1415 0 0 C 186 651 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (3) show NC gr
+ gsave 2268 1415 0 0 C 129 620 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 702 m -27 X s 254 731 m -27 X s 254 753 m -27 X s 254 769 m -27 X s 254 783 m -27 X s 254 794 m -27 X s 254 804 m -27 X s 254 812 m -27 X s
+ 281 820 m -54 X s black
+ gsave 2268 1415 0 0 C 186 818 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (4) show NC gr
+ gsave 2268 1415 0 0 C 129 791 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 871 m -27 X s 254 901 m -27 X s 254 922 m -27 X s 254 939 m -27 X s 254 952 m -27 X s 254 964 m -27 X s 254 973 m -27 X s 254 982 m -27 X s
+ 281 990 m -54 X s black
+ gsave 2268 1415 0 0 C 186 993 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (5) show NC gr
+ gsave 2268 1415 0 0 C 129 963 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 1041 m -27 X s 254 1071 m -27 X s 254 1092 m -27 X s 254 1108 m -27 X s 254 1122 m -27 X s 254 1133 m -27 X s 254 1143 m -27 X s 254 1152 m
+ -27 X s 281 1159 m -54 X s black
+ gsave 2268 1415 0 0 C 186 1160 t 0 r /Helvetica-Bold findfont 34.244 sf 0 0 m (6) show NC gr
+ gsave 2268 1415 0 0 C 129 1130 t 0 r /Helvetica-Bold findfont 53.2685 sf 0 0 m (10) show NC gr 1 0 0 c 254 1211 m -27 X s 254 1240 m -27 X s 254 1262 m -27 X s
+ gr gr
+showpage
+end
+%%EOF
--- /dev/null
+%%
+%% This is file `tocloft.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tocloft.dtx (with options: `usc')
+%%
+%% Author: Peter Wilson (CUA) now at peter.r.wilson@boeing.com
+%% (or pandgwilson@earthlink.net)
+%% Copyright 1998-2003 Peter R. Wilson
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any
+%% later version.
+%% The latest version of the license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2003/06/01 or later.
+%%
+%% This work has the LPPL maintenance status "author-maintained".
+%%
+%% This work consists of the files listed in the README file.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tocloft}[2003/09/26 v2.3c parameterised ToC, etc., typesetting]
+\providecommand{\PRWPackageNote}[2]{%
+ \GenericWarning{%
+ (#1)\@spaces\@spaces\@spaces\@spaces
+ }{%
+ Package #1 Note: #2%
+ }%
+}
+\providecommand{\PRWPackageNoteNoLine}[2]{%
+ \PRWPackageNote{#1}{#2\@gobble}%
+}
+\newcommand{\@cftquit}{}
+\newif\if@cfthaschapter
+\newif\if@cftkoma
+ \@cftkomafalse
+\@ifclassloaded{scrartcl}{\@cftkomatrue}{}
+\@ifclassloaded{scrreprt}{\@cftkomatrue}{}
+\@ifclassloaded{scrbook}{\@cftkomatrue}{}
+
+\@ifundefined{chapter}{%
+ \@cfthaschapterfalse
+ \@ifundefined{section}{%
+ \PackageWarning{tocloft}%
+ {I don't recognize any sectional divisions so I'll do nothing}
+ \renewcommand{\@cftquit}{\endinput}
+ }{\PRWPackageNoteNoLine{tocloft}{The document has section divisions}}
+ }{\@cfthaschaptertrue
+ \PRWPackageNoteNoLine{tocloft}{The document has chapter divisions}}
+\@cftquit
+\newif\if@cfttocbibind
+\AtBeginDocument{%
+ \@ifpackageloaded{tocbibind}{\@cfttocbibindtrue}{\@cfttocbibindfalse}
+ \if@cfttocbibind
+ \@ifpackagelater{tocbibind}{1998/11/16}{}{%
+ \PackageWarning{tocloft}{%
+You are using a version of the tocbibind package\MessageBreak
+that is not compatible with tocloft.\MessageBreak
+The results may be surprising.\MessageBreak
+Consider installing the current version of tocbibind.}}
+ \fi
+}
+\newif\if@cftnctoc\@cftnctocfalse
+\DeclareOption{titles}{\@cftnctoctrue}
+ %% \ProcessOptions\relax
+\newif\if@cftsubfigopt\@cftsubfigoptfalse
+\DeclareOption{subfigure}{\@cftsubfigopttrue}
+
+\ProcessOptions\relax
+
+\newcommand{\tocloftpagestyle}[1]{%
+ \def\@cftpagestyle{\thispagestyle{#1}}}
+\tocloftpagestyle{plain}
+
+\newcommand{\cftmarktoc}{%
+ \@mkboth{\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}
+\newcommand{\cftmarklof}{%
+ \@mkboth{\MakeUppercase\listfigurename}{\MakeUppercase\listfigurename}}
+\newcommand{\cftmarklot}{%
+ \@mkboth{\MakeUppercase\listtablename}{\MakeUppercase\listtablename}}
+\if@cftkoma
+ \renewcommand{\cftmarktoc}{%
+ \@mkboth{\contentsname}{\contentsname}}
+ \renewcommand{\cftmarklof}{%
+ \@mkboth{\listfigurename}{\listfigurename}}
+ \renewcommand{\cftmarklot}{%
+ \@mkboth{\listtablename}{\listtablename}}
+\fi
+\providecommand{\@cfttocstart}{%
+ \if@cfthaschapter
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse
+ \fi
+ \fi}
+\providecommand{\@cfttocfinish}{%
+ \if@cfthaschapter
+ \if@restonecol\twocolumn\fi
+ \fi}
+\providecommand{\phantomsection}{}
+
+\newcommand{\@cftdobibtoc}{%
+ \if@dotoctoc
+ \if@bibchapter
+ \phantomsection
+ \addcontentsline{toc}{chapter}{\contentsname}
+ \else
+ \phantomsection
+ \addcontentsline{toc}{\@tocextra}{\contentsname}
+ \fi
+ \fi}
+
+\newlength{\cftparskip}
+\setlength{\cftparskip}{0pt}
+
+\AtBeginDocument{%
+\if@cftnctoc\else
+ \renewcommand{\tableofcontents}{%
+ \@cfttocstart
+ \par
+ \begingroup
+ \parindent\z@ \parskip\cftparskip
+ \@cftmaketoctitle
+ \if@cfttocbibind
+ \@cftdobibtoc
+ \fi
+ \@starttoc{toc}%
+ \endgroup
+ \@cfttocfinish}
+\fi
+}
+\newcommand{\@cftmaketoctitle}{%
+ \addpenalty\@secpenalty
+ \if@cfthaschapter
+ \vspace*{\cftbeforetoctitleskip}
+ \else
+ \vspace{\cftbeforetoctitleskip}
+ \fi
+ \@cftpagestyle
+ {\interlinepenalty\@M
+ {\cfttoctitlefont\contentsname}{\cftaftertoctitle}
+ \cftmarktoc
+ \par\nobreak
+ \vskip \cftaftertoctitleskip
+ \@afterheading}}
+\newlength{\cftbeforetoctitleskip}
+\newlength{\cftaftertoctitleskip}
+\if@cfthaschapter
+ \setlength{\cftbeforetoctitleskip}{50pt}
+ \setlength{\cftaftertoctitleskip}{40pt}
+\else
+ \setlength{\cftbeforetoctitleskip}{3.5ex \@plus 1ex \@minus .2ex}
+ \setlength{\cftaftertoctitleskip}{2.3ex \@plus.2ex}
+\fi
+\if@cfthaschapter
+ \newcommand{\cfttoctitlefont}{\normalfont\Huge\bfseries}
+ \if@cftkoma\renewcommand{\cfttoctitlefont}{\size@chapter\sectfont}\fi
+\else
+ \newcommand{\cfttoctitlefont}{\normalfont\Large\bfseries}
+ \if@cftkoma\renewcommand{\cfttoctitlefont}{\size@section\sectfont}\fi
+\fi
+\newcommand{\cftaftertoctitle}{}
+\newcommand{\cftsetpnumwidth}[1]{\renewcommand{\@pnumwidth}{#1}}
+\newcommand{\cftsetrmarg}[1]{\renewcommand{\@tocrmarg}{#1}}
+\providecommand{\cftdot}{.}
+\providecommand{\cftdotfill}[1]{%
+ \leaders\hbox{$\m@th\mkern #1 mu\hbox{\cftdot}\mkern #1 mu$}\hfill}
+\providecommand{\cftdotsep}{4.5}
+\newcommand{\cftnodots}{10000}
+\newcommand{\cftparfillskip}{\parfillskip=0pt plus1fil}
+\renewcommand{\numberline}[1]{%
+ \hb@xt@\@tempdima{\@cftbsnum #1\@cftasnum\hfil}\@cftasnumb}
+\newcommand{\@cftbsnum}{}
+\newcommand{\@cftasnum}{}
+\newcommand{\@cftasnumb}{}
+\newif\if@cftdopart
+\newif\if@cfthaspart
+\@ifundefined{part}{\@cfthaspartfalse}{\@cfthasparttrue}
+\if@cfthaspart
+\renewcommand*{\l@part}[2]{%
+ \@cftdopartfalse
+ \ifnum \c@tocdepth >-2\relax
+ \if@cfthaschapter
+ \@cftdoparttrue
+ \fi
+ \ifnum \c@tocdepth >\m@ne
+ \if@cfthaschapter\else
+ \@cftdoparttrue
+ \fi
+ \fi
+ \fi
+ \if@cftdopart
+ \if@cfthaschapter
+ \addpenalty{-\@highpenalty}%
+ \else
+ \addpenalty\@secpenalty
+ \fi
+ \addvspace{\cftbeforepartskip}%
+ \begingroup
+ {\leftskip \cftpartindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cftpartindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cftpartnumwidth\relax
+ \let\@cftbsnum \cftpartpresnum
+ \let\@cftasnum \cftpartaftersnum
+ \let\@cftasnumb \cftpartaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cftpartfont \cftpartpresnum #1}%
+ \cftpartfillnum{#2}}
+ \nobreak
+ \if@cfthaschapter
+ \global\@nobreaktrue
+ \everypar{\global\@nobreakfalse\everypar{}}%
+ \else
+ \if@compatibility
+ \global\@nobreaktrue
+ \everypar{\global\@nobreakfalse\everypar{}}%
+ \fi
+ \fi
+ \endgroup
+ \fi}
+\fi
+\if@cfthaspart
+ \newlength{\cftbeforepartskip}
+ \setlength{\cftbeforepartskip}{2.25em \@plus\p@}
+ \newlength{\cftpartnumwidth}
+ \setlength{\cftpartnumwidth}{0em}
+ \newcommand{\cftpartfont}{\large\bfseries}
+ \newcommand{\cftpartpresnum}{}
+ \newcommand{\cftpartaftersnum}{}
+ \newcommand{\cftpartaftersnumb}{}
+ \newcommand{\cftpartleader}{\large\bfseries\cftdotfill{\cftpartdotsep}}
+ \newcommand{\cftpartdotsep}{\cftnodots}
+ \newcommand{\cftpartpagefont}{\large\bfseries}
+ \newcommand{\cftpartafterpnum}{}
+ \newlength{\cftpartindent}
+ \setlength{\cftpartindent}{0em}
+ \newcommand{\cftpartfillnum}[1]{%
+ {\cftpartleader}%
+ {\hb@xt@\@pnumwidth{\hss {\cftpartpagefont #1}}}\cftpartafterpnum\par}
+ \if@cftkoma
+ \setlength{\cftpartnumwidth}{2em}
+ \renewcommand{\cftpartfont}{\sectfont\large}
+ \renewcommand{\cftpartpagefont}{\sectfont\large}
+ \fi
+\fi
+
+\if@cfthaschapter
+\renewcommand*{\l@chapter}[2]{%
+ \ifnum \c@tocdepth >\m@ne
+ \addpenalty{-\@highpenalty}%
+ \vskip \cftbeforechapskip
+ {\leftskip \cftchapindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cftchapindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cftchapnumwidth\relax
+ \let\@cftbsnum \cftchappresnum
+ \let\@cftasnum \cftchapaftersnum
+ \let\@cftasnumb \cftchapaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cftchapfont #1}\nobreak
+ \cftchapfillnum{#2}}
+ \fi}
+\fi
+\if@cfthaschapter
+ \newlength{\cftbeforechapskip}
+ \setlength{\cftbeforechapskip}{1.0em \@plus\p@}
+ \newlength{\cftchapindent}
+ \setlength{\cftchapindent}{0em}
+ \newlength{\cftchapnumwidth}
+ \setlength{\cftchapnumwidth}{1.5em}
+ \newcommand{\cftchapfont}{\bfseries}
+ \newcommand{\cftchappresnum}{}
+ \newcommand{\cftchapaftersnum}{}
+ \newcommand{\cftchapaftersnumb}{}
+ \newcommand{\cftchapleader}{\bfseries\cftdotfill{\cftchapdotsep}}
+ \newcommand{\cftchapdotsep}{\cftnodots}
+ \newcommand{\cftchappagefont}{\bfseries}
+ \newcommand{\cftchapafterpnum}{}
+ \newcommand{\cftchapfillnum}[1]{
+ {\cftchapleader}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\cftchappagefont #1}\cftchapafterpnum\par}
+ \if@cftkoma
+ \renewcommand{\cftchapfont}{\sectfont}
+ \fi
+\fi
+
+\renewcommand*{\l@section}[2]{%
+ \ifnum \c@tocdepth >\z@
+ \if@cfthaschapter
+ \vskip \cftbeforesecskip
+ \else
+ \addpenalty\@secpenalty
+ \addvspace{\cftbeforesecskip}
+ \fi
+ {\leftskip \cftsecindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cftsecindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cftsecnumwidth\relax
+ \let\@cftbsnum \cftsecpresnum
+ \let\@cftasnum \cftsecaftersnum
+ \let\@cftasnumb \cftsecaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cftsecfont #1}\nobreak
+ \cftsecfillnum{#2}}
+ \fi}
+\newlength{\cftbeforesecskip}
+\newlength{\cftsecindent}
+\newlength{\cftsecnumwidth}
+\newcommand{\cftsecpresnum}{}
+\newcommand{\cftsecaftersnum}{}
+\newcommand{\cftsecaftersnumb}{}
+\if@cfthaschapter
+ \setlength{\cftbeforesecskip}{\z@ \@plus.2\p@}
+ \setlength{\cftsecindent}{1.5em}
+ \setlength{\cftsecnumwidth}{2.3em}
+ \newcommand{\cftsecfont}{\normalfont}
+ \newcommand{\cftsecleader}{\normalfont\cftdotfill{\cftsecdotsep}}
+ \newcommand{\cftsecdotsep}{\cftdotsep}
+ \newcommand{\cftsecpagefont}{\normalfont}
+\else
+ \setlength{\cftbeforesecskip}{1.0em \@plus\p@}
+ \setlength{\cftsecindent}{0em}
+ \setlength{\cftsecnumwidth}{1.5em}
+ \newcommand{\cftsecfont}{\bfseries}
+ \newcommand{\cftsecleader}{\bfseries\cftdotfill{\cftsecdotsep}}
+ \newcommand{\cftsecdotsep}{\cftnodots}
+ \newcommand{\cftsecpagefont}{\bfseries}
+\fi
+\newcommand{\cftsecafterpnum}{}
+\newcommand{\cftsecfillnum}[1]{%
+ {\cftsecleader}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\cftsecpagefont #1}\cftsecafterpnum\par}
+
+\renewcommand*{\l@subsection}[2]{%
+ \ifnum \c@tocdepth >\@ne
+ \vskip \cftbeforesubsecskip
+ {\leftskip \cftsubsecindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cftsubsecindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cftsubsecnumwidth\relax
+ \let\@cftbsnum \cftsubsecpresnum
+ \let\@cftasnum \cftsubsecaftersnum
+ \let\@cftasnumb \cftsubsecaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cftsubsecfont #1}\nobreak
+ \cftsubsecfillnum{#2}}
+ \fi}
+\newlength{\cftbeforesubsecskip}
+ \setlength{\cftbeforesubsecskip}{\z@ \@plus.2\p@}
+\newlength{\cftsubsecindent}
+\newlength{\cftsubsecnumwidth}
+\if@cfthaschapter
+ \setlength{\cftsubsecindent}{3.8em}
+ \setlength{\cftsubsecnumwidth}{3.2em}
+\else
+ \setlength{\cftsubsecindent}{1.5em}
+ \setlength{\cftsubsecnumwidth}{2.3em}
+\fi
+\newcommand{\cftsubsecfont}{\normalfont}
+\newcommand{\cftsubsecpresnum}{}
+\newcommand{\cftsubsecaftersnum}{}
+\newcommand{\cftsubsecaftersnumb}{}
+\newcommand{\cftsubsecleader}{\normalfont\cftdotfill{\cftsubsecdotsep}}
+\newcommand{\cftsubsecdotsep}{\cftdotsep}
+\newcommand{\cftsubsecpagefont}{\normalfont}
+\newcommand{\cftsubsecafterpnum}{}
+\newcommand{\cftsubsecfillnum}[1]{%
+ {\cftsubsecleader}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\cftsubsecpagefont #1}\cftsubsecafterpnum\par}
+
+\renewcommand*{\l@subsubsection}[2]{%
+ \ifnum \c@tocdepth >\tw@
+ \vskip \cftbeforesubsubsecskip
+ {\leftskip \cftsubsubsecindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cftsubsubsecindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cftsubsubsecnumwidth\relax
+ \let\@cftbsnum \cftsubsubsecpresnum
+ \let\@cftasnum \cftsubsubsecaftersnum
+ \let\@cftasnumb \cftsubsubsecaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cftsubsubsecfont #1}\nobreak
+ \cftsubsubsecfillnum{#2}}
+ \fi}
+\newlength{\cftbeforesubsubsecskip}
+ \setlength{\cftbeforesubsubsecskip}{\z@ \@plus.2\p@}
+\newlength{\cftsubsubsecindent}
+\newlength{\cftsubsubsecnumwidth}
+\if@cfthaschapter
+ \setlength{\cftsubsubsecindent}{7.0em}
+ \setlength{\cftsubsubsecnumwidth}{4.1em}
+\else
+ \setlength{\cftsubsubsecindent}{3.8em}
+ \setlength{\cftsubsubsecnumwidth}{3.2em}
+\fi
+\newcommand{\cftsubsubsecfont}{\normalfont}
+\newcommand{\cftsubsubsecpresnum}{}
+\newcommand{\cftsubsubsecaftersnum}{}
+\newcommand{\cftsubsubsecaftersnumb}{}
+\newcommand{\cftsubsubsecleader}{\normalfont\cftdotfill{\cftsubsubsecdotsep}}
+\newcommand{\cftsubsubsecdotsep}{\cftdotsep}
+\newcommand{\cftsubsubsecpagefont}{\normalfont}
+\newcommand{\cftsubsubsecafterpnum}{}
+\newcommand{\cftsubsubsecfillnum}[1]{%
+ {\cftsubsubsecleader}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\cftsubsubsecpagefont #1}\cftsubsubsecafterpnum\par}
+
+\renewcommand*{\l@paragraph}[2]{%
+ \ifnum \c@tocdepth >3\relax
+ \vskip \cftbeforeparaskip
+ {\leftskip \cftparaindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cftparaindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cftparanumwidth\relax
+ \let\@cftbsnum \cftparapresnum
+ \let\@cftasnum \cftparaaftersnum
+ \let\@cftasnumb \cftparaaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cftparafont #1}\nobreak
+ \cftparafillnum{#2}}
+ \fi}
+\newlength{\cftbeforeparaskip}
+ \setlength{\cftbeforeparaskip}{\z@ \@plus.2\p@}
+\newlength{\cftparaindent}
+\newlength{\cftparanumwidth}
+\if@cfthaschapter
+ \setlength{\cftparaindent}{10em}
+ \setlength{\cftparanumwidth}{5em}
+\else
+ \setlength{\cftparaindent}{7.0em}
+ \setlength{\cftparanumwidth}{4.1em}
+\fi
+\newcommand{\cftparafont}{\normalfont}
+\newcommand{\cftparapresnum}{}
+\newcommand{\cftparaaftersnum}{}
+\newcommand{\cftparaaftersnumb}{}
+\newcommand{\cftparaleader}{\normalfont\cftdotfill{\cftparadotsep}}
+\newcommand{\cftparadotsep}{\cftdotsep}
+\newcommand{\cftparapagefont}{\normalfont}
+\newcommand{\cftparaafterpnum}{}
+\newcommand{\cftparafillnum}[1]{%
+ {\cftparaleader}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\cftparapagefont #1}\cftparaafterpnum\par}
+
+\renewcommand*{\l@subparagraph}[2]{%
+ \ifnum \c@tocdepth >4\relax
+ \vskip \cftbeforesubparaskip
+ {\leftskip \cftsubparaindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cftsubparaindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cftsubparanumwidth\relax
+ \let\@cftbsnum \cftsubparapresnum
+ \let\@cftasnum \cftsubparaaftersnum
+ \let\@cftasnumb \cftsubparaaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cftsubparafont #1}\nobreak
+ \cftsubparafillnum{#2}}
+ \fi}
+\newlength{\cftbeforesubparaskip}
+ \setlength{\cftbeforesubparaskip}{\z@ \@plus.2\p@}
+\newlength{\cftsubparaindent}
+\newlength{\cftsubparanumwidth}
+\if@cfthaschapter
+ \setlength{\cftsubparaindent}{12em}
+ \setlength{\cftsubparanumwidth}{6em}
+\else
+ \setlength{\cftsubparaindent}{10em}
+ \setlength{\cftsubparanumwidth}{5em}
+\fi
+\newcommand{\cftsubparafont}{\normalfont}
+\newcommand{\cftsubparapresnum}{}
+\newcommand{\cftsubparaaftersnum}{}
+\newcommand{\cftsubparaaftersnumb}{}
+\newcommand{\cftsubparaleader}{\normalfont\cftdotfill{\cftsubparadotsep}}
+\newcommand{\cftsubparadotsep}{\cftdotsep}
+\newcommand{\cftsubparapagefont}{\normalfont}
+\newcommand{\cftsubparaafterpnum}{}
+\newcommand{\cftsubparafillnum}[1]{%
+ {\cftsubparaleader}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\cftsubparapagefont #1}\cftsubparaafterpnum\par}
+
+\newcommand{\@cftdobiblof}{%
+ \if@dotoclof
+ \if@bibchapter
+ \phantomsection
+ \addcontentsline{toc}{chapter}{\listfigurename}
+ \else
+ \phantomsection
+ \addcontentsline{toc}{\@tocextra}{\listfigurename}
+ \fi
+ \fi}
+
+\AtBeginDocument{
+\if@cftnctoc\else
+\renewcommand{\listoffigures}{%
+ \@cfttocstart
+ \par
+ \begingroup
+ \parindent\z@ \parskip\cftparskip
+ \@cftmakeloftitle
+ \if@cfttocbibind
+ \@cftdobiblof
+ \fi
+ \@starttoc{lof}%
+ \endgroup
+ \@cfttocfinish}
+\fi
+}
+
+\newcommand{\@cftmakeloftitle}{%
+ \addpenalty\@secpenalty
+ \if@cfthaschapter
+ \vspace*{\cftbeforeloftitleskip}
+ \else
+ \vspace{\cftbeforeloftitleskip}
+ \fi
+ \@cftpagestyle
+ {\interlinepenalty\@M
+ {\cftloftitlefont\listfigurename}{\cftafterloftitle}
+ \cftmarklof
+ \par\nobreak
+ \vskip \cftafterloftitleskip
+ \@afterheading}}
+
+\newlength{\cftbeforeloftitleskip}
+\newlength{\cftafterloftitleskip}
+\if@cfthaschapter
+ \setlength{\cftbeforeloftitleskip}{50pt}
+ \setlength{\cftafterloftitleskip}{40pt}
+\else
+ \setlength{\cftbeforeloftitleskip}{3.5ex \@plus 1ex \@minus .2ex}
+ \setlength{\cftafterloftitleskip}{2.3ex \@plus.2ex}
+\fi
+\if@cfthaschapter
+ \newcommand{\cftloftitlefont}{\normalfont\Huge\bfseries}
+ \if@cftkoma\renewcommand{\cftloftitlefont}{\size@chapter\sectfont}\fi
+\else
+ \newcommand{\cftloftitlefont}{\normalfont\Large\bfseries}
+ \if@cftkoma\renewcommand{\cftloftitlefont}{\size@section\sectfont}\fi
+\fi
+\newcommand{\cftafterloftitle}{}
+
+\renewcommand*{\l@figure}[2]{%
+ \ifnum \c@lofdepth >\z@
+ \vskip \cftbeforefigskip
+ {\leftskip \cftfigindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cftfigindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cftfignumwidth\relax
+ \let\@cftbsnum \cftfigpresnum
+ \let\@cftasnum \cftfigaftersnum
+ \let\@cftasnumb \cftfigaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cftfigfont #1}\nobreak
+ \cftfigfillnum{#2}}
+ \fi
+ }
+\newlength{\cftbeforefigskip}
+ \setlength{\cftbeforefigskip}{\z@ \@plus.2\p@}
+\newlength{\cftfigindent}
+ \setlength{\cftfigindent}{1.5em}
+\newlength{\cftfignumwidth}
+ \setlength{\cftfignumwidth}{2.3em}
+\newcommand{\cftfigfont}{\normalfont}
+\newcommand{\cftfigpresnum}{}
+\newcommand{\cftfigaftersnum}{}
+\newcommand{\cftfigaftersnumb}{}
+\newcommand{\cftfigleader}{\normalfont\cftdotfill{\cftfigdotsep}}
+\newcommand{\cftfigdotsep}{\cftdotsep}
+\newcommand{\cftfigpagefont}{\normalfont}
+\newcommand{\cftfigafterpnum}{}
+\newcommand{\cftfigfillnum}[1]{%
+ {\cftfigleader}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\cftfigpagefont #1}\cftfigafterpnum\par}
+
+\if@cftsubfigopt\else
+ \newcounter{lofdepth}\setcounter{lofdepth}{1}
+ \newcounter{lotdepth}\setcounter{lotdepth}{1}
+\fi
+
+\newcommand{\@cftdobiblot}{%
+ \if@dotoclot
+ \if@bibchapter
+ \phantomsection
+ \addcontentsline{toc}{chapter}{\listtablename}
+ \else
+ \phantomsection
+ \addcontentsline{toc}{\@tocextra}{\listtablename}
+ \fi
+ \fi}
+
+\AtBeginDocument{
+\if@cftnctoc\else
+\renewcommand{\listoftables}{%
+ \@cfttocstart
+ \par
+ \begingroup
+ \parindent\z@ \parskip\cftparskip
+ \@cftmakelottitle
+ \if@cfttocbibind
+ \@cftdobiblot
+ \fi
+ \@starttoc{lot}%
+ \endgroup
+ \@cfttocfinish}
+\fi
+}
+
+\newcommand{\@cftmakelottitle}{%
+ \addpenalty\@secpenalty
+ \if@cfthaschapter
+ \vspace*{\cftbeforelottitleskip}
+ \else
+ \vspace{\cftbeforelottitleskip}
+ \fi
+ \@cftpagestyle
+ {\interlinepenalty\@M
+ {\cftlottitlefont\listtablename}{\cftafterlottitle}
+ \cftmarklot
+ \par\nobreak
+ \vskip \cftafterlottitleskip
+ \@afterheading}}
+
+\newlength{\cftbeforelottitleskip}
+\newlength{\cftafterlottitleskip}
+\if@cfthaschapter
+ \setlength{\cftbeforelottitleskip}{50pt}
+ \setlength{\cftafterlottitleskip}{40pt}
+\else
+ \setlength{\cftbeforelottitleskip}{3.5ex \@plus 1ex \@minus .2ex}
+ \setlength{\cftafterlottitleskip}{2.3ex \@plus.2ex}
+\fi
+\if@cfthaschapter
+ \newcommand{\cftlottitlefont}{\normalfont\Huge\bfseries}
+ \if@cftkoma\renewcommand{\cftlottitlefont}{\size@chapter\sectfont}\fi
+\else
+ \newcommand{\cftlottitlefont}{\normalfont\Large\bfseries}
+ \if@cftkoma\renewcommand{\cftlottitlefont}{\size@section\sectfont}\fi
+\fi
+\newcommand{\cftafterlottitle}{}
+
+\renewcommand*{\l@table}[2]{%
+ \ifnum\c@lotdepth >\z@
+ \vskip \cftbeforetabskip
+ {\leftskip \cfttabindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cfttabindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cfttabnumwidth\relax
+ \let\@cftbsnum \cfttabpresnum
+ \let\@cftasnum \cfttabaftersnum
+ \let\@cftasnumb \cfttabaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cfttabfont #1}\nobreak
+ \cfttabfillnum{#2}}
+ \fi
+ }
+\newlength{\cftbeforetabskip}
+ \setlength{\cftbeforetabskip}{\z@ \@plus.2\p@}
+\newlength{\cfttabindent}
+ \setlength{\cfttabindent}{1.5em}
+\newlength{\cfttabnumwidth}
+ \setlength{\cfttabnumwidth}{2.3em}
+\newcommand{\cfttabfont}{\normalfont}
+\newcommand{\cfttabpresnum}{}
+\newcommand{\cfttabaftersnum}{}
+\newcommand{\cfttabaftersnumb}{}
+\newcommand{\cfttableader}{\normalfont\cftdotfill{\cfttabdotsep}}
+\newcommand{\cfttabdotsep}{\cftdotsep}
+\newcommand{\cfttabpagefont}{\normalfont}
+\newcommand{\cfttabafterpnum}{}
+\newcommand{\cfttabfillnum}[1]{%
+ {\cfttableader}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\cfttabpagefont #1}\cfttabafterpnum\par}
+
+\newcommand{\@cftl@subfig}{
+\renewcommand*{\l@subfigure}[2]{%
+ \ifnum \c@lofdepth > \toclevel@subfigure
+ \vskip \cftbeforesubfigskip
+ {\leftskip \cftsubfigindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cftsubfigindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cftsubfignumwidth\relax
+ \let\@cftbsnum \cftsubfigpresnum
+ \let\@cftasnum \cftsubfigaftersnum
+ \let\@cftasnumb \cftsubfigaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cftsubfigfont ##1}\nobreak
+ \cftsubfigfillnum{##2}}
+ \fi
+ }
+}
+
+\newcommand{\@cftsetsubfig}{%
+\newlength{\cftbeforesubfigskip}
+ \setlength{\cftbeforesubfigskip}{\z@ \@plus.2\p@}
+\newlength{\cftsubfigindent}
+ \setlength{\cftsubfigindent}{3.8em}
+\newlength{\cftsubfignumwidth}
+ \setlength{\cftsubfignumwidth}{2.5em}
+\newcommand{\cftsubfigfont}{\normalfont}
+\newcommand{\cftsubfigpresnum}{}
+\newcommand{\cftsubfigaftersnum}{}
+\newcommand{\cftsubfigaftersnumb}{}
+\newcommand{\cftsubfigleader}{\normalfont\cftdotfill{\cftsubtabdotsep}}
+\newcommand{\cftsubfigdotsep}{\cftdotsep}
+\newcommand{\cftsubfigpagefont}{\normalfont}
+\newcommand{\cftsubfigafterpnum}{}
+\providecommand{\toclevel@subfigure}{1}
+\newcommand{\cftsubfigfillnum}[1]{%
+ {\cftsubfigleader}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\cftsubfigpagefont ##1}\cftsubfigafterpnum\par}
+}
+
+\newcommand{\@cftl@subtab}{
+\renewcommand*{\l@subtable}[2]{%
+ \ifnum \c@lotdepth > \toclevel@subtable
+ \vskip \cftbeforesubtabskip
+ {\leftskip \cftsubtabindent\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \cftsubtabindent\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \cftsubtabnumwidth\relax
+ \let\@cftbsnum \cftsubtabpresnum
+ \let\@cftasnum \cftsubtabaftersnum
+ \let\@cftasnumb \cftsubtabaftersnumb
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {\cftsubtabfont ##1}\nobreak
+ \cftsubtabfillnum{##2}}
+ \fi
+ }
+}
+\newcommand{\@cftsetsubtab}{
+\newlength{\cftbeforesubtabskip}
+ \setlength{\cftbeforesubtabskip}{\z@ \@plus.2\p@}
+\newlength{\cftsubtabindent}
+ \setlength{\cftsubtabindent}{3.8em}
+\newlength{\cftsubtabnumwidth}
+ \setlength{\cftsubtabnumwidth}{2.5em}
+\newcommand{\cftsubtabfont}{\normalfont}
+\newcommand{\cftsubtabpresnum}{}
+\newcommand{\cftsubtabaftersnum}{}
+\newcommand{\cftsubtabaftersnumb}{}
+\newcommand{\cftsubtableader}{\normalfont\cftdotfill{\cftsubtabdotsep}}
+\newcommand{\cftsubtabdotsep}{\cftdotsep}
+\newcommand{\cftsubtabpagefont}{\normalfont}
+\newcommand{\cftsubtabafterpnum}{}
+\providecommand{\toclevel@subtable}{1}
+\newcommand{\cftsubtabfillnum}[1]{%
+ {\cftsubtableader}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\cftsubtabpagefont ##1}\cftsubtabafterpnum\par}
+}
+
+
+\if@cftsubfigopt
+ \@cftsetsubfig\@cftsetsubtab
+ \AtBeginDocument{\@cftl@subfig\@cftl@subtab}
+\fi
+%% \AtBeginDocument{\if@cftsubfigopt
+%% \@cftsetsubfig\@cftsetsubtab
+%% \@cftl@subfig\@cftl@subtab
+%% \fi}
+
+\newcommand{\newlistentry}[4][\@empty]{%
+ \@ifundefined{c@#2}{% check & set the counter
+ \ifx \@empty#1\relax
+ \newcounter{#2}
+ \else
+ \@ifundefined{c@#1}{\PackageWarning{tocloft}%
+ {#1 has no counter for use as a `within'}
+ \newcounter{#2}}%
+ {\newcounter{#2}[#1]%
+ \expandafter\edef\csname the#2\endcsname{%
+ \expandafter\noexpand\csname the#1\endcsname.\noexpand\arabic{#2}}}
+ \fi
+ \setcounter{#2}{0}
+ }
+ {\PackageError{tocloft}{#2 has been previously defined}{\@eha}}
+
+ \@namedef{l@#2}##1##2{%
+ \ifnum \@nameuse{c@#3depth} > #4\relax
+ \vskip \@nameuse{cftbefore#2skip}
+ {\leftskip \@nameuse{cft#2indent}\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent \@nameuse{cft#2indent}\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \@nameuse{cft#2numwidth}\relax
+ \expandafter\let\expandafter\@cftbsnum\csname cft#2presnum\endcsname
+ \expandafter\let\expandafter\@cftasnum\csname cft#2aftersnum\endcsname
+ \expandafter\let\expandafter\@cftasnumb\csname cft#2aftersnumb\endcsname
+ \advance\leftskip\@tempdima \null\nobreak\hskip -\leftskip
+ {\@nameuse{cft#2font}##1}\nobreak
+ \@nameuse{cft#2fillnum}{##2}}
+ \fi
+ } % end of \l@#2
+
+ \expandafter\newlength\csname cftbefore#2skip\endcsname
+ \setlength{\@nameuse{cftbefore#2skip}}{\z@ \@plus .2\p@}
+ \expandafter\newlength\csname cft#2indent\endcsname
+ \expandafter\newlength\csname cft#2numwidth\endcsname
+ \ifcase #4\relax % 0
+ \setlength{\@nameuse{cft#2indent}}{0em}
+ \setlength{\@nameuse{cft#2numwidth}}{1.5em}
+ \or % 1
+ \setlength{\@nameuse{cft#2indent}}{1.5em}
+ \setlength{\@nameuse{cft#2numwidth}}{2.3em}
+ \or % 2
+ \setlength{\@nameuse{cft#2indent}}{3.8em}
+ \setlength{\@nameuse{cft#2numwidth}}{3.2em}
+ \or % 3
+ \setlength{\@nameuse{cft#2indent}}{7.0em}
+ \setlength{\@nameuse{cft#2numwidth}}{4.1em}
+ \else % anything else
+ \setlength{\@nameuse{cft#2indent}}{10.0em}
+ \setlength{\@nameuse{cft#2numwidth}}{5.0em}
+ \fi
+ \@namedef{cft#2font}{\normalfont}
+ \@namedef{cft#2presnum}{}
+ \@namedef{cft#2aftersnum}{}
+ \@namedef{cft#2aftersnumb}{}
+ \@namedef{cft#2dotsep}{\cftdotsep}
+ \@namedef{cft#2leader}{\normalfont\cftdotfill{\@nameuse{cft#2dotsep}}}
+ \@namedef{cft#2pagefont}{\normalfont}
+ \@namedef{cft#2afterpnum}{}
+ \@namedef{toclevel@#2}{#4}
+ \@namedef{cft#2fillnum}##1{%
+ {\@nameuse{cft#2leader}}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\@nameuse{cft#2pagefont}##1}\@nameuse{cft#2afterpnum}\par}
+} % end \newlistentry
+
+\newcommand{\newlistof}[4][\@empty]{%
+ \ifx \@empty#1\relax
+ \newlistentry{#2}{#3}{0}
+ \else
+ \newlistentry[#1]{#2}{#3}{0}
+ \fi
+
+ \@namedef{ext@#3}{#3}
+ \newcounter{#3depth}
+ \setcounter{#3depth}{1}
+
+ \if@cftkoma
+ \@namedef{cftmark#3}{%
+ \@mkboth{#4}{#4}}
+ \else
+ \@namedef{cftmark#3}{%
+ \@mkboth{\MakeUppercase{#4}}{\MakeUppercase{#4}}}
+ \fi
+ \if@cftnctoc
+ \@namedef{listof#2}{%
+ \@cfttocstart
+ \if@cfthaschapter
+ \chapter*{#4}
+ \else
+ \section*{#4}
+ \fi
+ \@nameuse{cftmark#3}
+ \@starttoc{#3}%
+ \@cfttocfinish}
+ \else
+ \@namedef{listof#2}{%
+ \@cfttocstart
+ \par
+ \begingroup
+ \parindent\z@ \parskip\cftparskip
+ \@nameuse{@cftmake#3title}
+ \@starttoc{#3}%
+ \endgroup
+ \@cfttocfinish}
+ \fi
+
+ \@namedef{@cftmake#3title}{%
+ \addpenalty\@secpenalty
+ \if@cfthaschapter
+ \vspace*{\@nameuse{cftbefore#3titleskip}}
+ \else
+ \vspace{\@nameuse{cftbefore#3titleskip}}
+ \fi
+ \@cftpagestyle
+ {\interlinepenalty\@M
+ {\@nameuse{cft#3titlefont}#4}{\@nameuse{cftafter#3title}}
+ \@nameuse{cftmark#3}
+ \par\nobreak
+ \vskip \@nameuse{cftafter#3titleskip}
+ \@afterheading}}
+
+ \expandafter\newlength\csname cftbefore#3titleskip\endcsname
+ \expandafter\newlength\csname cftafter#3titleskip\endcsname
+ \if@cfthaschapter
+ \setlength{\@nameuse{cftbefore#3titleskip}}{50pt}
+ \setlength{\@nameuse{cftafter#3titleskip}}{40pt}
+ \if@cftkoma
+ \@namedef{cft#3titlefont}{\size@chapter\sectfont}
+ \else
+ \@namedef{cft#3titlefont}{\normalfont\Huge\bfseries}
+ \fi
+ \else
+ \setlength{\@nameuse{cftbefore#3titleskip}}{3.5ex \@plus 1ex \@minus .2ex}
+ \setlength{\@nameuse{cftafter#3titleskip}}{2.3ex \@plus .2ex}
+ \if@cftkoma
+ \@namedef{cft#3titlefont}{\size@section\sectfont}
+ \else
+ \@namedef{cft#3titlefont}{\normalfont\Huge\bfseries}
+ \fi
+ \fi
+ \@namedef{cftafter#3title}{}
+} % end \newlistof
+
+\newcommand{\cftsetindents}[3]{%
+ \def\@cftemp{#1}
+ \ifx\@cftemp\cftchapname
+ \@cftsetindents{chap}{#2}{#3}
+ \else
+ \ifx\@cftemp\cftsecname \@cftsetindents{sec}{#2}{#3}
+ \else
+ \ifx\@cftemp\cftsubsecname \@cftsetindents{subsec}{#2}{#3}
+ \else
+ \ifx\@cftemp\cftsubsubsecname \@cftsetindents{subsubsec}{#2}{#3}
+ \else
+ \ifx\@cftemp\cftparaname \@cftsetindents{para}{#2}{#3}
+ \else
+ \ifx\@cftemp\cftsubparaname \@cftsetindents{subpara}{#2}{#3}
+ \else
+ \ifx\@cftemp\cftfigname \@cftsetindents{fig}{#2}{#3}
+ \else
+ \ifx\@cftemp\cftsubfigname \@cftsetindents{subfig}{#2}{#3}
+ \else
+ \ifx\@cftemp\cfttabname \@cftsetindents{tab}{#2}{#3}
+ \else
+ \ifx\@cftemp\cftsubtabname \@cftsetindents{subtab}{#2}{#3}
+ \else
+ \@cftsetindents{#1}{#2}{#3}
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand{\@cftsetindents}[3]{%
+ \setlength{\@nameuse{cft#1indent}}{#2}
+ \setlength{\@nameuse{cft#1numwidth}}{#3}
+}
+
+\newcommand{\@cftpnumoff}[1]{%
+ \@namedef{cft#1fillnum}##1{%
+ \cftparfillskip\@nameuse{cft#1afterpnum}\par}}
+
+\newcommand*{\cftchapname}{chapter}
+\newcommand*{\cftsecname}{section}
+\newcommand*{\cftsubsecname}{subsection}
+\newcommand*{\cftsubsubsecname}{subsubsection}
+\newcommand*{\cftparaname}{paragraph}
+\newcommand*{\cftsubparaname}{subparagraph}
+\newcommand*{\cftfigname}{figure}
+\newcommand*{\cftsubfigname}{subfigure}
+\newcommand*{\cfttabname}{table}
+\newcommand*{\cftsubtabname}{subtable}
+
+\DeclareRobustCommand{\cftpagenumbersoff}[1]{%
+ \def\@cftemp{#1}
+ \ifx\@cftemp\cftchapname
+ \@cftpnumoff{chap}
+ \else
+ \ifx\@cftemp\cftsecname \@cftpnumoff{sec}
+ \else
+ \ifx\@cftemp\cftsubsecname \@cftpnumoff{subsec}
+ \else
+ \ifx\@cftemp\cftsubsubsecname \@cftpnumoff{subsubsec}
+ \else
+ \ifx\@cftemp\cftparaname \@cftpnumoff{para}
+ \else
+ \ifx\@cftemp\cftsubparaname \@cftpnumoff{subpara}
+ \else
+ \ifx\@cftemp\cftfigname \@cftpnumoff{fig}
+ \else
+ \ifx\@cftemp\cftsubfigname \@cftpnumoff{subfig}
+ \else
+ \ifx\@cftemp\cfttabname \@cftpnumoff{tab}
+ \else
+ \ifx\@cftemp\cftsubtabname \@cftpnumoff{subtab}
+ \else
+ \@cftpnumoff{#1}
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\DeclareRobustCommand{\cftpagenumberson}[1]{%
+ \def\@cftemp{#1}
+ \ifx\@cftemp\cftchapname
+ \@cftpnumon{chap}
+ \else
+ \ifx\@cftemp\cftsecname \@cftpnumon{sec}
+ \else
+ \ifx\@cftemp\cftsubsecname \@cftpnumon{subsec}
+ \else
+ \ifx\@cftemp\cftsubsubsecname \@cftpnumon{subsubsec}
+ \else
+ \ifx\@cftemp\cftparaname \@cftpnumon{para}
+ \else
+ \ifx\@cftemp\cftsubparaname \@cftpnumon{subpara}
+ \else
+ \ifx\@cftemp\cftfigname \@cftpnumon{fig}
+ \else
+ \ifx\@cftemp\cftsubfigname \@cftpnumon{subfig}
+ \else
+ \ifx\@cftemp\cfttabname \@cftpnumon{tab}
+ \else
+ \ifx\@cftemp\cftsubtabname \@cftpnumon{subtab}
+ \else
+ \@cftpnumon{#1}
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand{\@cftpnumon}[1]{%
+ \@namedef{cft#1fillnum}##1{%
+ {\@nameuse{cft#1leader}}\nobreak
+ \hb@xt@\@pnumwidth{\hfil\@nameuse{cft#1pagefont}##1}\@nameuse{cft#1afterpnum}\par}}
+
+\newcommand{\cftchapterprecis}[1]{%
+ \cftchapterprecishere{#1}
+ \cftchapterprecistoc{#1}}
+\newcommand{\cftchapterprecishere}[1]{%
+ \vspace*{-2\baselineskip}
+ \begin{quote}\textit{#1}\end{quote}}
+\newcommand{\cftchapterprecistoc}[1]{\addtocontents{toc}{%
+ {\leftskip \cftchapindent\relax
+ \advance\leftskip \cftchapnumwidth\relax
+ \rightskip \@tocrmarg\relax
+ \textit{#1}\protect\par}}}
+
+\newcommand{\cftlocalchange}[3]{%
+ \addtocontents{#1}{\protect\cftsetpnumwidth{#2} \protect\cftsetrmarg{#3}}}
+\newcommand{\cftaddtitleline}[4]{\addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{#4}}}
+\newcommand{\cftaddnumtitleline}[5]{\addtocontents{#1}{%
+ \protect\contentsline{#2}{\protect\numberline{#3}#4}{#5}}}
+\AtBeginDocument{%
+ \@ifpackageloaded{hyperref}{%
+ \renewcommand{\cftaddtitleline}[4]{\addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{#4}{\@currentHref}}}
+ \renewcommand{\cftaddnumtitleline}[5]{\addtocontents{#1}{%
+ \protect\contentsline{#2}{\protect\numberline{#3}#4}{#5}{\@currentHref}}}
+ }{}
+}
+
+\endinput
+%%
+%% End of file `tocloft.sty'.
--- /dev/null
+% t.Riemann@ifh.de: 12.03.2000 made the file work with spires output
+% using a new utphys.bst file from the below sources and
+% http://golem.ph.utexas.edu/~distler/TeXstuff/utphys.bst
+% UT Physics bibliographic style, ver. 1.8a.
+%-------------------------------------------------------------------------
+% conference for: published proceedings
+% article for: articles WITHOUT title
+% articleT for: articles WITH title
+% yreport for: CERN yellow report
+% preprint for: usual preprints
+% report1 for: reports
+% also new: format.tr1.number
+% misc for: programs, books, etc., title not foreseen.
+% T. Riemann 18 Aug. 1997
+%% changes of t. marked by %%
+% I took this from: http://xxx.lanl.gov/hypertext/bibstyles/
+% as: utphys.bst
+% also: utcaps.bst (no decapitalizing of titles)
+% see also the styles there: h-elsevier.bst, h-physrev.bst, hep.bst
+% a big collection there: hyperbibstyles.tar.gz
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%UT Physics bibliographic style, ver. 1.1. Based on:
+%
+%X IEEE Transactions bibliography style (29-Jan-88 version)
+%X numeric labels, order-of-reference, IEEE abbreviations,
+%X quotes around article titles, commas separate all fields
+%X except after book titles and before "notes". Otherwise,
+%X much like the "plain" family, from which this is adapted.
+%X
+%X History
+%X 9/30/85 (HWT) Original version, by Howard Trickey.
+%X 1/29/88 (OP&HWT) Updated for BibTeX version 0.99a, Oren
+%X Patashnik;
+%X THIS `ieeetr' VERSION DOES NOT WORK WITH BIBTEX 0.98i.
+%
+% Modifications: 1) added hypertex support and "archive" and "eprint" fields.
+% 2) parentheses around dates, and no "pp." for article entries
+% 3) "publisher, address" instead of "address: publisher"
+% 4) added "report" field for article entries.
+% 5) particle physics-oriented abbreviations, rather than ieee.
+% 6) added "collaboration" field, as per
+% Jonathan Flynn' suggestion. SPIRES now supports this
+% field.
+%
+% Modified by Jacques Distler, 10/96
+% History: ver 1.0 9/96
+% ver 1.1 10/96 - added "collaboration" field
+%
+% HyperTeX Wizardry:
+%
+% The following are equivalent:
+% archive = "hep-th"
+% eprint = "9605023"
+% and
+% eprint = "hep-th/9605023"
+% both produce
+% \href{http://xxx.lanl.gov/abs/hep-th/9605023}{{\tt hep-th/9605023}}
+% in the bibliographic output at the appropriate point. If you are using a
+% hypertex macropackage, like hyperref.sty, this will create a link to Los
+% Alamos. If you are NOT using a hypertex package, then you should make
+% definition:
+% \def\href#1#2{#2}
+% somewhere in your document (this is taken care of automatically in the
+% utarticle class).
+% tr: it suppresses the path etc.
+%
+% The bibtex output produced by SPIRES, while far from perfect, is pretty
+% suitable for use with this style. Indeed, this style was designed with
+% SPIRES in mind.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ archive
+ eprint
+ report
+ collaboration
+ SLACcitation
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.quote after.sentence
+ after.quoted.block after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.quote :=
+ #3 'after.sentence :=
+ #4 'after.quoted.block :=
+ #5 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.quote =
+ { " " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { output.state after.quoted.block =
+ { write$
+ newline$
+ "\newblock " write$
+ }
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {blank.sep}
+{ after.quote 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ output.state after.quoted.block =
+ 'skip$
+ 'add.period$
+ if$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { output.state after.quote =
+ { after.quoted.block 'output.state := }
+ { after.block 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " {\em et al.}" * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.eprint}
+{ eprint empty$
+ { ""}
+ { archive empty$
+ {"\href{http://www.arXiv.org/abs/" eprint * "}" *
+ "{{\tt " * eprint * "}}" *}
+ {"\href{" archive * "/" * eprint * "}" *
+ "{{\tt " * eprint * "}}" *}
+ if$
+ }
+ if$
+}
+%
+%FUNCTION {format.collaboration}
+%{ collaboration empty$
+% { "" }
+% { "{\bf " collaboration * "} " * "Collaboration" * }
+% if$
+%}
+%
+
+%FUNCTION {format.report}
+%{ report empty$
+% { ""}
+% { "{\it " report * "} "} " * "preprint" * }
+% if$
+%}
+
+% old format report
+FUNCTION {format.report}
+{ report empty$
+ { ""}
+ { report}
+ if$
+}
+
+
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", eds." * }
+ { ", ed." * }
+ if$
+ }
+ if$
+}
+%% next changed t. 3/97 comma moved outside quotation
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { "``" title "t" change.case$ * "''," * }
+ if$
+}
+%% next changed t. 3/97 comma moved outside quotation
+FUNCTION {format.title.p}
+{ title empty$
+ { "" }
+ { "``" title "t" change.case$ * "''." * }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month ", " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.date.paren}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ {"(" year * ")" *}
+ {"(" month * ", " * year * ")" *}
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.collaboration}
+{ collaboration empty$
+ { "" }
+ { "{" collaboration * "} " * "Collaboration" * }
+ if$
+}
+
+FUNCTION {format.SLACcitation}
+{ SLACcitation empty$
+ {""}
+ { newline$ SLACcitation output "" newline$ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "vol.~" volume *
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "no.~" }
+ { "No.~" }
+ if$
+ number *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { edition "l" change.case$ "~ed." * }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pp.~" pages n.dashify * }
+ { "p.~" pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.pages.nopp}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { pages n.dashify }
+ { pages }
+ if$
+ }
+ if$
+}
+
+
+FUNCTION {format.volume}
+{ volume empty$
+ { "" }
+ { "{\bf " volume * "}" * }
+ if$
+}
+
+FUNCTION {format.number}
+{ number empty$
+ { "" }
+ { "no.~" number * }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "ch.~" chapter * }
+ { type "l" change.case$ chapter tie.or.space.connect }
+ if$
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { "in " booktitle emphasize *
+ editor empty$
+ 'skip$
+ { " (" * format.editors * ")" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ output.state after.block =
+ { type "t" change.case$ }
+ { type "l" change.case$ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+%% next changed t. 8/97
+%% { "Tech. Rep." }
+ { "preprint" }
+ 'type
+ if$
+ number empty$
+ { "l" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+FUNCTION {format.tr1.number}
+{ type empty$
+%% next changed t. 8/97
+%% { "Tech. Rep." }
+ { "report" }
+ 'type
+ if$
+ number empty$
+ { "l" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+%% next changed t. 3/97 forgot old
+FUNCTION {format.paddress}
+{ address empty$
+ { "" }
+ { "" address * "" * }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "in {\em " journal * "\/}" * }
+ if$
+ }
+ { "in " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " {\em et al.}" * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " {\em et al.}" * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Vol.~" volume *
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "in {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "in " key * }
+ if$
+ }
+ { "in " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+% 15-03-00: no title printed: format.title "title" output.check
+% 15-03-00: no extra comma: blank.sep
+ crossref missing$
+ { journal missing$
+ {}
+ { journal emphasize "journal" output.check
+ blank.sep
+ format.volume output
+ blank.sep
+ format.date.paren "year" output.check
+ month empty$
+ { format.number output }
+ 'skip$
+ if$
+ blank.sep
+ format.pages.nopp output
+ }
+%%tr if$
+%
+%%tr report missing$
+%%tr {format.eprint output}
+%%tr {blank.sep format.report output format.eprint output}
+ if$
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+%%%tr qqqq
+ note output
+%----------% blank.sep
+%---------- format.eprint output
+ format.eprint output
+ }
+ if$
+%tr 15032000 new.sentence
+% this 'new.sentence' produces a '.'
+ note output
+ format.eprint output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+
+
+
+FUNCTION {articleT}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+% prints article items with title
+% tr: 28 8 97 next line
+format.title "title" output.check
+blank.sep
+ crossref missing$
+ { journal missing$
+ {}
+ { journal emphasize "journal" output.check
+ blank.sep
+ format.volume output
+ blank.sep
+ format.date.paren "year" output.check
+ month empty$
+ { format.number output }
+ 'skip$
+ if$
+ blank.sep
+ format.pages.nopp output
+ }
+%%tr if$
+%
+%%tr report missing$
+%%tr {format.eprint output}
+%%tr {blank.sep format.report output format.eprint output}
+ if$
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+%%%tr
+ format.eprint output
+ }
+ if$
+ new.sentence
+ note output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ format.collaboration output
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.collaboration output
+ format.authors output
+ title empty$
+ { "empty title in " cite$ * warning$
+ howpublished new.sentence.checka
+ }
+ { howpublished empty$ not
+ address empty$ month empty$ year empty$ and and
+ or
+ { format.title.p output.nonnull }
+ { format.title output.nonnull }
+ if$
+ blank.sep
+ }
+ if$
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ format.collaboration output
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.block
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ format.eprint output
+ new.block
+ note output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.block
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ format.eprint output
+ new.block
+ note output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ organization output
+ publisher output
+ format.paddress output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+%%%tr 15 -03 2000: new.block
+ note output
+%%%tr tr 15 -03 2000: new.block
+%%% 4/98
+format.eprint output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ format.collaboration output
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.collaboration output
+ format.authors output
+ note output
+ format.eprint output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ format.eprint output
+ new.block
+ note output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ format.paddress output
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ format.date "year" output.check
+ new.block
+ note output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ format.tr.number output.nonnull
+%% next added t. 8/97
+ blank.sep
+ institution "institution" output.check
+ address output
+%tr format.date "year" output.check
+%tr new.block
+ note output
+%% next added t. 8/97
+ blank.sep
+%% next added t. 8/97
+ format.date.paren "year" output.check
+ format.eprint output
+ fin.entry
+}
+
+% next from tr.
+FUNCTION {preprint}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ institution "institution" output.check
+ address output
+ blank.sep
+ format.tr.number output.nonnull
+ blank.sep
+ report output
+ blank.sep
+ format.date.paren "year" output.check
+ note output
+% blank.sep
+ format.eprint output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+% next is tr. invention:
+FUNCTION {yreport}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+% `address report' ttt institution "institution" output.check
+ address output
+ blank.sep
+ format.tr1.number output.nonnull
+%% next added t. 8/97
+%% this is not a comma:
+ blank.sep
+%tr format.date "year" output.check
+%tr new.block
+ report output
+%% next added t. 8/97
+ blank.sep
+%% next added t. 8/97
+ format.date.paren "year" output.check
+%%%%%%%%%%%% format.eprint output
+ fin.entry
+}
+
+% next is tr. invention:
+FUNCTION {report1}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ institution "institution" output.check
+ address output
+ blank.sep
+ format.tr1.number output.nonnull
+%% next added t. 8/97
+%% this is no a comma:
+ blank.sep
+%tr format.date "year" output.check
+%tr new.block
+ note output
+%% next added t. 8/97
+ blank.sep
+%% next added t. 8/97
+ format.date.paren "year" output.check
+%%%%%%%%%%%% format.eprint output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title.p "title" output.check
+ blank.sep
+ note "note" output.check
+ format.date output
+ new.sentence
+ format.SLACcitation output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {nup} {"Nucl. Phys."}
+
+MACRO {cmp} {"Comm. Math. Phys."}
+
+MACRO {prl} {"Phys. Rev. Lett."}
+
+MACRO {pl} {"Phys. Lett."}
+
+MACRO {rmp} {"Rev. Mod. Phys."}
+
+MACRO {ijmp} {"Int. Jour. Mod. Phys."}
+
+MACRO {mpl} {"Mod. Phys. Lett."}
+
+MACRO {pr} {"Phys. Rev."}
+
+MACRO {arXiv} {"http://arXiv.org/abs"}
+MACRO {cogprints} {"http://cogprints.soton.ac.uk/abs"}
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\providecommand{\href}[2]{#2}"
+%% "\begingroup\raggedright\begin{thebibliography}{" * longest.label *
+ "\begingroup\begin{thebibliography}{" * longest.label *
+ "}" * write$ newline$ }
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}\endgroup" write$ newline$
+}
+
+EXECUTE {end.bib}
--- /dev/null
+include make.inc
+
+ifneq ($(PHOTOSLOCATION), )
+include $(PHOTOSLOCATION)/make.inc
+endif
+
+ROOTLIB := $(shell root-config --glibs)
+ROOTINC := $(shell root-config --cflags)
+ROOTLIBPATH := $(shell root-config --libdir)
+TAUOLA_LIBS = -L$(TAUOLALOCATION)/lib -lTauolaCxxInterface -lTauolaFortran
+PYTHIA_LIBS = -L$(PYTHIALOCATION)/lib/archive -lpythia8 -llhapdfdummy -lhepmcinterface
+MC_TESTER_LIBS = -L$(MCTESTERLOCATION)/lib -lHEPEvent -lHepMCEvent -lMCTester
+PHOTOS_LIBS = -L$(PHOTOSLOCATION)/lib -lPhotosCxxInterface -lPhotosFortran $(HEPMC_LIBS)
+HEPMC_LIBS =
+
+ifneq ($(HEPMCLOCATION), )
+ override HEPMC_LIBS += -L$(HEPMCLOCATION)/lib -lHepMC
+endif
+
+all:
+ @make photos_hepevt_example.exe
+ifneq ($(HEPMCLOCATION), )
+ @make photos_standalone_example.exe
+ifneq ($(PYTHIALOCATION), )
+ @make single_photos_gun_example.exe
+ @make photosLCG_pythia_example.exe
+ifneq ($(MCTESTERLOCATION), )
+ @make photos_pythia_example.exe
+ifneq ($(TAUOLALOCATION), )
+ @make tauola_photos_pythia_example.exe
+endif
+endif
+endif
+endif
+ @echo "##################################################################"
+ @echo " Examples compiled successfully. Available examples:"
+ @if test -e photos_hepevt_example.exe; then \
+ echo " ./photos_hepevt_example.exe"; fi
+ @if test -e photos_standalone_example.exe; then \
+ echo " ./photos_standalone_example.exe"; fi
+ @if test -e single_photos_gun_example.exe; then \
+ echo " ./single_photos_gun_example.exe"; fi
+ @if test -e photosLCG_pythia_example.exe; then \
+ echo " ./photosLCG_pythia_example.exe"; fi
+ @if test -e photos_pythia_example.exe; then \
+ echo " ./photos_pythia_example.exe"; fi
+ @if test -e tauola_photos_pythia_example.exe; then \
+ echo " ./tauola_photos_pythia_example.exe"; fi
+ @echo "##################################################################"
+
+# Universal example (all paths presents)
+%.o: %.cxx
+ $(CC) $(CFLAGS) -I$(PHOTOSLOCATION)/include -I$(TAUOLALOCATION)/include -I$(PYTHIALOCATION)/include \
+ -I$(MCTESTERLOCATION)/include -I$(HEPMCLOCATION)/include $(ROOTINC) -c $<
+
+# Universal example (all paths presents) - linking procedure
+%.exe: %.o
+ $(CC) -o $@ $(LDFLAGS) $< $(ROOTLIB) \
+ $(TAUOLA_LIBS) $(PYTHIA_LIBS) $(MC_TESTER_LIBS) $(HEPMC_LIBS) $(PHOTOS_LIBS) \
+ -Wl,-rpath,$(PREFIX)/lib \
+ -Wl,-rpath,$(PHOTOSLOCATION)/lib \
+ -Wl,-rpath,$(ROOTLIBPATH) \
+ -Wl,-rpath,$(TAUOLALOCATION)/lib \
+ -Wl,-rpath,$(HEPMCLOCATION)/lib \
+ -Wl,-rpath,$(PYTHIALOCATION)/lib \
+ -Wl,-rpath,$(MCTESTERLOCATION)/lib
+
+# Version for pythia example - HepMC, Pythia8 and MC-Tester required
+photos_pythia_example.exe: photos_pythia_example.cxx
+ $(CC) $(CFLAGS) -I$(PHOTOSLOCATION)/include -I$(PYTHIALOCATION)/include \
+ -I$(MCTESTERLOCATION)/include -I$(HEPMCLOCATION)/include $(ROOTINC) -c $<
+ $(CC) -o $@ $(LDFLAGS) $(<:.cxx=.o) $(ROOTLIB) \
+ $(PYTHIA_LIBS) $(MC_TESTER_LIBS) $(HEPMC_LIBS) $(PHOTOS_LIBS) \
+ -Wl,-rpath,$(PREFIX)/lib \
+ -Wl,-rpath,$(PHOTOSLOCATION)/lib \
+ -Wl,-rpath,$(ROOTLIBPATH) \
+ -Wl,-rpath,$(HEPMCLOCATION)/lib \
+ -Wl,-rpath,$(PYTHIALOCATION)/lib \
+ -Wl,-rpath,$(MCTESTERLOCATION)/lib
+
+# Version for photos gun example - HepMC and Pythia8 required
+single_photos_gun_example.exe: single_photos_gun_example.cxx
+ $(CC) $(CFLAGS) -I$(PHOTOSLOCATION)/include -I$(PYTHIALOCATION)/include \
+ -I$(HEPMCLOCATION)/include -c $<
+ $(CC) -o $@ $(LDFLAGS) $(<:.cxx=.o) $(HEPMC_LIBS) $(PYTHIA_LIBS) $(PHOTOS_LIBS) \
+ -Wl,-rpath,$(PREFIX)/lib \
+ -Wl,-rpath,$(PHOTOSLOCATION)/lib \
+ -Wl,-rpath,$(HEPMCLOCATION)/lib \
+ -Wl,-rpath,$(PYTHIALOCATION)/lib
+
+# Version for photos LCG example - HepMC and Pythia8 required
+photosLCG_pythia_example.exe: photosLCG_pythia_example.cxx
+ $(CC) $(CFLAGS) -I$(PHOTOSLOCATION)/include -I$(PYTHIALOCATION)/include \
+ -I$(HEPMCLOCATION)/include -c $<
+ $(CC) -o $@ $(LDFLAGS) $(<:.cxx=.o) $(HEPMC_LIBS) $(PYTHIA_LIBS) $(PHOTOS_LIBS) \
+ -Wl,-rpath,$(PREFIX)/lib \
+ -Wl,-rpath,$(PHOTOSLOCATION)/lib \
+ -Wl,-rpath,$(HEPMCLOCATION)/lib \
+ -Wl,-rpath,$(PYTHIALOCATION)/lib
+
+# Version for photos standalone example - only HepMC required
+photos_standalone_example.exe: photos_standalone_example.cxx
+ $(CC) $(CFLAGS) -I$(PHOTOSLOCATION)/include -I$(HEPMCLOCATION)/include -c $<
+ $(CC) -o $@ $(LDFLAGS) $(<:.cxx=.o) $(HEPMC_LIBS) $(PHOTOS_LIBS) \
+ -Wl,-rpath,$(PREFIX)/lib \
+ -Wl,-rpath,$(PHOTOSLOCATION)/lib \
+ -Wl,-rpath,$(HEPMCLOCATION)/lib
+
+# Version for photos HEPEVT example - no other libraries are required
+photos_hepevt_example.exe: photos_hepevt_example.f photos_hepevt_example_interface.cxx
+ $(F77) $(FFLAGS) -c $<
+ $(CC) $(CFLAGS) -I$(PHOTOSLOCATION)/include -c photos_hepevt_example_interface.cxx
+ $(F77) -o $@ $(LDFLAGS) $(<:.f=.o) photos_hepevt_example_interface.o $(HEPMC_LIBS) $(PHOTOS_LIBS) \
+ -Wl,-rpath,$(PREFIX)/lib \
+ -Wl,-rpath,$(PHOTOSLOCATION)/lib
+
+clean:
+ rm -f *.o *.a *~ *.exe
+
+Clean: clean
+ rm -rf config.log config.status autom4te.cache configure.paths.sh
+ rm -f make.inc
+
+make.inc:
+ @echo ""
+ @echo "Please execute ./configure first!"
+ @echo ""
+ @false
+
+$(PHOTOSLOCATION)/make.inc:
+ @echo ""
+ @echo "Please compile the interface first!"
+ @echo ""
+ @false
--- /dev/null
+Photos C++ Interface - Examples
+-------------------------------
+
+1)
+To compile:
+- "./configure"
+- "make"
+
+2)
+The examples require more software than the interface itself:
+
+./configure --with-tauola=<path> - provides path for Tauola
+./configure --with-pythia8=<path> - provides path for Pythia8
+./configure --with-mc-tester=<path> - provides path for MC-Tester
+
+To use MC-Tester, ROOT must be installed and
+its path provided via the PATH variable.
+
+3)
+If afs paths were used during interface compilation,
+all these paths are set alredy and
+can not be changed.
+
+4)
+Examples require:
+photos_hepevt_example.exe - does not require any new libraries
+photos_standalone_example.exe - require HepMC
+single_photos_gun_example.exe - require HepMC, Pythia8
+photosLCG_pythia_example.exe - require HepMC, Pythia8
+photos_pythia_example.exe - require HepMC, Pythia8, ROOT and MC-Tester
+tauola_photos_pythia_example.exe - require HepMC, Pythia8, Tauola, ROOT and MC-Tester
+
+
+
+Last Modified: T. Przedzinski, 07 Dec. 2011
--- /dev/null
+{
+ Setup::decay_particle=23;
+ Setup::debug_mode=false; //verbose output from MC-Tester?
+ // Setup histograms
+ int n_bins=120;
+ double default_min_bin=0.0; // just to try svn write privilege
+ double default_max_bin=1.1;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+
+ Setup::mass_scale_on=true;
+
+ Setup::UserTreeAnalysis = "UserTreeAnalysis";
+ Setup::UTA_params[0]=0.01/91.187; //0.010966475/.977;
+ // p_t threshold as fraction of particle energy in
+ // mothers frame
+ Setup::UTA_params[1]=2;
+ Setup::UTA_params[2]=0.0;
+ Setup::UTA_params[3]=1.0;
+ Setup::UTA_params[4]=22;
+
+ Setup::UTA_nparams=5;
+
+ Setup::SuppressDecay(22);
+ Setup::SuppressDecay(23);
+ //Setup::SuppressDecay(11);
+ //Setup::SuppressDecay(-11);
+ //Setup::UserTreeAnalysis="UserTreeAnalysis";
+};
--- /dev/null
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for Photos C++ Interface - examples 1.0.0.
+#
+# Report bugs to <tomasz.przedzinski@uj.edu.pl >.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='Photos C++ Interface - examples'
+PACKAGE_TARNAME='photos-c---interface---examples'
+PACKAGE_VERSION='1.0.0'
+PACKAGE_STRING='Photos C++ Interface - examples 1.0.0'
+PACKAGE_BUGREPORT='tomasz.przedzinski@uj.edu.pl '
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CXXCPP EGREP HAS_ROOT_CONFIG HAS_ROOT_EXE with_photos with_hepmc with_tauola pythia8data with_pythia8 with_mc_tester LIBOBJS LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures Photos C++ Interface - examples 1.0.0 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_ACEOF
+
+ cat <<\_ACEOF
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of Photos C++ Interface - examples 1.0.0:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-photos Path to Photos installation (needed if examples are
+ separated from Photos source code)
+ --with-tauola Path to Tauola C++ v1.0.5 or later
+ --with-mc-tester Path to MC-TESTER 1.23 or later
+ --with-pythia8 Path to Pythia 8.1 or later
+ --with-hepmc Path to HepMC 2.xx
+
+Some influential environment variables:
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CXXCPP C++ preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <tomasz.przedzinski@uj.edu.pl >.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+Photos C++ Interface - examples configure 1.0.0
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by Photos C++ Interface - examples $as_me 1.0.0, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+##############################################################################
+# This must be done before we load paths from configure.paths.sh!
+env_mc_tester=$MCTESTERLOCATION
+env_pythia8data=$PYTHIA8DATA
+
+hepmclocation=$HEPMCLOCATION
+photoslocation=$PHOTOSLOCATION
+tauolalocation=$TAUOLALOCATION
+mctesterlocation=$MCTESTERLOCATION
+pythialocation=$PYTHIALOCATION
+##############################################################################
+# Find Photos source code location and load paths
+
+echo ""
+
+echo "$as_me:$LINENO: checking if Photos location defined" >&5
+echo $ECHO_N "checking if Photos location defined... $ECHO_C" >&6
+
+# Check whether --with-photos or --without-photos was given.
+if test "${with_photos+set}" = set; then
+ withval="$with_photos"
+ echo "$as_me:$LINENO: result: $with_photos" >&5
+echo "${ECHO_T}$with_photos" >&6
+else
+
+ with_photos=`(cd ..; pwd)`
+ echo "$as_me:$LINENO: result: $with_photos (automatic)" >&5
+echo "${ECHO_T}$with_photos (automatic)" >&6
+
+
+fi;
+
+### Load configure.paths.sh
+
+if test -e "$with_photos/configure.paths.sh"; then
+ source $with_photos/configure.paths.sh
+elif test -e "$photoslocation/configure.paths.sh"; then
+ source $photoslocation/configure.paths.sh
+ with_photos=$photoslocation
+fi
+
+##############################################################################
+### Check if other locations are defined
+
+### Prefer configure.paths.sh than environment paths
+
+if test ! -z "$HEPMCLOCATION"; then
+ hepmclocation=$HEPMCLOCATION
+fi
+
+if test ! -z "$TAUOLALOCATION"; then
+ tauolalocation=$TAUOLALOCATION
+fi
+
+if test ! -z "$MCTESTERLOCATION"; then
+ mctesterlocation=$MCTESTERLOCATION
+fi
+
+if test ! -z "$PYTHIALOCATION"; then
+ pythialocation=$PYTHIALOCATION
+fi
+
+### Force all paths if AFS_PATHS was defined
+
+if test "$AFS_PATHS" == "yes"; then
+ with_hepmc=$HEPMCLOCATION
+ with_mc_tester=$MCTESTERLOCATION
+ with_pythia8=$PYTHIALOCATION
+fi
+
+##############################################################################
+# Process command line options
+
+echo ""
+
+echo "$as_me:$LINENO: checking if Tauola location defined" >&5
+echo $ECHO_N "checking if Tauola location defined... $ECHO_C" >&6
+
+# Check whether --with-tauola or --without-tauola was given.
+if test "${with_tauola+set}" = set; then
+ withval="$with_tauola"
+
+else
+ with_tauola=$tauolalocation
+
+fi;
+echo "$as_me:$LINENO: result: $with_tauola" >&5
+echo "${ECHO_T}$with_tauola" >&6
+
+echo "$as_me:$LINENO: checking if MC-TESTER location defined" >&5
+echo $ECHO_N "checking if MC-TESTER location defined... $ECHO_C" >&6
+
+# Check whether --with-mc-tester or --without-mc-tester was given.
+if test "${with_mc_tester+set}" = set; then
+ withval="$with_mc_tester"
+
+else
+ with_mc_tester=$mctesterlocation
+
+fi;
+echo "$as_me:$LINENO: result: $with_mc_tester" >&5
+echo "${ECHO_T}$with_mc_tester" >&6
+
+echo "$as_me:$LINENO: checking if Pythia 8 location defined" >&5
+echo $ECHO_N "checking if Pythia 8 location defined... $ECHO_C" >&6
+
+# Check whether --with-pythia8 or --without-pythia8 was given.
+if test "${with_pythia8+set}" = set; then
+ withval="$with_pythia8"
+
+else
+ with_pythia8=$pythialocation
+
+fi;
+echo "$as_me:$LINENO: result: $with_pythia8" >&5
+echo "${ECHO_T}$with_pythia8" >&6
+
+
+echo "$as_me:$LINENO: checking if HepMC location is defined" >&5
+echo $ECHO_N "checking if HepMC location is defined... $ECHO_C" >&6
+
+# Check whether --with-hepmc or --without-hepmc was given.
+if test "${with_hepmc+set}" = set; then
+ withval="$with_hepmc"
+
+else
+ with_hepmc=$hepmclocation
+
+fi;
+echo "$as_me:$LINENO: result: $with_hepmc" >&5
+echo "${ECHO_T}$with_hepmc" >&6
+
+echo ""
+##############################################################################
+# Check for HepMC header files
+CPPFLAGS="-I$with_hepmc/include $CPPFLAGS"
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5
+echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
+ break;;
+ * )
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5
+echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cxx_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in HepMC/Version.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------------- ##
+## Report this to tomasz.przedzinski@uj.edu.pl ##
+## -------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAS_HEPMC=1
+else
+ HAS_HEPMC=0 &&
+ echo "" &&
+ echo "INFO: HepMC not found. To provide location use:" &&
+ echo " './configure --with-hepmc=<path_to_HepMC>' "
+ echo " (Consider using 'source platform/afs.paths.sh' (or .csh) )"
+ echo ""
+
+fi
+
+done
+
+
+##############################################################################
+# Check for Photos
+CPPFLAGS="-I$with_photos/include $CPPFLAGS"
+
+if test "${ac_cv_header_Photos_Photos_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for Photos/Photos.h" >&5
+echo $ECHO_N "checking for Photos/Photos.h... $ECHO_C" >&6
+if test "${ac_cv_header_Photos_Photos_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_Photos_Photos_h" >&5
+echo "${ECHO_T}$ac_cv_header_Photos_Photos_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking Photos/Photos.h usability" >&5
+echo $ECHO_N "checking Photos/Photos.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <Photos/Photos.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking Photos/Photos.h presence" >&5
+echo $ECHO_N "checking Photos/Photos.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <Photos/Photos.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: Photos/Photos.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: Photos/Photos.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Photos/Photos.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: Photos/Photos.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: Photos/Photos.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: Photos/Photos.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Photos/Photos.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: Photos/Photos.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Photos/Photos.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: Photos/Photos.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Photos/Photos.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: Photos/Photos.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Photos/Photos.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: Photos/Photos.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Photos/Photos.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: Photos/Photos.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------------- ##
+## Report this to tomasz.przedzinski@uj.edu.pl ##
+## -------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for Photos/Photos.h" >&5
+echo $ECHO_N "checking for Photos/Photos.h... $ECHO_C" >&6
+if test "${ac_cv_header_Photos_Photos_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_Photos_Photos_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_Photos_Photos_h" >&5
+echo "${ECHO_T}$ac_cv_header_Photos_Photos_h" >&6
+
+fi
+if test $ac_cv_header_Photos_Photos_h = yes; then
+ :
+else
+ echo "" &&
+ echo "ERROR: Photos not found. To provide location use:" &&
+ echo " './configure --with-photos=<path_to_Photos>' "
+ echo ""
+ exit 0
+
+fi
+
+
+
+##############################################################################
+# Check for Tauola
+CPPFLAGS="-I$with_tauola/include $CPPFLAGS"
+
+if test "${ac_cv_header_Tauola_Tauola_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for Tauola/Tauola.h" >&5
+echo $ECHO_N "checking for Tauola/Tauola.h... $ECHO_C" >&6
+if test "${ac_cv_header_Tauola_Tauola_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_Tauola_Tauola_h" >&5
+echo "${ECHO_T}$ac_cv_header_Tauola_Tauola_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking Tauola/Tauola.h usability" >&5
+echo $ECHO_N "checking Tauola/Tauola.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <Tauola/Tauola.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking Tauola/Tauola.h presence" >&5
+echo $ECHO_N "checking Tauola/Tauola.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <Tauola/Tauola.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: Tauola/Tauola.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: Tauola/Tauola.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Tauola/Tauola.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: Tauola/Tauola.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: Tauola/Tauola.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: Tauola/Tauola.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Tauola/Tauola.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: Tauola/Tauola.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Tauola/Tauola.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: Tauola/Tauola.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Tauola/Tauola.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: Tauola/Tauola.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Tauola/Tauola.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: Tauola/Tauola.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Tauola/Tauola.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: Tauola/Tauola.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------------- ##
+## Report this to tomasz.przedzinski@uj.edu.pl ##
+## -------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for Tauola/Tauola.h" >&5
+echo $ECHO_N "checking for Tauola/Tauola.h... $ECHO_C" >&6
+if test "${ac_cv_header_Tauola_Tauola_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_Tauola_Tauola_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_Tauola_Tauola_h" >&5
+echo "${ECHO_T}$ac_cv_header_Tauola_Tauola_h" >&6
+
+fi
+if test $ac_cv_header_Tauola_Tauola_h = yes; then
+ HAS_TAUOLA=1
+else
+ HAS_TAUOLA=0 &&
+ echo "" &&
+ echo "INFO: Tauola not found. To provide location use:" &&
+ echo " './configure --with-tauola=<path_to_Tauola>' "
+ echo ""
+
+fi
+
+
+
+##############################################################################
+# Check for ROOT
+
+# Extract the first word of "root-config", so it can be a program name with args.
+set dummy root-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_HAS_ROOT_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$HAS_ROOT_CONFIG"; then
+ ac_cv_prog_HAS_ROOT_CONFIG="$HAS_ROOT_CONFIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_HAS_ROOT_CONFIG="yes"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_HAS_ROOT_CONFIG" && ac_cv_prog_HAS_ROOT_CONFIG="no"
+fi
+fi
+HAS_ROOT_CONFIG=$ac_cv_prog_HAS_ROOT_CONFIG
+if test -n "$HAS_ROOT_CONFIG"; then
+ echo "$as_me:$LINENO: result: $HAS_ROOT_CONFIG" >&5
+echo "${ECHO_T}$HAS_ROOT_CONFIG" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+if test "$HAS_ROOT_CONFIG" == "no"; then
+ HAS_ROOT=0
+ echo ""
+ echo "INFO: root-config not found. ROOT is not installed or path"
+ echo " to ROOT bin folder not provied via \$PATH variable. Use:"
+ echo " export PATH=\$PATH:<path_to_root>/bin"
+ echo " export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\`root-config --libdir\`"
+ echo " (consider using 'source platform/afs.paths.sh' (or .csh) )"
+ echo ""
+else
+ # Extract the first word of "root", so it can be a program name with args.
+set dummy root; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_HAS_ROOT_EXE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$HAS_ROOT_EXE"; then
+ ac_cv_prog_HAS_ROOT_EXE="$HAS_ROOT_EXE" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_HAS_ROOT_EXE="yes"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_HAS_ROOT_EXE" && ac_cv_prog_HAS_ROOT_EXE="no"
+fi
+fi
+HAS_ROOT_EXE=$ac_cv_prog_HAS_ROOT_EXE
+if test -n "$HAS_ROOT_EXE"; then
+ echo "$as_me:$LINENO: result: $HAS_ROOT_EXE" >&5
+echo "${ECHO_T}$HAS_ROOT_EXE" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ if test "$HAS_ROOT_EXE" == "no"; then
+ HAS_ROOT=0;
+ echo ""
+ echo "INFO: root-config exists but root not found."
+ else
+ ROOTLIB=`root-config --glibs`
+ ROOTINC=`root-config --cflags`
+ CPPFLAGS="$ROOTLIB $ROOTINC $CPPFLAGS"
+ if test "${ac_cv_header_TROOT_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for TROOT.h" >&5
+echo $ECHO_N "checking for TROOT.h... $ECHO_C" >&6
+if test "${ac_cv_header_TROOT_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_TROOT_h" >&5
+echo "${ECHO_T}$ac_cv_header_TROOT_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking TROOT.h usability" >&5
+echo $ECHO_N "checking TROOT.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <TROOT.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking TROOT.h presence" >&5
+echo $ECHO_N "checking TROOT.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <TROOT.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: TROOT.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: TROOT.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: TROOT.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: TROOT.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: TROOT.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: TROOT.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: TROOT.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: TROOT.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: TROOT.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: TROOT.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: TROOT.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: TROOT.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: TROOT.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: TROOT.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: TROOT.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: TROOT.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------------- ##
+## Report this to tomasz.przedzinski@uj.edu.pl ##
+## -------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for TROOT.h" >&5
+echo $ECHO_N "checking for TROOT.h... $ECHO_C" >&6
+if test "${ac_cv_header_TROOT_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_TROOT_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_TROOT_h" >&5
+echo "${ECHO_T}$ac_cv_header_TROOT_h" >&6
+
+fi
+if test $ac_cv_header_TROOT_h = yes; then
+ HAS_ROOT=1
+else
+ HAS_ROOT=0 &&
+ echo "" &&
+ echo "INFO: ROOT header file cannot be compiled."
+
+fi
+
+
+ fi
+ if test $HAS_ROOT = 0; then
+ echo " This indicates faulty or unusual ROOT installation."
+ echo " Verify that location of both 'root' and 'root-config' "
+ echo " is provided via \$PATH."
+ echo " MC-Tester will not be used."
+ echo ""
+ fi
+fi
+
+##############################################################################
+# Check for MC-Tester
+CPPFLAGS="-I$with_mc_tester/include $CPPFLAGS"
+
+if test $HAS_ROOT = 1; then
+ if test "${ac_cv_header_Generate_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for Generate.h" >&5
+echo $ECHO_N "checking for Generate.h... $ECHO_C" >&6
+if test "${ac_cv_header_Generate_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_Generate_h" >&5
+echo "${ECHO_T}$ac_cv_header_Generate_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking Generate.h usability" >&5
+echo $ECHO_N "checking Generate.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <Generate.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking Generate.h presence" >&5
+echo $ECHO_N "checking Generate.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <Generate.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: Generate.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: Generate.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Generate.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: Generate.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: Generate.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: Generate.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Generate.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: Generate.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Generate.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: Generate.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Generate.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: Generate.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Generate.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: Generate.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Generate.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: Generate.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------------- ##
+## Report this to tomasz.przedzinski@uj.edu.pl ##
+## -------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for Generate.h" >&5
+echo $ECHO_N "checking for Generate.h... $ECHO_C" >&6
+if test "${ac_cv_header_Generate_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_Generate_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_Generate_h" >&5
+echo "${ECHO_T}$ac_cv_header_Generate_h" >&6
+
+fi
+if test $ac_cv_header_Generate_h = yes; then
+ HAS_MC_TESTER=1
+else
+ HAS_MC_TESTER=0 &&
+ echo "" &&
+ echo "INFO: MC-Tester not found. To provide location use:" &&
+ echo " './configure --with-mc-tester=<path_to_MC_Tester>' "
+ echo ""
+
+fi
+
+
+ if test $HAS_MC_TESTER = 1; then
+ if test "${ac_cv_header_HepMCParticle_H+set}" = set; then
+ echo "$as_me:$LINENO: checking for HepMCParticle.H" >&5
+echo $ECHO_N "checking for HepMCParticle.H... $ECHO_C" >&6
+if test "${ac_cv_header_HepMCParticle_H+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_HepMCParticle_H" >&5
+echo "${ECHO_T}$ac_cv_header_HepMCParticle_H" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking HepMCParticle.H usability" >&5
+echo $ECHO_N "checking HepMCParticle.H usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <HepMCParticle.H>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking HepMCParticle.H presence" >&5
+echo $ECHO_N "checking HepMCParticle.H presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <HepMCParticle.H>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: HepMCParticle.H: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: HepMCParticle.H: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCParticle.H: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: HepMCParticle.H: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: HepMCParticle.H: present but cannot be compiled" >&5
+echo "$as_me: WARNING: HepMCParticle.H: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCParticle.H: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: HepMCParticle.H: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCParticle.H: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: HepMCParticle.H: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCParticle.H: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: HepMCParticle.H: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCParticle.H: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: HepMCParticle.H: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCParticle.H: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: HepMCParticle.H: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------------- ##
+## Report this to tomasz.przedzinski@uj.edu.pl ##
+## -------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for HepMCParticle.H" >&5
+echo $ECHO_N "checking for HepMCParticle.H... $ECHO_C" >&6
+if test "${ac_cv_header_HepMCParticle_H+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_HepMCParticle_H=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_HepMCParticle_H" >&5
+echo "${ECHO_T}$ac_cv_header_HepMCParticle_H" >&6
+
+fi
+if test $ac_cv_header_HepMCParticle_H = yes; then
+ :
+else
+ HAS_MC_TESTER=0 &&
+ echo "" &&
+ echo "INFO: MC-Tester has been compiled without the required" &&
+ echo " library 'libHepMCEvent'. MC-Tester will not be used." &&
+ echo ""
+
+fi
+
+
+ fi
+ echo "checking for MCTESTERLOCATION: $env_mc_tester"
+ if test $HAS_MC_TESTER = 1 && test -z "$env_mc_tester"; then
+ echo ""
+ echo "WARNING: MC-Tester location is valid, however MCTESTERLOCATION"
+ echo " variable required by MC-Tester scripts is not set."
+ echo " Without it, examples will compile and execute correctly,"
+ echo " but scripts in examples/testing/* won't work. "
+ echo " Use 'source $with_photos/configure.paths.sh' (or .csh) to set this variable."
+ echo ""
+ fi
+else
+ HAS_MC_TESTER=0
+fi
+
+##############################################################################
+# Check for Pythia
+CPPFLAGS="-I$with_pythia8/include $CPPFLAGS"
+
+if test "${ac_cv_header_Pythia_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for Pythia.h" >&5
+echo $ECHO_N "checking for Pythia.h... $ECHO_C" >&6
+if test "${ac_cv_header_Pythia_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_Pythia_h" >&5
+echo "${ECHO_T}$ac_cv_header_Pythia_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking Pythia.h usability" >&5
+echo $ECHO_N "checking Pythia.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <Pythia.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking Pythia.h presence" >&5
+echo $ECHO_N "checking Pythia.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <Pythia.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: Pythia.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: Pythia.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Pythia.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: Pythia.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: Pythia.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: Pythia.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Pythia.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: Pythia.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Pythia.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: Pythia.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Pythia.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: Pythia.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Pythia.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: Pythia.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Pythia.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: Pythia.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------------- ##
+## Report this to tomasz.przedzinski@uj.edu.pl ##
+## -------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for Pythia.h" >&5
+echo $ECHO_N "checking for Pythia.h... $ECHO_C" >&6
+if test "${ac_cv_header_Pythia_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_Pythia_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_Pythia_h" >&5
+echo "${ECHO_T}$ac_cv_header_Pythia_h" >&6
+
+fi
+if test $ac_cv_header_Pythia_h = yes; then
+ HAS_PYTHIA=1
+else
+ HAS_PYTHIA=0 &&
+ echo "" &&
+ echo "INFO: Pythia8 not found. To provide location use:" &&
+ echo " './configure --with-pythia8=<path_to_Pythia8>' "
+ echo ""
+
+fi
+
+
+
+if test $HAS_PYTHIA = 1; then
+ if test "${ac_cv_header_HepMCInterface_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for HepMCInterface.h" >&5
+echo $ECHO_N "checking for HepMCInterface.h... $ECHO_C" >&6
+if test "${ac_cv_header_HepMCInterface_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_HepMCInterface_h" >&5
+echo "${ECHO_T}$ac_cv_header_HepMCInterface_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking HepMCInterface.h usability" >&5
+echo $ECHO_N "checking HepMCInterface.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <HepMCInterface.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking HepMCInterface.h presence" >&5
+echo $ECHO_N "checking HepMCInterface.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <HepMCInterface.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: HepMCInterface.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: HepMCInterface.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCInterface.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: HepMCInterface.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: HepMCInterface.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: HepMCInterface.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCInterface.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: HepMCInterface.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCInterface.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: HepMCInterface.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCInterface.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: HepMCInterface.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCInterface.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: HepMCInterface.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: HepMCInterface.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: HepMCInterface.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------------- ##
+## Report this to tomasz.przedzinski@uj.edu.pl ##
+## -------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for HepMCInterface.h" >&5
+echo $ECHO_N "checking for HepMCInterface.h... $ECHO_C" >&6
+if test "${ac_cv_header_HepMCInterface_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_HepMCInterface_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_HepMCInterface_h" >&5
+echo "${ECHO_T}$ac_cv_header_HepMCInterface_h" >&6
+
+fi
+if test $ac_cv_header_HepMCInterface_h = yes; then
+ :
+else
+ HAS_PYTHIA=0 &&
+ echo "" &&
+ echo "WARNING: Pythia8 has been compiled without the required" &&
+ echo " library 'libhepmcinterface'. Pythia8 will not be used." &&
+ echo ""
+
+fi
+
+
+ echo "checking for PYTHIA8DATA: $env_pythia8data"
+ if test $HAS_PYTHIA = 1 && test -z "$env_pythia8data"; then
+ pythia8data=$with_pythia8/xmldoc
+ echo ""
+ echo "WARNING: Pythia8 location is valid, however PYTHIA8DATA"
+ echo " variable required by Pythia is not set."
+ echo " Without it, examples will compile, but Pythia cannot"
+ echo " work properly. Refer to Pythia documentation."
+ echo " Use 'source $with_photos/configure.paths.sh' (or .csh) to set this variable."
+ echo ""
+ fi
+fi
+
+if test $HAS_HEPMC = 0; then unset with_hepmc; fi
+if test $HAS_TAUOLA = 0; then unset with_tauola; fi
+if test $HAS_PYTHIA = 0; then unset with_pythia8; fi
+if test $HAS_MC_TESTER = 0; then unset with_mc_tester; fi
+
+##############################################################################
+
+
+
+
+
+
+
+
+ ac_config_files="$ac_config_files make.inc"
+
+
+### Save paths (only if configure.paths.sh exists and is writable)
+if test -e "$with_photos/configure.paths.sh" && test -w "$with_photos/configure.paths.sh"; then
+ ac_config_files="$ac_config_files $with_photos/configure.paths.sh $with_photos/configure.paths.csh"
+
+fi
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then we branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+cat >confdef2opt.sed <<\_ACEOF
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
+t quote
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
+t quote
+d
+: quote
+s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
+s,\[,\\&,g
+s,\],\\&,g
+s,\$,$$,g
+p
+_ACEOF
+# We use echo to avoid assuming a particular line-breaking character.
+# The extra dot is to prevent the shell from consuming trailing
+# line-breaks from the sub-command output. A line-break within
+# single-quotes doesn't work because, if this script is created in a
+# platform that uses two characters for line-breaks (e.g., DOS), tr
+# would break.
+ac_LF_and_DOT=`echo; echo .`
+DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
+rm -f confdef2opt.sed
+
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by Photos C++ Interface - examples $as_me 1.0.0, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+Photos C++ Interface - examples config.status 1.0.0
+configured by $0, generated by GNU Autoconf 2.59,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ -*)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "make.inc" ) CONFIG_FILES="$CONFIG_FILES make.inc" ;;
+ "$with_photos/configure.paths.sh" ) CONFIG_FILES="$CONFIG_FILES $with_photos/configure.paths.sh" ;;
+ "$with_photos/configure.paths.csh" ) CONFIG_FILES="$CONFIG_FILES $with_photos/configure.paths.csh" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@CXXCPP@,$CXXCPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@HAS_ROOT_CONFIG@,$HAS_ROOT_CONFIG,;t t
+s,@HAS_ROOT_EXE@,$HAS_ROOT_EXE,;t t
+s,@with_photos@,$with_photos,;t t
+s,@with_hepmc@,$with_hepmc,;t t
+s,@with_tauola@,$with_tauola,;t t
+s,@pythia8data@,$pythia8data,;t t
+s,@with_pythia8@,$with_pythia8,;t t
+s,@with_mc_tester@,$with_mc_tester,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
+##############################################################################
+echo "Finished!"
+echo "---------"
+echo ""
+
+if test -e "$with_photos/configure.paths.sh"; then
+ echo "Consider using 'source $with_photos/configure.paths.sh'"
+ echo "(or .csh) for setting up several paths used by examples."
+fi
+
+if test $HAS_TAUOLA = 0 || test $HAS_PYTHIA = 0 || test $HAS_MC_TESTER = 0; then
+ echo ""
+ echo "Not all examples will be available."
+fi
+
+if test $HAS_TAUOLA = 0; then
+ echo "Consider './configure --with-tauola=<path_to_Tauola>' "
+fi
+
+if test $HAS_PYTHIA = 0; then
+ echo "Consider './configure --with-pythia8=<path_to_Pythia8>' "
+fi
+
+if test $HAS_MC_TESTER = 0; then
+ unset with_mc_tester
+ echo "Consider './configure --with-mc-tester=<path_to_MC_Tester>' "
+fi
+
+echo ""
--- /dev/null
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+AC_PREREQ(2.59)
+AC_INIT( [Photos C++ Interface - examples], [1.0.0], [tomasz.przedzinski@uj.edu.pl] )
+AC_LANG_CPLUSPLUS
+
+##############################################################################
+# This must be done before we load paths from configure.paths.sh!
+env_mc_tester=$MCTESTERLOCATION
+env_pythia8data=$PYTHIA8DATA
+
+hepmclocation=$HEPMCLOCATION
+photoslocation=$PHOTOSLOCATION
+tauolalocation=$TAUOLALOCATION
+mctesterlocation=$MCTESTERLOCATION
+pythialocation=$PYTHIALOCATION
+##############################################################################
+# Find Photos source code location and load paths
+
+echo ""
+
+AC_MSG_CHECKING([if Photos location defined])
+AC_ARG_WITH(
+ [photos],
+ [AS_HELP_STRING([--with-photos], [Path to Photos installation (needed if examples are separated from Photos source code)] )],
+ [AC_MSG_RESULT($with_photos)],
+ [
+ with_photos=`(cd ..; pwd)`
+ AC_MSG_RESULT($with_photos (automatic))
+ ]
+)
+
+### Load configure.paths.sh
+
+if test -e "$with_photos/configure.paths.sh"; then
+ source $with_photos/configure.paths.sh
+elif test -e "$photoslocation/configure.paths.sh"; then
+ source $photoslocation/configure.paths.sh
+ with_photos=$photoslocation
+fi
+
+##############################################################################
+### Check if other locations are defined
+
+### Prefer configure.paths.sh than environment paths
+
+if test ! -z "$HEPMCLOCATION"; then
+ hepmclocation=$HEPMCLOCATION
+fi
+
+if test ! -z "$TAUOLALOCATION"; then
+ tauolalocation=$TAUOLALOCATION
+fi
+
+if test ! -z "$MCTESTERLOCATION"; then
+ mctesterlocation=$MCTESTERLOCATION
+fi
+
+if test ! -z "$PYTHIALOCATION"; then
+ pythialocation=$PYTHIALOCATION
+fi
+
+### Force all paths if AFS_PATHS was defined
+
+if test "$AFS_PATHS" == "yes"; then
+ with_hepmc=$HEPMCLOCATION
+ with_mc_tester=$MCTESTERLOCATION
+ with_pythia8=$PYTHIALOCATION
+fi
+
+##############################################################################
+# Process command line options
+
+echo ""
+
+AC_MSG_CHECKING([if Tauola location defined])
+AC_ARG_WITH(
+ [tauola],
+ [AS_HELP_STRING([--with-tauola], [Path to Tauola C++ v1.0.5 or later] )],,
+ [with_tauola=$tauolalocation]
+)
+AC_MSG_RESULT([$with_tauola])
+
+AC_MSG_CHECKING([if MC-TESTER location defined])
+AC_ARG_WITH(
+ [mc-tester],
+ [AS_HELP_STRING([--with-mc-tester], [Path to MC-TESTER 1.23 or later] )],,
+ [with_mc_tester=$mctesterlocation]
+)
+AC_MSG_RESULT([$with_mc_tester])
+
+AC_MSG_CHECKING([if Pythia 8 location defined])
+AC_ARG_WITH(
+ [pythia8],
+ [AS_HELP_STRING([--with-pythia8], [Path to Pythia 8.1 or later] )],,
+ [with_pythia8=$pythialocation]
+)
+AC_MSG_RESULT([$with_pythia8])
+
+
+AC_MSG_CHECKING([if HepMC location is defined])
+AC_ARG_WITH(
+ [hepmc],
+ [AS_HELP_STRING([--with-hepmc], [Path to HepMC 2.xx] )],,
+ [with_hepmc=$hepmclocation]
+)
+AC_MSG_RESULT([$with_hepmc])
+
+echo ""
+##############################################################################
+# Check for HepMC header files
+CPPFLAGS="-I$with_hepmc/include $CPPFLAGS"
+
+AC_CHECK_HEADERS([HepMC/Version.h],
+ HAS_HEPMC=1,
+[ HAS_HEPMC=0 &&
+ echo "" &&
+ echo "INFO: HepMC not found. To provide location use:" &&
+ echo " './configure --with-hepmc=<path_to_HepMC>' "
+ echo " (Consider using 'source platform/afs.paths.sh' (or .csh) )"
+ echo ""
+])
+
+##############################################################################
+# Check for Photos
+CPPFLAGS="-I$with_photos/include $CPPFLAGS"
+
+AC_CHECK_HEADER([Photos/Photos.h], ,
+[ echo "" &&
+ echo "ERROR: Photos not found. To provide location use:" &&
+ echo " './configure --with-photos=<path_to_Photos>' "
+ echo ""
+ exit 0
+])
+
+##############################################################################
+# Check for Tauola
+CPPFLAGS="-I$with_tauola/include $CPPFLAGS"
+
+AC_CHECK_HEADER([Tauola/Tauola.h],
+ HAS_TAUOLA=1,
+[ HAS_TAUOLA=0 &&
+ echo "" &&
+ echo "INFO: Tauola not found. To provide location use:" &&
+ echo " './configure --with-tauola=<path_to_Tauola>' "
+ echo ""
+])
+
+##############################################################################
+# Check for ROOT
+
+AC_CHECK_PROG(HAS_ROOT_CONFIG,root-config,[yes],[no])
+
+if test "$HAS_ROOT_CONFIG" == "no"; then
+ HAS_ROOT=0
+ echo ""
+ echo "INFO: root-config not found. ROOT is not installed or path"
+ echo " to ROOT bin folder not provied via \$PATH variable. Use:"
+ echo " export PATH=\$PATH:<path_to_root>/bin"
+ echo " export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\`root-config --libdir\`"
+ echo " (consider using 'source platform/afs.paths.sh' (or .csh) )"
+ echo ""
+else
+ AC_CHECK_PROG(HAS_ROOT_EXE,root,[yes],[no])
+ if test "$HAS_ROOT_EXE" == "no"; then
+ HAS_ROOT=0;
+ echo ""
+ echo "INFO: root-config exists but root not found."
+ else
+ ROOTLIB=`root-config --glibs`
+ ROOTINC=`root-config --cflags`
+ CPPFLAGS="$ROOTLIB $ROOTINC $CPPFLAGS"
+ AC_CHECK_HEADER([TROOT.h],
+ HAS_ROOT=1,
+ [ HAS_ROOT=0 &&
+ echo "" &&
+ echo "INFO: ROOT header file cannot be compiled."
+ ])
+ fi
+ if test $HAS_ROOT = 0; then
+ echo " This indicates faulty or unusual ROOT installation."
+ echo " Verify that location of both 'root' and 'root-config' "
+ echo " is provided via \$PATH."
+ echo " MC-Tester will not be used."
+ echo ""
+ fi
+fi
+
+##############################################################################
+# Check for MC-Tester
+CPPFLAGS="-I$with_mc_tester/include $CPPFLAGS"
+
+if test $HAS_ROOT = 1; then
+ AC_CHECK_HEADER([Generate.h],
+ HAS_MC_TESTER=1,
+ [ HAS_MC_TESTER=0 &&
+ echo "" &&
+ echo "INFO: MC-Tester not found. To provide location use:" &&
+ echo " './configure --with-mc-tester=<path_to_MC_Tester>' "
+ echo ""
+ ])
+ if test $HAS_MC_TESTER = 1; then
+ AC_CHECK_HEADER([HepMCParticle.H], ,
+ [ HAS_MC_TESTER=0 &&
+ echo "" &&
+ echo "INFO: MC-Tester has been compiled without the required" &&
+ echo " library 'libHepMCEvent'. MC-Tester will not be used." &&
+ echo ""
+ ])
+ fi
+ echo "checking for MCTESTERLOCATION: $env_mc_tester"
+ if test $HAS_MC_TESTER = 1 && test -z "$env_mc_tester"; then
+ echo ""
+ echo "WARNING: MC-Tester location is valid, however MCTESTERLOCATION"
+ echo " variable required by MC-Tester scripts is not set."
+ echo " Without it, examples will compile and execute correctly,"
+ echo " but scripts in examples/testing/* won't work. "
+ echo " Use 'source $with_photos/configure.paths.sh' (or .csh) to set this variable."
+ echo ""
+ fi
+else
+ HAS_MC_TESTER=0
+fi
+
+##############################################################################
+# Check for Pythia
+CPPFLAGS="-I$with_pythia8/include $CPPFLAGS"
+
+AC_CHECK_HEADER([Pythia.h],
+ HAS_PYTHIA=1,
+[ HAS_PYTHIA=0 &&
+ echo "" &&
+ echo "INFO: Pythia8 not found. To provide location use:" &&
+ echo " './configure --with-pythia8=<path_to_Pythia8>' "
+ echo ""
+])
+
+if test $HAS_PYTHIA = 1; then
+ AC_CHECK_HEADER([HepMCInterface.h], ,
+ [ HAS_PYTHIA=0 &&
+ echo "" &&
+ echo "WARNING: Pythia8 has been compiled without the required" &&
+ echo " library 'libhepmcinterface'. Pythia8 will not be used." &&
+ echo ""
+ ])
+ echo "checking for PYTHIA8DATA: $env_pythia8data"
+ if test $HAS_PYTHIA = 1 && test -z "$env_pythia8data"; then
+ pythia8data=$with_pythia8/xmldoc
+ echo ""
+ echo "WARNING: Pythia8 location is valid, however PYTHIA8DATA"
+ echo " variable required by Pythia is not set."
+ echo " Without it, examples will compile, but Pythia cannot"
+ echo " work properly. Refer to Pythia documentation."
+ echo " Use 'source $with_photos/configure.paths.sh' (or .csh) to set this variable."
+ echo ""
+ fi
+fi
+
+if test $HAS_HEPMC = 0; then unset with_hepmc; fi
+if test $HAS_TAUOLA = 0; then unset with_tauola; fi
+if test $HAS_PYTHIA = 0; then unset with_pythia8; fi
+if test $HAS_MC_TESTER = 0; then unset with_mc_tester; fi
+
+##############################################################################
+AC_SUBST(with_photos)
+AC_SUBST(with_hepmc)
+AC_SUBST(with_tauola)
+AC_SUBST(with_hepmc)
+AC_SUBST(pythia8data)
+AC_SUBST(with_pythia8)
+AC_SUBST(with_mc_tester)
+
+AC_CONFIG_FILES([make.inc])
+
+### Save paths (only if configure.paths.sh exists and is writable)
+if test -e "$with_photos/configure.paths.sh" && test -w "$with_photos/configure.paths.sh"; then
+ AC_CONFIG_FILES([$with_photos/configure.paths.sh $with_photos/configure.paths.csh])
+fi
+
+AC_OUTPUT
+
+##############################################################################
+echo "Finished!"
+echo "---------"
+echo ""
+
+if test -e "$with_photos/configure.paths.sh"; then
+ echo "Consider using 'source $with_photos/configure.paths.sh'"
+ echo "(or .csh) for setting up several paths used by examples."
+fi
+
+if test $HAS_TAUOLA = 0 || test $HAS_PYTHIA = 0 || test $HAS_MC_TESTER = 0; then
+ echo ""
+ echo "Not all examples will be available."
+fi
+
+if test $HAS_TAUOLA = 0; then
+ echo "Consider './configure --with-tauola=<path_to_Tauola>' "
+fi
+
+if test $HAS_PYTHIA = 0; then
+ echo "Consider './configure --with-pythia8=<path_to_Pythia8>' "
+fi
+
+if test $HAS_MC_TESTER = 0; then
+ unset with_mc_tester
+ echo "Consider './configure --with-mc-tester=<path_to_MC_Tester>' "
+fi
+
+echo ""
--- /dev/null
+PHOTOSLOCATION= @with_photos@
+HEPMCLOCATION= @with_hepmc@
+TAUOLALOCATION= @with_tauola@
+PYTHIALOCATION= @with_pythia8@
+MCTESTERLOCATION= @with_mc_tester@
+
--- /dev/null
+/**
+ * Example of use of photos C++ interface. Pythia events are
+ * generated first and photos used for FSR.
+ *
+ * @author LCG & Tomasz Przedzinski
+ * @date 6 May 2011
+ */
+
+//pythia header files
+#include "Pythia.h"
+#include "HepMCInterface.h"
+
+//PHOTOS header files
+#include "Photos/Photos.h"
+#include "Photos/PhotosHepMCEvent.h"
+#include "Photos/Log.h"
+
+using namespace std;
+using namespace Pythia8;
+using namespace Photospp;
+
+bool ShowersOn=true;
+unsigned long NumberOfEvents = 100000;
+
+// Calculates energy ratio between (l + bar_l) and (l + bar_l + X)
+double calculate_ratio(HepMC::GenEvent *evt, double *ratio_2)
+{
+ double ratio = 0.0;
+ for(HepMC::GenEvent::particle_const_iterator p=evt->particles_begin();p!=evt->particles_end(); p++)
+ {
+ // Search for Z
+ if( (*p)->pdg_id() != 23 ) continue;
+
+ // Ignore this Z if it does not have at least two daughters
+ if( !(*p)->end_vertex() || (*p)->end_vertex()->particles_out_size() < 2 ) continue;
+
+ // Sum all daughters other than photons
+ double sum = 0.0;
+ for(HepMC::GenVertex::particle_iterator pp = (*p)->end_vertex()->particles_begin(HepMC::children);
+ pp != (*p)->end_vertex()->particles_end(HepMC::children);
+ ++pp)
+ {
+ // (*pp)->print();
+ if( (*pp)->pdg_id() != 22 ) sum += (*pp)->momentum().e();
+ }
+
+ // Calculate ratio and ratio^2
+ ratio = sum / (*p)->momentum().e();
+ *ratio_2 = sum*sum / ( (*p)->momentum().e() * (*p)->momentum().e() );
+
+ // Assuming only one Z decay per event
+ return ratio;
+ }
+ return 0.0;
+}
+
+int main(int argc,char **argv)
+{
+ // Initialization of pythia
+ HepMC::I_Pythia8 ToHepMC;
+ Pythia pythia;
+ Event& event = pythia.event;
+ //pythia.settings.listAll();
+
+ if(!ShowersOn)
+ {
+ //pythia.readString("HadronLevel:all = off");
+ pythia.readString("HadronLevel:Hadronize = off");
+ pythia.readString("SpaceShower:QEDshower = off");
+ pythia.readString("SpaceShower:QEDshowerByL = off");
+ pythia.readString("SpaceShower:QEDshowerByQ = off");
+ }
+ pythia.readString("PartonLevel:ISR = on");
+ pythia.readString("PartonLevel:FSR = off");
+
+ pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
+ pythia.readString("23:onMode = off");
+ pythia.readString("23:onIfAny = 13");
+ //pythia.readString("23:onIfAny = 11");
+ pythia.init( 11, -11, 91.187); //e+ e- collisions
+
+ Photos::initialize();
+
+ // Turn on NLO corrections - only for PHOTOS 3.2 or higher
+
+ //Photos::setMeCorrectionWtForZ(zNLO);
+ //Photos::maxWtInterference(4.0);
+ //Photos::iniInfo();
+
+ Log::SummaryAtExit();
+ cout.setf(ios::fixed);
+
+ double ratio_exp = 0.0, ratio_alpha = 0.0;
+ double ratio_exp_2 = 0.0, ratio_alpha_2 = 0.0;
+ double buf = 0.0;
+
+ Photos::setDoubleBrem(true);
+ Photos::setExponentiation(true);
+ Photos::setInfraredCutOff(0.000001);
+
+ Log::Info() << "---------------- First run - EXP ----------------" <<endl;
+
+ // Begin event loop
+ for(unsigned long iEvent = 0; iEvent < NumberOfEvents; ++iEvent)
+ {
+ if(iEvent%10000==0) Log::Info()<<"Event: "<<iEvent<<"\t("<<iEvent*(100./NumberOfEvents)<<"%)"<<endl;
+ if (!pythia.next()) continue;
+
+ HepMC::GenEvent * HepMCEvt = new HepMC::GenEvent();
+ ToHepMC.fill_next_event(event, HepMCEvt);
+ //HepMCEvt->print();
+
+ //Log::LogPhlupa(1,3);
+
+ // Call photos
+ PhotosHepMCEvent evt(HepMCEvt);
+ evt.process();
+
+ ratio_exp += calculate_ratio(HepMCEvt,&buf);
+ ratio_exp_2 += buf;
+
+ //HepMCEvt->print();
+
+ // Clean up
+ delete HepMCEvt;
+ }
+
+ Photos::setDoubleBrem(false);
+ Photos::setExponentiation(false);
+ Photos::setInfraredCutOff(1./91.187); // that is 1 GeV for
+ // pythia.init( 11, -11, 91.187);
+
+ Log::Info() << "---------------- Second run - ALPHA ORDER ----------------" <<endl;
+
+ // Begin event loop
+ for(unsigned long iEvent = 0; iEvent < NumberOfEvents; ++iEvent)
+ {
+ if(iEvent%10000==0) Log::Info()<<"Event: "<<iEvent<<"\t("<<iEvent*(100./NumberOfEvents)<<"%)"<<endl;
+ if (!pythia.next()) continue;
+
+ HepMC::GenEvent * HepMCEvt = new HepMC::GenEvent();
+ ToHepMC.fill_next_event(event, HepMCEvt);
+ //HepMCEvt->print();
+
+ //Log::LogPhlupa(1,3);
+
+ // Call photos
+ PhotosHepMCEvent evt(HepMCEvt);
+ evt.process();
+
+ ratio_alpha += calculate_ratio(HepMCEvt,&buf);
+ ratio_alpha_2 += buf;
+
+ //HepMCEvt->print();
+
+ // Clean up
+ delete HepMCEvt;
+ }
+
+ pythia.statistics();
+
+ ratio_exp = ratio_exp / (double)NumberOfEvents;
+ ratio_exp_2 = ratio_exp_2 / (double)NumberOfEvents;
+
+ ratio_alpha = ratio_alpha / (double)NumberOfEvents;
+ ratio_alpha_2 = ratio_alpha_2 / (double)NumberOfEvents;
+
+ double err_exp = sqrt( (ratio_exp_2 - ratio_exp * ratio_exp ) / (double)NumberOfEvents );
+ double err_alpha = sqrt( (ratio_alpha_2 - ratio_alpha * ratio_alpha) / (double)NumberOfEvents );
+
+ cout.precision(6);
+ cout.setf(ios::fixed);
+ cout << "********************************************************" << endl;
+ cout << "* Z -> l + bar_l + gammas *" << endl;
+ cout << "* E(l + bar_l) / E(l + bar_l + gammas) ratio *" << endl;
+ cout << "* *" << endl;
+ cout << "* PHOTOS - EXP: " << ratio_exp <<" +/- "<<err_exp <<" *" << endl;
+ cout << "* PHOTOS - ALPHA ORDER: " << ratio_alpha <<" +/- "<<err_alpha<<" *" << endl;
+ cout << "********************************************************" << endl;
+
+}
--- /dev/null
+C********************************************************
+C Example of use of Photos C++ interface.
+C D+ D- -> tau+ tau- HEPEVT events are constructed.
+C Taus are subsequently decayed via Photos++.
+C
+C @author Tomasz Przedzinski
+C @date 21 August 2013
+C********************************************************
+ PROGRAM PH_HEPVT_TEST
+
+C INITIALIZE PHOTOS++
+ CALL PHOTOS_INIT
+
+C PREPARE SIMPLE EVENT in HEPEVT
+ CALL SIMPLE_EVENT
+ WRITE(*,*) "##############"
+ WRITE(*,*) "PHODMP: BEFORE"
+ WRITE(*,*) "##############"
+ CALL PHODMP
+
+ CALL PHOTOS_PROCESS
+C CALL PHOTOS_PROCESS_PARTICLE(4)
+C CALL PHOTOS_PROCESS_BRANCH(4)
+
+ WRITE(*,*) "##############"
+ WRITE(*,*) "PHODMP: AFTER"
+ WRITE(*,*) "##############"
+ CALL PHODMP
+ END
+
+ SUBROUTINE SIMPLE_EVENT
+C serve as an exaple; to be replaced with event generated by user
+ REAL*8 AMELL
+
+ AMELL = 0.0005111;
+
+C CREATE SIMPLE EVENT: e+ e- -> Z -> tau+ tau- -> pi nu_tau, pi nu_tau
+C ---------------------------------------------------------------------
+ CALL ADD_PARTICLE( 11, 6, 1.7763568394002505D-15, -3.5565894425761324D-15, 4.5521681043409913D+01, 4.5521681043409934D+01,
+ $ AMELL, 0, 0, 3, 3)
+ CALL ADD_PARTICLE( -11, 6, -1.7763568394002505D-15, 3.5488352204797800D-15, -4.5584999071936601D+01, 4.5584999071936622D+01,
+ $ AMELL, 0, 0, 3, 3)
+ CALL ADD_PARTICLE( 23, 5, 0D0, 0D0, -6.3318028526687442D-02, 9.1106680115346506D+01,
+ $ 9.1106658112716090D+01, 1, 2, 4, 5)
+ CALL ADD_PARTICLE( 15, 2, -2.3191595992562256D+01, -2.6310500920665142D+01, -2.9046412466624929D+01, 4.5573504956498098D+01,
+ $ 1.7769900000002097D+00, 3, 0, 6, 7)
+ CALL ADD_PARTICLE( -15, 2, 2.3191595992562256D+01, 2.6310500920665142D+01, 2.8983094438098242D+01, 4.5533175158848429D+01,
+ $ 1.7769900000000818D+00, 3, 0, 8, 9)
+ CALL ADD_PARTICLE( 16, 1, -1.2566536214715378D+00, -1.7970251138317268D+00, -1.3801323581022720D+00, 2.5910119010468553D+00,
+ $ 9.9872238934040070D-03, 4, 0, 0, 0)
+ CALL ADD_PARTICLE(-211, 1, -2.1935073012334062D+01, -2.4513624017269400D+01, -2.7666443730700312D+01, 4.2982749776866747D+01,
+ $ 1.3956783711910248D-01, 4, 0, 0, 0)
+ CALL ADD_PARTICLE( -16, 1, 8.4364531743909055D+00, 8.3202830831667836D+00, 9.6202800273055971D+00, 1.5262723881157640D+01,
+ $ 9.9829332903027534D-03, 5, 0, 0, 0)
+ CALL ADD_PARTICLE( 211, 1, 1.4755273459419701D+01, 1.7990366047940022D+01, 1.9362977676297948D+01, 3.0270707771933196D+01,
+ $ 1.3956753909587860D-01, 5, 0, 0, 0)
+ END
+
+ SUBROUTINE ADD_PARTICLE(ID,STATUS,PX,PY,PZ,E,M,MOTHER1,MOTHER2,DAUGHTER1,DAUGHTER2)
+ INTEGER ID,STATUS,MOTHER1,MOTHER2,DAUGHTER1,DAUGHTER2
+ REAL*8 PX,PY,PZ,E,M
+C-----------------------------------------------------------------------------
+C COMMON HEPEVT
+C
+C IMPORTANT: The definition of HEPEVT is also present in:
+C TAUOLA/src/eventRecords/PhotosHEPEVTEvent.cxx
+C If the definition changes (eg. different value of NMXHEP or REAL
+C instead of REAL*8) it has to be updated in that file as well
+C and Tauola++ has to be recompiled.
+C-----------------------------------------------------------------------------
+ INTEGER NMXHEP
+ PARAMETER (NMXHEP=10000)
+ REAL*8 phep, vhep ! to be real*4/ *8 depending on host
+ INTEGER nevhep,nhep,isthep,idhep,jmohep,
+ $ jdahep
+ COMMON /hepevt/
+ $ nevhep, ! serial number
+ $ nhep, ! number of particles
+ $ isthep(nmxhep), ! status code
+ $ idhep(nmxhep), ! particle ident KF
+ $ jmohep(2,nmxhep), ! parent particles
+ $ jdahep(2,nmxhep), ! childreen particles
+ $ phep(5,nmxhep), ! four-momentum, mass [GeV]
+ $ vhep(4,nmxhep) ! vertex [mm]
+
+C
+C WARNING: note that common PHOQED is missing in this example.
+C it is because its content, so far, is not used in C++
+C implementations.
+C Its function is taken by other methods, which are probably more
+C comfortable and elegant.
+C
+
+ SAVE hepevt
+ NHEP=NHEP+1
+ IDHEP(NHEP) =ID
+ ISTHEP(NHEP)=STATUS
+ PHEP(1,NHEP)=PX
+ PHEP(2,NHEP)=PY
+ PHEP(3,NHEP)=PZ
+ PHEP(4,NHEP)=E
+ PHEP(5,NHEP)=M
+ JMOHEP(1,NHEP)=MOTHER1
+ JMOHEP(2,NHEP)=MOTHER2
+ JDAHEP(1,NHEP)=DAUGHTER1
+ JDAHEP(2,NHEP)=DAUGHTER2
+ END
+
+ SUBROUTINE PHODMP
+C.----------------------------------------------------------------------
+C.
+C. PHOTOS: PHOton radiation in decays event DuMP routine
+C.
+C. Purpose: Print event record.
+C.
+C. Input Parameters: Common /HEPEVT/
+C.
+C. Output Parameters: None
+C.
+C. Author(s): B. van Eijk Created at: 05/06/90
+C. Last Update: 05/06/90
+C.
+C.----------------------------------------------------------------------
+C IMPLICIT NONE
+ DOUBLE PRECISION SUMVEC(5)
+ INTEGER I,J
+C this is the hepevt class in old style. No d_h_ class prD-name
+ INTEGER NMXHEP
+ PARAMETER (NMXHEP=10000)
+ REAL*8 phep, vhep ! to be real*4/ *8 depending on host
+ INTEGER nevhep,nhep,isthep,idhep,jmohep,
+ $ jdahep
+ COMMON /hepevt/
+ $ nevhep, ! serial number
+ $ nhep, ! number of particles
+ $ isthep(nmxhep), ! status code
+ $ idhep(nmxhep), ! particle ident KF
+ $ jmohep(2,nmxhep), ! parent particles
+ $ jdahep(2,nmxhep), ! childreen particles
+ $ phep(5,nmxhep), ! four-momentum, mass [GeV]
+ $ vhep(4,nmxhep) ! vertex [mm]
+
+ INTEGER PHLUN
+ COMMON/PHOLUN/PHLUN
+ DO 10 I=1,5
+ 10 SUMVEC(I)=0.
+C--
+C-- Print event number...
+ WRITE(PHLUN,9000)
+ WRITE(PHLUN,9010) NEVHEP
+ WRITE(PHLUN,9080)
+ WRITE(PHLUN,9020)
+ DO 30 I=1,NHEP
+C--
+C-- For 'stable particle' calculate vector momentum sum
+ IF (JDAHEP(1,I).EQ.0) THEN
+ DO 20 J=1,4
+ 20 SUMVEC(J)=SUMVEC(J)+PHEP(J,I)
+ IF (JMOHEP(2,I).EQ.0) THEN
+ WRITE(PHLUN,9030) I,IDHEP(I),JMOHEP(1,I),(PHEP(J,I),J=1,5)
+ ELSE
+ WRITE(PHLUN,9040) I,IDHEP(I),JMOHEP(1,I),JMOHEP(2,I),(PHEP
+ & (J,I),J=1,5)
+ ENDIF
+ ELSE
+ IF (JMOHEP(2,I).EQ.0) THEN
+ WRITE(PHLUN,9050) I,IDHEP(I),JMOHEP(1,I),JDAHEP(1,I),
+ & JDAHEP(2,I),(PHEP(J,I),J=1,5)
+ ELSE
+ WRITE(PHLUN,9060) I,IDHEP(I),JMOHEP(1,I),JMOHEP(2,I),
+ & JDAHEP(1,I),JDAHEP(2,I),(PHEP(J,I),J=1,5)
+ ENDIF
+ ENDIF
+ 30 CONTINUE
+ SUMVEC(5)=SQRT(SUMVEC(4)**2-SUMVEC(1)**2-SUMVEC(2)**2-
+ &SUMVEC(3)**2)
+ WRITE(PHLUN,9070) (SUMVEC(J),J=1,5)
+ RETURN
+ 9000 FORMAT(1H0,80('='))
+ 9010 FORMAT(1H ,29X,'Event No.:',I10)
+ 9020 FORMAT(1H0,1X,'Nr',3X,'Type',3X,'Parent(s)',2X,'Daughter(s)',6X,
+ &'Px',7X,'Py',7X,'Pz',7X,'E',4X,'Inv. M.')
+ 9030 FORMAT(1H ,I4,I7,3X,I4,9X,'Stable',2X,5F9.2)
+ 9040 FORMAT(1H ,I4,I7,I4,' - ',I4,5X,'Stable',2X,5F9.2)
+ 9050 FORMAT(1H ,I4,I7,3X,I4,6X,I4,' - ',I4,5F9.2)
+ 9060 FORMAT(1H ,I4,I7,I4,' - ',I4,2X,I4,' - ',I4,5F9.2)
+ 9070 FORMAT(1H0,23X,'Vector Sum: ', 5F9.2)
+ 9080 FORMAT(1H0,6X,'Particle Parameters')
+ END
--- /dev/null
+/**
+ * Interface for FORTRAN example of use of Photos++
+ *
+ * @author Tomasz Przedzinski
+ * @date 21 August 2013
+ */
+#include "Photos/Photos.h"
+#include "Photos/PhotosHEPEVTEvent.h"
+using namespace Photospp;
+
+extern "C" {
+
+ void photos_init_()
+ {
+ Photos::initialize();
+ }
+
+ void photos_process_()
+ {
+ PhotosHEPEVTEvent *event = new PhotosHEPEVTEvent();
+
+ PhotosHEPEVTEvent::read_event_from_HEPEVT(event);
+ //event->print();
+
+ event->process();
+ //event->print();
+
+ PhotosHEPEVTEvent::write_event_to_HEPEVT(event);
+
+ delete event;
+ }
+
+ void photos_process_particle_(int *i)
+ {
+ PhotosHEPEVTEvent *event = new PhotosHEPEVTEvent();
+
+ PhotosHEPEVTEvent::read_event_from_HEPEVT(event);
+ //event->print();
+
+ PhotosParticle *p = event->getParticle(*i - 1);
+
+ Photos::processParticle(p);
+ //event->print();
+
+ PhotosHEPEVTEvent::write_event_to_HEPEVT(event);
+
+ delete event;
+ }
+
+ void photos_process_branch_(int *i)
+ {
+ PhotosHEPEVTEvent *event = new PhotosHEPEVTEvent();
+
+ PhotosHEPEVTEvent::read_event_from_HEPEVT(event);
+ //event->print();
+
+ PhotosParticle *p = event->getParticle(*i - 1);
+
+ Photos::processBranch(p);
+ //event->print();
+
+ PhotosHEPEVTEvent::write_event_to_HEPEVT(event);
+
+ delete event;
+ }
+}
--- /dev/null
+/**
+ * Example of use of photos C++ interface. Pythia events are
+ * generated first and photos used for FSR.
+ *
+ * @author Nadia Davidson
+ * @date 6 July 2009
+ */
+
+//pythia header files
+#include "Pythia.h"
+#include "HepMCInterface.h"
+
+//MC-TESTER header files
+#include "Generate.h"
+#include "HepMCEvent.H"
+#include "Setup.H"
+
+//PHOTOS header files
+#include "Photos/Photos.h"
+#include "Photos/PhotosHepMCEvent.h"
+#include "Photos/Log.h"
+
+using namespace std;
+using namespace Pythia8;
+using namespace Photospp;
+
+bool ShowersOn=true;
+unsigned long NumberOfEvents = 10000;
+unsigned int EventsToCheck=20;
+
+// elementary test of HepMC typically executed before
+// detector simulation based on http://home.fnal.gov/~mrenna/HCPSS/HCPSShepmc.html
+// similar test was performed in Fortran
+// we perform it before and after Photos (for the first several events)
+void checkMomentumConservationInEvent(HepMC::GenEvent *evt)
+{
+ //cout<<"List of stable particles: "<<endl;
+
+ double px=0.0,py=0.0,pz=0.0,e=0.0;
+
+ for ( HepMC::GenEvent::particle_const_iterator p = evt->particles_begin();
+ p != evt->particles_end(); ++p )
+ {
+ if( (*p)->status() == 1 )
+ {
+ HepMC::FourVector m = (*p)->momentum();
+ px+=m.px();
+ py+=m.py();
+ pz+=m.pz();
+ e +=m.e();
+ //(*p)->print();
+ }
+ }
+ cout.precision(6);
+ cout.setf(ios_base::floatfield);
+ cout<<endl<<"Vector Sum: "<<px<<" "<<py<<" "<<pz<<" "<<e<<endl;
+}
+
+/* Switch Status of History Entries
+
+ If Photos::createHistoryEntries(true,3) was called, this function changes the
+ status code of photons added by Photos and particles modified by Photos
+ to 3, switching the status of history entries to 1.
+
+ This results leaves all modifications performed by Photos as history entries,
+ while the regular entries represent original, unmodified event.
+
+ This is an example of how such operation can be performed in user analysis.
+ By default, this function is not used. The example of its use is commented
+ out in main event loop.
+
+ NOTE: The algorithm works only on stable particles and assumes that
+ there were no modifications to the order of the particles in
+ which they were written to HepMC by Photos. */
+void switch_history_entries_status(HepMC::GenEvent *evt)
+{
+ for ( HepMC::GenEvent::particle_const_iterator p = evt->particles_begin();
+ p != evt->particles_end(); ++p )
+ {
+ if((*p)->status()==3)
+ {
+ if((*p)->pdg_id()==22) continue;
+
+ int barcode = (*p)->barcode();
+
+ HepMC::GenVertex *v = (*p)->production_vertex();
+
+ // History entries are added after photons, so we check what is the
+ // position of current particle relative to photons.
+ int position = 0;
+ int last_photon_position = -1;
+
+ for(HepMC::GenVertex::particles_out_const_iterator p2 = v->particles_out_const_begin();
+ p2 != v->particles_out_const_end(); ++p2)
+ {
+ position++;
+
+ if((*p2)->barcode()==barcode) break;
+
+ if((*p2)->pdg_id()==22) { last_photon_position=position; }
+ }
+
+ // If particle is found prior to photons - it was already processed, so skip it
+ if(last_photon_position<0) continue;
+
+ position -= last_photon_position;
+ HepMC::GenParticle *part = NULL;
+
+ // Now, find the particle that corresponds to this history entry
+ for(HepMC::GenVertex::particles_out_const_iterator p2 = v->particles_out_const_begin();
+ p2 != v->particles_out_const_end(); ++p2)
+ {
+ --position;
+
+ if (position > 0) continue;
+ else if(position == 0) part = *p2;
+ else
+ {
+ // Give all remaining photons status 3
+ if((*p2)->pdg_id()==22 ) (*p2)->set_status(3);
+
+ // Finish if there are no more photons
+ else break;
+ }
+ }
+
+ // Check if this is the particle we are looking for
+ if( part->pdg_id() != (*p)->pdg_id())
+ {
+ cout<<"switch_history_entries_status: mismatch in pdg_id of history entry"<<endl;
+ cout<<"and its corresponding particle. The algorithm does not work correctly."<<endl;
+ exit(-1);
+ }
+
+ // Skip this particle if its status is not 1
+ if(part->status()!=1) continue;
+
+ // Switch status codes of these particles
+ part->set_status(3);
+ (*p)->set_status(1);
+ }
+ }
+}
+
+int main(int argc,char **argv)
+{
+ // Initialization of pythia
+ HepMC::I_Pythia8 ToHepMC;
+ Pythia pythia;
+ Event& event = pythia.event;
+ //pythia.settings.listAll();
+
+ pythia.readString("PartonLevel:ISR = on");
+ pythia.readString("PartonLevel:FSR = off");
+
+ pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
+ pythia.readString("23:onMode = off");
+ pythia.readString("23:onIfAny = 13");
+ pythia.init( 11, -11, 91.187); //e+ e- collisions
+
+ MC_Initialize();
+
+ Photos::initialize();
+ //Photos::setDoubleBrem(false);
+ //Photos::setExponentiation(false);
+
+ Photos::setInfraredCutOff(0.01/91.187); // 10MeV for scale to M_Z=91.187
+ Photos::maxWtInterference(3.0);
+ //Photos::createHistoryEntries(true,3);
+
+ Photos::iniInfo();
+ Log::SummaryAtExit();
+ cout.setf(ios::fixed);
+
+ // Begin event loop
+ for(unsigned long iEvent = 0; iEvent < NumberOfEvents; ++iEvent)
+ {
+ if(iEvent%1000==0) Log::Info()<<"Event: "<<iEvent<<"\t("<<iEvent*(100./NumberOfEvents)<<"%)"<<endl;
+ if (!pythia.next()) continue;
+
+ // Convert event record to HepMC
+ HepMC::GenEvent * HepMCEvt = new HepMC::GenEvent();
+ ToHepMC.fill_next_event(event, HepMCEvt);
+ //HepMCEvt->print();
+
+ if(iEvent<EventsToCheck)
+ {
+ cout<<" "<<endl;
+ cout<<"Momentum conservation chceck BEFORE/AFTER Photos"<<endl;
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ //Log::LogPhlupa(1,3);
+
+ // Run PHOTOS on the event
+ PhotosHepMCEvent evt(HepMCEvt);
+ evt.process();
+
+ // Uncomment to turn on switching of the status code of history entries
+ // with the regular entries for stable particles
+ //switch_history_entries_status(HepMCEvt);
+
+ if(iEvent<EventsToCheck)
+ {
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ //HepMCEvt->print();
+
+ // Run MC-TESTER on the event
+ HepMCEvent temp_event(*HepMCEvt,false);
+ MC_Analyze(&temp_event);
+
+ // Print out last 5 events
+ if(iEvent>=NumberOfEvents-5) HepMCEvt->print();
+
+ // Clean up
+ delete HepMCEvt;
+ }
+ pythia.statistics();
+ MC_Finalize();
+}
--- /dev/null
+/**
+ * Example of photos usage.
+ * Events are loaded from pre-generated set featuring Z0 -> tau+ tau- decays
+ * and processed by photos.
+ *
+ * @author Tomasz Przedzinski
+ * @date 17 July 2010
+ */
+
+//HepMC header files
+#include "HepMC/IO_GenEvent.h"
+
+//PHOTOS header files
+#include "Photos/Photos.h"
+#include "Photos/PhotosHepMCEvent.h"
+#include "Photos/Log.h"
+
+using namespace std;
+using namespace Photospp;
+
+int EventsToCheck=20;
+
+// elementary test of HepMC typically executed before
+// detector simulation based on http://home.fnal.gov/~mrenna/HCPSS/HCPSShepmc.html
+// similar test was performed in Fortran
+// we perform it before and after Photos (for the first several events)
+void checkMomentumConservationInEvent(HepMC::GenEvent *evt)
+{
+ //cout<<"List of stable particles: "<<endl;
+
+ double px=0.0,py=0.0,pz=0.0,e=0.0;
+
+ for ( HepMC::GenEvent::particle_const_iterator p = evt->particles_begin();
+ p != evt->particles_end(); ++p )
+ {
+ if( (*p)->status() == 1 )
+ {
+ HepMC::FourVector m = (*p)->momentum();
+ px+=m.px();
+ py+=m.py();
+ pz+=m.pz();
+ e +=m.e();
+ //(*p)->print();
+ }
+ }
+ cout.precision(6);
+ cout.setf(ios_base::floatfield);
+ cout<<endl<<"Vector Sum: "<<px<<" "<<py<<" "<<pz<<" "<<e<<endl;
+}
+
+int main()
+{
+ HepMC::IO_GenEvent file("photos_standalone_example.dat",std::ios::in);
+
+ Photos::initialize();
+ Photos::setInfraredCutOff(0.001/200);
+
+ int photonAdded=0,twoAdded=0,moreAdded=0,evtCount=0;
+ // Begin event loop. Generate event.
+ while(true)
+ {
+ // Create event
+ HepMC::GenEvent *HepMCEvt = new HepMC::GenEvent();
+ file.fill_next_event(HepMCEvt);
+ if(file.rdstate()) break;
+ evtCount++;
+ int buf = -HepMCEvt->particles_size();
+
+ //cout << "BEFORE:"<<endl;
+ //HepMCEvt->print();
+
+ if(evtCount<EventsToCheck)
+ {
+ cout<<" "<<endl;
+ cout<<"Momentum conservation chceck BEFORE/AFTER Photos"<<endl;
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ // Process by photos
+ PhotosHepMCEvent evt(HepMCEvt);
+ evt.process();
+
+ if(evtCount<EventsToCheck)
+ {
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ buf+=HepMCEvt->particles_size();
+ if(buf==1) photonAdded++;
+ else if(buf==2) twoAdded++;
+ else if(buf>2) moreAdded++;
+
+ //cout << "AFTER:"<<endl;
+ //HepMCEvt->print();
+
+ //clean up
+ delete HepMCEvt;
+ }
+
+ // Print results
+ cout.precision(2);
+ cout.setf(ios::fixed);
+ cout<<endl;
+ if(evtCount==0)
+ {
+ cout<<"Something went wrong with the input file: photos_standalone_example.dat"<<endl;
+ cout<<"No events were processed."<<endl<<endl;
+ return 0;
+ }
+ cout<<"Summary (whole event processing):"<<endl;
+ cout<<evtCount <<"\tevents processed"<<endl;
+ cout<<photonAdded<<"\ttimes one photon added to the event \t("<<(photonAdded*100./evtCount)<<"%)"<<endl;
+ cout<<twoAdded <<"\ttimes two photons added to the event \t("<<(twoAdded*100./evtCount)<<"%)"<<endl;
+ cout<<moreAdded <<"\ttimes more than two photons added to the event\t("<<(moreAdded*100./evtCount)<<"%)"<<endl<<endl;
+ cout<<"(Contrary to results from MC-Tester, these values are technical and infrared unstable)"<<endl<<endl;
+}
--- /dev/null
+
+HepMC::Version 2.03.11
+HepMC::IO_GenEvent-START_EVENT_LISTING
+E 0 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 -3.5565894425761324e-15 4.5521681043409913e+01 4.5521681043409934e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.7763568394002505e-15 3.5488352204797800e-15 -4.5584999071936601e+01 4.5584999071936622e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -6.3318028526687442e-02 9.1106680115346506e+01 9.1106658112716090e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5521681043409913e+01 4.5521681043409913e+01 0 61 0 0 -1 0
+P 9 22 0 0 6.3318956590087794e-02 6.3318956590087794e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999071936601e+01 4.5584999071936601e+01 0 61 0 0 -2 0
+P 10 22 0 0 -9.2806340035167523e-07 9.2806340035167523e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -6.3318028526687442e-02 9.1106680115346506e+01 9.1106658112716090e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.3191595992562256e+01 -2.6310500920665142e+01 -2.9046412466624929e+01 4.5573504956498098e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 2.3191595992562256e+01 2.6310500920665142e+01 2.8983094438098242e+01 4.5533175158848429e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 -2.2493259312824817e-17 4.0033312426576878e-17 5.8833901459220705e-01 5.8878716456583502e-01 0 2 0
+P 10001 -16 8.4364531743909055e+00 8.3202830831667836e+00 9.6202800273055971e+00 1.5262723881157640e+01 9.9829332903027534e-03 1 0 0 0 0
+P 10002 211 1.4755273459419701e+01 1.7990366047940022e+01 1.9362977676297948e+01 3.0270707771933196e+01 1.3956753909587860e-01 1 0 0 0 0
+V -9 0 1.0927672009234270e-16 -1.9448978094135297e-16 -2.8582677558134306e+00 2.8604449573717492e+00 0 2 0
+P 10003 16 -1.2566536214715378e+00 -1.7970251138317268e+00 -1.3801323581022720e+00 2.5910119010468553e+00 9.9872238934040070e-03 1 0 0 0 0
+P 10004 -211 -2.1935073012334062e+01 -2.4513624017269400e+01 -2.7666443730700312e+01 4.2982749776866747e+01 1.3956783711910248e-01 1 0 0 0 0
+E 1 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -7.1054273576010019e-15 -3.5527136788005009e-15 4.5584999994175050e+01 4.5584999994175050e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 5.3290705182007514e-15 3.5527136788005009e-15 -4.5584999036049865e+01 4.5584999036049865e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 9.5812519873561541e-07 9.1169999030224872e+01 9.1169999030224858e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999994175028e+01 4.5584999994175057e+01 1.6518123698891422e-06 61 0 0 -1 0
+P 9 22 0 0 5.8249653989150829e-09 5.8249653989150829e-09 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999036049830e+01 4.5584999036049858e+01 1.6518123698891422e-06 61 0 0 -2 0
+P 10 22 0 0 -9.6395016413453050e-07 9.6395016413453050e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 9.5812519873561541e-07 9.1169999030224915e+01 9.1169999030224901e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 2.6483686240533878e+01 3.2788558383146359e+01 1.7273080389740418e+01 4.5584999696638988e+01 1.7769899999998258e+00 2 0 0 -9 0
+P 12 -15 -2.6483686240533878e+01 -3.2788558383146359e+01 -1.7273079431615212e+01 4.5584999333585927e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 2.0996145227508989e-16 6.8549675505654643e-16 9.1919719854444004e+00 9.1989639635843776e+00 0 2 0
+P 10001 -16 -2.5700733923926414e+01 -3.2180579643502817e+01 -1.6902650854466827e+01 4.4517604788800305e+01 9.9909538403153419e-03 1 0 0 0 0
+P 10002 211 -7.8310150262435596e-01 -6.0816344181756299e-01 -3.7052587863037184e-01 1.0676513309602702e+00 1.3956810534000397e-01 1 0 0 0 0
+V -9 0 -1.4435809662036530e-16 -4.7131035591117507e-16 -3.1599504709748643e+00 3.1623541232761840e+00 0 2 0
+P 10003 16 1.0671500404388103e+01 1.4013704338016479e+01 6.4493566523369852e+00 1.8757908497622811e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10004 -211 1.5812335022160751e+01 1.8775038747301533e+01 1.0823821038889566e+01 2.6827347985189590e+01 1.3956817984580994e-01 1 0 0 0 0
+E 2 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -7.1054273576010019e-15 2.2204461021898723e-15 4.5584999852925336e+01 4.5584999852925336e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 7.1054273576010019e-15 -1.3322676824897471e-15 -4.5584999958042275e+01 4.5584999958042275e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.0511693204762196e-07 9.1169999810967624e+01 9.1169999810967624e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999852925343e+01 4.5584999852925343e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.4707465822993981e-07 1.4707465822993981e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999958042275e+01 4.5584999958042275e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.1957726182317856e-08 4.1957726182317856e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.0511693204762196e-07 9.1169999810967624e+01 9.1169999810967624e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.3838696195644829e+01 -7.4274672970550411e+00 2.9573804103364502e+01 4.5584999871385875e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -3.3838696195644843e+01 7.4274672970550428e+00 -2.9573804208481452e+01 4.5584999939581728e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 2.9669560483535061e-17 3.6534296684924221e-16 4.5592689339682222e+00 4.5627369937299855e+00 0 2 0
+P 10001 -16 -7.3614714379541279e+00 2.2174432430254245e+00 -5.9848417181850575e+00 9.7430357896797499e+00 9.9874110892415047e-03 1 0 0 0 0
+P 10002 211 -2.6477415375428777e+01 5.2100658939104312e+00 -2.3589129083348070e+01 3.5842220936083329e+01 1.3956764340400696e-01 1 0 0 0 0
+V -9 0 3.2231768204960973e-17 3.9689330178424241e-16 -4.9529988671485050e+00 4.9567664220613663e+00 0 2 0
+P 10003 16 1.7603718684370399e+01 -3.7632740511146787e+00 1.4212947189177202e+01 2.2936022118057455e+01 9.9854990839958191e-03 1 0 0 0 0
+P 10004 -211 1.6235168129005181e+01 -3.6642350858195689e+00 1.5361023507232000e+01 2.2649234539499545e+01 1.3956771790981293e-01 1 0 0 0 0
+E 3 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -3.5527136788005009e-15 3.5527136788005009e-15 4.5584999988698186e+01 4.5584999988698193e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 0 -4.5584999983794624e+01 4.5584999983794610e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 4.9035833171728882e-09 9.1169999972492803e+01 9.1169999972492803e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999988698193e+01 4.5584999988698193e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.1301807489871862e-08 1.1301807489871862e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999983794610e+01 4.5584999983794610e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.6205390807044751e-08 1.6205390807044751e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 4.9035833171728874e-09 9.1169999972492803e+01 9.1169999972492803e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.9662799842314058e+01 -2.5441153069352247e+01 -3.2263858464087328e+01 4.5584999984511093e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 1.9662799842314058e+01 2.5441153069352247e+01 3.2263858468990911e+01 4.5584999987981718e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 0 0 3.9167974753306073e-01 3.9197768318607262e-01 0 2 0
+P 10001 -16 1.6535737109708933e+01 2.1524338478907929e+01 2.6312830022294563e+01 3.7803344722673650e+01 9.9854990839958191e-03 1 0 0 0 0
+P 10002 211 3.1271734956886785e+00 3.9169579037356934e+00 5.9512101931658243e+00 7.7819120514831290e+00 1.3956771790981293e-01 1 0 0 0 0
+V -9 0 0 0 -1.0940858500717179e+00 1.0949180789123594e+00 0 2 0
+P 10003 16 -1.5787911320011801e+01 -1.9762615526004126e+01 -2.6187100674725905e+01 3.6408562973753639e+01 9.9896481260657310e-03 1 0 0 0 0
+P 10004 -211 -3.8749992853858086e+00 -5.6786808566394917e+00 -6.0769395358308662e+00 9.1766937969324882e+00 1.3956801593303680e-01 1 0 0 0 0
+E 4 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -8.8817841970012523e-16 1.0880185641326534e-14 4.5584998257600063e+01 4.5584998257600070e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -8.8817841970012523e-16 3.7747582572557526e-15 -4.5584998075774529e+01 4.5584998075774536e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.8182553418455427e-07 9.1169996333374598e+01 9.1169996333374598e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584998257600070e+01 4.5584998257600070e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.7423999310040017e-06 1.7423999310040017e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584998075774536e+01 4.5584998075774536e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.9242254651885560e-06 1.9242254651885560e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.8182553418455427e-07 9.1169996333374598e+01 9.1169996333374598e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 4.5257760612117274e+01 3.8943956377383850e+00 3.3768553424504164e+00 4.5584998173421951e+01 1.7769899999994418e+00 2 0 0 -9 0
+P 12 -15 -4.5257760612117274e+01 -3.8943956377383846e+00 -3.3768551606248818e+00 4.5584998159952626e+01 1.7769899999996979e+00 2 0 0 -8 0
+V -8 0 -3.2183943938925036e-17 3.3863503972823538e-17 4.7680656603558674e-01 4.7716925439989555e-01 0 2 0
+P 10001 -16 -3.0853879793975878e+01 -2.2795085915822870e+00 -1.5667740110490520e+00 3.0977619959857901e+01 9.9911401048302650e-03 1 0 0 0 0
+P 10002 211 -1.4404135760954457e+01 -1.6149089837898987e+00 -1.8101001718372540e+00 1.4607634986279187e+01 1.3956812024116516e-01 1 0 0 0 0
+V -9 0 1.2726875770794611e-17 -1.3391043964151582e-17 -1.8854923262822379e-01 1.8869265475712232e-01 0 2 0
+P 10003 16 3.8414464804361032e+01 2.8902750921822129e+00 2.3915694213182359e+00 3.8597208452918963e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 6.8435507505692943e+00 1.0041424831899719e+00 9.8530494339462737e-01 6.9880465066875104e+00 1.3956774771213531e-01 1 0 0 0 0
+E 5 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.0658141036401503e-14 -7.1054273576010019e-15 4.5584999993537231e+01 4.5584999993537252e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 1.0658141036401503e-14 7.1054273576010019e-15 -4.5584996185289846e+01 4.5584996185289860e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 3.8082473921008386e-06 9.1169996178827148e+01 9.1169996178827077e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999993537274e+01 4.5584999993537274e+01 0 61 0 0 -1 0
+P 9 22 0 0 6.4627272422512760e-09 6.4627272422512760e-09 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584996185289882e+01 4.5584996185289882e+01 0 61 0 0 -2 0
+P 10 22 0 0 -3.8147101193430899e-06 3.8147101193430899e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 3.8082473921008386e-06 9.1169996178827148e+01 9.1169996178827077e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.5257770106949323e+01 -2.3580291416214273e+01 2.9679106730628213e+01 4.5584999329134718e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 2.5257770106949323e+01 2.3580291416214273e+01 -2.9679102922380835e+01 4.5584996849692402e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 -1.6371883102163385e-16 -2.3458147609782773e-16 9.1692530842746856e-01 9.1762277814606141e-01 0 2 0
+P 10001 -16 8.1203587534225825e+00 6.5023537588302798e+00 -8.6747615291864921e+00 1.3545199078794745e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 1.7137553633798277e+01 1.7078070488202034e+01 -2.1004508579402977e+01 3.2040054557055022e+01 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 4.6357117963915784e-17 6.6421932600896283e-17 -2.5962813453789729e-01 2.5982562364662909e-01 0 2 0
+P 10003 16 -1.0255014465389339e+01 -9.8126077982694628e+00 1.3319234071838387e+01 1.9464189928082895e+01 9.9895549938082695e-03 1 0 0 0 0
+P 10004 -211 -1.5002897921831519e+01 -1.3767816448762851e+01 1.6360039845019912e+01 2.6121066187223157e+01 1.3956800103187561e-01 1 0 0 0 0
+E 6 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.7763568394002505e-15 5.3290650467740375e-15 4.5584908482556109e+01 4.5584908482556109e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -7.1054328290330785e-15 -4.5584997837779191e+01 4.5584997837779191e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -8.9355223082066004e-05 9.1169906320335329e+01 9.1169906320291545e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584908482556123e+01 4.5584908482556123e+01 0 61 0 0 -1 0
+P 9 22 0 0 9.1517443877364713e-05 9.1517443877364713e-05 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584997837779206e+01 4.5584997837779206e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.1622207952987083e-06 2.1622207952987083e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -8.9355223082066004e-05 9.1169906320335329e+01 9.1169906320291545e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 8.7793809775574996e+00 -1.3158204816675877e+01 4.2715460432449440e+01 4.5584911294889487e+01 1.7769899999996979e+00 2 0 0 -9 0
+P 12 -15 -8.7793809775574978e+00 1.3158204816675873e+01 -4.2715549787672515e+01 4.5584995025445792e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 3.6098089764871942e-17 -5.7692944899647112e-17 1.7451154272678686e+00 1.7464428718883145e+00 0 2 0
+P 10001 -16 -5.2178538622153301e+00 7.0175274724560932e+00 -2.5719701987633261e+01 2.7165692719621322e+01 9.9926311522722244e-03 1 0 0 0 0
+P 10002 211 -3.5615765707282918e+00 6.1407514660857236e+00 -1.6996088422244117e+01 1.8419559091984713e+01 1.3956822454929352e-01 1 0 0 0 0
+V -9 0 -1.7889933188874665e-16 7.3953819352680523e-16 -6.1697986710800068e+00 6.1744918082371179e+00 0 2 0
+P 10003 16 8.2298865741133280e+00 -1.2868538824048263e+01 4.0747768784478161e+01 4.3516790842144530e+01 9.9907675758004189e-03 1 0 0 0 0
+P 10004 -211 5.4954385883029311e-01 -2.8974011449355264e-01 1.9679322696727986e+00 2.0683772384335111e+00 1.3956809043884277e-01 1 0 0 0 0
+E 7 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -3.5527136788005009e-15 1.7763568394002505e-15 4.5584988765629241e+01 4.5584988765629234e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -3.5527136788005009e-15 -4.5340118553051298e+01 4.5340118553051298e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 2.4487021257792208e-01 9.0925107318680517e+01 9.0924777588359063e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584988765629213e+01 4.5584988765629213e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.1234370781210146e-05 1.1234370781210146e-05 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5340118553051290e+01 4.5340118553051290e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.4488144694870329e-01 2.4488144694870329e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 2.4487021257792202e-01 9.0925107318680503e+01 9.0924777588359049e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.2436483909436966e+01 6.0715130579528980e+00 3.1342451304187904e+01 4.5546632218370981e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 -3.2436483909436966e+01 -6.0715130579528980e+00 -3.1097581091609985e+01 4.5378475100309572e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 2.6957750571776041e-17 -5.4009960565251707e-18 1.5721885880364680e-01 1.5733909579264543e-01 0 2 0
+P 10001 -16 -4.2385858291527629e+00 -1.2164663165000502e+00 -3.5715052471169297e+00 5.6746056720157965e+00 9.9844262003898621e-03 1 0 0 0 0
+P 10002 211 -2.8198080799175010e+01 -4.8550809430677591e+00 -2.7526251021171880e+01 3.9704125051087537e+01 1.3956741988658905e-01 1 0 0 0 0
+V -9 0 -2.7378105997410035e-17 5.4852144333568464e-18 -1.5967039125380936e-01 1.5979250311254373e-01 0 2 0
+P 10003 16 2.5343216119272194e+00 7.0011020902574606e-01 1.9389485734027019e+00 3.2668886905089076e+00 9.9883433431386948e-03 1 0 0 0 0
+P 10004 -211 2.9902345016386541e+01 5.3714370505394404e+00 2.9403679286835935e+01 4.2280000097886862e+01 1.3956813514232635e-01 1 0 0 0 0
+E 8 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.4210854715202004e-14 -1.0669762056997459e-14 4.5266028637338685e+01 4.5266028637338685e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.4210854715202004e-14 1.0646495654234262e-14 -4.5456013233545491e+01 4.5456013233545491e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.8998459620681984e-01 9.0722041870884169e+01 9.0721842943558329e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5266028637338671e+01 4.5266028637338671e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.1897136266132975e-01 3.1897136266132975e-01 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5456013233545491e+01 4.5456013233545491e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.2898676645450990e-01 1.2898676645450990e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.8998459620681984e-01 9.0722041870884169e+01 9.0721842943558329e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -3.7507192814289162e+01 -1.3073792631335454e+01 2.1739476494518161e+01 4.5315296515539146e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 3.7507192814289162e+01 1.3073792631335456e+01 -2.1929461090724974e+01 4.5406745355345024e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 -4.0079162932109740e-17 -1.5390756222323502e-18 2.8384751687501331e-01 2.8406556961613777e-01 0 2 0
+P 10001 -16 2.1916210421309280e+01 8.3160588753691407e+00 -1.3602559362975873e+01 2.7101786571804446e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 1.5591193675824224e+01 4.7578074023228130e+00 -8.3270252592257705e+00 1.8305214565581068e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 3.2334565671810098e-17 -1.6865140524024190e-17 -4.1615198603553888e-01 4.1647167557264836e-01 0 2 0
+P 10003 16 -6.0138145258215001e+00 -2.4186328203248975e+00 4.2184727982197066e+00 7.7337806012625085e+00 9.9870376288890839e-03 1 0 0 0 0
+P 10004 -211 -3.1493589571312004e+01 -1.0655233457367055e+01 1.7521126157567441e+01 3.7581771181174048e+01 1.3956782221794128e-01 1 0 0 0 0
+E 9 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -8.8817841970012523e-16 -3.5535389618623191e-15 4.5571518890109417e+01 4.5571518890109431e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 1.7755314342986258e-15 -4.5584997781856750e+01 4.5584997781856764e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.3478891747340072e-02 9.1156516671966159e+01 9.1156515675435514e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5571518890109409e+01 4.5571518890109409e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.3481109890591370e-02 1.3481109890591370e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584997781856750e+01 4.5584997781856750e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.2181432512979882e-06 2.2181432512979882e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.3478891747340073e-02 9.1156516671966159e+01 9.1156515675435514e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.4704907560498683e+01 2.7890698196881367e+01 -9.5930964900474649e+00 4.5579675826180896e+01 1.7769899999996979e+00 2 0 0 -9 0
+P 12 -15 -3.4704907560498683e+01 -2.7890698196881367e+01 9.5796175983001266e+00 4.5576840845785291e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 1.3472951682647123e-16 1.1812095268550428e-16 2.0544511978107267e+00 2.0560144023697475e+00 0 2 0
+P 10001 -16 -3.3005749215972166e+01 -2.6042713495778596e+01 9.1268859973572258e+00 4.3022117047901055e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 -1.6993538417423619e+00 -1.8481418129992988e+00 4.5278556416312116e-01 2.5549805381010717e+00 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 -2.9993016926848186e-17 -2.6295676083176487e-17 -4.5735478759776804e-01 4.5770278276544302e-01 0 2 0
+P 10003 16 3.2664621199626382e+01 2.5931715682385899e+01 -9.3154329028491674e+00 4.2734163690570163e+01 9.9907675758004189e-03 1 0 0 0 0
+P 10004 -211 2.0404818580981425e+00 1.9591396264000247e+00 -2.7771762634961550e-01 2.8457688918105162e+00 1.3956809043884277e-01 1 0 0 0 0
+E 10 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 -8.8811276871589266e-16 4.5567560715960738e+01 4.5567560715960774e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 3.5527136788005009e-15 1.5062529895037550e-19 -4.5584998069344216e+01 4.5584998069344245e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.7437353383485288e-02 9.1152558785304976e+01 9.1152557117434654e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5567560715960752e+01 4.5567560715960752e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.7439284039255654e-02 1.7439284039255654e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584998069344238e+01 4.5584998069344238e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.9306557703657745e-06 1.9306557703657745e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.7437353383485291e-02 9.1152558785304990e+01 9.1152557117434654e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.9075673217326674e+01 3.0520095283590218e+00 4.1232564828903371e+01 4.5568389994438604e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 1.9075673217326674e+01 -3.0520095283590210e+00 -4.1250002182286863e+01 4.5584168790866450e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 -4.1044036961898795e-17 7.2515763708386676e-18 1.8583826975853349e-01 1.8597968391918351e-01 0 2 0
+P 10001 -16 5.1562297009912439e-01 -2.2078428772684325e-01 -1.9585426179426799e+00 2.0373025709904407e+00 9.9919792264699936e-03 1 0 0 0 0
+P 10002 211 1.8560157702942973e+01 -2.8312424329935593e+00 -3.9291691930900541e+01 4.3547123001349128e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 9.4316080925683660e-16 -1.6663571969436084e-16 -4.2704223529244212e+00 4.2736719429762706e+00 0 2 0
+P 10003 16 -4.8727022423448743e+00 5.4106575205178542e-01 1.2260134545945638e+01 1.3204051580937927e+01 9.9875973537564278e-03 1 0 0 0 0
+P 10004 -211 -1.4203078430691729e+01 2.5109609686677388e+00 2.8972662551275366e+01 3.2364595106076692e+01 1.3956786692142487e-01 1 0 0 0 0
+E 11 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 7.1054273576010019e-15 8.6961726079731574e-16 4.5281365955472765e+01 4.5281365955472779e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.0658141036401503e-14 -1.7949801252206198e-15 -4.5584999988967716e+01 4.5584999988967724e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -3.0363403349494433e-01 9.0866365944440503e+01 9.0865858639660033e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5281365955472786e+01 4.5281365955472786e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.0363404452722165e-01 3.0363404452722165e-01 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999988967731e+01 4.5584999988967731e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.1032277313915984e-08 1.1032277313915984e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -3.0363403349494439e-01 9.0866365944440517e+01 9.0865858639660047e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 2.2252946870620555e+01 5.2192442785130266e+00 3.9072874154487053e+01 4.5302111909026223e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -2.2252946870620555e+01 -5.2192442785130266e+00 -3.9376508187982004e+01 4.5564254035414294e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 1.4867320674950697e-16 4.0358404706837885e-17 2.6247550715229702e+00 2.6267650245481931e+00 0 2 0
+P 10001 -16 -1.0854067394852708e+01 -3.1664062344475936e+00 -1.8171541694080691e+01 2.1401914277291052e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 -1.1399004829478347e+01 -2.0528674447394284e+00 -2.1205188306834071e+01 2.4162596427423839e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 -1.0149080861776380e-16 -2.7550405468290772e-17 -1.7917721723811950e+00 1.7931442538898508e+00 0 2 0
+P 10003 16 1.9265414982538839e+01 3.9260722567320272e+00 3.3148489696574103e+01 3.8540793021320248e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 2.9876572417970175e+00 1.2932014224561201e+00 5.9246045604445952e+00 6.7615740803360529e+00 1.3956774771213531e-01 1 0 0 0 0
+E 12 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -7.1054273576010019e-15 2.2166614351157430e-16 4.5578763614157523e+01 4.5578763614157523e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 7.1054273576010019e-15 -2.2242309199926582e-16 -4.5584944567622784e+01 4.5584944567622784e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -6.1809534652681464e-03 9.1163708181780294e+01 9.1163707972244140e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5578763614157516e+01 4.5578763614157516e+01 0 61 0 0 -1 0
+P 9 22 0 0 6.2363858424916430e-03 6.2363858424916430e-03 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584944567622784e+01 4.5584944567622784e+01 0 61 0 0 -2 0
+P 10 22 0 0 -5.5432377223496587e-05 5.5432377223496587e-05 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -6.1809534652681472e-03 9.1163708181780308e+01 9.1163707972244154e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.8713558203579389e+01 4.8246610747596996e-01 -4.1525586705813879e+01 4.5584669340752988e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 1.8713558203579389e+01 -4.8246610747596996e-01 4.1519405752348604e+01 4.5579038841027327e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 6.1784098431902569e-18 1.7472916956920523e-19 5.0714459055995338e+00 5.0753040917120380e+00 0 2 0
+P 10001 -16 5.7859078276483409e+00 6.1435909535872602e-01 1.2154566015139089e+01 1.3475449574517189e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 1.2927755791808821e+01 -1.0968279206282689e+00 2.9365073621356739e+01 3.2103846019092153e+01 1.3956753909587860e-01 1 0 0 0 0
+V -9 0 -5.6330509098588370e-18 -1.5930608888070515e-19 -4.6237970121590743e+00 4.6273146419931335e+00 0 2 0
+P 10003 16 -7.3061137019959466e+00 -5.5646479308724828e-01 -1.7263765973119050e+01 1.8754377244149136e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 -1.1407549917461218e+01 1.0389336183567912e+00 -2.4262054651660154e+01 2.6830548880903191e+01 1.3956774771213531e-01 1 0 0 0 0
+E 13 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -7.1054273576010019e-15 -2.0075507395664215e-23 4.5584999403282971e+01 4.5584999403282950e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 3.5527136788005009e-15 3.5527136587249927e-15 -4.5584999731140861e+01 4.5584999731140854e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -3.2785789727540759e-07 9.1169999134423819e+01 9.1169999134423819e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999403282957e+01 4.5584999403282957e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.9671704377706192e-07 5.9671704377706192e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999731140854e+01 4.5584999731140854e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.6885914650165432e-07 2.6885914650165432e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -3.2785789727540749e-07 9.1169999134423819e+01 9.1169999134423819e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -3.3191520352613331e+01 -1.3526104278739501e+01 -2.8110531496604416e+01 4.5584999668300625e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 3.3191520352613331e+01 1.3526104278739501e+01 2.8110531168746515e+01 4.5584999466123158e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 -5.1536588274211351e-17 -7.8045416829707446e-17 1.1991230229919461e+00 1.2000351495691370e+00 0 2 0
+P 10001 -16 2.8657826207524852e+01 1.1026895832078466e+01 2.3938550432896498e+01 3.8934788188399267e+01 9.9903941154479980e-03 1 0 0 0 0
+P 10002 211 4.5338811171967945e+00 2.4992846409482321e+00 4.1721390860919660e+00 6.6504680638960068e+00 1.3956806063652039e-01 1 0 0 0 0
+V -9 0 1.3520909616812960e-16 2.0475647734892970e-16 -3.1459657218765971e+00 3.1483587365138237e+00 0 2 0
+P 10003 16 -3.1807205993487340e+01 -1.2632508430641098e+01 -2.6603612480443893e+01 4.3347790245474656e+01 9.9896481260657310e-03 1 0 0 0 0
+P 10004 -211 -1.3845013312390886e+00 -8.9367204238755271e-01 -1.5070773664083685e+00 2.2374662090057917e+00 1.3956801593303680e-01 1 0 0 0 0
+E 14 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -1.7763568394002505e-15 4.5584999791566268e+01 4.5584999791566268e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.7763568394002505e-15 3.5527136788005009e-15 -4.5584999736631403e+01 4.5584999736631403e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 5.4934872650846955e-08 9.1169999528197664e+01 9.1169999528197664e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999791566268e+01 4.5584999791566268e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.0843373249590513e-07 2.0843373249590513e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999736631396e+01 4.5584999736631396e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.6336860514675209e-07 2.6336860514675209e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 5.4934872650846955e-08 9.1169999528197664e+01 9.1169999528197664e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.3572692300885166e+01 -3.7038805133188788e+01 1.2136292790343884e+01 4.5584999771411610e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 2.3572692300885166e+01 3.7038805133188788e+01 -1.2136292735409011e+01 4.5584999756786054e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 -3.1572412125569412e-16 -1.8619209170911984e-15 4.0354985862876855e+00 4.0385682341973324e+00 0 2 0
+P 10001 -16 1.5270838682957004e+01 2.4989626233082657e+01 -7.4321981540586748e+00 3.0214526349479687e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10002 211 8.3019864059394219e+00 1.2049387544465047e+01 -4.7041629466501611e+00 1.5370730193480121e+01 1.3956785202026367e-01 1 0 0 0 0
+V -9 0 5.1408987301795392e-17 3.0317439289400615e-16 -6.5709548815518404e-01 6.5759531531371862e-01 0 2 0
+P 10003 16 -1.6148155575048470e+01 -2.5491793412451230e+01 9.1814152324116609e+00 3.1541923614701336e+01 9.9880397319793701e-03 1 0 0 0 0
+P 10004 -211 -7.4246695138479577e+00 -1.1547220365096472e+01 2.9549459232323589e+00 1.4043332942884104e+01 1.3956789672374725e-01 1 0 0 0 0
+E 15 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 -3.5527136788005009e-15 4.5584950789281201e+01 4.5584950789281201e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 7.1054273576010019e-15 -3.5527136788005009e-15 -4.5571207649524887e+01 4.5571207649524887e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.3743139756329015e-02 9.1156158438806074e+01 9.1156157402815225e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584950789281201e+01 4.5584950789281201e+01 0 61 0 0 -1 0
+P 9 22 0 0 4.9210718799486131e-05 4.9210718799486131e-05 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5571207649524872e+01 4.5571207649524872e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.3792350475128501e-02 1.3792350475128501e-02 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.3743139756329015e-02 9.1156158438806074e+01 9.1156157402815225e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -3.6384637459213565e+01 -1.7692521391843837e+01 -2.0905718378595790e+01 4.5574926337016905e+01 1.7769900000003376e+00 2 0 0 -9 0
+P 12 -15 3.6384637459213565e+01 1.7692521391843837e+01 2.0919461518352119e+01 4.5581232101789162e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 2.1982906257641162e-16 2.0758480448394700e-16 3.8759415871528531e+00 3.8788907627025928e+00 0 2 0
+P 10001 -16 1.6897509974779240e+01 9.1733763309689529e+00 9.7135927119320975e+00 2.1541370889129645e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 1.9487332443782496e+01 8.5192447251262085e+00 1.1205986648440623e+01 2.4040117977609579e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 -1.8067451683399061e-16 -1.7061112763094674e-16 -3.1855836772819655e+00 3.1880075645572101e+00 0 2 0
+P 10003 16 -1.4953013424519435e+01 -7.2524179745752893e+00 -7.6123837526698335e+00 1.8279460141599124e+01 9.9843796342611313e-03 1 0 0 0 0
+P 10004 -211 -2.1431828994037062e+01 -1.0440203081517325e+01 -1.3293452390526671e+01 2.7295722924840106e+01 1.3956764340400696e-01 1 0 0 0 0
+E 16 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 -8.8817841970012523e-16 4.5584700646288837e+01 4.5584700646288809e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.7763568394002505e-15 8.8817841970012523e-16 -4.5583924424359218e+01 4.5583924424359203e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 7.7622192961968040e-04 9.1168625070648062e+01 9.1168625067343640e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584700646288844e+01 4.5584700646288844e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.9935371115641374e-04 2.9935371115641374e-04 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5583924424359225e+01 4.5583924424359225e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.0755756407760941e-03 1.0755756407760941e-03 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 7.7622192961968040e-04 9.1168625070648062e+01 9.1168625067343640e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.5719393599154611e+01 -5.3083314953522418e+00 4.2420832915894941e+01 4.5584673708693650e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 1.5719393599154609e+01 5.3083314953522409e+00 -4.2420056693965321e+01 4.5583951361954391e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 5.3499548597855517e-17 1.9399133029102353e-17 1.4592469489284596e+00 1.4603569752283534e+00 0 2 0
+P 10001 -16 5.0026047320480078e+00 1.7363396272235145e+00 -1.1372829556019012e+01 1.2545209499484933e+01 9.9937962368130684e-03 1 0 0 0 0
+P 10002 211 1.0716877416473849e+01 3.5720217706432296e+00 -3.1047466095585172e+01 3.3038998642734192e+01 1.3956829905509949e-01 1 0 0 0 0
+V -9 0 -1.7993389777271869e-16 1.7077547346039409e-16 -5.6895819757397703e+00 5.6939099516407001e+00 0 2 0
+P 10003 16 -1.3636945813441169e+01 -3.9810705452060127e+00 3.6581405241016341e+01 3.9243018779968530e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 -2.0825363350852184e+00 -1.3272908526622618e+00 5.8396666369022530e+00 6.3419117130720544e+00 1.3956774771213531e-01 1 0 0 0 0
+E 17 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 -3.5527136788005009e-15 4.5584999831539236e+01 4.5584999831539250e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 0 -4.5584996652865485e+01 4.5584996652865506e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 3.1786737579864166e-06 9.1169996484404749e+01 9.1169996484404692e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999831539257e+01 4.5584999831539257e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.6846075112653125e-07 1.6846075112653125e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584996652865499e+01 4.5584996652865499e+01 0 61 0 0 -2 0
+P 10 22 0 0 -3.3471345091129479e-06 3.3471345091129479e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 3.1786737579864175e-06 9.1169996484404763e+01 9.1169996484404706e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.1999878950139850e+01 -2.7915021632006930e+01 -3.3935066463461659e+01 4.5584997059044397e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 1.1999878950139850e+01 2.7915021632006930e+01 3.3935069642135417e+01 4.5584999425360373e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 -1.9166275431465506e-22 -1.2370481362292616e-21 1.4355361931290226e-05 1.4366281501387483e-05 0 2 0
+P 10001 -16 5.2235428028460734e-02 5.2149685796819223e-01 3.6222411453208170e-01 6.3717630322153862e-01 9.9903009831905365e-03 1 0 0 0 0
+P 10002 211 1.1947711118973913e+01 2.7393682022948283e+01 3.3573036688218103e+01 4.4948079908307434e+01 1.3956806063652039e-01 1 0 0 0 0
+V -9 0 4.7343009755645549e-17 3.0556579545735451e-16 -3.5459473719298935e+00 3.5486446373192515e+00 0 2 0
+P 10003 16 -2.4882491447764852e+00 -4.9692401002781166e+00 -7.1362337523745252e+00 9.0449247053723969e+00 9.9877836182713509e-03 1 0 0 0 0
+P 10004 -211 -9.5116974022241649e+00 -2.2945938780634350e+01 -2.6799023871679115e+01 3.6540329139820706e+01 1.3956788182258606e-01 1 0 0 0 0
+E 18 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 7.1054273397973926e-15 4.5584998338081540e+01 4.5584998338081547e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 5.3290705182007514e-15 -7.1054273754046111e-15 -4.5584998628836551e+01 4.5584998628836551e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -2.9075500407316213e-07 9.1169996966918092e+01 9.1169996966918092e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584998338081547e+01 4.5584998338081547e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.6619184535215936e-06 1.6619184535215936e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584998628836551e+01 4.5584998628836551e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.3711634494484315e-06 1.3711634494484315e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -2.9075500407316218e-07 9.1169996966918092e+01 9.1169996966918092e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 2.6784116367318060e+01 2.5969956963206752e+01 2.6134399389106115e+01 4.5584998400112461e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -2.6784116367318060e+01 -2.5969956963206752e+01 -2.6134399679861115e+01 4.5584998566805616e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 -2.3294962480634933e-16 -3.9367253344352205e-16 5.8648592463225961e+00 5.8693204184810277e+00 0 2 0
+P 10001 -16 -1.4222054601569628e+01 -1.5003949606696452e+01 -1.4585676403337812e+01 2.5300739058038655e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 -1.2562212644128863e+01 -1.0966153648625845e+01 -1.1548870494965877e+01 2.0284516294940577e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 4.8619064507128236e-16 8.2163645097459320e-16 -1.2240585073241714e+01 1.2249896014056858e+01 0 2 0
+P 10003 16 1.0115009840527389e+01 1.0834979306416269e+01 9.8253374364805524e+00 1.7783350532812165e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 1.6669257405171098e+01 1.5135123948906028e+01 1.6309209171066495e+01 2.7801904653472977e+01 1.3956774771213531e-01 1 0 0 0 0
+E 19 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 3.5527136788005009e-15 4.5584997751737625e+01 4.5584997751737617e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -3.5527136788005009e-15 -4.4976993535430566e+01 4.4976993535430552e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 6.0800421630706580e-01 9.0561991287168198e+01 9.0559950291340598e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584997751737639e+01 4.5584997751737639e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.2482623691644221e-06 2.2482623691644221e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.4976993535430573e+01 4.4976993535430573e+01 0 61 0 0 -2 0
+P 10 22 0 0 -6.0800646456943497e-01 6.0800646456943497e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 6.0800421630706591e-01 9.0561991287168212e+01 9.0559950291340627e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -4.2447466902459645e+01 -1.4467557296164959e+01 6.3058700536844494e+00 4.5321290263487370e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 4.2447466902459645e+01 1.4467557296164959e+01 -5.6978658373773827e+00 4.5240701023680806e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 -1.5006518248147885e-16 -1.6054894781606761e-16 2.0788622390795815e+00 2.0804649504951782e+00 0 2 0
+P 10001 -16 9.7298093238509153e+00 2.6081322111468843e+00 -1.5914495311197492e+00 1.0198252522545218e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10002 211 3.2717896690663537e+01 1.1859506582633960e+01 -4.1064484030706581e+00 3.5042703347838390e+01 1.3956785202026367e-01 1 0 0 0 0
+V -9 0 1.4568111864563546e-17 1.5585860709636070e-17 -2.0181295320562584e-01 2.0196854212240806e-01 0 2 0
+P 10003 16 -1.1999933683752332e+01 -3.3990034110846983e+00 2.2055669883111801e+00 1.2665554002044781e+01 9.9933771416544914e-03 1 0 0 0 0
+P 10004 -211 -3.0447772330771294e+01 -1.1068635382699272e+01 4.1003385871538098e+00 3.2655991562124761e+01 1.3956806063652039e-01 1 0 0 0 0
+E 20 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 7.1054273576010019e-15 7.1054001146699239e-15 4.5584550713496597e+01 4.5584550713496583e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 -7.1054546006650274e-15 -4.5584995625410329e+01 4.5584995625410322e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -4.4491191371776040e-04 9.1169546338906898e+01 9.1169546337821302e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584550713496583e+01 4.5584550713496597e+01 1.1680077279964342e-06 61 0 0 -1 0
+P 9 22 0 0 4.4928650341091725e-04 4.4928650341091725e-04 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584995625410301e+01 4.5584995625410315e+01 1.1680077279964342e-06 61 0 0 -2 0
+P 10 22 0 0 -4.3745896931568495e-06 4.3745896931568495e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -4.4491191371776051e-04 9.1169546338906912e+01 9.1169546337821316e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.3670910333852554e+01 -1.6933471367347625e+01 3.5039175410560553e+01 4.5584602175451764e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 2.3670910333852554e+01 1.6933471367347625e+01 -3.5039620322474271e+01 4.5584944163455134e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 -7.0909630428246413e-17 -6.5943074895856672e-17 6.2075976688371748e-01 6.2123195956221544e-01 0 2 0
+P 10001 -16 1.7117370261697292e+01 1.2257476606669801e+01 -2.4088370466461051e+01 3.1992183249202249e+01 9.9926143884658813e-03 1 0 0 0 0
+P 10002 211 6.5536734134379442e+00 4.6760901491001663e+00 -1.0951447238701606e+01 1.3593017700106913e+01 1.3956822454929352e-01 1 0 0 0 0
+V -9 0 3.0346777975810530e-16 2.8221270380640115e-16 -2.6566291078048057e+00 2.6586499230720184e+00 0 2 0
+P 10003 16 -9.2965476165714609e+00 -5.6972447306059086e+00 1.2544203251921205e+01 1.6620515338874245e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 -1.4374496058563775e+01 -1.1236322025164061e+01 2.2495169538821497e+01 2.8964343620505083e+01 1.3956795632839203e-01 1 0 0 0 0
+E 21 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.6653344873068981e-16 -1.1102237235927741e-15 4.5584983458023899e+01 4.5584983458023920e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -5.5511146268174152e-17 6.6613307589601176e-16 -4.5584999843118680e+01 4.5584999843118702e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.6385094788518018e-05 9.1169983301142594e+01 9.1169983301141116e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584983458023913e+01 4.5584983458023913e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.6541976094686106e-05 1.6541976094686106e-05 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999843118702e+01 4.5584999843118702e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.5688130616808849e-07 1.5688130616808849e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.6385094788518021e-05 9.1169983301142608e+01 9.1169983301141130e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 6.7647801119537676e-01 3.8195597189293951e+00 4.5384869370099565e+01 4.5584983493988467e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -6.7647801119537665e-01 -3.8195597189293955e+00 -4.5384885755194354e+01 4.5584999807154148e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 1.8347292721939396e-17 1.0968445524362274e-16 4.0736488479850375e-01 4.0767475164295663e-01 0 2 0
+P 10001 -16 4.8446354768562799e-01 -7.3003688260198996e-01 -6.2796449851687823e+00 6.3404810347642453e+00 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 -1.1609453695687055e+00 -3.0895443523988968e+00 -3.9105496428928127e+01 3.9244775558560661e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 -7.7506875631043140e-18 -4.1492977903680368e-17 -1.7317369398560242e-01 1.7330542057299372e-01 0 2 0
+P 10003 16 7.7047905742271339e-01 3.0283786430035518e+00 2.6636094328703827e+01 2.6818768355966480e+01 9.9926311522722244e-03 1 0 0 0 0
+P 10004 -211 -9.3997235539636154e-02 7.9120259199733345e-01 1.8749030700205989e+01 1.8766471924100852e+01 1.3956822454929352e-01 1 0 0 0 0
+E 22 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -3.5527136788005009e-15 4.5584999946035836e+01 4.5584999946035850e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 3.5527136788005009e-15 -4.5437772849902288e+01 4.5437772849902309e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.4722709613354112e-01 9.1022772795938153e+01 9.1022653727756932e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999946035836e+01 4.5584999946035836e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.3964150481533579e-08 5.3964150481533579e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5437772849902295e+01 4.5437772849902295e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.4722715009769161e-01 1.4722715009769161e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.4722709613354107e-01 9.1022772795938124e+01 9.1022653727756904e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.3086486428752804e+00 4.3391907998418247e+01 -1.3474575211112180e+01 4.5489472535892439e+01 1.7769899999996979e+00 2 0 0 -9 0
+P 12 -15 -1.3086486428752804e+00 -4.3391907998418247e+01 1.3621802307245721e+01 4.5533300260045699e+01 1.7769899999995700e+00 2 0 0 -8 0
+V -8 0 1.0907157349865831e-18 -1.2139611734663185e-16 3.1079950191579386e+00 3.1103668199195966e+00 0 2 0
+P 10001 -16 -5.5211500412779657e-01 -3.7117196458430747e+01 1.1395035071114787e+01 3.8830890125213877e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10002 211 -7.5654101053380796e-01 -6.2749559721929611e+00 2.2268439694974513e+00 6.7026666297756536e+00 1.3956785202026367e-01 1 0 0 0 0
+V -9 0 -3.6212100075836673e-19 4.0303886788873725e-17 -1.0318639683907525e+00 1.0326514135864719e+00 0 2 0
+P 10003 16 1.0757966083084183e+00 1.1928205557204535e+01 -4.0672316911850732e+00 1.2648395136805945e+01 9.9829332903027534e-03 1 0 0 0 0
+P 10004 -211 2.3285940635318647e-01 3.1463946873419182e+01 -9.4074194239444324e+00 3.2841333647143102e+01 1.3956774771213531e-01 1 0 0 0 0
+E 23 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -2.6655493551747297e-15 3.5527136788005009e-15 4.5584996266973491e+01 4.5584996266973491e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -8.8716432362561972e-16 -7.1054273576010019e-15 -4.5377280417529349e+01 4.5377280417529356e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 2.0771584944414911e-01 9.0962276684502854e+01 9.0962039520637077e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584996266973498e+01 4.5584996266973512e+01 1.1680077279964342e-06 61 0 0 -1 0
+P 9 22 0 0 3.7330264959223314e-06 3.7330264959223314e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5377280417529349e+01 4.5377280417529363e+01 1.1680077279964342e-06 61 0 0 -2 0
+P 10 22 0 0 -2.0771958247064504e-01 2.0771958247064504e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 2.0771584944414909e-01 9.0962276684502868e+01 9.0962039520637092e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 9.3575095516557774e+00 1.8056083558750164e+01 -4.0538348460025112e+01 4.5388330304346098e+01 1.7769900000005936e+00 2 0 0 -9 0
+P 12 -15 -9.3575095516557791e+00 -1.8056083558750164e+01 4.0746064309469268e+01 4.5573946380156777e+01 1.7769900000004655e+00 2 0 0 -8 0
+V -8 0 0 0 3.3364925217857526e+00 3.3390420939917300e+00 0 2 0
+P 10001 -16 -6.2685747463298869e+00 -1.3103776867512499e+01 2.7580264715295712e+01 3.1171703499398724e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 -3.0889875173788264e+00 -4.9524084034749905e+00 1.3166029121986142e+01 1.4402499604650306e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 0 0 -9.5583310691916479e-01 9.5656350433712500e-01 0 2 0
+P 10003 16 9.1737744462096842e+00 1.6859362814869421e+01 -3.7968966342402375e+01 4.2544550262672374e+01 9.9911401048302650e-03 1 0 0 0 0
+P 10004 -211 1.8378781749633227e-01 1.1968224561128704e+00 -2.5696104753335955e+00 2.8440357199537143e+00 1.3956812024116516e-01 1 0 0 0 0
+E 24 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -3.5563476719885818e-15 4.5525588430142811e+01 4.5525588430142804e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -8.8817841970012523e-16 5.3254341563577309e-15 -4.5584955384240608e+01 4.5584955384240594e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -5.9366954097789915e-02 9.1110543814383391e+01 9.1110524472848013e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5525588430142797e+01 4.5525588430142797e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.9411569857203972e-02 5.9411569857203972e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584955384240587e+01 4.5584955384240587e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.4615759414057266e-05 4.4615759414057266e-05 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -5.9366954097789915e-02 9.1110543814383391e+01 9.1110524472848013e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -8.3407737054357209e+00 1.2927929116606075e+01 -4.2871545551330108e+01 4.5583187346533279e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 8.3407737054357192e+00 -1.2927929116606075e+01 4.2812178597232311e+01 4.5527356467850119e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 -1.4892887088992962e-17 -2.4526815720382378e-17 7.3531478026088637e-01 7.3587483711910273e-01 0 2 0
+P 10001 -16 5.8213743768642781e+00 -8.9794933571065538e+00 2.7285616877258153e+01 2.9309122961310443e+01 9.9895000457763672e-03 1 0 0 0 0
+P 10002 211 2.5194463132261942e+00 -3.9485085841927292e+00 1.5526802886501590e+01 1.6218489968014477e+01 1.3956800103187561e-01 1 0 0 0 0
+V -9 0 1.6210420798836684e-16 -9.8431027237470534e-17 -4.8598897400804804e+00 4.8635913038898506e+00 0 2 0
+P 10003 16 -7.1617063914107391e+00 1.1981076959822795e+01 -3.8145890385180728e+01 4.0619518665513027e+01 9.9881570786237717e-03 1 0 0 0 0
+P 10004 -211 -1.1791142986779308e+00 9.4692498147369530e-01 -4.7258966670892555e+00 4.9639254569877416e+00 1.3956791162490845e-01 1 0 0 0 0
+E 25 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -8.8940182168140997e-16 4.5564872184360880e+01 4.5564872184360880e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 8.8695474949501530e-16 -4.5584854045156156e+01 4.5584854045156156e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.9981860795283524e-02 9.1149726229517000e+01 9.1149724039303251e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5564872184360858e+01 4.5564872184360858e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.0127815639142455e-02 2.0127815639142455e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584854045156142e+01 4.5584854045156142e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.4595484385893087e-04 1.4595484385893087e-04 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.9981860795283524e-02 9.1149726229517000e+01 9.1149724039303251e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.6822846984430580e+01 2.5721347962680987e+00 3.6702805498955719e+01 4.5566814928351370e+01 1.7769899999996979e+00 2 0 0 -9 0
+P 12 -15 2.6822846984430580e+01 -2.5721347962680987e+00 -3.6722787359751010e+01 4.5582911301165680e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 -7.7682355316142153e-17 9.2403574507812568e-18 1.1460407126892240e+00 1.1469128499077152e+00 0 2 0
+P 10001 -16 1.3119828729443864e+01 -6.7682287963363097e-01 -1.6762663862565830e+01 2.1297300172962633e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 1.3703169351539776e+01 -1.8953264058011858e+00 -1.9960330361377927e+01 2.4285867902615546e+01 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 2.7605504456655081e-17 -3.2836894266466985e-18 -4.0726149294647429e-01 4.0757141902652033e-01 0 2 0
+P 10003 16 -1.0623690430381261e+00 2.5637327481385086e-01 2.0800342026170164e+00 2.3496802622832531e+00 9.9904872477054596e-03 1 0 0 0 0
+P 10004 -211 -2.5760629037945517e+01 2.3157760106209659e+00 3.4622978047971074e+01 4.3217391349807656e+01 1.3956807553768158e-01 1 0 0 0 0
+E 26 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.7763568394002505e-15 -1.0658463555749309e-14 4.5579725976736860e+01 4.5579725976736867e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -7.1057498955837902e-15 -4.5584993269568095e+01 4.5584993269568109e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -5.2672928312418321e-03 9.1164719246304969e+01 9.1164719094138789e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5579725976736867e+01 4.5579725976736867e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.2740232631407480e-03 5.2740232631407480e-03 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584993269568109e+01 4.5584993269568109e+01 0 61 0 0 -2 0
+P 10 22 0 0 -6.7304318989158674e-06 6.7304318989158674e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -5.2672928312418330e-03 9.1164719246304983e+01 9.1164719094138803e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.9455562822465950e+01 2.3262742597339084e+01 3.3981475792918921e+01 4.5580396097596712e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -1.9455562822465950e+01 -2.3262742597339084e+01 -3.3986743085750163e+01 4.5584323148708251e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 6.2720715417985574e-16 1.0051219693205268e-15 3.7973195450413066e+00 3.8002083543570699e+00 0 2 0
+P 10001 -16 -1.8073145240766948e+01 -2.1961568355128009e+01 -3.2336186938051611e+01 4.3064813350892670e+01 9.9864779040217400e-03 1 0 0 0 0
+P 10002 211 -1.3825271773939380e+00 -1.3013052842407780e+00 -1.6507475994062590e+00 2.5197665801877527e+00 1.3956779241561890e-01 1 0 0 0 0
+V -9 0 -1.7521388975150175e-16 -2.8078654515608097e-16 -1.0608028363230353e+00 1.0616098416538775e+00 0 2 0
+P 10003 16 1.3108490695213195e+01 1.6696243774679427e+01 2.3047226566839001e+01 3.1333238528625429e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 6.3471817229406877e+00 6.5666298646809871e+00 1.0934440648104053e+01 1.4247414329205471e+01 1.3956795632839203e-01 1 0 0 0 0
+E 27 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 1.4210854715202004e-14 4.5584999936544747e+01 4.5584999936544719e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 -7.1054273576010019e-15 -4.5584988452648318e+01 4.5584988452648304e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.1483896429353990e-05 9.1169988389192994e+01 9.1169988389192270e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999936544719e+01 4.5584999936544719e+01 0 61 0 0 -1 0
+P 9 22 0 0 6.3455289023295336e-08 6.3455289023295336e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584988452648290e+01 4.5584988452648290e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.1547351718377286e-05 1.1547351718377286e-05 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.1483896429353995e-05 9.1169988389193009e+01 9.1169988389192270e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.1246587088715245e+01 1.9878689677860322e+01 2.6520233762460002e+01 4.5584997535120714e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -3.1246587088715245e+01 -1.9878689677860322e+01 -2.6520222278563576e+01 4.5584990854072323e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 1.0462868838461384e-16 2.3468260076786939e-16 1.0417880670689745e+00 1.0425805152079892e+00 0 2 0
+P 10001 -16 -1.7075261009015009e+01 -1.1894220283710878e+01 -1.5005678830010789e+01 2.5655555178156177e+01 9.9799484014511108e-03 1 0 0 0 0
+P 10002 211 -1.4171502095749032e+01 -7.9845813733682505e+00 -1.1514692840379967e+01 1.9929692462039743e+01 1.3956731557846069e-01 1 0 0 0 0
+V -9 0 -7.0352160021516420e-17 -1.5780019933724734e-16 -7.0049660312592366e-01 7.0102944396666722e-01 0 2 0
+P 10003 16 5.2163111309053498e+00 2.8561643943727013e+00 4.9093113847274710e+00 7.7116155801531665e+00 9.9851721897721291e-03 1 0 0 0 0
+P 10004 -211 2.6030451973849686e+01 1.7022637262700698e+01 2.1611071769616764e+01 3.7873638741115663e+01 1.3956758379936218e-01 1 0 0 0 0
+E 28 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.4210854715202004e-14 -3.5527136788005009e-15 4.5584999955650986e+01 4.5584999955651021e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.0658141036401503e-14 1.7763568394002505e-15 -4.5582685003531218e+01 4.5582685003531239e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 2.3149521197751710e-03 9.1167684959182267e+01 9.1167684929791349e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999955651021e+01 4.5584999955651021e+01 0 61 0 0 -1 0
+P 9 22 0 0 4.4348979599817540e-08 4.4348979599817540e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5582685003531246e+01 4.5582685003531246e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.3149964687547708e-03 2.3149964687547708e-03 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 2.3149521197751710e-03 9.1167684959182267e+01 9.1167684929791349e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.4890234921786224e+01 6.2370690149885615e+00 3.7634974409212887e+01 4.5584798086660918e+01 1.7769899999995700e+00 2 0 0 -9 0
+P 12 -15 2.4890234921786224e+01 -6.2370690149885615e+00 -3.7632659457093119e+01 4.5582886872521307e+01 1.7769899999996979e+00 2 0 0 -8 0
+V -8 0 -5.4502730186965669e-18 1.6529976370207955e-18 2.9208327156785252e-01 2.9230545932567914e-01 0 2 0
+P 10001 -16 1.1650495274941337e+00 -6.9115220458699089e-01 -1.8771483673213440e+00 2.3149119968356446e+00 9.9866650998592377e-03 1 0 0 0 0
+P 10002 211 2.3725325604199558e+01 -5.5459519446167445e+00 -3.5755723079402117e+01 4.3268231649973679e+01 1.3956779241561890e-01 1 0 0 0 0
+V -9 0 1.5695161559674797e-17 -4.7601404336633738e-18 -8.4111275167498811e-01 8.4175258618304105e-01 0 2 0
+P 10003 16 -1.6853367249985169e+01 3.9456649872978491e+00 2.3970020195965493e+01 2.9566302235042219e+01 9.9892755970358849e-03 1 0 0 0 0
+P 10004 -211 -8.0370078817031452e+00 2.2914391619045400e+00 1.3665166215910029e+01 1.6018752636662985e+01 1.3956798613071442e-01 1 0 0 0 0
+E 29 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 -1.7763568394002505e-15 4.5584999970251154e+01 4.5584999970251154e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 3.5527136788005009e-15 -1.7763568394002505e-15 -4.5584662386564851e+01 4.5584662386564851e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 3.3758368630287805e-04 9.1169662356816005e+01 9.1169662356190997e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999970251154e+01 4.5584999970251154e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.9748846941402007e-08 2.9748846941402007e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584662386564851e+01 4.5584662386564851e+01 0 61 0 0 -2 0
+P 10 22 0 0 -3.3761343514981945e-04 3.3761343514981945e-04 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 3.3758368630287810e-04 9.1169662356816005e+01 9.1169662356190997e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.7922319122356296e+01 1.1904816675642921e+01 4.0148455894697570e+01 4.5584979839776359e+01 1.7769899999995700e+00 2 0 0 -9 0
+P 12 -15 -1.7922319122356296e+01 -1.1904816675642921e+01 -4.0148118311011281e+01 4.5584682517039646e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 1.7294841212744221e-16 1.3033713990580856e-16 2.7765874149820107e+00 2.7786994734269150e+00 0 2 0
+P 10001 -16 -9.0534220496774676e-02 1.2399935172009213e-02 -4.8797076896483299e-01 4.9655360375761509e-01 9.9886693060398102e-03 1 0 0 0 0
+P 10002 211 -1.7831885860600085e+01 -1.1917283672186285e+01 -3.9660373701587119e+01 4.5088385697691720e+01 1.3956794142723083e-01 1 0 0 0 0
+V -9 0 -1.5434859583980465e-16 -1.1631997242862018e-16 -2.4779780482352578e+00 2.4798629643862222e+00 0 2 0
+P 10003 16 2.2105327606855313e-01 3.8173384764042401e-01 1.1888928502174900e+00 1.2681290454552256e+00 9.9896481260657310e-03 1 0 0 0 0
+P 10004 -211 1.7701366805028307e+01 1.1523149889373855e+01 3.8959789205922419e+01 4.4317107580405661e+01 1.3956801593303680e-01 1 0 0 0 0
+E 30 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 -1.0695152977062490e-17 4.5410166907232494e+01 4.5410166907232487e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.7763568394002505e-15 -1.0715721828992435e-17 -4.5584999967841988e+01 4.5584999967841974e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.7483306060949388e-01 9.0995166875074460e+01 9.0994998917652424e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5410166907232487e+01 4.5410166907232465e+01 -1.3486991523486091e-06 61 0 0 -1 0
+P 9 22 0 0 1.7483309276752124e-01 1.7483309276752124e-01 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999967841981e+01 4.5584999967841959e+01 -1.3486991523486091e-06 61 0 0 -2 0
+P 10 22 0 0 -3.2158027352124918e-08 3.2158027352124918e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.7483306060949380e-01 9.0995166875074432e+01 9.0994998917652396e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.6501509905336427e+01 -1.9727483576064916e+01 -3.7576034993218819e+01 4.5569611987283068e+01 1.7769899999998258e+00 2 0 0 -9 0
+P 12 -15 1.6501509905336427e+01 1.9727483576064916e+01 3.7401201932609332e+01 4.5425554887791371e+01 1.7769899999996979e+00 2 0 0 -8 0
+V -8 0 -7.9149689012059084e-17 -5.4593861102099191e-17 2.4608384453032950e+00 2.4627175251432805e+00 0 2 0
+P 10001 -16 1.5459414427186974e+01 1.7965120187936751e+01 3.4954514851486600e+01 4.2232182587206303e+01 9.9881570786237717e-03 1 0 0 0 0
+P 10002 211 1.0421884332796998e+00 1.7624745155835178e+00 2.4468977669094873e+00 3.1936281885853495e+00 1.3956791162490845e-01 1 0 0 0 0
+V -9 0 1.1972510445442359e-16 8.2580940046691377e-17 -3.7223663615975799e+00 3.7252087357487427e+00 0 2 0
+P 10003 16 -6.7137214186007919e+00 -7.3646049636853217e+00 -1.5890771699318345e+01 1.8757083637587975e+01 9.9896481260657310e-03 1 0 0 0 0
+P 10004 -211 -9.7878814418658830e+00 -1.2362989739834944e+01 -2.1685474964544376e+01 2.6812785049187561e+01 1.3956801593303680e-01 1 0 0 0 0
+E 31 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.7763568394002505e-15 1.7763568394002505e-15 4.5584998759471340e+01 4.5584998759471340e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -5.3290705182007514e-15 -4.5580131530039907e+01 4.5580131530039893e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 4.8672294314400233e-03 9.1165130289511211e+01 9.1165130159582574e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584998759471326e+01 4.5584998759471326e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.2405286753391920e-06 1.2405286753391920e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5580131530039885e+01 4.5580131530039885e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.8684699601153625e-03 4.8684699601153625e-03 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 4.8672294314400233e-03 9.1165130289511211e+01 9.1165130159582574e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.6020715006944847e+01 -1.3605980176101790e+01 -4.0405814857116091e+01 4.5580407782443835e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 1.6020715006944847e+01 1.3605980176101790e+01 4.0410682086547531e+01 4.5584722507067390e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 -6.0232374921422155e-17 5.7660234067520019e-17 2.1380271123566192e+00 2.1396536009373728e+00 0 2 0
+P 10001 -16 2.1321049099027918e+00 2.3101342579106072e+00 5.0102111694453688e+00 5.9148040823522345e+00 9.9874110892415047e-03 1 0 0 0 0
+P 10002 211 1.3888700343793882e+01 1.1295922562430576e+01 3.5400698555681075e+01 3.9670175209330402e+01 1.3956764340400696e-01 1 0 0 0 0
+V -9 0 1.6092368766709564e-17 -1.5405166258176382e-17 -5.7121972643700525e-01 5.7165427769072019e-01 0 2 0
+P 10003 16 -9.4196215594222110e+00 -9.1027386719414185e+00 -2.4759007305954675e+01 2.8010670543334633e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10004 -211 -6.6011836942744617e+00 -4.5033181483997664e+00 -1.5647035162322606e+01 1.7569993999419061e+01 1.3956817984580994e-01 1 0 0 0 0
+E 32 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 1.0658141036401503e-14 4.5584991243042786e+01 4.5584991243042786e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -7.1054273576010019e-15 -4.5579224556682014e+01 4.5579224556682021e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 5.7666863607792607e-03 9.1164215799724786e+01 9.1164215617335941e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584991243042793e+01 4.5584991243042793e+01 0 61 0 0 -1 0
+P 9 22 0 0 8.7569572144730046e-06 8.7569572144730046e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5579224556682014e+01 4.5579224556682014e+01 0 61 0 0 -2 0
+P 10 22 0 0 -5.7754433179937337e-03 5.7754433179937337e-03 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 5.7666863607792615e-03 9.1164215799724801e+01 9.1164215617335955e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.1466475107324062e+01 2.4861358563188357e+01 -2.1592131252778170e+01 4.5580741884973364e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 -3.1466475107324062e+01 -2.4861358563188357e+01 2.1597897939138949e+01 4.5583473914751465e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 0 0 3.2489863829427967e-01 3.2514580753581501e-01 0 2 0
+P 10001 -16 -7.2355105680548633e+00 -6.3054942840138599e+00 5.8519411433941624e+00 1.1240871241837974e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 -2.4231141793975517e+01 -1.8556004326408758e+01 1.5746078459485108e+01 3.4342859450491972e+01 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 0 0 -1.5818538257210091e+00 1.5830572336896482e+00 0 2 0
+P 10003 16 5.2619242146949388e+00 5.0049128815018591e+00 -3.7403720125741686e+00 8.1686891229467609e+00 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 2.6204728147330911e+01 1.9856585728917178e+01 -1.7851880871456721e+01 3.7412309524208652e+01 1.3956795632839203e-01 1 0 0 0 0
+E 33 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -8.8817841970012523e-16 -1.2655527138102279e-18 4.5564326626288114e+01 4.5564326626288121e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 4.4408920985006262e-16 -1.2658397420796378e-18 -4.5584997014335116e+01 4.5584997014335137e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -2.0670388047015820e-02 9.1149323640623265e+01 9.1149321296859583e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5564326626288135e+01 4.5564326626288114e+01 -1.5078914929239175e-06 61 0 0 -1 0
+P 9 22 0 0 2.0673373711872500e-02 2.0673373711872500e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584997014335151e+01 4.5584997014335130e+01 -1.3486991523486091e-06 61 0 0 -2 0
+P 10 22 0 0 -2.9856648566806143e-06 2.9856648566806143e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -2.0670388047015827e-02 9.1149323640623237e+01 9.1149321296859569e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.0647809940309427e+01 4.2445297658225890e+01 1.2595729144678019e+01 4.5571803080046543e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 1.0647809940309427e+01 -4.2445297658225890e+01 -1.2616399532725030e+01 4.5577520560576708e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 1.9955977232302929e-17 1.1244213888603358e-16 7.1007097707398625e-01 7.1061134601449660e-01 0 2 0
+P 10001 -16 9.9055244020445752e+00 -3.8335908764091357e+01 -1.0968986407548917e+01 4.1086251678815167e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10002 211 7.4234551874939902e-01 -4.1096279939620528e+00 -1.6474841949793255e+00 4.4915256258040310e+00 1.3956785202026367e-01 1 0 0 0 0
+V -9 0 -1.1187723326127075e-16 -8.6881160926293937e-16 -4.4042601770942582e+00 4.4076118496487897e+00 0 2 0
+P 10003 16 -4.0566719296392098e+00 1.3346236672162863e+01 3.5407629389065787e+00 1.4391515640386309e+01 9.9903941154479980e-03 1 0 0 0 0
+P 10004 -211 -6.5911979911547647e+00 2.9099300085890548e+01 9.0550371591356935e+00 3.1180544151495415e+01 1.3956806063652039e-01 1 0 0 0 0
+E 34 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 3.5527136788005009e-15 4.5582217842842205e+01 4.5582217842842205e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 0 -4.5582147921820983e+01 4.5582147921820983e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 6.9921021207619560e-05 9.1164365764663174e+01 9.1164365764636358e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5582217842842198e+01 4.5582217842842198e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.7821571578101612e-03 2.7821571578101612e-03 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5582147921820990e+01 4.5582147921820990e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.8520781790177807e-03 2.8520781790177807e-03 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 6.9921021207619574e-05 9.1164365764663188e+01 9.1164365764636372e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 2.5921201382208235e+01 -3.1972535391500564e+01 -1.9504477399440226e+01 4.5582167922808630e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -2.5921201382208235e+01 3.1972535391500564e+01 1.9504547320461434e+01 4.5582197841854558e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 -1.1452581949174993e-16 3.9760487561865846e-17 1.5542464138362255e+00 1.5554288153458611e+00 0 2 0
+P 10001 -16 -1.0393140069671974e+01 1.1960854744908442e+01 6.7681503647093084e+00 1.7230419782479007e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 -1.5528207329999733e+01 2.0011860751998885e+01 1.2736506827377440e+01 2.8352034829762470e+01 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 3.4711911687734382e-16 -1.2051103751396172e-16 -4.7108035984800232e+00 4.7143873682329094e+00 0 2 0
+P 10003 16 1.6332755497204744e+01 -2.1117842284336746e+01 -1.2004022451701054e+01 2.9271467672349885e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 9.5885919024725634e+00 -1.0854873212577488e+01 -7.5005648189748246e+00 1.6310957020686985e+01 1.3956795632839203e-01 1 0 0 0 0
+E 35 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -2.2204460492503131e-16 3.5527136788005009e-15 4.5584999984372899e+01 4.5584999984372878e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 2.2204460492503131e-16 -3.5527136788005009e-15 -4.5584915321351474e+01 4.5584915321351453e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 8.4663021411301997e-05 9.1169915305724345e+01 9.1169915305685038e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999984372878e+01 4.5584999984372878e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.5627122706973751e-08 1.5627122706973751e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584915321351467e+01 4.5584915321351467e+01 0 61 0 0 -2 0
+P 10 22 0 0 -8.4678648534008971e-05 8.4678648534008971e-05 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 8.4663021411301997e-05 9.1169915305724345e+01 9.1169915305685038e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 6.2506259335970027e+00 -4.4240313444438179e+01 8.8631688976566174e+00 4.5584965883417944e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -6.2506259335970027e+00 4.4240313444438179e+01 -8.8630842346352061e+00 4.5584949422306373e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 -6.2782578538629523e-18 2.2836955883957731e-16 5.8581890954386839e+00 5.8626452018624775e+00 0 2 0
+P 10001 -16 -5.2811567049696091e+00 3.4144406501784758e+01 -7.4387059444788974e+00 3.5342121574144606e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 -9.6950443920999030e-01 1.0096156154048753e+01 -1.4244282170536808e+00 1.0243084634065109e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 5.3293734913665177e-18 -1.9385420309964810e-16 -4.9727931536666112e+00 4.9765757723488084e+00 0 2 0
+P 10003 16 4.2510739392133896e+00 -3.5088909148296111e+01 6.8703969529367743e+00 3.6007021940495896e+01 9.9933771416544914e-03 1 0 0 0 0
+P 10004 -211 1.9995872049662109e+00 -9.1516535075374055e+00 1.9928218720941318e+00 9.5782007289181283e+00 1.3956828415393829e-01 1 0 0 0 0
+E 36 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 7.1054273576010019e-15 -1.2599221344686373e-22 4.5584997889891888e+01 4.5584997889891881e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -7.1054273576010019e-15 -1.2599221423572463e-22 -4.5584999947500890e+01 4.5584999947500911e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -2.0576090022927929e-06 9.1169997837392799e+01 9.1169997837392771e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584997889891888e+01 4.5584997889891916e+01 1.6518123698891422e-06 61 0 0 -1 0
+P 9 22 0 0 2.1101081060237448e-06 2.1101081060237448e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999947500890e+01 4.5584999947500918e+01 1.5078914929239175e-06 61 0 0 -2 0
+P 10 22 0 0 -5.2499103730951902e-08 5.2499103730951902e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -2.0576090022927929e-06 9.1169997837392842e+01 9.1169997837392813e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 2.8237382449643352e+01 1.8963873768552468e+00 3.5691571929905642e+01 4.5584998113175921e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 -2.8237382449643352e+01 -1.8963873768552468e+00 -3.5691573987514644e+01 4.5584999724216907e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 2.4519579471558659e-17 -9.7407914351669335e-18 1.5127950069239146e-01 1.5139457316990260e-01 0 2 0
+P 10001 -16 -1.7581256626230541e+01 -5.1171131217236043e-01 -2.1289309390283083e+01 2.7615162992528560e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 -1.0656284888222325e+01 -1.3846867472770543e+00 -1.4402465652461377e+01 1.7970093517858633e+01 1.3956785202026367e-01 1 0 0 0 0
+V -9 0 -1.9492442533641635e-16 7.7436816362377169e-17 -1.2026335839833191e+00 1.2035483809347478e+00 0 2 0
+P 10003 16 6.2626778426617689e+00 -2.1129912008664492e-01 8.5059190311072612e+00 1.0564872902487521e+01 9.9903941154479980e-03 1 0 0 0 0
+P 10004 -211 2.1974863671791098e+01 2.1076971795360597e+00 2.7185853954016608e+01 3.5020381996849608e+01 1.3956806063652039e-01 1 0 0 0 0
+E 37 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 1.7763568394002505e-15 4.5584997521513451e+01 4.5584997521513458e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 -1.7763568394002505e-15 -4.4549187934509142e+01 4.4549187934509163e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.0358095870043016e+00 9.0134185456022635e+01 9.0128233569288113e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584997521513472e+01 4.5584997521513472e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.4784865360061303e-06 2.4784865360061303e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.4549187934509170e+01 4.4549187934509170e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.0358120654908376e+00 1.0358120654908376e+00 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.0358095870043018e+00 9.0134185456022649e+01 9.0128233569288128e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 4.0266909784208131e+01 3.2159799379381382e+00 -1.9379398079909851e+01 4.4838435676665739e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -4.0266909784208131e+01 -3.2159799379381382e+00 2.0415207666914153e+01 4.5295749779356882e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 1.0045900947472936e-17 -1.8158557404323627e-18 1.0351254128415712e+00 1.0359311215298246e+00 0 2 0
+P 10001 -16 -1.8109359515049572e+01 -5.8716934208785221e-01 9.3690014735064207e+00 2.0397842001944227e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 -2.2157777097840874e+01 -2.6288287118789455e+00 1.1046321194898510e+01 2.4898162934197515e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 -1.4103151060453701e-17 2.5492275849834726e-18 -1.4531827598291684e+00 1.4543138710555845e+00 0 2 0
+P 10003 16 4.5223678725683056e+00 1.0418013834753681e-01 -2.7317469978480360e+00 5.2844305404216927e+00 9.9885296076536179e-03 1 0 0 0 0
+P 10004 -211 3.5744768740330848e+01 3.1118179156199557e+00 -1.6647760248708142e+01 3.9554257716929435e+01 1.3956792652606964e-01 1 0 0 0 0
+E 38 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 0 4.5584999705525021e+01 4.5584999705525028e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 8.8817841970012523e-16 0 -4.5584993742160606e+01 4.5584993742160606e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 5.9633644298173749e-06 9.1169993447685613e+01 9.1169993447685414e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999705525028e+01 4.5584999705525028e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.9447497951196056e-07 2.9447497951196056e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584993742160599e+01 4.5584993742160599e+01 0 61 0 0 -2 0
+P 10 22 0 0 -6.2578394093293355e-06 6.2578394093293355e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 5.9633644298173766e-06 9.1169993447685627e+01 9.1169993447685428e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -7.5066379401421610e+00 -2.3297845980874317e+01 -3.8414772721681381e+01 4.5584994211159660e+01 1.7769899999998258e+00 2 0 0 -9 0
+P 12 -15 7.5066379401421610e+00 2.3297845980874317e+01 3.8414778685045817e+01 4.5584999236525981e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 2.6519433644692968e-17 7.2061043027850563e-18 7.0468474037744178e-01 7.0522076691366131e-01 0 2 0
+P 10001 -16 3.4718183799465041e-01 2.1921532061717022e+00 2.8247156831764677e+00 3.5923793497909644e+00 9.9907675758004189e-03 1 0 0 0 0
+P 10002 211 7.1594983880056775e+00 2.1105824014469157e+01 3.5590279397264474e+01 4.1992876672905830e+01 1.3956809043884277e-01 1 0 0 0 0
+V -9 0 -3.7679243232727182e-17 -1.0238550356047153e-17 -1.0012275560185797e+00 1.0019891512512686e+00 0 2 0
+P 10003 16 -1.3714847871991789e+00 -4.8605760107753238e+00 -9.2659313939581551e+00 1.0552902635450266e+01 9.9864779040217400e-03 1 0 0 0 0
+P 10004 -211 -6.1351954388011505e+00 -1.8437401209865541e+01 -2.9149057723084763e+01 3.5032348361851902e+01 1.3956779241561890e-01 1 0 0 0 0
+E 39 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 3.5527136788005009e-15 4.5584999811687290e+01 4.5584999811687275e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -3.5527136788005009e-15 -4.5584680514156311e+01 4.5584680514156290e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 3.1929753098580704e-04 9.1169680325843558e+01 9.1169680325284432e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999811687275e+01 4.5584999811687275e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.8831272541319777e-07 1.8831272541319777e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584680514156290e+01 4.5584680514156290e+01 0 61 0 0 -2 0
+P 10 22 0 0 -3.1948584371122024e-04 3.1948584371122024e-04 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 3.1929753098580704e-04 9.1169680325843558e+01 9.1169680325284432e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -4.2796531821886115e+00 -3.3911939072798880e+01 -3.0107728290570556e+01 4.5584734718060631e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 4.2796531821886115e+00 3.3911939072798880e+01 3.0108047588101531e+01 4.5584945607782920e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 0 0 1.1655341020961192e+01 1.1664206850858713e+01 0 2 0
+P 10001 -16 4.0244389881341620e+00 3.3248512516445963e+01 2.9290185363487861e+01 4.4492412298984277e+01 9.9927242845296860e-03 1 0 0 0 0
+P 10002 211 2.5523830189192903e-01 6.6361758667265536e-01 8.1803182712284050e-01 1.0927900946673594e+00 1.3956823945045471e-01 1 0 0 0 0
+V -9 0 0 0 -5.4541872060561258e-01 5.4583360246888168e-01 0 2 0
+P 10003 16 -2.0305572289642706e+00 -9.7374541815135558e+00 -8.8978495227004117e+00 1.3345898340219293e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 -2.2491200610624369e+00 -2.4174675921609946e+01 -2.1210048368585007e+01 3.2239093162528668e+01 1.3956795632839203e-01 1 0 0 0 0
+E 40 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 1.7763568394002505e-15 4.5579559437969465e+01 4.5579559437969444e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -1.7763568394002505e-15 -4.5154541698354684e+01 4.5154541698354684e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 4.2501773961478762e-01 9.0734101136324099e+01 9.0733105694325829e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5579559437969444e+01 4.5579559437969444e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.4405620305573166e-03 5.4405620305573166e-03 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5154541698354656e+01 4.5154541698354656e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.3045830164534493e-01 4.3045830164534493e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 4.2501773961478762e-01 9.0734101136324099e+01 9.0733105694325829e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.9158518568719884e+01 -7.7916270906588840e+00 -2.1255548961722258e+01 4.5266489640140428e+01 1.7769900000003376e+00 2 0 0 -9 0
+P 12 -15 -3.9158518568719884e+01 7.7916270906588840e+00 2.1680566701337050e+01 4.5467611496183693e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 -8.9370329926137863e-18 5.8037693578410142e-17 7.2690341575347395e-01 7.2746168693718172e-01 0 2 0
+P 10001 -16 -2.7697105707913519e+01 4.7982913976212309e+00 1.4800979303965416e+01 3.1768260150430880e+01 9.9844262003898621e-03 1 0 0 0 0
+P 10002 211 -1.1461633445775576e+01 2.9933795842747251e+00 6.8797095267910553e+00 1.3699607470653561e+01 1.3956764340400696e-01 1 0 0 0 0
+V -9 0 8.2308960275145134e-17 -5.3451992614937021e-16 -6.6946898842790894e+00 6.6998314923184141e+00 0 2 0
+P 10003 16 2.6994166547199097e+01 -6.1982421040497107e+00 -1.4741211691661706e+01 3.1375255453094475e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10004 -211 1.2164572606501277e+01 -1.5934288778484893e+00 -6.5144570053065314e+00 1.3891489179014471e+01 1.3956838846206665e-01 1 0 0 0 0
+E 41 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 8.8817841970012523e-16 -6.2837716469868421e-23 4.5584998577752977e+01 4.5584998577752962e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -8.8817841970012523e-16 3.5527136159627821e-15 -4.5584999603970786e+01 4.5584999603970772e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.0262177880804302e-06 9.1169998181723685e+01 9.1169998181723685e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584998577752941e+01 4.5584998577752955e+01 1.1680077279964342e-06 61 0 0 -1 0
+P 9 22 0 0 1.4222470525737663e-06 1.4222470525737663e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999603970729e+01 4.5584999603970743e+01 1.1680077279964342e-06 61 0 0 -2 0
+P 10 22 0 0 -3.9602926449333609e-07 3.9602926449333609e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.0262177880804302e-06 9.1169998181723699e+01 9.1169998181723685e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.6496044722678704e+01 -3.7240126751075785e+01 -2.0393330715039340e+01 4.5584999320411050e+01 1.7769900000003376e+00 2 0 0 -9 0
+P 12 -15 -1.6496044722678704e+01 3.7240126751075785e+01 2.0393329688821552e+01 4.5584998861312712e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 0 0 2.1435932865680467e+00 2.1452238352363566e+00 0 2 0
+P 10001 -16 -1.1016496146047418e+01 2.2818725949448435e+01 1.2900044168571704e+01 2.8433583675638602e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 -5.4796415009671415e+00 1.4421610580038104e+01 7.4934003984918229e+00 1.7151671971819844e+01 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 0 0 -2.6753002848959633e+00 2.6773352825534933e+00 0 2 0
+P 10003 16 2.5894754617363960e+00 -4.5639497078474944e+00 -2.3092608870786528e+00 5.7330450692885178e+00 9.9903941154479980e-03 1 0 0 0 0
+P 10004 -211 1.3906662185281727e+01 -3.2676386821647093e+01 -1.8084184706212845e+01 3.9852211037280696e+01 1.3956806063652039e-01 1 0 0 0 0
+E 42 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 0 4.5584997468691675e+01 4.5584997468691682e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 7.1054273576010019e-15 -4.5584283961932606e+01 4.5584283961932620e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 7.1350675909798156e-04 9.1169281430624281e+01 9.1169281427832274e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584997468691697e+01 4.5584997468691697e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.5313083114042456e-06 2.5313083114042456e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584283961932599e+01 4.5584283961932599e+01 0 61 0 0 -2 0
+P 10 22 0 0 -7.1603806740938580e-04 7.1603806740938580e-04 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 7.1350675909798156e-04 9.1169281430624295e+01 9.1169281427832274e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.3039002142043607e+01 -3.1967078002679273e+01 -2.2849415233627862e+01 4.5584461888995875e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 2.3039002142043607e+01 3.1967078002679273e+01 2.2850128740386957e+01 4.5584819541628441e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 8.1721343491676592e-17 1.7427315436195867e-16 1.7450357781654988e+00 1.7463631804169664e+00 0 2 0
+P 10001 -16 1.2211962594688858e+01 1.8407730149052501e+01 1.2581205928944726e+01 2.5421711234616385e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 1.0827169329017304e+01 1.3559527928289056e+01 1.0269051529156627e+01 2.0163365092164074e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 -2.5864979390001444e-17 -5.5157824788596416e-17 -5.5230754303082219e-01 5.5272766867253942e-01 0 2 0
+P 10003 16 -9.4704125418397194e+00 -1.3936755189140342e+01 -8.9150988656161587e+00 1.9063078094404389e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10004 -211 -1.3568719381868100e+01 -1.8030502888203522e+01 -1.3934445081708466e+01 2.6521640577732079e+01 1.3956785202026367e-01 1 0 0 0 0
+E 43 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -2.6645352591003757e-15 3.5426362595162312e-15 4.5373184567811258e+01 4.5373184567811265e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 8.8817841970012523e-16 -1.0095695595416328e-17 -4.5537910551611063e+01 4.5537910551611077e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.6472598379981207e-01 9.0911095119422356e+01 9.0910945882016435e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5373184567811279e+01 4.5373184567811279e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.1181543218872889e-01 2.1181543218872889e-01 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5537910551611091e+01 4.5537910551611091e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.7089448388916821e-02 4.7089448388916821e-02 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.6472598379981210e-01 9.0911095119422370e+01 9.0910945882016449e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -7.2782082878178977e+00 1.4246545624966112e+01 4.2427775583750758e+01 4.5378521489470330e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 7.2782082878178977e+00 -1.4246545624966112e+01 -4.2592501567550578e+01 4.5532573629952005e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 -1.2236031463187705e-16 3.1112988148892862e-16 1.2181221600689482e+00 1.2190540327714214e+00 0 2 0
+P 10001 -16 3.8550550339596197e+00 -7.5284698231857536e+00 -2.0009398816417040e+01 2.1723614983685458e+01 9.9874315783381462e-03 1 0 0 0 0
+P 10002 211 3.4231942529428023e+00 -6.7181560544064505e+00 -2.2583342680179634e+01 2.3809215137117178e+01 1.3956785202026367e-01 1 0 0 0 0
+V -9 0 1.4203892374552058e-16 -3.6116737395382474e-16 -1.4140267710760459e+00 1.4151085122935751e+00 0 2 0
+P 10003 16 -4.2843725951668477e+00 8.9221198382830877e+00 2.3863177463783575e+01 2.5834306829001857e+01 9.9857319146394730e-03 1 0 0 0 0
+P 10004 -211 -2.9938766917340027e+00 5.3245060393060379e+00 1.8564837121081439e+01 1.9544470283513768e+01 1.3956773281097412e-01 1 0 0 0 0
+E 44 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 8.8817841970012523e-16 1.0658137648269714e-14 4.5584999966554712e+01 4.5584999966554719e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -1.0658137648269714e-14 -4.5584999987317659e+01 4.5584999987317659e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -2.0762939811902470e-08 9.1169999953872377e+01 9.1169999953872377e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999966554719e+01 4.5584999966554719e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.3445282099364704e-08 3.3445282099364704e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999987317659e+01 4.5584999987317659e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.2682342287462234e-08 1.2682342287462234e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -2.0762939811902470e-08 9.1169999953872377e+01 9.1169999953872377e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -8.2770513081964605e+00 -3.6284671173743035e+01 -2.6263046080706175e+01 4.5584999982917303e+01 1.7769899999996979e+00 2 0 0 -9 0
+P 12 -15 8.2770513081964623e+00 3.6284671173743028e+01 2.6263046059943239e+01 4.5584999970955074e+01 1.7769899999996979e+00 2 0 0 -8 0
+V -8 0 4.0906748570292841e-17 1.1831677552553069e-16 1.4356275985892379e+00 1.4367196250443615e+00 0 2 0
+P 10001 -16 3.0260729423035779e+00 1.2949667288977338e+01 1.0426008036824014e+01 1.6898305937435818e+01 9.9799949675798416e-03 1 0 0 0 0
+P 10002 211 5.2510249915911444e+00 2.3335208281001361e+01 1.5837185966247224e+01 2.8686950819707338e+01 1.3956731557846069e-01 1 0 0 0 0
+V -9 0 -3.0525411220192238e-17 -8.8290278582220403e-17 -1.0712932300324314e+00 1.0721081214078410e+00 0 2 0
+P 10003 16 -2.1013751649068011e+00 -1.1887646675300402e+01 -7.8146734640499913e+00 1.4380582126079576e+01 9.9933771416544914e-03 1 0 0 0 0
+P 10004 -211 -6.1757227689879217e+00 -2.4397228894678296e+01 -1.8448520559784303e+01 3.1204674643025879e+01 1.3956828415393829e-01 1 0 0 0 0
+E 45 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.0658141459917976e-14 6.6613380568262318e-16 4.5584999682824360e+01 4.5584999682824360e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 7.1054273576010019e-15 -8.8817842879259835e-16 -4.5584999831315713e+01 4.5584999831315713e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.4849135965278037e-07 9.1169999514140102e+01 9.1169999514140102e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999682824368e+01 4.5584999682824368e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.1717563331312704e-07 3.1717563331312704e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999831315727e+01 4.5584999831315727e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.6868427366034666e-07 1.6868427366034666e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.4849135965278037e-07 9.1169999514140102e+01 9.1169999514140102e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -4.1333373220876958e+01 7.7225944486895970e-01 -1.9125647329318646e+01 4.5584999788220571e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 4.1333373220876965e+01 -7.7225944486895970e-01 1.9125647180827290e+01 4.5584999725919516e+01 1.7769899999996979e+00 2 0 0 -8 0
+V -8 0 0 0 5.9350612011879127e+00 5.9395757730124137e+00 0 2 0
+P 10001 -16 4.6457587316649533e+00 3.4085380717973812e-01 2.5572359651518934e+00 5.3140202312442977e+00 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 3.6687847325437879e+01 -1.1131176022858194e+00 1.6568518952914346e+01 4.0271236280861928e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 0 0 -5.1676188469594866e+00 5.1715496550262312e+00 0 2 0
+P 10003 16 -2.1006391284870464e+01 -4.7966036705978682e-01 -9.5604725602273941e+00 2.3084654735307062e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 -2.0327214772226419e+01 1.2519241621657571e+00 -9.5652825063282858e+00 2.2500601839094013e+01 1.3956795632839203e-01 1 0 0 0 0
+E 46 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 -3.5527138154425733e-15 4.5584997754201609e+01 4.5584997754201588e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.7763568394002505e-15 3.5527135421584254e-15 -4.5584999985736026e+01 4.5584999985736012e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -2.2315344168077900e-06 9.1169997739937628e+01 9.1169997739937600e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584997754201595e+01 4.5584997754201609e+01 1.1680077279964342e-06 61 0 0 -1 0
+P 9 22 0 0 2.2457983988033448e-06 2.2457983988033448e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999985736012e+01 4.5584999985736026e+01 1.1680077279964342e-06 61 0 0 -2 0
+P 10 22 0 0 -1.4263981995554786e-08 1.4263981995554786e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -2.2315344168077900e-06 9.1169997739937642e+01 9.1169997739937614e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 7.8102311571715433e+00 -2.4039646579435949e+01 -3.7893669585873361e+01 4.5584999797478190e+01 1.7769900000005936e+00 2 0 0 -9 0
+P 12 -15 -7.8102311571715433e+00 2.4039646579435949e+01 3.7893667354338938e+01 4.5584997942459488e+01 1.7769900000005936e+00 2 0 0 -8 0
+V -8 0 -6.7682640705091312e-17 -2.5041858505805789e-16 3.3258916305075052e+00 3.3284215079127306e+00 0 2 0
+P 10001 -16 -4.2237171024848355e+00 1.4703767424915462e+01 2.1672910636920577e+01 2.6528394560319622e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 -3.5865580507211900e+00 9.3360145729349480e+00 1.6220970177309884e+01 1.9056860168283706e+01 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 8.6441382709650034e-18 3.1982393894664201e-17 -4.2476869739199591e-01 4.2509180254675272e-01 0 2 0
+P 10003 16 1.7922764183916389e+00 -6.6791461904636265e+00 -1.1658690575106043e+01 1.3555383222060495e+01 9.9896481260657310e-03 1 0 0 0 0
+P 10004 -211 6.0179987348132604e+00 -1.7360635807383314e+01 -2.6235192470665940e+01 3.2029873361565421e+01 1.3956801593303680e-01 1 0 0 0 0
+E 47 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -8.8817841970012523e-16 -1.7763568394002505e-15 4.5584999968504491e+01 4.5584999968504491e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -8.8817841970012523e-16 3.5527136788005009e-15 -4.5584999966489008e+01 4.5584999966489008e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 2.0154828916929546e-09 9.1169999934993498e+01 9.1169999934993498e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999968504491e+01 4.5584999968504491e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.1495510199874843e-08 3.1495510199874843e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999966489008e+01 4.5584999966489008e+01 0 61 0 0 -2 0
+P 10 22 0 0 -3.3510993091567798e-08 3.3510993091567798e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 2.0154828916929550e-09 9.1169999934993498e+01 9.1169999934993498e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.4128046333518393e+01 4.1156826508276886e+01 -1.3466568498136196e+01 4.5584999967199046e+01 1.7769899999996979e+00 2 0 0 -9 0
+P 12 -15 -1.4128046333518393e+01 -4.1156826508276886e+01 1.3466568500151679e+01 4.5584999967794452e+01 1.7769899999995700e+00 2 0 0 -8 0
+V -8 0 1.8751559987790029e-17 -1.8477021408823119e-16 2.3811597316085087e+00 2.3829709878315186e+00 0 2 0
+P 10001 -16 -1.3587631383057600e+01 -4.0279388298327945e+01 1.3094729763140702e+01 4.4480612582083644e+01 9.9898353219032288e-03 1 0 0 0 0
+P 10002 211 -5.4049453557120453e-01 -8.7767005167032275e-01 3.7191459593128001e-01 1.1046441719054361e+00 1.3956803083419800e-01 1 0 0 0 0
+V -9 0 -3.5991291473751408e-18 3.5464348754168533e-17 -4.5703404944274101e-01 4.5738169758880698e-01 0 2 0
+P 10003 16 1.3632122282334144e+01 4.0005534356663325e+01 -1.2809950660831564e+01 4.4163021554822272e+01 9.9936099722981453e-03 1 0 0 0 0
+P 10004 -211 4.9600363629364519e-01 1.1515239933319905e+00 -6.5669369622396101e-01 1.4222351985681214e+00 1.3956829905509949e-01 1 0 0 0 0
+E 48 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -8.8817841970012523e-16 -1.7763568394002505e-15 4.5584999303181974e+01 4.5584999303181945e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 2.6645352591003757e-15 -4.5584998129869213e+01 4.5584998129869199e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.1733127323054759e-06 9.1169997433051122e+01 9.1169997433051108e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999303181917e+01 4.5584999303181931e+01 1.1680077279964342e-06 61 0 0 -1 0
+P 9 22 0 0 6.9681807701726939e-07 6.9681807701726939e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584998129869184e+01 4.5584998129869199e+01 1.1680077279964342e-06 61 0 0 -2 0
+P 10 22 0 0 -1.8701308093227453e-06 1.8701308093227453e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.1733127323054759e-06 9.1169997433051137e+01 9.1169997433051122e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 4.4661956198766140e+00 6.5486056790865614e+00 -4.4855358902153540e+01 4.5584998139259298e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 -4.4661956198766140e+00 -6.5486056790865614e+00 4.4855360075466272e+01 4.5584999293791839e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 -6.0856194296774675e-18 9.0613575762383453e-18 5.5979073526544210e-01 5.6021654647629315e-01 0 2 0
+P 10001 -16 -1.8250865859993477e+00 -4.2108776993613821e+00 2.6069407434476304e+01 2.6470295347862599e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 -2.6411341925332845e+00 -2.3377648688656691e+00 1.8786205317019139e+01 1.9114960732110230e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 1.1371779490509559e-17 -1.6932337197941058e-17 -1.0460425394373047e+00 1.0468382236318785e+00 0 2 0
+P 10003 16 2.8315155380259793e+00 5.0291888741422124e+00 -2.8598157207769503e+01 2.9174730785923295e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10004 -211 1.6347052405066527e+00 1.5194536940848393e+00 -1.6257454370406599e+01 1.6410524139510489e+01 1.3956785202026367e-01 1 0 0 0 0
+E 49 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -8.8817841970012523e-16 -3.9174088470213576e-17 4.4931262378366448e+01 4.4931262378366455e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 8.8817841970012523e-16 -3.9452981928289759e-17 -4.5573301131525696e+01 4.5573301131525703e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -6.4203875315926240e-01 9.0504563509892165e+01 9.0502286171983229e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.4931262378366448e+01 4.4931262378366448e+01 0 61 0 0 -1 0
+P 9 22 0 0 6.5373762163354598e-01 6.5373762163354598e-01 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5573301131525710e+01 4.5573301131525710e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.1698868474283586e-02 1.1698868474283586e-02 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -6.4203875315926229e-01 9.0504563509892151e+01 9.0502286171983215e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 8.7117390216759159e+00 3.8318426868776214e+01 2.2047199193262269e+01 4.5093601765738626e+01 1.7769900000001457e+00 2 0 0 -9 0
+P 12 -15 -8.7117390216759159e+00 -3.8318426868776214e+01 -2.2689237946421532e+01 4.5410961744153525e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 0 0 1.0867765748110438e+00 1.0876155010530846e+00 0 2 0
+P 10001 -16 -8.4465856755948732e+00 -3.6426449940542021e+01 -2.1938595375211435e+01 4.3353582685941468e+01 9.9913263693451881e-03 1 0 0 0 0
+P 10002 211 -2.6520242043129882e-01 -1.8921927808781569e+00 -7.5077038261574558e-01 2.0576348640203515e+00 1.3956813514232635e-01 1 0 0 0 0
+V -9 0 0 0 -4.8979274180047865e+00 4.9017083237933488e+00 0 2 0
+P 10003 16 7.8167304660446710e+00 3.3385294509986849e+01 1.8606728857718416e+01 3.9011403759129713e+01 9.9881570786237717e-03 1 0 0 0 0
+P 10004 -211 8.9505762997962202e-01 4.9333482114250664e+00 3.4405945302575920e+00 6.0824520246777594e+00 1.3956791162490845e-01 1 0 0 0 0
+E 50 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -3.5527136788005009e-15 -8.9359078897296803e-24 4.5584999657152437e+01 4.5584999657152437e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 3.5527136788005009e-15 -8.9359071008687751e-24 -4.5584999803086880e+01 4.5584999803086880e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.4593445030186558e-07 9.1169999460239325e+01 9.1169999460239325e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999657152437e+01 4.5584999657152437e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.4284756367242153e-07 3.4284756367242153e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999803086887e+01 4.5584999803086887e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.9691311337055595e-07 1.9691311337055595e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.4593445030186558e-07 9.1169999460239325e+01 9.1169999460239325e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.1228207876190849e+01 1.9612109462113526e+01 -3.9549045791796296e+01 4.5584999793425233e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 1.1228207876190849e+01 -1.9612109462113523e+01 3.9549045645861845e+01 4.5584999666814099e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 0 0 2.5747802135983213e+00 2.5767387494627934e+00 0 2 0
+P 10001 -16 1.0183337769689187e+01 -1.7416341282322374e+01 3.4195664881959672e+01 3.9703562915978928e+01 9.9838664755225182e-03 1 0 0 0 0
+P 10002 211 1.0449333564425174e+00 -2.1958786573292555e+00 5.3536035487691365e+00 5.8816935370084247e+00 1.3956759870052338e-01 1 0 0 0 0
+V -9 0 -6.4706800226413352e-17 -1.3017257942955090e-16 -1.8638050861943369e+00 1.8652228107389095e+00 0 2 0
+P 10003 16 -9.0395822544700852e+00 1.6069850760758595e+01 -3.0853193554119908e+01 3.5942646022285231e+01 9.9890893325209618e-03 1 0 0 0 0
+P 10004 -211 -2.1886888716600050e+00 3.5423691788902159e+00 -8.6960750225384800e+00 9.6426105573073890e+00 1.3956797122955322e-01 1 0 0 0 0
+E 51 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -2.2204460492503131e-16 1.7763568394002505e-15 4.5584947067191074e+01 4.5584947067191074e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 2.2204460492503131e-16 -1.7763568394002505e-15 -4.5584770514603171e+01 4.5584770514603171e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.7655258790227890e-04 9.1169717581794259e+01 9.1169717581623317e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584947067191088e+01 4.5584947067191088e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.2932808920047592e-05 5.2932808920047592e-05 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584770514603186e+01 4.5584770514603186e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.2948539682232649e-04 2.2948539682232649e-04 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.7655258790227890e-04 9.1169717581794274e+01 9.1169717581623331e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -9.0941831199694043e+00 -4.3942927040769597e+01 7.8190814332439196e+00 4.5584873932585744e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 9.0941831199694043e+00 4.3942927040769597e+01 -7.8189048806560164e+00 4.5584843649208501e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 -4.5945114812140210e-16 -2.5625838748343684e-15 9.4411252349692756e+00 9.4483067787555424e+00 0 2 0
+P 10001 -16 6.1486336335395748e+00 3.2388243348913683e+01 -6.3029486282998270e+00 3.3563838634751235e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 2.9456007151331232e+00 1.1554931228016276e+01 -1.5160002972531328e+00 1.2021261799745073e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 1.0508098149528462e-16 5.8608805273990234e-16 -2.1592778909507269e+00 2.1609203804140731e+00 0 2 0
+P 10003 16 -7.1587020221899342e+00 -3.6870112389321555e+01 6.0836911563908416e+00 3.8048174728103490e+01 9.9911401048302650e-03 1 0 0 0 0
+P 10004 -211 -1.9355323264853845e+00 -7.0730621876210584e+00 1.7354343227468187e+00 7.5369559899537979e+00 1.3956791162490845e-01 1 0 0 0 0
+E 52 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -3.5527136788005009e-15 -3.5527136788005009e-15 4.5581770872230038e+01 4.5581770872230038e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 7.1054273576010019e-15 -4.5275146245335470e+01 4.5275146245335470e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 3.0662462689459602e-01 9.0856917117565473e+01 9.0856399716510580e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5581770872230045e+01 4.5581770872230045e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.2291277699627585e-03 3.2291277699627585e-03 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5275146245335449e+01 4.5275146245335449e+01 0 61 0 0 -2 0
+P 10 22 0 0 -3.0985375466455878e-01 3.0985375466455878e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 3.0662462689459608e-01 9.0856917117565487e+01 9.0856399716510580e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.0594361568387210e+01 -2.1458550475403289e+01 -2.5616570575721511e+01 4.5341490158613659e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -3.0594361568387210e+01 2.1458550475403289e+01 2.5923195202616107e+01 4.5515426958951821e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 0 0 2.9937525953291919e+00 2.9960455927066243e+00 0 2 0
+P 10001 -16 -2.8592615232015369e+01 1.9636448838096399e+01 2.4372194578804404e+01 4.2392590592321397e+01 9.9877836182713509e-03 1 0 0 0 0
+P 10002 211 -2.0019186783502811e+00 1.8222225160849976e+00 1.5511466525084867e+00 3.1230927608916468e+00 1.3956788182258606e-01 1 0 0 0 0
+V -9 0 0 0 -9.5976140738616145e-01 9.6049651502115130e-01 0 2 0
+P 10003 16 2.5266892330797969e+01 -1.8451956139928335e+01 -2.1131910504542539e+01 3.7755109254383463e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10004 -211 5.3276415795720906e+00 -3.0067152142561548e+00 -4.4848043726234366e+00 7.5866363186895613e+00 1.3956785202026367e-01 1 0 0 0 0
+E 53 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -7.1054273576010019e-15 4.5584999715859006e+01 4.5584999715859020e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 0 -4.4437176777391301e+01 4.4437176777391286e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.1478229384677476e+00 9.0022176493250299e+01 9.0014858568370997e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999715859027e+01 4.5584999715859027e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.8414098096618545e-07 2.8414098096618545e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.4437176777391279e+01 4.4437176777391279e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.1478232226087286e+00 1.1478232226087286e+00 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.1478229384677479e+00 9.0022176493250313e+01 9.0014858568371011e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -3.5814846745820155e+01 -1.6822233257792771e+01 -2.0801179108765911e+01 4.4738546299374022e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 3.5814846745820155e+01 1.6822233257792771e+01 2.1949002047233659e+01 4.5283630193876270e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 0 0 3.7414121689483559e-01 3.7443317142651256e-01 0 2 0
+P 10001 -16 1.8864468935335093e+01 9.7540915752158224e+00 1.2167356100667151e+01 2.4475603054641013e+01 9.9829332903027534e-03 1 0 0 0 0
+P 10002 211 1.6950579560126194e+01 7.0682364443819274e+00 9.7817695881199054e+00 2.0808282227752194e+01 1.3956753909587860e-01 1 0 0 0 0
+V -9 0 0 0 -1.0594043809107661e+00 1.0602310685247431e+00 0 2 0
+P 10003 16 -3.3489946343286817e+01 -1.6092009065200440e+01 -1.9782137078938575e+01 4.2093494853462175e+01 9.9862916395068169e-03 1 0 0 0 0
+P 10004 -211 -2.3251021521783373e+00 -7.3031895439912753e-01 -1.0191592055486360e+00 2.6453034639058925e+00 1.3956777751445770e-01 1 0 0 0 0
+E 54 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 -9.3621544506532645e-20 4.5583469317414448e+01 4.5583469317414448e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.7763568394002505e-15 3.5526200556858725e-15 -4.5584998286087433e+01 4.5584998286087433e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.5289686729857976e-03 9.1168467603501881e+01 9.1168467590680862e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5583469317414448e+01 4.5583469317414448e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.5306825855532225e-03 1.5306825855532225e-03 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584998286087433e+01 4.5584998286087433e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.7139125674248135e-06 1.7139125674248135e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.5289686729857976e-03 9.1168467603501881e+01 9.1168467590680862e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -8.8425214742705354e+00 -3.1096717618043048e+01 3.2086127619737546e+01 4.5583695678711990e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 8.8425214742705354e+00 3.1096717618043048e+01 -3.2087656588410532e+01 4.5584771924789870e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 9.4264249635543933e-17 4.7058947582828356e-16 6.1533141460975909e+00 6.1579948919863803e+00 0 2 0
+P 10001 -16 6.2484821643261537e+00 1.9798020689904728e+01 -2.1426725259072811e+01 2.9834708105155332e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 2.5940891210071628e+00 1.1298872099955329e+01 -1.0661112083241624e+01 1.5750320604528159e+01 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 -1.2905443796534952e-17 -6.4427034162193835e-17 -8.4243231322495526e-01 8.4307314050812088e-01 0 2 0
+P 10003 16 -1.5537908210574010e+00 -4.0392010070022737e+00 4.9603346304792542e+00 6.5828891958036246e+00 9.9926311522722244e-03 1 0 0 0 0
+P 10004 -211 -7.2887804642784619e+00 -2.7057691782866733e+01 2.7125973734558553e+01 3.9001063261752499e+01 1.3956822454929352e-01 1 0 0 0 0
+E 55 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 -8.9124534663061699e-16 4.5534899415840165e+01 4.5534899415840151e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -7.1054273576010019e-15 8.8510980601611510e-16 -4.5584999907008509e+01 4.5584999907008495e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -5.0100491168322492e-02 9.1119899322848639e+01 9.1119885549460918e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5534899415840158e+01 4.5534899415840158e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.0100584159842754e-02 5.0100584159842754e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999907008481e+01 4.5584999907008481e+01 0 61 0 0 -2 0
+P 10 22 0 0 -9.2991520261875849e-08 9.2991520261875849e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -5.0100491168322499e-02 9.1119899322848639e+01 9.1119885549460918e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.9783403478083837e+01 -3.6738500472154398e+00 4.0812077089598667e+01 4.5537496167153570e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 1.9783403478083837e+01 3.6738500472154398e+00 -4.0862177580766982e+01 4.5582403155695047e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 -6.5771921336113458e-16 -1.3616277963321392e-16 2.6482696796426657e+00 2.6502863350377788e+00 0 2 0
+P 10001 -16 7.2061969090987912e+00 1.5764566053692437e+00 -1.3164798949658660e+01 1.5090610345725908e+01 9.9937496706843376e-03 1 0 0 0 0
+P 10002 211 1.2577318011452954e+01 2.0974141371181800e+00 -2.7697608813034236e+01 3.0492049581535593e+01 1.3956829905509949e-01 1 0 0 0 0
+V -9 0 7.4329221956692906e-16 1.5387833081349171e-16 -2.9928246099640461e+00 2.9951036436828198e+00 0 2 0
+P 10003 16 -2.2750760232808074e+00 -1.4245200214586740e-01 5.8170909948274367e+00 6.2477924842309811e+00 9.9896481260657310e-03 1 0 0 0 0
+P 10004 -211 -1.7508438897269517e+01 -3.5314187403412927e+00 3.4995215994471657e+01 3.9289960201518902e+01 1.3956801593303680e-01 1 0 0 0 0
+E 56 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 -7.1054666581812304e-15 4.5584358162500955e+01 4.5584358162500955e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 7.1053880567440977e-15 -4.5584999991942624e+01 4.5584999991942624e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -6.4182944166901734e-04 9.1169358154443586e+01 9.1169358152184358e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584358162500955e+01 4.5584358162500955e+01 0 61 0 0 -1 0
+P 9 22 0 0 6.4183749904600518e-04 6.4183749904600518e-04 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999991942624e+01 4.5584999991942624e+01 0 61 0 0 -2 0
+P 10 22 0 0 -8.0573769878355961e-09 8.0573769878355961e-09 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -6.4182944166901734e-04 9.1169358154443586e+01 9.1169358152184358e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -3.1777035000071990e+01 2.0897259584404331e+01 -2.5066829676564335e+01 4.5584855544662702e+01 1.7769900000003376e+00 2 0 0 -9 0
+P 12 -15 3.1777035000071990e+01 -2.0897259584404331e+01 2.5066187847122674e+01 4.5584502609780877e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 -9.9225001338810281e-17 -8.8153039038409949e-18 9.0311229601307963e-01 9.0379926833195323e-01 0 2 0
+P 10001 -16 2.6716376778231044e+01 -1.8303357748069526e+01 2.1215733160493254e+01 3.8715437829529186e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 5.0608372259711318e+00 -2.5940195532890584e+00 3.8505958876934141e+00 6.8693215636249461e+00 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 3.1637699169833619e-17 2.8107425471134322e-18 -2.8795560344995336e-01 2.8817464324102693e-01 0 2 0
+P 10003 16 -1.2240694604622998e+01 8.8909983955756999e+00 -9.3621182650572976e+00 1.7791397220939761e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10004 -211 -1.9536519399579173e+01 1.2006378905782880e+01 -1.5704852616186535e+01 2.7793715109084324e+01 1.3956806063652039e-01 1 0 0 0 0
+E 57 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -7.1054273576010019e-15 -3.5527136788005009e-15 4.5584380090721901e+01 4.5584380090721922e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 7.1054273576010019e-15 0 -4.5148111561978290e+01 4.5148111561978304e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 4.3626852874361788e-01 9.0732491652700219e+01 9.0731442792882689e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584380090721908e+01 4.5584380090721908e+01 0 61 0 0 -1 0
+P 9 22 0 0 6.1990927808608376e-04 6.1990927808608376e-04 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5148111561978290e+01 4.5148111561978290e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.3688843802170396e-01 4.3688843802170396e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 4.3626852874361766e-01 9.0732491652700205e+01 9.0731442792882660e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 2.1851277297472162e+01 2.2601693042960378e+01 -3.2440720521199353e+01 4.5209212438770606e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 -2.1851277297472162e+01 -2.2601693042960378e+01 3.2876989049942971e+01 4.5523279213929598e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 0 0 1.5249625707570909e+00 1.5261338046289368e+00 0 2 0
+P 10001 -16 -5.7687937102143505e-01 -2.8466300621134533e-01 5.0962095889050019e-01 8.2075338815071852e-01 9.9883433431386948e-03 1 0 0 0 0
+P 10002 211 -2.1274521017512747e+01 -2.2317157354999686e+01 3.2367553291370193e+01 4.4702782264279421e+01 1.3956791162490845e-01 1 0 0 0 0
+V -9 0 0 0 -4.1684950667171644e-01 4.1716966420937585e-01 0 2 0
+P 10003 16 6.1329623522751398e+00 7.4819926645975965e+00 -9.6834282170711479e+00 1.3688035770667144e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 1.5718438036254323e+01 1.5119827696608555e+01 -2.2757475046882046e+01 3.1521431337415603e+01 1.3956795632839203e-01 1 0 0 0 0
+E 58 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 3.5526126879588810e-15 4.5580730068793130e+01 4.5580730068793130e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 -3.5528146714692615e-15 -4.5582379389319826e+01 4.5582379389319826e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.6493205267238409e-03 9.1163109458112956e+01 9.1163109443193221e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5580730068793116e+01 4.5580730068793116e+01 0 61 0 0 -1 0
+P 9 22 0 0 4.2699312068847917e-03 4.2699312068847917e-03 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5582379389319840e+01 4.5582379389319840e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.6206106801609508e-03 2.6206106801609508e-03 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.6493205267238409e-03 9.1163109458112956e+01 9.1163109443193221e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.3188562352320117e+01 -2.8849922095514415e+01 -3.2685136736383107e+01 4.5582146052752314e+01 1.7769899999996979e+00 2 0 0 -9 0
+P 12 -15 1.3188562352320117e+01 2.8849922095514415e+01 3.2683487415856384e+01 4.5580963405360642e+01 1.7769899999996979e+00 2 0 0 -8 0
+V -8 0 -4.7691290021834869e-17 4.8148170664525604e-17 7.7710184900561041e-01 7.7769304982525134e-01 0 2 0
+P 10001 -16 7.5324900724481747e+00 1.8494717251298894e+01 2.0752896840255502e+01 2.8800621520276248e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 5.6561465727486553e+00 1.0355367359556320e+01 1.1930774685910729e+01 1.6780598648543830e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 1.9252101731548448e-17 -1.9436536092796177e-17 -3.1370180689137944e-01 3.1394046385197516e-01 0 2 0
+P 10003 16 -1.9527750307848848e+00 -5.8237762261064381e+00 -6.7091643910628953e+00 9.0963007026127105e+00 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 -1.1235861614411945e+01 -2.3026308384748774e+01 -2.5976156464920894e+01 3.6486102120261052e+01 1.3956795632839203e-01 1 0 0 0 0
+E 59 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.1102230246251565e-15 1.7763568307127675e-15 4.5584999783475730e+01 4.5584999783475737e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -8.6874829689011002e-24 -4.5584999925353124e+01 4.5584999925353124e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.4187737207294049e-07 9.1169999708828868e+01 9.1169999708828868e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999783475745e+01 4.5584999783475745e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.1652425630236394e-07 2.1652425630236394e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999925353117e+01 4.5584999925353117e+01 0 61 0 0 -2 0
+P 10 22 0 0 -7.4646884229423449e-08 7.4646884229423449e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.4187737207294049e-07 9.1169999708828868e+01 9.1169999708828868e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 2.3079576647700630e+01 3.9084731392207125e+01 -3.8146340021034941e+00 4.5584999860350706e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -2.3079576647700630e+01 -3.9084731392207125e+01 3.8146338602261221e+00 4.5584999848478141e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 -3.8400000903484132e-18 7.7651418348981184e-17 1.3290766679818971e+00 1.3300876452656727e+00 0 2 0
+P 10001 -16 -1.9510330052559581e+01 -3.1751966851060800e+01 2.9890004335206553e+00 3.7386823896541962e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 -3.5693766053716622e+00 -7.3329847104769472e+00 8.2565491502977550e-01 8.1984327381170203e+00 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 4.4450346492050537e-19 -8.9886259635431643e-18 -1.5384874222993847e-01 1.5396576902551687e-01 0 2 0
+P 10003 16 2.0483638338334508e+01 3.3531312262666553e+01 -3.3704732097025989e+00 3.9437146589080569e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 2.5960683195934111e+00 5.5536392988655683e+00 -4.4418228072545468e-01 6.1481100574444723e+00 1.3956795632839203e-01 1 0 0 0 0
+E 60 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 7.1054273576010019e-15 4.5584641222862004e+01 4.5584641222862004e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 -7.1054273576010019e-15 -4.5535409583288313e+01 4.5535409583288313e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 4.9231639573690700e-02 9.1120050806150331e+01 9.1120037506363460e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584641222862018e+01 4.5584641222861997e+01 -1.3486991523486091e-06 61 0 0 -1 0
+P 9 22 0 0 3.5877713798981858e-04 3.5877713798981858e-04 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5535409583288327e+01 4.5535409583288306e+01 -1.3486991523486091e-06 61 0 0 -2 0
+P 10 22 0 0 -4.9590416711680518e-02 4.9590416711680518e-02 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 4.9231639573690707e-02 9.1120050806150303e+01 9.1120037506363431e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.2259675118719704e+01 -9.5514575453793160e+00 4.2815130826997141e+01 4.5583144872317867e+01 1.7769899999994418e+00 2 0 0 -9 0
+P 12 -15 1.2259675118719704e+01 9.5514575453793160e+00 -4.2765899187423457e+01 4.5536905933832443e+01 1.7769899999996979e+00 2 0 0 -8 0
+V -8 0 -4.6918556628547491e-17 -2.2498466680102642e-17 3.2343381905266932e-01 3.2368011284337067e-01 0 2 0
+P 10001 -16 7.1020752534082288e+00 5.9908341687236781e+00 -2.3204668757649358e+01 2.4995726013963104e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 5.1576689256410218e+00 3.5606771812466431e+00 -1.9561471335594405e+01 2.0541436435127679e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 4.3962281466396428e-17 2.1080868548100391e-17 -3.0305468903307076e-01 3.0328546418320929e-01 0 2 0
+P 10003 16 -6.4187208720787776e+00 -5.5850917625970871e+00 2.5558005240886033e+01 2.6937055503979888e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 -5.8410233069713549e+00 -3.9664195873739203e+00 1.7257366769262664e+01 1.8646346144069494e+01 1.3956774771213531e-01 1 0 0 0 0
+E 61 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.7763568394002505e-15 3.5527136260599003e-15 4.5584999094432924e+01 4.5584999094432931e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 1.7763568394002505e-15 -5.2740600594487980e-23 -4.5584999955752309e+01 4.5584999955752309e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -8.6131935717048691e-07 9.1169999050185254e+01 9.1169999050185254e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999094432945e+01 4.5584999094432973e+01 1.6518123698891422e-06 61 0 0 -1 0
+P 9 22 0 0 9.0556704890332185e-07 9.0556704890332185e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999955752302e+01 4.5584999955752330e+01 1.5078914929239175e-06 61 0 0 -2 0
+P 10 22 0 0 -4.4247691732834937e-08 4.4247691732834937e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -8.6131935717048691e-07 9.1169999050185297e+01 9.1169999050185297e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.2741272181888590e+01 2.7682832230308534e+01 -1.5378699460898652e+01 4.5584999670381336e+01 1.7769900000005936e+00 2 0 0 -9 0
+P 12 -15 -3.2741272181888590e+01 -2.7682832230308534e+01 1.5378698599579293e+01 4.5584999379803925e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 -8.8249375208424928e-16 6.0748520205784328e-16 7.6195493649090640e+00 7.6253452618783939e+00 0 2 0
+P 10001 -16 -2.1542662130009475e+01 -1.7109654015117069e+01 9.8082775213275575e+00 2.9206659511125139e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 -1.1198794487674443e+01 -1.0573334156144243e+01 5.5705077084379937e+00 1.6378596654840571e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 9.1906100380101495e-17 -6.3265712451666503e-17 -7.9352750898072866e-01 7.9413111471436482e-01 0 2 0
+P 10003 16 1.4807700824431176e+01 1.1385304884282206e+01 -6.5559478111934304e+00 1.9795800628648973e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 1.7933755793250377e+01 1.6297683286977108e+01 -8.8228382798952225e+00 2.5789455827892500e+01 1.3956817984580994e-01 1 0 0 0 0
+E 62 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -3.5527136788005009e-15 0 4.5584999989415117e+01 4.5584999989415124e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 3.5527136788005009e-15 0 -4.5481855168881431e+01 4.5481855168881445e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.0314482053368579e-01 9.1066855158296562e+01 9.1066796745949958e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999989415131e+01 4.5584999989415131e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.0584876974917279e-08 1.0584876974917279e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5481855168881445e+01 4.5481855168881445e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.0314483111856276e-01 1.0314483111856276e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.0314482053368582e-01 9.1066855158296576e+01 9.1066796745949972e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 8.4279868884634883e+00 2.3367773742464394e+01 -3.8067330056876855e+01 4.5490253063600541e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 -8.4279868884634883e+00 -2.3367773742464390e+01 3.8170474877410534e+01 4.5576602094696035e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 3.3885472906917088e-17 -1.1214141185043892e-16 1.5002996051097659e+00 1.5014434161071879e+00 0 2 0
+P 10001 -16 -7.8555416618275000e+00 -2.0258662671603989e+01 3.3772385341791029e+01 4.0158399614299405e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 -5.7249270257082330e-01 -3.1092427045373521e+00 4.3983045548170834e+00 5.4184592192619894e+00 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 0 0 -6.7496222115199345e+00 6.7547680451172232e+00 0 2 0
+P 10003 16 2.8469598059844299e+00 7.7905520426130686e+00 -1.1219445337230953e+01 1.3952560149019329e+01 9.9884774535894394e-03 1 0 0 0 0
+P 10004 -211 5.5810745584169261e+00 1.5577353333536685e+01 -2.6848099157829122e+01 3.1537949167047746e+01 1.3956792652606964e-01 1 0 0 0 0
+E 63 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 3.5527136788005009e-15 4.5584999751241661e+01 4.5584999751241661e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.7763568394002505e-15 -3.5527136788005009e-15 -4.5584998613668851e+01 4.5584998613668851e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.1375728092843929e-06 9.1169998364910512e+01 9.1169998364910498e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999751241654e+01 4.5584999751241668e+01 9.5367431640625000e-07 61 0 0 -1 0
+P 9 22 0 0 2.4875834014892462e-07 2.4875834014892462e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584998613668844e+01 4.5584998613668859e+01 9.5367431640625000e-07 61 0 0 -2 0
+P 10 22 0 0 -1.3863311494333175e-06 1.3863311494333175e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.1375728092843931e-06 9.1169998364910526e+01 9.1169998364910526e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.6990750768268271e+01 -2.7985485904718033e+01 2.3730706598030451e+01 4.5584999478554948e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 2.6990750768268271e+01 2.7985485904718033e+01 -2.3730705460457642e+01 4.5584998886355571e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 2.6024049503237561e-16 3.0240886617993996e-16 1.2406411293401700e+00 1.2415848371535085e+00 0 2 0
+P 10001 -16 2.5603529562669525e+01 2.6697649037163362e+01 -2.2152428217153922e+01 4.3116532396257227e+01 9.9900681525468826e-03 1 0 0 0 0
+P 10002 211 1.3873732479793346e+00 1.2879945134066155e+00 -1.5784109214285840e+00 2.4687232762770472e+00 1.3956804573535919e-01 1 0 0 0 0
+V -9 0 -9.6997650258190578e-17 -1.1271477727956427e-16 -4.6241563729231833e-01 4.6276737901649861e-01 0 2 0
+P 10003 16 -2.3090216001351056e+01 -2.3233997752525667e+01 2.0445782422212702e+01 3.8613557789494244e+01 9.9881570786237717e-03 1 0 0 0 0
+P 10004 -211 -3.9006868092841978e+00 -4.7516457980302018e+00 3.2850578539370536e+00 6.9716984752197577e+00 1.3956791162490845e-01 1 0 0 0 0
+E 64 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -4.4408920985006262e-16 -1.3322684266000017e-15 4.5584986975697149e+01 4.5584986975697184e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 4.4408920985006262e-16 1.3322668325002604e-15 -4.5584999992509360e+01 4.5584999992509381e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.3016812225430385e-05 9.1169986968206587e+01 9.1169986968205663e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584986975697184e+01 4.5584986975697184e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.3024302816688760e-05 1.3024302816688760e-05 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999992509410e+01 4.5584999992509410e+01 0 61 0 0 -2 0
+P 10 22 0 0 -7.4905912583744794e-09 7.4905912583744794e-09 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.3016812225430385e-05 9.1169986968206587e+01 9.1169986968205663e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.5247598672700775e+01 4.2761391730976577e+01 -3.7159248917697116e+00 4.5584994014644245e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -1.5247598672700775e+01 -4.2761391730976577e+01 3.7159118749574866e+00 4.5584992953562335e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 -3.8741625098927310e-17 -1.1269429998316257e-18 9.9385483536760943e-01 9.9461082256328925e-01 0 2 0
+P 10001 -16 -2.9413957163428242e+00 -1.0463844489366677e+01 7.6075078864884282e-01 1.0895994302701274e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 -1.2306288848046954e+01 -3.2297788122042192e+01 2.9551820185192805e+00 3.4689255437003069e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 4.4858880668088552e-17 1.3048859313489242e-18 -1.1507833072906593e+00 1.1516586639467365e+00 0 2 0
+P 10003 16 1.3793195514442358e+01 3.7623843930512429e+01 -3.7082393212082105e+00 4.0243720171249834e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 1.4544890499485166e+00 5.1377886808995292e+00 -7.7065028457300889e-03 5.3415306295456633e+00 1.3956795632839203e-01 1 0 0 0 0
+E 65 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 8.8817841970012523e-16 -1.1332224183385906e-18 4.5566490941858888e+01 4.5566490941858902e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -8.8817841970012523e-16 -1.1334525486796699e-18 -4.5584999747570023e+01 4.5584999747570031e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.8508805711142884e-02 9.1151490689428897e+01 9.1151488810272070e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5566490941858881e+01 4.5566490941858881e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.8509058141120249e-02 1.8509058141120249e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999747570023e+01 4.5584999747570023e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.5242997736540929e-07 2.5242997736540929e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.8508805711142884e-02 9.1151490689428897e+01 9.1151488810272070e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 6.2981222846060874e+00 -1.2948494243456640e+01 4.3195618170764675e+01 4.5566972360463822e+01 1.7769899999996979e+00 2 0 0 -9 0
+P 12 -15 -6.2981222846060874e+00 1.2948494243456640e+01 -4.3214126976475796e+01 4.5584518328965089e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 1.4515742620230333e-17 -3.1457059950443015e-17 1.7763955134982551e-01 1.7777472984453246e-01 0 2 0
+P 10001 -16 -2.2088581142020667e+00 3.0209275180860358e+00 -9.9659044907472225e+00 1.0645393808180389e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10002 211 -4.0892996485387849e+00 9.9276396659079502e+00 -3.3248465916476867e+01 3.4939381304253068e+01 1.3956785202026367e-01 1 0 0 0 0
+V -9 0 -5.5438220078163322e-17 1.2014014426751838e-16 -6.7843725257244569e-01 6.7895352344714088e-01 0 2 0
+P 10003 16 1.1321345419266056e+00 -1.4316675042400420e+00 4.2095463262262598e+00 4.5882219325402263e+00 9.9874110892415047e-03 1 0 0 0 0
+P 10004 -211 5.1660232208156067e+00 -1.1516899679756742e+01 3.8986315171033553e+01 4.0979007112563117e+01 1.3956785202026367e-01 1 0 0 0 0
+E 66 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.7763568394002505e-15 3.5527136788005009e-15 4.5584999994279677e+01 4.5584999994279663e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 3.5527136788005009e-15 -3.5527136788005009e-15 -4.5584999618507695e+01 4.5584999618507688e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 3.7577199663019201e-07 9.1169999612787365e+01 9.1169999612787365e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999994279684e+01 4.5584999994279684e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.7203166647923354e-09 5.7203166647923354e-09 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999618507688e+01 4.5584999618507688e+01 0 61 0 0 -2 0
+P 10 22 0 0 -3.8149231329498434e-07 3.8149231329498434e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 3.7577199663019201e-07 9.1169999612787365e+01 9.1169999612787365e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 2.0031566190223739e+01 3.7454361756272249e+01 -1.6454228912433116e+01 4.5584999738574901e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -2.0031566190223739e+01 -3.7454361756272249e+01 1.6454229288205113e+01 4.5584999874212464e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 2.5511417495779254e-18 -1.3204935262797003e-17 1.1495659883306270e-01 1.1504404187761029e-01 0 2 0
+P 10001 -16 -8.8091563376380400e+00 -1.8134818027364886e+01 8.2370738126784229e+00 2.1778942699018565e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 -1.1222522692980460e+01 -1.9319754714155650e+01 8.2172481643215001e+00 2.3806313961374887e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 -3.7819720191192962e-17 1.9575821565556848e-16 -1.7041884884354017e+00 1.7054847987944806e+00 0 2 0
+P 10003 16 4.1308225693184832e+00 7.9274363199444675e+00 -4.2380214663295019e+00 9.8928695262139819e+00 9.9893221631646156e-03 1 0 0 0 0
+P 10004 -211 1.5900856461297131e+01 2.9527136421570678e+01 -1.2216300134893940e+01 3.5692386998534580e+01 1.3956798613071442e-01 1 0 0 0 0
+E 67 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 -3.5527137017884820e-15 4.5584999609822127e+01 4.5584999609822127e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 3.5527136558125230e-15 -4.5584999985244323e+01 4.5584999985244323e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -3.7542219644137731e-07 9.1169999595066457e+01 9.1169999595066457e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999609822127e+01 4.5584999609822127e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.9017787401007809e-07 3.9017787401007809e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999985244323e+01 4.5584999985244323e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.4755677568700776e-08 1.4755677568700776e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -3.7542219644137715e-07 9.1169999595066457e+01 9.1169999595066457e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.1174431504744245e+01 -3.0868269687706068e+01 -2.5954342599318153e+01 4.5584999904408690e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 2.1174431504744245e+01 3.0868269687706068e+01 2.5954342223895956e+01 4.5584999690657746e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 0 0 5.5415538593341029e-01 5.5457691053146907e-01 0 2 0
+P 10001 -16 1.1227943140905887e+00 1.0453056858231757e+00 9.4372528091725438e-01 1.8011241539143561e+00 9.9866650998592377e-03 1 0 0 0 0
+P 10002 211 2.0051756468957599e+01 2.9823137886827720e+01 2.5010763147136281e+01 4.3784132322926610e+01 1.3956779241561890e-01 1 0 0 0 0
+V -9 0 0 0 -5.9393423055387118e-01 5.9438601338259167e-01 0 2 0
+P 10003 16 -2.7367905090228389e-01 -2.1143056292072224e-01 -4.1850635125817204e-01 5.4300136460611381e-01 9.9917929619550705e-03 1 0 0 0 0
+P 10004 -211 -2.0900871732138278e+01 -3.0657013009719059e+01 -2.5535982452210334e+01 4.5042255325970601e+01 1.3956816494464874e-01 1 0 0 0 0
+E 68 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 8.8817841970012523e-16 7.1054273576010019e-15 4.5584999378921957e+01 4.5584999378921957e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -4.4408920985006262e-16 -3.5527136788005009e-15 -4.5583016459251851e+01 4.5583016459251873e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.9829196700911211e-03 9.1168015838173829e+01 9.1168015816609412e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999378921964e+01 4.5584999378921964e+01 0 61 0 0 -1 0
+P 9 22 0 0 6.2107804410516110e-07 6.2107804410516110e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5583016459251873e+01 4.5583016459251873e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.9835407481352263e-03 1.9835407481352263e-03 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.9829196700911216e-03 9.1168015838173844e+01 9.1168015816609426e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 2.9618179793860180e+00 3.7718166551674948e+01 2.5364580126774733e+01 4.5584559581404108e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 -2.9618179793860180e+00 -3.7718166551674955e+01 -2.5362597207104649e+01 4.5583456256769729e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 2.8284536392603729e-19 6.4686378783333111e-18 8.3013681261026234e-02 8.3076829313190506e-02 0 2 0
+P 10001 -16 -1.9864745829986132e+00 -3.2793175683131722e+01 -2.2037780783375780e+01 3.9560110393530813e+01 9.9903941154479980e-03 1 0 0 0 0
+P 10002 211 -9.7536008068927194e-01 -4.9252033398297863e+00 -3.3249592945031270e+00 6.0236026407146470e+00 1.3956806063652039e-01 1 0 0 0 0
+V -9 0 -1.5598790723228161e-17 1.9297660540300407e-16 -2.4630557043919890e+00 2.4649293373611787e+00 0 2 0
+P 10003 16 1.8480076227919140e+00 3.0130361282345952e+01 1.9643443713171610e+01 3.6015535312755460e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 1.1138270408959710e+00 7.5880177406155562e+00 5.7212792955474292e+00 9.5692810523395604e+00 1.3956795632839203e-01 1 0 0 0 0
+E 69 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 2.2204460492503131e-16 -3.5587334280741771e-15 4.5486636340008268e+01 4.5486636340008246e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 3.5466874243046812e-15 -4.5584999425412811e+01 4.5584999425412811e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -9.8363085404578499e-02 9.1071635765421036e+01 9.1071582646251102e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5486636340008218e+01 4.5486636340008218e+01 0 61 0 0 -1 0
+P 9 22 0 0 9.8363659991775876e-02 9.8363659991775876e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999425412796e+01 4.5584999425412796e+01 0 61 0 0 -2 0
+P 10 22 0 0 -5.7458719737724095e-07 5.7458719737724095e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -9.8363085404578485e-02 9.1071635765421021e+01 9.1071582646251088e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.1729568856393537e+00 -1.4251765396038358e+01 4.3146467888702922e+01 4.5489163868884852e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 1.1729568856393537e+00 1.4251765396038358e+01 -4.3244830974107501e+01 4.5582471896536205e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 1.3855793258764721e-17 1.7733734565347095e-16 2.2781563513829108e+00 2.2798930085819569e+00 0 2 0
+P 10001 -16 6.4861260338512383e-01 4.2478329344552810e+00 -1.0705049576730909e+01 1.1535292331894011e+01 9.9892755970358849e-03 1 0 0 0 0
+P 10002 211 5.2435088967132770e-01 1.0004012743611776e+01 -3.2540025001075129e+01 3.4047436336572915e+01 1.3956798613071442e-01 1 0 0 0 0
+V -9 0 -5.7632785999363620e-18 -7.3762974813993769e-17 -9.4759278678821557e-01 9.4831514451135468e-01 0 2 0
+P 10003 16 -1.1678355077562061e+00 -7.1586682847806165e+00 2.3920207030455291e+01 2.4995735147603497e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 -5.1279853002450526e-03 -7.0931773932864379e+00 1.9226503907854237e+01 2.0493684967595932e+01 1.3956795632839203e-01 1 0 0 0 0
+E 70 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -1.4584203544645075e-18 4.5561179069977833e+01 4.5561179069977833e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -8.8817841970012523e-16 -1.4588015603771722e-18 -4.5584999994646672e+01 4.5584999994646687e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -2.3820924668825683e-02 9.1146179064624491e+01 9.1146175951841997e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5561179069977833e+01 4.5561179069977833e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.3820930022168341e-02 2.3820930022168341e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999994646658e+01 4.5584999994646658e+01 0 61 0 0 -2 0
+P 10 22 0 0 -5.3533426580543164e-09 5.3533426580543164e-09 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -2.3820924668825683e-02 9.1146179064624491e+01 9.1146175951841997e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -4.1328066493816628e+01 -1.7296179125066253e+01 8.1478546265005107e+00 4.5570956989275444e+01 1.7769900000003376e+00 2 0 0 -9 0
+P 12 -15 4.1328066493816628e+01 1.7296179125066256e+01 -8.1716755511693417e+00 4.5575222075349068e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 -5.8660495290036160e-17 -9.1097093599551838e-18 3.2262891281974415e-01 3.2287445262605835e-01 0 2 0
+P 10001 -16 2.9478191239637685e+01 1.1704000557005365e+01 -6.3368119895649393e+00 3.2343510535889521e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 1.1850108060499450e+01 5.5922759996651790e+00 -1.8349095937050746e+00 1.3231968270554358e+01 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 6.1873175927734077e-16 4.6755283076478177e-16 -4.9319127197058412e+00 4.9356661988449906e+00 0 2 0
+P 10003 16 -2.0703928281261934e+01 -9.1060873198967194e+00 3.3164191404846028e+00 2.2859838325669788e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 -2.0624371018875198e+01 -8.1901892367738220e+00 4.8314813839302495e+00 2.2711375370674688e+01 1.3956795632839203e-01 1 0 0 0 0
+E 71 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 7.1054273576010019e-15 -5.3290705182007514e-15 4.5584999990903661e+01 4.5584999990903661e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -7.1054273576010019e-15 -1.7763568394002505e-15 -4.5584996815424638e+01 4.5584996815424638e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 3.1754790299487468e-06 9.1169996806328299e+01 9.1169996806328243e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999990903668e+01 4.5584999990903668e+01 0 61 0 0 -1 0
+P 9 22 0 0 9.0963396814913722e-09 9.0963396814913722e-09 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584996815424638e+01 4.5584996815424638e+01 0 61 0 0 -2 0
+P 10 22 0 0 -3.1845753696302381e-06 3.1845753696302381e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 3.1754790299487476e-06 9.1169996806328314e+01 9.1169996806328257e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.0674753138102524e+01 7.9712032354660129e+00 3.9797600605944027e+01 4.5584999789326758e+01 1.7769900000003376e+00 2 0 0 -9 0
+P 12 -15 2.0674753138102524e+01 -7.9712032354660129e+00 -3.9797597430464997e+01 4.5584997017001548e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 -1.5942475983645406e-17 -9.2539086121738872e-17 1.1680013533927833e+00 1.1688898069631590e+00 0 2 0
+P 10001 -16 8.3620607844542381e+00 -2.3401160384119351e+00 -1.6070069584880567e+01 1.8266018722525853e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 1.2312808817190598e+01 -5.6311320998666572e+00 -2.3727752030567018e+01 2.7319235080624168e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 1.1909086583287149e-17 6.9127028329388665e-17 -8.7250118872505311e-01 8.7316486671996996e-01 0 2 0
+P 10003 16 -1.1528706190262028e+01 5.1611893181814166e+00 2.3790326468355445e+01 2.6935639491139920e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 -9.1461634113842951e+00 2.8100588200977499e+00 1.6007498322591928e+01 1.8649617084354212e+01 1.3956774771213531e-01 1 0 0 0 0
+E 72 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 0 4.5584999747144643e+01 4.5584999747144643e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 1.7763568394002505e-15 0 -4.5330430472926857e+01 4.5330430472926849e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 2.5456927421783604e-01 9.0915430220071471e+01 9.0915073813891325e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999747144657e+01 4.5584999747144657e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.5285534377417207e-07 2.5285534377417207e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5330430472926821e+01 4.5330430472926821e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.5456952707317981e-01 2.5456952707317981e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 2.5456927421783604e-01 9.0915430220071471e+01 9.0915073813891325e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -3.9711938516524633e+01 1.3777892903906240e+01 -1.7087938224598279e+01 4.5409511336718104e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 3.9711938516524633e+01 -1.3777892903906240e+01 1.7342507498816115e+01 4.5505918883353360e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 6.7427351913010500e-17 -7.3656574038739619e-17 1.2767299755324621e+00 1.2777065948656117e+00 0 2 0
+P 10001 -16 3.1023348426393135e+01 -1.1520270590037986e+01 1.3700594390450904e+01 3.5817190963901673e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 8.6888137925978537e+00 -2.2576999265141939e+00 3.6420108009444481e+00 9.6889842601559781e+00 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 -1.6654406213097346e-16 1.8193010247367427e-16 -3.1534946922411478e+00 3.1559069203100809e+00 0 2 0
+P 10003 16 -1.1912114763712907e+01 3.7190218909196617e+00 -4.3131374736172070e+00 1.3203516828341932e+01 9.9896481260657310e-03 1 0 0 0 0
+P 10004 -211 -2.7800047455272363e+01 1.0058948625630537e+01 -1.2774897009536327e+01 3.2206250305997791e+01 1.3956801593303680e-01 1 0 0 0 0
+E 73 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -3.5527136788005009e-15 4.5584955154491546e+01 4.5584955154491539e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.7763568394002505e-15 0 -4.5475512679894393e+01 4.5475512679894393e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.0944247459715939e-01 9.1060467834385975e+01 9.1060402066771019e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584955154491560e+01 4.5584955154491560e+01 0 61 0 0 -1 0
+P 9 22 0 0 4.4845508433866144e-05 4.4845508433866144e-05 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5475512679894400e+01 4.5475512679894400e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.0948732010559326e-01 1.0948732010559326e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.0944247459715936e-01 9.1060467834385960e+01 9.1060402066771019e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -3.7872610103559524e+01 2.0546977410809316e+01 1.4660505846610572e+01 4.5547788112214050e+01 1.7769899999996979e+00 2 0 0 -9 0
+P 12 -15 3.7872610103559524e+01 -2.0546977410809316e+01 -1.4551063372013411e+01 4.5512679722171860e+01 1.7769899999994418e+00 2 0 0 -8 0
+V -8 0 -6.7643162044702111e-17 1.1431167166550376e-16 1.1339666676456748e+00 1.1348313122301630e+00 0 2 0
+P 10001 -16 1.3754160168999658e+01 -7.2421172826270688e+00 -6.1251954479729465e+00 1.6707582224235185e+01 9.9902078509330750e-03 1 0 0 0 0
+P 10002 211 2.4118663275874102e+01 -1.3304975871965219e+01 -8.4259498920636506e+00 2.8805353876751852e+01 1.3956804573535919e-01 1 0 0 0 0
+V -9 0 3.4652952738725381e-17 -5.8560789235305173e-17 -5.8092040870660533e-01 5.8136335795700067e-01 0 2 0
+P 10003 16 -3.4878473142856414e+01 1.9246833554014696e+01 1.3174420620784936e+01 4.1958478870988344e+01 9.9915126338601112e-03 1 0 0 0 0
+P 10004 -211 -2.9943503020091669e+00 1.3002596005731564e+00 1.4861678103492786e+00 3.5895658178011489e+00 1.3956815004348755e-01 1 0 0 0 0
+E 74 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 7.1054273576010019e-15 -2.9921052372926054e-24 4.5584998869530160e+01 4.5584998869530153e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 4.4408920685795817e-16 -4.5584998918394930e+01 4.5584998918394916e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -4.8864762902667280e-08 9.1169997787925070e+01 9.1169997787925070e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584998869530153e+01 4.5584998869530153e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.1304698475100849e-06 1.1304698475100849e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584998918394916e+01 4.5584998918394916e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.0816050846074177e-06 1.0816050846074177e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -4.8864762902667274e-08 9.1169997787925070e+01 9.1169997787925070e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -4.2085972583521723e+01 1.0043265632702010e+00 1.7395305967582633e+01 4.5584998884639106e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 4.2085972583521723e+01 -1.0043265632702010e+00 -1.7395306016447400e+01 4.5584998903285971e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 -1.1700534518596393e-16 1.3260288615399977e-16 1.6032700481478026e+00 1.6044895937961940e+00 0 2 0
+P 10001 -16 2.9159419664901950e+01 -6.0736446432968494e-01 -1.2918314997523362e+01 3.1898645879019355e+01 9.9879698827862740e-03 1 0 0 0 0
+P 10002 211 1.2926789994319842e+01 -3.9696775644130833e-01 -4.4770890089216220e+00 1.3686609810432284e+01 1.3956789672374725e-01 1 0 0 0 0
+V -9 0 3.7337148571274917e-17 -4.2314422930360888e-17 -5.1161365228595257e-01 5.1200281704582806e-01 0 2 0
+P 10003 16 -2.7427593828252057e+01 9.0129252732181731e-01 1.2201865924691438e+01 3.0032829758169747e+01 9.9911401048302650e-03 1 0 0 0 0
+P 10004 -211 -1.4658615830969739e+01 1.0303969344917582e-01 5.1935380328885001e+00 1.5552425912634916e+01 1.3956812024116516e-01 1 0 0 0 0
+E 75 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -3.5527136788005009e-15 4.5584999915007224e+01 4.5584999915007224e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 1.7763568394002505e-15 -4.5584999566926307e+01 4.5584999566926300e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 3.4808092408411540e-07 9.1169999481933530e+01 9.1169999481933530e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999915007224e+01 4.5584999915007224e+01 0 61 0 0 -1 0
+P 9 22 0 0 8.4992777260595176e-08 8.4992777260595176e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999566926300e+01 4.5584999566926300e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.3307370134471057e-07 4.3307370134471057e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 3.4808092408411540e-07 9.1169999481933530e+01 9.1169999481933530e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.5679121135301003e+01 9.5601069468212447e+00 3.6387107792092742e+01 4.5584999879890297e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 2.5679121135301003e+01 -9.5601069468212447e+00 -3.6387107444011818e+01 4.5584999602043226e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 -1.3773150143943205e-16 6.4188920576636613e-17 6.4941746690248892e-01 6.4991145368731007e-01 0 2 0
+P 10001 -16 2.2853378448863609e+01 -8.9003261941364720e+00 -3.1868871345649652e+01 4.0213402908249812e+01 9.9844262003898621e-03 1 0 0 0 0
+P 10002 211 2.8258873402390763e+00 -6.5983460600036414e-01 -4.5184410716319299e+00 5.3718534799761368e+00 1.3956764340400696e-01 1 0 0 0 0
+V -9 0 3.5572333289326474e-16 -3.0849578990812911e-16 -1.6584981551564719e+00 1.6597597106474340e+00 0 2 0
+P 10003 16 -2.1805678230661695e+01 8.6790953905942647e+00 3.1621036494914026e+01 3.9378983591209369e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 -3.8735875584391493e+00 8.8106540954188461e-01 4.7662762704478299e+00 6.2062730748619437e+00 1.3956795632839203e-01 1 0 0 0 0
+E 76 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 0 4.5584722046311555e+01 4.5584722046311541e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 1.7763568394002505e-15 3.5527136788005009e-15 -4.5579501962010035e+01 4.5579501962010035e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 5.2200843015270948e-03 9.1164224008321568e+01 9.1164223858869960e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584722046311548e+01 4.5584722046311548e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.7795368845318080e-04 2.7795368845318080e-04 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5579501962010021e+01 4.5579501962010021e+01 0 61 0 0 -2 0
+P 10 22 0 0 -5.4980379899802756e-03 5.4980379899802756e-03 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 5.2200843015270948e-03 9.1164224008321568e+01 9.1164223858869960e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.1853606591711241e+01 -2.7893530600906530e+01 -2.8614553806203180e+01 4.5580473378818603e+01 1.7769899999996979e+00 2 0 0 -9 0
+P 12 -15 2.1853606591711241e+01 2.7893530600906530e+01 2.8619773890504707e+01 4.5583750629502958e+01 1.7769899999996979e+00 2 0 0 -8 0
+V -8 0 -7.3891625257026630e-17 -3.6372844417944459e-17 1.0558773425527697e+00 1.0566806095533412e+00 0 2 0
+P 10001 -16 1.1827999438188577e+01 1.6503888266072014e+01 1.6258019980713538e+01 2.6011597646809946e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 1.0025730257699610e+01 1.1389799462680310e+01 1.2361915128658833e+01 1.9572409761823703e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 5.1619516483846995e-17 2.5409491745046474e-17 -7.3761915100981301e-01 7.3818030058573181e-01 0 2 0
+P 10003 16 -2.1554806124296004e+01 -2.7330462024400934e+01 -2.7869359920245341e+01 4.4589966850176218e+01 9.9897887557744980e-03 1 0 0 0 0
+P 10004 -211 -2.9892357159375682e-01 -5.6322570435339703e-01 -7.4535507542215895e-01 9.9076328931519764e-01 1.3956803083419800e-01 1 0 0 0 0
+E 77 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.7763568394002505e-15 1.0658144258683579e-14 4.5584997942511038e+01 4.5584997942511038e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -1.4210857937070490e-14 -4.5584832591859708e+01 4.5584832591859723e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.6535065130796056e-04 9.1169830534370703e+01 9.1169830534220750e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584997942511009e+01 4.5584997942511009e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.0574889916247230e-06 2.0574889916247230e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584832591859701e+01 4.5584832591859701e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.6740814029958528e-04 1.6740814029958528e-04 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.6535065130796062e-04 9.1169830534370703e+01 9.1169830534220750e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.5679488619674181e+01 3.4608153065555577e+01 1.4753604697993735e+01 4.5584942024989594e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 2.5679488619674181e+01 -3.4608153065555570e+01 -1.4753439347342422e+01 4.5584888509381145e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 -7.2797655827479009e-17 3.0290375876532502e-16 3.9941916789277454e+00 3.9972299175446651e+00 0 2 0
+P 10001 -16 7.4091404859009531e+00 -8.6793992986455208e+00 -3.9650965209798423e+00 1.2080952992310277e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 1.8270492789648696e+01 -2.5928948719105332e+01 -1.0788425934391578e+01 3.3504192302634358e+01 1.3956817984580994e-01 1 0 0 0 0
+V -9 0 6.4897995874752298e-17 -2.7003406446748199e-16 -3.5607607436746145e+00 3.5634692868960434e+00 0 2 0
+P 10003 16 -1.1183109791585268e+01 1.6241035367233096e+01 7.3157247099504774e+00 2.1032192044059148e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 -1.4496523483958834e+01 1.8367312650510286e+01 7.4379630970005088e+00 2.4553006766785543e+01 1.3956785202026367e-01 1 0 0 0 0
+E 78 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 3.5527136788005009e-15 4.5584937272325725e+01 4.5584937272325725e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 -3.5527136788005009e-15 -4.5570390390377476e+01 4.5570390390377462e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.4546881948241719e-02 9.1155327662703201e+01 9.1155326501982373e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584937272325718e+01 4.5584937272325718e+01 0 61 0 0 -1 0
+P 9 22 0 0 6.2727674276175094e-05 6.2727674276175094e-05 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5570390390377476e+01 4.5570390390377476e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.4609609622517894e-02 1.4609609622517894e-02 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.4546881948241717e-02 9.1155327662703186e+01 9.1155326501982358e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.3487258243084277e+01 1.7207982860170844e+01 -2.5617998692773934e+01 4.5573574461940268e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 -3.3487258243084277e+01 -1.7207982860170844e+01 2.5632545574722172e+01 4.5581753200762897e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 0 0 3.3050427678708734e+00 3.3075575965908635e+00 0 2 0
+P 10001 -16 -2.4765053580902318e+01 -1.3239391161907657e+01 1.8360234241548341e+01 3.3551269102418139e+01 9.9881570786237717e-03 1 0 0 0 0
+P 10002 211 -8.7223933002247271e+00 -3.9686886330490463e+00 7.2724557246075339e+00 1.2030740866236799e+01 1.3956791162490845e-01 1 0 0 0 0
+V -9 0 0 0 -1.2175476130497624e-01 1.2184740530144786e-01 0 2 0
+P 10003 16 1.7488158316817024e+01 7.9941830428441563e+00 -1.3070036627222089e+01 2.3250131205489364e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 1.5999288564314845e+01 9.2138967521150246e+00 -1.2548106375044769e+01 2.2323699978277634e+01 1.3956795632839203e-01 1 0 0 0 0
+E 79 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 2.6645352591003757e-15 4.5584999993231037e+01 4.5584999993231051e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.7763568394002505e-15 -2.6645352591003757e-15 -4.5584999843358581e+01 4.5584999843358595e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.4987245577913200e-07 9.1169999836589653e+01 9.1169999836589653e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999993231051e+01 4.5584999993231051e+01 0 61 0 0 -1 0
+P 9 22 0 0 6.7689498450818064e-09 6.7689498450818064e-09 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999843358595e+01 4.5584999843358595e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.5664140562421380e-07 1.5664140562421380e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.4987245577913200e-07 9.1169999836589653e+01 9.1169999836589653e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.1098502602095930e+01 4.4374552559729095e+00 -4.3954143699380957e+01 4.5584999846039523e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -1.1098502602095930e+01 -4.4374552559729095e+00 4.3954143849253427e+01 4.5584999990550124e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 1.7417673980557882e-17 -7.2169162343169220e-18 9.6691082920119653e-01 9.6764632091854097e-01 0 2 0
+P 10001 -16 -2.5348097098207090e+00 -8.4340052571803037e-01 1.2795166654865286e+01 1.3071073951556093e+01 9.9888090044260025e-03 1 0 0 0 0
+P 10002 211 -8.5637554115719663e+00 -3.5940797270127205e+00 3.1159224793750063e+01 3.2514182825178942e+01 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 -3.5633952914524869e-18 1.4764729984541965e-18 -1.9781547753597384e-01 1.9796594812839696e-01 0 2 0
+P 10003 16 4.7704119138522580e+00 2.7224391884119230e+00 -2.1738210166577524e+01 2.2421382340348515e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10004 -211 6.3281532075404172e+00 1.7150410643188279e+00 -2.2216181132164511e+01 2.3163874291875111e+01 1.3956817984580994e-01 1 0 0 0 0
+E 80 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 3.5527136788005009e-15 3.5527136788005009e-15 4.5553294802956032e+01 4.5553294802956025e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -3.5527136788005009e-15 -1.0658141036401503e-14 -4.4179630317253960e+01 4.4179630317253960e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.3736644857020650e+00 8.9732925120209956e+01 8.9722410224591755e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5553294802956003e+01 4.5553294802956003e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.1705197043990552e-02 3.1705197043990552e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.4179630317253938e+01 4.4179630317253938e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.4053696827460556e+00 1.4053696827460556e+00 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.3736644857020648e+00 8.9732925120209941e+01 8.9722410224591741e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.4279384612571349e+01 -1.6605924026391996e+01 -2.2949327135154025e+01 4.4504631574739641e+01 1.7769899999997618e+00 2 0 0 -9 0
+P 12 -15 -3.4279384612571349e+01 1.6605924026391996e+01 2.4322991620856094e+01 4.5228293545470322e+01 1.7769899999998897e+00 2 0 0 -8 0
+V -8 0 1.2742495921672630e-16 -4.8550076360256186e-17 1.5388767800208121e+00 1.5400854657008369e+00 0 2 0
+P 10001 -16 -1.6062191152165205e+01 8.6943225437782647e+00 1.2032899991019963e+01 2.1871808594532634e+01 9.9948681890964508e-03 1 0 0 0 0
+P 10002 211 -1.8217386560593933e+01 7.9116950259221674e+00 1.2290228644380074e+01 2.3356739727739416e+01 1.3956838846206665e-01 1 0 0 0 0
+V -9 0 -1.5079916099707799e-16 5.7455861288670362e-17 -1.8211606951376775e+00 1.8225910961170244e+00 0 2 0
+P 10003 16 1.4811008484450603e+01 -6.2756033216088030e+00 -9.3016165049506565e+00 1.8581424563982381e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10004 -211 1.9468569228314706e+01 -1.0330414248094620e+01 -1.3647839906722506e+01 2.5923457711085923e+01 1.3956817984580994e-01 1 0 0 0 0
+E 81 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -4.4408920985006262e-16 -8.8897147408992712e-16 4.5572047088686851e+01 4.5572047088686830e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 4.4408920985006262e-16 8.8738525261742202e-16 -4.5584999569954178e+01 4.5584999569954157e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.2952481267326732e-02 9.1157046658640951e+01 9.1157045738433581e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5572047088686801e+01 4.5572047088686801e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.2952911313185211e-02 1.2952911313185211e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999569954128e+01 4.5584999569954128e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.3004585847938870e-07 4.3004585847938870e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.2952481267326729e-02 9.1157046658640922e+01 9.1157045738433553e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.7585829033181895e+01 4.1449344315789169e+01 -6.8573540992773916e+00 4.5579496768789845e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 -1.7585829033181895e+01 -4.1449344315789169e+01 6.8444016180100622e+00 4.5577549889851099e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 0 0 1.2700664948367861e+00 1.2710328602688676e+00 0 2 0
+P 10001 -16 -1.0439177994473271e+01 -2.2686792004642999e+01 4.2552429794965159e+00 2.5333261954235557e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 -7.1467501019481530e+00 -1.8762785800640266e+01 2.5891971939092358e+00 2.0244544679823239e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 0 0 -3.6994477179963408e+00 3.7022625457293752e+00 0 2 0
+P 10003 16 8.3167935872677692e+00 2.1356257904237292e+01 -4.0519895905363663e+00 2.3273966715529916e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 9.2691345091561868e+00 2.0093319901051942e+01 -2.8054031371006958e+00 2.2305786808441205e+01 1.3956795632839203e-01 1 0 0 0 0
+E 82 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.7763585334661450e-15 7.1054307457327909e-15 4.5584999986972406e+01 4.5584999986972420e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 1.7763551453343560e-15 3.5527170669322899e-15 -4.5584999968530035e+01 4.5584999968530049e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.8442364080328844e-08 9.1169999955502490e+01 9.1169999955502490e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999986972427e+01 4.5584999986972427e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.3027573686485994e-08 1.3027573686485994e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999968530063e+01 4.5584999968530063e+01 0 61 0 0 -2 0
+P 10 22 0 0 -3.1469937766814837e-08 3.1469937766814837e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.8442364080328840e-08 9.1169999955502490e+01 9.1169999955502490e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.9282949776118890e+01 -3.2824998852269438e+01 2.5010434387529504e+01 4.5584999982810508e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 -1.9282949776118887e+01 3.2824998852269431e+01 -2.5010434369087132e+01 4.5584999972692010e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 3.4316824405904231e-16 -1.0639196762828845e-15 3.5832127778124678e+00 3.5859383893508765e+00 0 2 0
+P 10001 -16 -1.3321492520545103e+01 2.4076148216083482e+01 -1.8467769723031019e+01 3.3138824575230984e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 -5.9615658789088393e+00 8.7490355436243732e+00 -6.5428055330482087e+00 1.2446432183626147e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 -8.8278266146640677e-17 2.7368786584282289e-16 -9.2176306151844767e-01 9.2246421107108101e-01 0 2 0
+P 10003 16 1.0372046601912528e+01 -1.6197886551296172e+01 1.2047843579956147e+01 2.2695847952015310e+01 9.9948681890964508e-03 1 0 0 0 0
+P 10004 -211 8.9110117975428018e+00 -1.6627297208414042e+01 1.2962731694567347e+01 2.2889408816963659e+01 1.3956838846206665e-01 1 0 0 0 0
+E 83 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.7763568394002505e-15 3.5527136788005009e-15 4.5584999789348799e+01 4.5584999789348799e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 1.7763568394002505e-15 -3.5527136788005009e-15 -4.5584999399660212e+01 4.5584999399660212e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 3.8968858007137896e-07 9.1169999189009005e+01 9.1169999189009005e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999789348792e+01 4.5584999789348792e+01 0 61 0 0 -1 0
+P 9 22 0 0 2.1065120847651997e-07 2.1065120847651997e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999399660212e+01 4.5584999399660212e+01 0 61 0 0 -2 0
+P 10 22 0 0 -6.0033978854789893e-07 6.0033978854789893e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 3.8968858007137896e-07 9.1169999189009005e+01 9.1169999189009005e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 2.9935990679895379e+01 -2.8685092040625339e+01 1.8863627926671086e+01 4.5584999675133439e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 -2.9935990679895379e+01 2.8685092040625339e+01 -1.8863627536982506e+01 4.5584999513875566e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 -3.3292387109587385e-17 -3.9589781293802299e-17 5.9319566602035345e-01 5.9364688705558388e-01 0 2 0
+P 10001 -16 -2.1932294696396301e+01 2.1658991942348084e+01 -1.4684688015050456e+01 3.4143486120065489e+01 9.9844262003898621e-03 1 0 0 0 0
+P 10002 211 -8.0038646167873768e+00 7.0262616850925230e+00 -4.1790457831737351e+00 1.1441770179979175e+01 1.3956764340400696e-01 1 0 0 0 0
+V -9 0 2.7443848078183816e-17 3.2634966657670213e-17 -4.8898781830551075e-01 4.8935977245526230e-01 0 2 0
+P 10003 16 2.7241163284985863e+01 -2.5932598065829286e+01 1.7629330096829317e+01 4.1537621489436901e+01 9.9888555705547333e-03 1 0 0 0 0
+P 10004 -211 2.6949960281978118e+00 -2.7526555616113235e+00 1.2344040910856529e+00 4.0476349718665485e+00 1.3956795632839203e-01 1 0 0 0 0
+E 84 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -1.7763568394002505e-15 -7.1555030276736617e-15 4.4315922775313076e+01 4.4315922775313076e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 5.3290705182007514e-15 3.5021759652010787e-15 -4.5137493400754913e+01 4.5137493400754906e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -8.2157062544181514e-01 8.9453416176067975e+01 8.9449643304354382e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.4315922775313069e+01 4.4315922775313069e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.2690772246869244e+00 1.2690772246869244e+00 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5137493400754884e+01 4.5137493400754884e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.4750659924510927e-01 4.4750659924510927e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -8.2157062544181503e-01 8.9453416176067961e+01 8.9449643304354368e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.5900157555077193e+01 1.5909282352313108e+01 3.8207312805485742e+01 4.4372026328738173e+01 1.7769900000000178e+00 2 0 0 -9 0
+P 12 -15 -1.5900157555077193e+01 -1.5909282352313108e+01 -3.9028883430927557e+01 4.5081389847329810e+01 1.7769899999998897e+00 2 0 0 -8 0
+V -8 0 2.6943576883991039e-16 5.3390175493106572e-16 3.6490348068144001e+00 3.6519184086891556e+00 0 2 0
+P 10001 -16 -1.5210900140421440e+01 -1.5276027976896176e+01 -3.7956438443446373e+01 4.3651114910148870e+01 9.9853649735450745e-03 1 0 0 0 0
+P 10002 211 -6.8934698229134894e-01 -6.3334399445369272e-01 -1.0726648422088281e+00 1.4305288864568486e+00 1.3956770300865173e-01 1 0 0 0 0
+V -9 0 -8.5044626837621295e-17 -1.6852059291000078e-16 -1.1517802732695457e+00 1.1526904525172481e+00 0 2 0
+P 10003 16 1.3543665145655439e+01 1.3058328798115163e+01 3.2943244448259591e+01 3.7936898544088500e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10004 -211 2.3565819770590681e+00 2.8510431732364236e+00 5.2642835839447635e+00 6.4353777379942958e+00 1.3956795632839203e-01 1 0 0 0 0
+E 85 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -7.1054273576010019e-15 8.8817832705589663e-16 4.5584999207463298e+01 4.5584999207463298e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 3.5527136788005009e-15 8.8817832705589663e-16 -4.5584999992536041e+01 4.5584999992536027e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -7.8507272860406374e-07 9.1169999199999339e+01 9.1169999199999339e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999207463298e+01 4.5584999207463326e+01 1.6518123698891422e-06 61 0 0 -1 0
+P 9 22 0 0 7.9253669582612929e-07 7.9253669582612929e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999992536027e+01 4.5584999992536055e+01 1.5078914929239175e-06 61 0 0 -2 0
+P 10 22 0 0 -7.4639672220655484e-09 7.4639672220655484e-09 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -7.8507272860406374e-07 9.1169999199999381e+01 9.1169999199999381e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -3.7292212846022196e+01 -1.0388892445036031e+01 2.4004088215122135e+01 4.5584999393298375e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 3.7292212846022196e+01 1.0388892445036033e+01 -2.4004089000194863e+01 4.5584999806700964e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 -2.2330832935668056e-16 1.5971017078009492e-16 3.1483800286711294e+00 3.1507748797748536e+00 0 2 0
+P 10001 -16 1.2568565552888417e+01 4.3530194280774488e+00 -8.4495121630994738e+00 1.5757917810973993e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 2.4723857364970979e+01 6.0359315389275334e+00 -1.5554712055219809e+01 2.9827338781900995e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 3.1577988065741903e-16 -2.2584584647606034e-16 -4.4521181658655777e+00 4.4555047202225264e+00 0 2 0
+P 10003 16 -4.4110056284913401e-01 -1.1232744555079981e-01 7.7914588548934488e-02 4.6190652062695298e-01 9.9877081811428070e-03 1 0 0 0 0
+P 10004 -211 -3.6851322355015633e+01 -1.0276623521455678e+01 2.3926308844696646e+01 4.5123349658849698e+01 1.3956786692142487e-01 1 0 0 0 0
+E 86 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 -3.5527136788005009e-15 4.5584998372165472e+01 4.5584998372165472e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.7763568394002505e-15 3.5527136788005009e-15 -4.5438197115146721e+01 4.5438197115146721e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.4680125701875824e-01 9.1023195487312194e+01 9.1023077107469774e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584998372165472e+01 4.5584998372165451e+01 -1.5078914929239175e-06 61 0 0 -1 0
+P 9 22 0 0 1.6278345285059004e-06 1.6278345285059004e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5438197115146714e+01 4.5438197115146693e+01 -1.3486991523486091e-06 61 0 0 -2 0
+P 10 22 0 0 -1.4680288485328674e-01 1.4680288485328674e-01 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.4680125701875821e-01 9.1023195487312151e+01 9.1023077107469732e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -4.3042660928634945e+01 -1.4395023987979947e+01 -2.7997673283431532e+00 4.5506963928446311e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 4.3042660928634945e+01 1.4395023987979947e+01 2.9465685853619106e+00 4.5516231558865869e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 9.0583979115493205e-19 -4.7950644624023789e-18 1.2493058987109112e-01 1.2502592712444904e-01 0 2 0
+P 10001 -16 1.7256855266303603e+01 5.5884234756990958e+00 3.2786251432541935e-01 1.8142136705799853e+01 9.9903009831905365e-03 1 0 0 0 0
+P 10002 211 2.5786048127189289e+01 8.8066816013067406e+00 2.6187226694371941e+00 2.7374351251866209e+01 1.3956806063652039e-01 1 0 0 0 0
+V -9 0 -4.6585524080266517e-17 2.4660055029694529e-16 -6.4249297277847104e+00 6.4298327315558197e+00 0 2 0
+P 10003 16 -1.5648075801309263e+01 -5.6809904462546550e+00 -1.7674203287580186e+00 1.6740961834313552e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10004 -211 -2.7394827592168134e+01 -8.7141146307459980e+00 -1.0323627710344232e+00 2.8766258440710828e+01 1.3956785202026367e-01 1 0 0 0 0
+E 87 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -2.6645352591003757e-15 7.1054273576010019e-15 4.5584999684817028e+01 4.5584999684817021e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 2.6645352591003757e-15 -7.1054273576010019e-15 -4.5584737402091427e+01 4.5584737402091413e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 2.6228272560757659e-04 9.1169737086908412e+01 9.1169737086531143e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999684817014e+01 4.5584999684817014e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.1518299437038877e-07 3.1518299437038877e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584737402091406e+01 4.5584737402091406e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.6259790860194698e-04 2.6259790860194698e-04 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 2.6228272560757665e-04 9.1169737086908427e+01 9.1169737086531143e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 6.8832684959844066e+00 3.4960856875421065e+01 2.8375854004435038e+01 4.5584950176484782e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 -6.8832684959844066e+00 -3.4960856875421058e+01 -2.8375591721709441e+01 4.5584786910423659e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 3.9158909360225384e-17 -3.1691999899077162e-16 3.9719671162907444e+00 3.9749884556792323e+00 0 2 0
+P 10001 -16 -4.2402994247029184e+00 -2.5586555201087286e+01 -2.0610748723648616e+01 3.3127858501815183e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 -2.6430078456202972e+00 -9.3744986133476118e+00 -7.7650028414270995e+00 1.2457185193589808e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 -2.3636527191005393e-17 1.9129460692098451e-16 -1.1987503007597182e+00 1.1996621490692860e+00 0 2 0
+P 10003 16 5.9259276146951985e+00 3.1533914669528542e+01 2.4965681540485214e+01 4.0654516932913403e+01 9.9900215864181519e-03 1 0 0 0 0
+P 10004 -211 9.5737965562653005e-01 3.4271391448988027e+00 3.4103323087874404e+00 4.9306900294625615e+00 1.3956782221794128e-01 1 0 0 0 0
+E 88 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 2.2204460492503131e-16 -7.1054273576010019e-15 4.5584999872348703e+01 4.5584999872348718e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -2.2204460492503131e-16 7.1054273576010019e-15 -4.5584999869223040e+01 4.5584999869223061e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 3.1256632837539655e-09 9.1169999741571786e+01 9.1169999741571786e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999872348725e+01 4.5584999872348725e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.2765127621605643e-07 1.2765127621605643e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999869223061e+01 4.5584999869223061e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.3077693949981040e-07 1.3077693949981040e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 3.1256632837539655e-09 9.1169999741571786e+01 9.1169999741571786e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.6156177394520124e+00 2.3612365956342103e+01 3.8918896093605198e+01 4.5584999872120186e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 1.6156177394520124e+00 -2.3612365956342103e+01 -3.8918896090479535e+01 4.5584999869451607e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 1.2226269784054628e-17 1.8508928886068090e-16 2.3598889115792954e+00 2.3616839879188349e+00 0 2 0
+P 10001 -16 5.1021587040736516e-01 -8.5343964610448442e+00 -1.5713762812442910e+01 1.7889066067088358e+01 9.9911168217658997e-03 1 0 0 0 0
+P 10002 211 1.1054109700264914e+00 -1.5078102506781732e+01 -2.3205352513167593e+01 2.7696190588511374e+01 1.3956812024116516e-01 1 0 0 0 0
+V -9 0 -1.8292898172932596e-17 -2.7692988735163475e-16 -3.5308567798212342e+00 3.5335425661871347e+00 0 2 0
+P 10003 16 -3.3834461995286591e-01 9.9502526431625071e+00 1.7920636615964753e+01 2.0500520024725105e+01 9.9911401048302650e-03 1 0 0 0 0
+P 10004 -211 -1.2772822204812235e+00 1.3662246324667469e+01 2.0998478712777040e+01 2.5084736633549788e+01 1.3956809043884277e-01 1 0 0 0 0
+E 89 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -9.8764528867385880e-21 4.5584838541787370e+01 4.5584838541787370e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -3.5527235552708609e-15 -4.5584999836646112e+01 4.5584999836646112e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.6129485873506155e-04 9.1169838378433496e+01 9.1169838378290819e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584838541787377e+01 4.5584838541787377e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.6145821262369964e-04 1.6145821262369964e-04 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999836646112e+01 4.5584999836646112e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.6335388863808475e-07 1.6335388863808475e-07 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.6129485873506150e-04 9.1169838378433496e+01 9.1169838378290819e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.5058771085632502e+01 2.2102103854297290e+01 3.6872098331164338e+01 4.5584853956097902e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 1.5058771085632502e+01 -2.2102103854297290e+01 -3.6872259626023066e+01 4.5584984422335566e+01 1.7769899999999537e+00 2 0 0 -8 0
+V -8 0 -1.9367017040854622e-16 5.4948386364207673e-16 2.4560760724287487e+00 2.4579443212469507e+00 0 2 0
+P 10001 -16 3.7043858257764759e+00 -4.2226144294773116e+00 -7.3512533044157555e+00 9.2517010274477887e+00 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 1.1354470087850549e+01 -1.7879613928813974e+01 -2.9521214027788613e+01 3.6333540180968583e+01 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 2.7103644372982238e-16 -7.6898859527155763e-16 -3.4372155649821354e+00 3.4398301313586694e+00 0 2 0
+P 10003 16 -2.5658948455550484e-01 2.0112205062763452e-01 2.1518998401276315e-01 3.9076169922277548e-01 9.9849859252572060e-03 1 0 0 0 0
+P 10004 -211 -1.4802266429076942e+01 2.1901106307671608e+01 3.6657116052437559e+01 4.5194349042237427e+01 1.3956767320632935e-01 1 0 0 0 0
+E 90 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.4210854715202004e-14 0 4.5584999888740285e+01 4.5584999888740271e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.4210854715202004e-14 0 -4.5584996943827399e+01 4.5584996943827392e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 2.9449128788883172e-06 9.1169996832567620e+01 9.1169996832567563e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999888740242e+01 4.5584999888740256e+01 1.1680077279964342e-06 61 0 0 -1 0
+P 9 22 0 0 1.1125975163395196e-07 1.1125975163395196e-07 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584996943827363e+01 4.5584996943827377e+01 1.1680077279964342e-06 61 0 0 -2 0
+P 10 22 0 0 -3.0561726305222692e-06 3.0561726305222692e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 2.9449128788883172e-06 9.1169996832567634e+01 9.1169996832567577e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -3.0931762563488153e+01 -1.9724176649158423e+01 2.7000321977614927e+01 4.5584999288430325e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 3.0931762563488153e+01 1.9724176649158423e+01 -2.7000319032702045e+01 4.5584997544137337e+01 1.7769899999998258e+00 2 0 0 -8 0
+V -8 0 9.4673574832767660e-18 1.0184642543467276e-17 3.5656799237249354e-01 3.5683921988845685e-01 0 2 0
+P 10001 -16 3.4601445409581628e+00 2.8839743617643414e+00 -3.1883194955071490e+00 5.5186401717296123e+00 9.9874110892415047e-03 1 0 0 0 0
+P 10002 211 2.7471792265125011e+01 1.6840313396216832e+01 -2.3812151633463099e+01 4.0066614158559176e+01 1.3956785202026367e-01 1 0 0 0 0
+V -9 0 -3.0210126252890242e-17 -3.2498966857667671e-17 -1.1378004988551811e+00 1.1386659798001002e+00 0 2 0
+P 10003 16 -2.3404764913510153e+01 -1.5577824829611442e+01 2.0053805532006468e+01 3.4534140544060527e+01 9.9844262003898621e-03 1 0 0 0 0
+P 10004 -211 -7.5271718925641107e+00 -4.1464629283640493e+00 6.9466685418854652e+00 1.1051115530517942e+01 1.3956785202026367e-01 1 0 0 0 0
+E 91 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -3.1067524789236938e-15 4.5530289763393732e+01 4.5530289763393725e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 3.9989427157984351e-15 -4.5584995705145190e+01 4.5584995705145175e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -5.4705941751457487e-02 9.1115285468538900e+01 9.1115269045716332e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5530289763393718e+01 4.5530289763393718e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.4710236606275942e-02 5.4710236606275942e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584995705145175e+01 4.5584995705145175e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.2948548184540414e-06 4.2948548184540414e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -5.4705941751457474e-02 9.1115285468538886e+01 9.1115269045716317e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 4.1532084179831259e+01 -5.2011819001440838e+00 1.7871646327105868e+01 4.5546896111373272e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 -4.1532084179831259e+01 5.2011819001440838e+00 -1.7926352268857322e+01 4.5568389357165579e+01 1.7769899999996979e+00 2 0 0 -8 0
+V -8 0 0 0 1.4835330762591803e+00 1.4846629002063001e+00 0 2 0
+P 10001 -16 -2.9775353839158804e+01 3.4601415806162517e+00 -1.2018582735223646e+01 3.2295366645977282e+01 9.9907675758004189e-03 1 0 0 0 0
+P 10002 211 -1.1756964296262822e+01 1.7410696184567476e+00 -5.9078705150896029e+00 1.3273279403806644e+01 1.3956809043884277e-01 1 0 0 0 0
+V -9 0 -1.3272034060171584e-18 -2.0915615755397084e-17 -2.6052482967388252e-01 2.6072323926521224e-01 0 2 0
+P 10003 16 3.7614726949908572e+01 -4.5507773415534816e+00 1.5643950956060637e+01 4.0991591323466352e+01 9.9885296076536179e-03 1 0 0 0 0
+P 10004 -211 3.9175911855160486e+00 -6.5043385751989113e-01 2.2277960443368112e+00 4.5555613594543383e+00 1.3956792652606964e-01 1 0 0 0 0
+E 92 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -4.4408920985006262e-16 1.7763394179412577e-15 4.5584021147789308e+01 4.5584021147789308e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -1.7763742609136123e-15 -4.5584305662249974e+01 4.5584305662249974e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -2.8451446065957953e-04 9.1168326810039289e+01 9.1168326809595342e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584021147789322e+01 4.5584021147789322e+01 0 61 0 0 -1 0
+P 9 22 0 0 9.7885221068594319e-04 9.7885221068594319e-04 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584305662249982e+01 4.5584305662249982e+01 0 61 0 0 -2 0
+P 10 22 0 0 -6.9433775002636366e-04 6.9433775002636366e-04 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -2.8451446065957958e-04 9.1168326810039304e+01 9.1168326809595357e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -2.7140249367744538e+01 -3.6322210319737735e+01 -4.3432012714230224e+00 4.5584176958664173e+01 1.7769900000004655e+00 2 0 0 -9 0
+P 12 -15 2.7140249367744538e+01 3.6322210319737735e+01 4.3429167569623637e+00 4.5584149851375130e+01 1.7769900000004655e+00 2 0 0 -8 0
+V -8 0 -3.2693675219849308e-17 4.5889169677442491e-16 1.1796771108398410e+01 1.1805744786205750e+01 0 2 0
+P 10001 -16 1.7917204997592449e+01 2.5160494191944885e+01 3.3737943349968598e+00 3.1071840803110589e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10002 211 9.2231972546736696e+00 1.1161920735483529e+01 9.6914688617516143e-01 1.4512565829653964e+01 1.3956774771213531e-01 1 0 0 0 0
+V -9 0 4.4491574685392912e-18 -6.2448819419207863e-17 -1.6053775517325040e+00 1.6065987452926744e+00 0 2 0
+P 10003 16 -1.2444329278698527e+01 -1.5648426094025217e+01 -1.2736498053378635e+00 2.0033892634703275e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10004 -211 -1.4696072973569546e+01 -2.0673988833405815e+01 -3.0695759318978357e+00 2.5550541105506287e+01 1.3956817984580994e-01 1 0 0 0 0
+E 93 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 5.5511151231257827e-17 0 4.5584999942539440e+01 4.5584999942539440e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -1.1102230246251565e-16 0 -4.5584999926606102e+01 4.5584999926606102e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.5933331098949566e-08 9.1169999869145556e+01 9.1169999869145556e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999942539440e+01 4.5584999942539440e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.7460560753952450e-08 5.7460560753952450e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999926606109e+01 4.5584999926606109e+01 0 61 0 0 -2 0
+P 10 22 0 0 -7.3393891852902016e-08 7.3393891852902016e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.5933331098949566e-08 9.1169999869145556e+01 9.1169999869145556e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -6.6914312065589696e+00 -4.4939121832629738e+01 3.2457053080282692e+00 4.5584999935140004e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 6.6914312065589696e+00 4.4939121832629738e+01 -3.2457052920949372e+00 4.5584999934005531e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 2.7598692243237349e-17 -3.7983765658449133e-16 1.6219927742908389e+00 1.6232265615380217e+00 0 2 0
+P 10001 -16 3.1607527086079505e+00 1.6237397004093310e+01 -1.6108442910188951e+00 1.6620419314211308e+01 9.9829332903027534e-03 1 0 0 0 0
+P 10002 211 3.5307161916437169e+00 2.8701977976390189e+01 -1.6348792845514550e+00 2.8964837405962413e+01 1.3956731557846069e-01 1 0 0 0 0
+V -9 0 -3.0654556973509113e-18 3.8212251871811619e-17 -1.7799475878734830e-01 1.7813015252456960e-01 0 2 0
+P 10003 16 -1.0339584682343022e+00 -1.1727181676861093e+01 1.1646104496197525e+00 1.1830142747722627e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 -5.6575104320173661e+00 -3.3212193303622414e+01 2.0811131418840185e+00 3.3755113973585580e+01 1.3956774771213531e-01 1 0 0 0 0
+E 94 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 0 4.5584999965481046e+01 4.5584999965481046e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 3.5527136788005009e-15 3.5527136788005009e-15 -4.5582490833028650e+01 4.5582490833028650e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 2.5091324524026959e-03 9.1167490798509704e+01 9.1167490763981249e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999965481060e+01 4.5584999965481060e+01 0 61 0 0 -1 0
+P 9 22 0 0 3.4518947700235003e-08 3.4518947700235003e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5582490833028658e+01 4.5582490833028658e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.5091669713503961e-03 2.5091669713503961e-03 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 2.5091324524026963e-03 9.1167490798509718e+01 9.1167490763981263e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.6411617474634433e+01 2.2705073918477151e+01 1.5278488641942436e+01 4.5584165862771691e+01 1.7769900000003376e+00 2 0 0 -9 0
+P 12 -15 -3.6411617474634433e+01 -2.2705073918477151e+01 -1.5275979509490035e+01 4.5583324935738005e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 1.2248246091291132e-16 1.0249791829233787e-16 7.6047834599976416e-01 7.6105684437873311e-01 0 2 0
+P 10001 -16 -6.7782765858109597e+00 -3.7918170061677250e+00 -3.3783497617209575e+00 8.4697258887863498e+00 9.9911401048302650e-03 1 0 0 0 0
+P 10002 211 -2.9633546000150922e+01 -1.8913384812912980e+01 -1.1897715799327679e+01 3.7113855823687651e+01 1.3956812024116516e-01 1 0 0 0 0
+V -9 0 -1.7703030747853064e-16 -1.4814560269248416e-16 -1.0991591320068839e+00 1.0999952659736687e+00 0 2 0
+P 10003 16 2.6107816920464067e+01 1.5450924925460113e+01 1.1198785741762256e+01 3.2338244962581250e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10004 -211 1.0304005665497815e+01 7.2542768936205961e+00 4.0797889658730524e+00 1.3246177681663481e+01 1.3956785202026367e-01 1 0 0 0 0
+E 95 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -8.8817841970012523e-16 -1.8650877879117535e-15 4.4111527464480950e+01 4.4111527464480950e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 8.8817841970012523e-16 1.6861684622479047e-15 -4.5572514630645266e+01 4.5572514630645266e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.4609871661643155e+00 8.9684042095126244e+01 8.9672141287139340e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.4111527464480972e+01 4.4111527464480972e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.4734725355190363e+00 1.4734725355190363e+00 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5572514630645287e+01 4.5572514630645287e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.2485369354720888e-02 1.2485369354720888e-02 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.4609871661643157e+00 8.9684042095126259e+01 8.9672141287139354e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.4642391605543615e+01 -2.8275049686490703e+01 -3.4770929931026262e+00 4.4886764196900415e+01 1.7769900000002097e+00 2 0 0 -9 0
+P 12 -15 -3.4642391605543615e+01 2.8275049686490703e+01 2.0161058269383112e+00 4.4797277898225822e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 1.8131080019111253e-18 2.4141690729992885e-17 6.1058343514194247e-01 6.1106354641604987e-01 0 2 0
+P 10001 -16 -2.7985314910550212e+01 2.3701288764024419e+01 1.7360545756967876e+00 3.6714342224854711e+01 9.9903941154479980e-03 1 0 0 0 0
+P 10002 211 -6.6572718400475761e+00 4.5739201994632523e+00 2.8006260822534146e-01 8.0831880222078123e+00 1.3956806063652039e-01 1 0 0 0 0
+V -9 0 -1.6412360862561589e-18 -2.1853201225484582e-17 -5.5270373655012095e-01 5.5313833611487551e-01 0 2 0
+P 10003 16 1.7946905976339696e+01 -1.3512605648144604e+01 -1.8204222638810224e+00 2.2538766217917928e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10004 -211 1.6695680774254352e+01 -1.4762603315340016e+01 -1.6566903161339415e+00 2.2348250831902188e+01 1.3956817984580994e-01 1 0 0 0 0
+E 96 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 1.7763568394002505e-15 1.7763568388831032e-15 4.5584999947296609e+01 4.5584999947296609e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 1.7763568388831040e-15 -4.5584999955742241e+01 4.5584999955742241e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -8.4456388549369876e-09 9.1169999903038871e+01 9.1169999903038871e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584999947296616e+01 4.5584999947296616e+01 0 61 0 0 -1 0
+P 9 22 0 0 5.2703384767482930e-08 5.2703384767482930e-08 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584999955742255e+01 4.5584999955742255e+01 0 61 0 0 -2 0
+P 10 22 0 0 -4.4257745912545943e-08 4.4257745912545943e-08 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -8.4456388549369860e-09 9.1169999903038871e+01 9.1169999903038871e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -9.5923683093533878e+00 -9.9457884289931986e+00 -4.3403943256689459e+01 4.5584999955540226e+01 1.7769900000003376e+00 2 0 0 -9 0
+P 12 -15 9.5923683093533878e+00 9.9457884289931986e+00 4.3403943248243820e+01 4.5584999947498659e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 3.5297330206169628e-18 3.2438886687928610e-18 1.2292884868797951e-01 1.2302235591446850e-01 0 2 0
+P 10001 -16 1.9903116068906508e+00 1.3297554313463187e+00 6.1645546594800953e+00 6.6129738967457747e+00 9.9903941154479980e-03 1 0 0 0 0
+P 10002 211 7.6021107375079682e+00 8.6160890235531333e+00 3.7239633088762176e+01 3.8972282836924435e+01 1.3956806063652039e-01 1 0 0 0 0
+V -9 0 -1.4668915763971927e-16 -1.3480999654163144e-16 -5.1086949518092295e+00 5.1125809387115773e+00 0 2 0
+P 10003 16 -7.9921050901238724e+00 -8.7991818050020356e+00 -3.5449927759214283e+01 3.7389795694381640e+01 9.9859181791543961e-03 1 0 0 0 0
+P 10004 -211 -1.6003172542733686e+00 -1.1466626498959864e+00 -7.9542599974674264e+00 8.1954610473236240e+00 1.3956774771213531e-01 1 0 0 0 0
+E 97 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 -3.5527136788005009e-15 1.3314601443018902e-15 4.5571805445808202e+01 4.5571805445808202e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 3.5527136788005009e-15 -1.3330752316305645e-15 -4.5584993634678654e+01 4.5584993634678654e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.3188188870451256e-02 9.1156799080486849e+01 9.1156798126480524e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5571805445808195e+01 4.5571805445808195e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.3194554191798602e-02 1.3194554191798602e-02 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584993634678646e+01 4.5584993634678646e+01 0 61 0 0 -2 0
+P 10 22 0 0 -6.3653213473457981e-06 6.3653213473457981e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.3188188870451254e-02 9.1156799080486834e+01 9.1156798126480510e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 1.1436101287453651e+01 -3.6212229604248209e+00 -4.3942173523025012e+01 4.5584755958255919e+01 1.7769900000000818e+00 2 0 0 -9 0
+P 12 -15 -1.1436101287453651e+01 3.6212229604248209e+00 4.3928985334154561e+01 4.5572043122230909e+01 1.7769900000002097e+00 2 0 0 -8 0
+V -8 0 -3.0468167633988748e-17 4.2138242499392327e-16 5.2542748344461918e+00 5.2582727173975465e+00 0 2 0
+P 10001 -16 -1.0401260912512599e+01 3.6143333561994018e+00 3.8508637699121337e+01 4.0052027556790598e+01 9.9889030680060387e-03 1 0 0 0 0
+P 10002 211 -1.0349047959730875e+00 6.9100030409311453e-03 5.4205950926676447e+00 5.5202722786309488e+00 1.3956795632839203e-01 1 0 0 0 0
+V -9 0 3.7809790191356744e-18 -5.2291891231332211e-17 -6.5203471204654195e-01 6.5253083349833463e-01 0 2 0
+P 10003 16 9.2001577345594114e+00 -3.5628707360563374e+00 -3.6771652467288916e+01 3.8072187685763133e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10004 -211 2.2360079739238046e+00 -5.8372623183214345e-02 -7.1707685876518079e+00 7.5128250572866317e+00 1.3956806063652039e-01 1 0 0 0 0
+E 98 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 0 -9.6434819837619876e-18 4.5427352578465587e+01 4.5427352578465594e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 0 -9.6601982572376479e-18 -4.5584979089672245e+01 4.5584979089672260e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 -1.5762651120665794e-01 9.1012331668137833e+01 9.1012195169406212e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5427352578465587e+01 4.5427352578465587e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.5764742153441347e-01 1.5764742153441347e-01 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584979089672245e+01 4.5584979089672245e+01 0 61 0 0 -2 0
+P 10 22 0 0 -2.0910327755530034e-05 2.0910327755530034e-05 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 -1.5762651120665797e-01 9.1012331668137833e+01 9.1012195169406212e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 3.3032741825079350e+00 2.3235337282727997e+01 -3.9025690599967710e+01 4.5573618895491094e+01 1.7769900000003376e+00 2 0 0 -9 0
+P 12 -15 -3.3032741825079350e+00 -2.3235337282727997e+01 3.8868064088761052e+01 4.5438712772646760e+01 1.7769900000003376e+00 2 0 0 -8 0
+V -8 0 0 0 6.0920869514349696e-01 6.0967370686989053e-01 0 2 0
+P 10001 -16 -2.7932666909905031e+00 -2.1676758509325630e+01 3.5468736800583173e+01 4.1661920122366034e+01 9.9874110892415047e-03 1 0 0 0 0
+P 10002 211 -5.1002609928532328e-01 -1.5587096610426796e+00 3.3995462369768576e+00 3.7770486123879734e+00 1.3956806063652039e-01 1 0 0 0 0
+V -9 0 0 0 -5.2078233636440991e+00 5.2117985185497755e+00 0 2 0
+P 10003 16 1.6629055683295277e+00 1.0141472415165921e+01 -1.5454469980837020e+01 1.8559511302338898e+01 9.9842399358749390e-03 1 0 0 0 0
+P 10004 -211 1.6403872219462992e+00 1.3093995755202387e+01 -2.3571440455860071e+01 2.7014364315202975e+01 1.3956764340400696e-01 1 0 0 0 0
+E 99 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 0 9 1 2 0 0
+H 0 0 0 0 0 0 0 0 0 0 0 0 0
+F 0 0 0 0 0 0 0
+V -1 0 0 0 0 0 0 1 0
+P 3 11 5.3290705182007514e-15 -3.5527136788005009e-15 4.5584998310549565e+01 4.5584998310549558e+01 0 21 0 0 -3 0
+V -2 0 0 0 0 0 0 1 0
+P 4 -11 -5.3290705182007514e-15 3.5527136788005009e-15 -4.5584998153285547e+01 4.5584998153285532e+01 0 21 0 0 -3 0
+V -3 0 0 0 0 0 0 1 0
+P 5 23 0 0 1.5726402580185095e-07 9.1169996463835091e+01 9.1169996463835091e+01 22 0 0 -6 0
+V -4 0 0 0 0 0 1 2 0
+P 1 11 0 0 4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -4 0
+P 6 11 0 0 4.5584998310549558e+01 4.5584998310549558e+01 0 61 0 0 -1 0
+P 9 22 0 0 1.6894504426545609e-06 1.6894504426545609e-06 0 1 0 0 0 0
+V -5 0 0 0 0 0 1 2 0
+P 2 -11 0 0 -4.5584999997135881e+01 4.5584999999999987e+01 5.1099948762451471e-04 4 0 0 -5 0
+P 7 -11 0 0 -4.5584998153285532e+01 4.5584998153285532e+01 0 61 0 0 -2 0
+P 10 22 0 0 -1.8467144684564119e-06 1.8467144684564119e-06 0 1 0 0 0 0
+V -6 0 0 0 0 0 0 1 0
+P 8 23 0 0 1.5726402580185095e-07 9.1169996463835091e+01 9.1169996463835091e+01 62 0 0 -7 0
+V -7 0 0 0 0 0 0 2 0
+P 11 15 -1.6325788713529672e+01 -1.8661568944845921e+01 -3.8210585336168620e+01 4.5584998166006052e+01 1.7769899999999537e+00 2 0 0 -9 0
+P 12 -15 1.6325788713529672e+01 1.8661568944845921e+01 3.8210585493432646e+01 4.5584998297829038e+01 1.7769900000000818e+00 2 0 0 -8 0
+V -8 0 1.0024388231063086e-16 -1.3659659867641430e-16 2.1723457250189662e+00 2.1739981446196741e+00 0 2 0
+P 10001 -16 5.8484623597061010e+00 7.7188108783301388e+00 1.5879064466532757e+01 1.8599175828758948e+01 9.9918860942125320e-03 1 0 0 0 0
+P 10002 211 1.0477418319094893e+01 1.0942863189538105e+01 2.2331736272051224e+01 2.6986079255238906e+01 1.3956828415393829e-01 1 0 0 0 0
+V -9 0 -2.0485226742323129e-16 2.7914045541906471e-16 -4.4392728727157964e+00 4.4426496563572231e+00 0 2 0
+P 10003 16 -1.6139600688226086e+01 -1.8104557519548123e+01 -3.7334625146454115e+01 4.4521186506674908e+01 9.9896481260657310e-03 1 0 0 0 0
+P 10004 -211 -1.8627999057491146e-01 -5.5711654832012536e-01 -8.7617543486495619e-01 1.0640684454992266e+00 1.3956801593303680e-01 1 0 0 0 0
+HepMC::IO_GenEvent-END_EVENT_LISTING
--- /dev/null
+/**
+ * Example of use of processParticle routine.
+ * Pythia events are generated and photos used on first tau+ found.
+ *
+ * @author Tomasz Przedzinski
+ * @date 17 July 2010
+ */
+
+//pythia header files
+#include "Pythia.h"
+#include "HepMCInterface.h"
+
+//PHOTOS header files
+#include "Photos/Photos.h"
+#include "Photos/PhotosHepMCParticle.h"
+#include "Photos/Log.h"
+
+using namespace std;
+using namespace Pythia8;
+using namespace Photospp;
+
+int EventsToCheck=20;
+
+// elementary test of HepMC typically executed before
+// detector simulation based on http://home.fnal.gov/~mrenna/HCPSS/HCPSShepmc.html
+// similar test was performed in Fortran
+// we perform it before and after Photos (for the first several events)
+void checkMomentumConservationInEvent(HepMC::GenEvent *evt)
+{
+ //cout<<"List of stable particles: "<<endl;
+
+ double px=0.0,py=0.0,pz=0.0,e=0.0;
+
+ for ( HepMC::GenEvent::particle_const_iterator p = evt->particles_begin();
+ p != evt->particles_end(); ++p )
+ {
+ if( (*p)->status() == 1 )
+ {
+ HepMC::FourVector m = (*p)->momentum();
+ px+=m.px();
+ py+=m.py();
+ pz+=m.pz();
+ e +=m.e();
+ //(*p)->print();
+ }
+ }
+ cout.precision(6);
+ cout.setf(ios_base::floatfield);
+ cout<<endl<<"Vector Sum: "<<px<<" "<<py<<" "<<pz<<" "<<e<<endl;
+}
+
+int main(int argc,char **argv)
+{
+ // Initialization of pythia
+ HepMC::I_Pythia8 ToHepMC;
+ Pythia pythia;
+ Event& event = pythia.event;
+ pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
+ pythia.readString("23:onMode = off");
+ pythia.readString("23:onIfAny = 15");
+ pythia.readString("HadronLevel:Hadronize = off");
+ pythia.readString("SpaceShower:QEDshower = off");
+ pythia.readString("SpaceShower:QEDshowerByL = off");
+ pythia.readString("SpaceShower:QEDshowerByQ = off");
+ pythia.readString("PartonLevel:ISR = off");
+ pythia.readString("PartonLevel:FSR = off");
+ pythia.init( 11, -11, 92.);
+
+ Photos::initialize();
+ Photos::setInfraredCutOff(0.001/200);
+
+ int NumberOfEvents = 10000;
+ if(argc>1) NumberOfEvents=atoi(argv[1]);
+
+ int photonAdded=0,twoAdded=0,moreAdded=0,tauCount=0;
+
+ // Begin event loop. Generate event.
+ for (int iEvent = 0; iEvent < NumberOfEvents; ++iEvent)
+ {
+ if(iEvent%(NumberOfEvents/10)==0) Log::Info()<<iEvent<<endl;
+ if(!pythia.next()) continue;
+
+ HepMC::GenEvent * HepMCEvt = new HepMC::GenEvent();
+ ToHepMC.fill_next_event(event, HepMCEvt);
+
+ if(iEvent<EventsToCheck)
+ {
+ cout<<" "<<endl;
+ cout<<"Momentum conservation chceck BEFORE/AFTER Photos"<<endl;
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ // Find tau
+ HepMC::GenParticle *tau=0;
+ for(HepMC::GenEvent::vertex_const_iterator i = HepMCEvt->vertices_begin();i!=HepMCEvt->vertices_end();i++)
+ {
+ for(HepMC::GenVertex::particles_in_const_iterator p=(*i)->particles_in_const_begin();p!=(*i)->particles_in_const_end(); p++)
+ {
+ if((*p)->pdg_id()==15) tau=*p;
+ break;
+ }
+ if(tau) break;
+ }
+ if(tau)
+ {
+ tauCount++;
+ int buf = -HepMCEvt->particles_size();
+
+ // Call photos
+ Photos::processParticle( new PhotosHepMCParticle(tau) );
+
+ buf+=HepMCEvt->particles_size();
+ if(buf==1) photonAdded++;
+ else if(buf==2) twoAdded++;
+ else if(buf>2) moreAdded++;
+ }
+
+ if(iEvent<EventsToCheck)
+ {
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ //clean up
+ delete HepMCEvt;
+ }
+ pythia.statistics();
+
+ // Print results
+ cout.precision(2);
+ cout.setf(ios::fixed);
+ cout<<endl;
+ if(tauCount==0)
+ {
+ cout<<"Something went wrong with pythia generation."<<endl;
+ cout<<"No taus were processed."<<endl<<endl;
+ return 0;
+ }
+ cout<<"Summary (single tau decay processing):"<<endl;
+ cout<<tauCount <<"\ttaus processed"<<endl;
+ cout<<photonAdded<<"\ttimes one photon added to the decay \t("<<(photonAdded*100./tauCount)<<"%)"<<endl;
+ cout<<twoAdded <<"\ttimes two photons added to the decay \t("<<(twoAdded*100./tauCount)<<"%)"<<endl;
+ cout<<moreAdded <<"\ttimes more than two photons added to the decay\t("<<(moreAdded*100./tauCount)<<"%)"<<endl<<endl;
+ cout<<"(Contrary to results from MC-Tester, these values are technical and infrared unstable)"<<endl<<endl;
+ cout<<"To proccess different number of events use:"<<endl<<" ./single_photos_gun_example <number_of_events>"<<endl<<endl;
+}
+
--- /dev/null
+/**
+ * Example of use of photos C++ interface. Pythia events are
+ * generated first and photos used for FSR.
+ *
+ * @author Nadia Davidson
+ * @date 6 July 2009
+ */
+
+//pythia header files
+#include "Pythia.h"
+#include "HepMCInterface.h"
+
+//MC-TESTER header files
+#include "Generate.h"
+#include "HepMCEvent.H"
+#include "Setup.H"
+
+//PHOTOS header files
+#include "Photos/Photos.h"
+#include "Photos/PhotosHepMCEvent.h"
+#include "Photos/Log.h"
+
+//TAUOLA header files
+#include "Tauola/Tauola.h"
+#include "Tauola/TauolaHepMCEvent.h"
+
+using namespace std;
+using namespace Pythia8;
+using namespace Photospp;
+using namespace Tauolapp;
+
+unsigned long NumberOfEvents = 10000;
+unsigned int EventsToCheck=20;
+
+// elementary test of HepMC typically executed before
+// detector simulation based on http://home.fnal.gov/~mrenna/HCPSS/HCPSShepmc.html
+// similar test was performed in Fortran
+// we perform it before and after Photos (for the first several events)
+void checkMomentumConservationInEvent(HepMC::GenEvent *evt)
+{
+ //cout<<"List of stable particles: "<<endl;
+
+ double px=0.0,py=0.0,pz=0.0,e=0.0;
+
+ for ( HepMC::GenEvent::particle_const_iterator p = evt->particles_begin();
+ p != evt->particles_end(); ++p )
+ {
+ if( (*p)->status() == 1 )
+ {
+ HepMC::FourVector m = (*p)->momentum();
+ px+=m.px();
+ py+=m.py();
+ pz+=m.pz();
+ e +=m.e();
+ //(*p)->print();
+ }
+ }
+ cout.precision(6);
+ cout.setf(ios_base::floatfield);
+ cout<<endl<<"Vector Sum: "<<px<<" "<<py<<" "<<pz<<" "<<e<<endl;
+}
+
+int main(int argc,char **argv)
+{
+ HepMC::I_Pythia8 ToHepMC;
+
+ // Initialization of pythia
+ Pythia pythia;
+ Event& event = pythia.event;
+
+ pythia.readString("PartonLevel:ISR = off");
+ pythia.readString("PartonLevel:FSR = off");
+
+ pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
+ pythia.readString("23:onMode = off");
+ pythia.readString("23:onIfAny = 15");
+ pythia.particleData.readString("15:mayDecay = off"); //<- uncomment for pythia+tauola
+
+ //pythia.init( -2212, -2212, 14000.0); //proton proton collisions
+ pythia.init( 11, -11, 91.187); //electron positron collisions
+
+ // TAUOLA and PHOTOS initialization
+ Tauola::initialize();
+ Photos::initialize();
+
+ Photos::setInfraredCutOff(0.01/91.187); // 10MeV for scale to M_Z=91.187
+ //Photos::setDoubleBrem(false);
+ //Photos::setExponentiation(false);
+
+ Log::SummaryAtExit();
+ cout.setf(ios::fixed);
+ //Log::LogInfo(false) //To turn printing of last five events and pythia statistics off
+
+ // Example setup - suppress processing of whole Z0 decay,
+ // leaving only the Z0 -> tau+ tau- decay and whole branch starting
+ // from tau- to be processed
+ //Photos::suppressBremForBranch(0,23);
+ //Photos::forceBremForDecay (2,23,15,-15);
+ //Photos::forceBremForBranch(0,15);
+
+ // Force mass of electron and positron to be 0.000511
+ //Photos::forceMass(11,0.000511);
+
+ // Force mass of electron and positron to be taken
+ // from event record instead of being calculated from 4-vector
+ //Photos::forceMassFromEventRecord(11);
+
+ // Exclude particles with given status code from being processed
+ // or taken into account during momentum conservation calculation
+ //Photos::ignoreParticlesWithStatus(3);
+
+ // Remove status code from the list of ignored status codes
+ //Photos::DeIgnoreParticlesWithStatus(3);
+
+ // Force writing history decay products for vertices
+ // modified i.e. with added photons. These particles will
+ // have the provided status code. Photos will ignore
+ // all particles with this status code.
+ //Photos::createHistoryEntries(true,3);
+
+ MC_Initialize();
+
+ // Begin event loop
+ for (unsigned long iEvent = 0; iEvent < NumberOfEvents; ++iEvent)
+ {
+ if(iEvent%1000==0) Log::Info()<<"Event: "<<iEvent<<"\t("<<iEvent*(100./NumberOfEvents)<<"%)"<<endl;
+ if(!pythia.next()) continue;
+
+ // Convert event record to HepMC
+ HepMC::GenEvent * HepMCEvt = new HepMC::GenEvent();
+ ToHepMC.fill_next_event(event, HepMCEvt);
+
+ // Run TAUOLA on the event
+ TauolaHepMCEvent * t_event = new TauolaHepMCEvent(HepMCEvt);
+
+ // We may want to undecay previously decayed taus.
+ //t_event->undecayTaus();
+ t_event->decayTaus();
+ delete t_event;
+
+ //Log::LogPhlupa(2,4);
+
+ if(iEvent<EventsToCheck)
+ {
+ cout<<" "<<endl;
+ cout<<"Momentum conservation chceck BEFORE/AFTER Photos"<<endl;
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ // Run PHOTOS on the event
+ PhotosHepMCEvent evt(HepMCEvt);
+ evt.process();
+
+ if(iEvent<EventsToCheck)
+ {
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ // Run MC-TESTER on the event
+ HepMCEvent temp_event(*HepMCEvt,false);
+ MC_Analyze(&temp_event);
+
+ // Print out last 5 events
+ if(iEvent>=NumberOfEvents-5)
+ {
+ Log::RedirectOutput(Log::Info());
+ //pythia.event.list();
+ HepMCEvt->print();
+ Log::RevertOutput();
+ }
+
+ // Clean up
+ delete HepMCEvt;
+ }
+
+ Log::RedirectOutput(Log::Info());
+ pythia.statistics();
+ Log::RevertOutput();
+
+ MC_Finalize();
+}
--- /dev/null
+############## Make tests ###########################
+include ../test.inc
+
+NAME_BENCHMARK=mc-tester.benchmark.Htautau.root
+
+
+CONF=pythia_H.conf
+NAME=Htautau
+
+PROGRAM=$(PHOTOS_TAUOLA)
+PYTHIA_MODE=$(HIGGS_MODE)
+TAUOLA_MODE=$(RHORHO_MODE)
+
+tester.$(NAME).pdf: mc-tester.$(NAME).root
+ $(COMPARE) $(NAME_BENCHMARK) mc-tester.$(NAME).root
+ mv tester.pdf tester.$(NAME).pdf
+ $(VIEWER) tester.$(NAME).pdf &
+
+mc-tester.$(NAME).root: $(PROGRAM) $(CONF)
+ $(PROGRAM) $(CONF) $(PYTHIA_MODE) $(EVENTS) $(TAUOLA_MODE)
+ mv mc-tester.root mc-tester.$(NAME).root
+
+clean:
+ rm -rf *~ booklet* tester* mc-results*
+ rm -rf MC-TESTER.DAT *_C.so *_C.d
+
+clobber: clean
+ rm -f mc-tester.$(NAME).root
--- /dev/null
+//#include "UserTreeAnalysis.H" // remove if copied to user working directory
+#include <stdio.h>
+#include <assert.h>
+#include <math.h>
+#include <vector>
+#include <iostream>
+#include "MC4Vector.H"
+#include "HEPParticle.H"
+#include "TH1.h"
+#include "Setup.H"
+#include "TObjArray.h"
+#include "TMath.h"
+
+using namespace std;
+// Limits for particular user histograms
+int L[6] = { 5000000,5000000,2000000,2000000,1000000,1000000 };
+
+// very similar to MC_FillUserHistogram from Generate.cxx
+inline void fillUserHisto(char *name,double val, double weight=1.0,
+ double min=Setup::bin_min[0][0],
+ double max=Setup::bin_max[0][0])
+{
+ TH1D *h=(TH1D*)(Setup::user_histograms->FindObject(name));
+ if(!h){
+ h=new TH1D(name,name,Setup::nbins[0][0],min,max);
+ if(!h) return;
+ Setup::user_histograms->Add(h);
+ // printf("user histogram created %s\n", name);
+ }
+ h->Fill(val,weight);
+}
+
+double normalised_cross_product(double * v1, double * v2, double * result)
+{
+ result[0] = v1[1]*v2[2] - v1[2]*v2[1];
+ result[1] = v1[2]*v2[0] - v1[0]*v2[2];
+ result[2] = v1[0]*v2[1] - v1[1]*v2[0];
+
+ double normalisation = sqrt(result[0]*result[0]
+ +result[1]*result[1]
+ +result[2]*result[2]);
+
+ for(int i=0;i<3;i++)
+ result[i]=result[i]/normalisation;
+
+ return normalisation;
+}
+
+double dot_product(double *v1, double *v2)
+{
+ return v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2];
+}
+
+double dot_product(MC4Vector v1, MC4Vector v2)
+{
+ return v1.GetX1()*v2.GetX1()+v1.GetX2()*v2.GetX2()+v1.GetX3()*v2.GetX3();
+}
+
+double magnitude(double *v)
+{
+ return sqrt(dot_product(v,v));
+}
+
+
+//see RhoRhoUserTreeAnalysis in TAUOLA
+/** Main function. This does not take any parameters. It assumes
+ the events are something -> tau+ tau-, then tau -> pi+/- pi0 nu */
+int RhoRhoPHOTOSUserTreeAnalysis(HEPParticle *mother,HEPParticleList *stableDaughters, int nparams, double *params)
+{
+ assert(mother!=0);
+ assert(stableDaughters!=0);
+
+ HEPParticleListIterator daughters(*stableDaughters);
+
+ //make temporary 4 vectors for the pions
+ double pi_plus[4]={0};
+ double pi_minus[4]={0};
+ double pi0_plus[4]={0};
+ double pi0_minus[4]={0};
+
+ MC4Vector d_pi0_plus;
+ MC4Vector d_pi0_minus;
+ MC4Vector d_pi_plus;
+ MC4Vector d_pi_minus;
+ MC4Vector d_gamma;
+ MC4Vector temp;
+
+ //make temporary variables to store the center of mass of
+ //the rho+ rho- pair.
+ double cm_px=0;
+ double cm_py=0;
+ double cm_pz=0;
+ double cm_e=0;
+
+ double photon_e = 0;
+
+ //loop over all daughters and sort them by type, filling the
+ //temporary variables.
+ for (HEPParticle *part=daughters.first(); part!=0; part=daughters.next())
+ {
+ temp = part->GetP4();
+ if(part->GetPDGId()!=16&&part->GetPDGId()!=-16)
+ {
+ //Get the center of mass
+ cm_px+=part->GetPx();
+ cm_py+=part->GetPy();
+ cm_pz+=part->GetPz();
+ cm_e+=part->GetE();
+ }
+
+ //Initialize the particle arrays
+ switch(part->GetPDGId())
+ {
+ case 211:
+ d_pi_plus.Set(&temp);
+ d_pi_plus.SetM(part->GetM());
+ break;
+ case -211:
+ d_pi_minus.Set(&temp);
+ d_pi_minus.SetM(part->GetM());
+ break;
+ case 111: //fill the pi0's randomly for the moment.
+ if(d_pi0_minus.GetX1()==0&&d_pi0_minus.GetX2()==0&&d_pi0_minus.GetX3()==0)
+ {
+ d_pi0_minus.Set(&temp);
+ d_pi0_minus.SetM(part->GetM());
+ }
+ else
+ {
+ d_pi0_plus.Set(&temp);
+ d_pi0_plus.SetM(part->GetM());
+ }
+ break;
+ case 22:
+ d_gamma.Set(&temp);
+ d_gamma.SetM(0);
+ // Only the hardest photon counts
+ if(photon_e>d_gamma.GetX0()) return 0;
+ photon_e=d_gamma.GetX0();
+ // Skip photons with energy < 10MeV
+ if(photon_e<0.01) photon_e=0;
+ break;
+ default:
+ break;
+ }
+ }
+
+ //Now check which pi0 is associated with
+ //which pi+/-. Use the angle to decide.
+ double costheta1 = dot_product(d_pi_plus,d_pi0_plus)/(d_pi_plus.Length()*d_pi0_plus.Length());
+ double costheta2 = dot_product(d_pi_minus,d_pi0_plus)/(d_pi_minus.Length()*d_pi0_plus.Length());
+
+
+ if(costheta1<costheta2) //if necessary, change the pi0 vectors
+ {
+ MC4Vector temp;
+ temp.Set(&d_pi0_plus);
+ temp.SetM(d_pi0_plus.GetM());
+ d_pi0_plus.Set(&d_pi0_minus);
+ d_pi0_plus.SetM(d_pi0_minus.GetM());
+ d_pi0_minus.Set(&temp);
+ d_pi0_minus.SetM(temp.GetM());
+ }
+
+ //Now boost everything into the rho+ rho- center of mass frame.
+ double cm_mass = sqrt(cm_e*cm_e-cm_px*cm_px-cm_py*cm_py-cm_pz*cm_pz);
+
+ d_pi0_plus.Boost(cm_px,cm_py,cm_pz,cm_e,cm_mass);
+ d_pi0_minus.Boost(cm_px,cm_py,cm_pz,cm_e,cm_mass);
+ d_pi_plus.Boost(cm_px,cm_py,cm_pz,cm_e,cm_mass);
+ d_pi_minus.Boost(cm_px,cm_py,cm_pz,cm_e,cm_mass);
+ d_gamma.Boost(cm_px,cm_py,cm_pz,cm_e,cm_mass);
+
+ pi0_plus[0]=d_pi0_plus.GetX1();
+ pi0_plus[1]=d_pi0_plus.GetX2();
+ pi0_plus[2]=d_pi0_plus.GetX3();
+ pi0_plus[3]=d_pi0_plus.GetM();
+
+ pi_plus[0]=d_pi_plus.GetX1();
+ pi_plus[1]=d_pi_plus.GetX2();
+ pi_plus[2]=d_pi_plus.GetX3();
+ pi_plus[3]=d_pi_plus.GetM();
+
+ pi0_minus[0]=d_pi0_minus.GetX1();
+ pi0_minus[1]=d_pi0_minus.GetX2();
+ pi0_minus[2]=d_pi0_minus.GetX3();
+ pi0_minus[3]=d_pi0_minus.GetM();
+
+ pi_minus[0]=d_pi_minus.GetX1();
+ pi_minus[1]=d_pi_minus.GetX2();
+ pi_minus[2]=d_pi_minus.GetX3();
+ pi_minus[3]=d_pi_minus.GetM();
+
+ /******* calculate acoplanarity (theta) *****/
+
+ //normal to the plane spanned by pi+ pi0
+ double n_plus[3];
+ normalised_cross_product(pi_plus,pi0_plus,n_plus);
+
+ //normal to the plane spanned by pi- pi0
+ double n_minus[3];
+ normalised_cross_product(pi_minus,pi0_minus,n_minus);
+
+ //get the angle
+ double theta = acos(dot_product(n_plus,n_minus));
+
+ //make theta go between 0 and 2 pi.
+ double pi_minus_n_plus = dot_product(pi_minus,n_plus)/magnitude(pi_minus);
+ if(pi_minus_n_plus>0)
+ theta=2*M_PI-theta;
+
+ /*********** calculate C/D reco (y1y2 in the paper) ***/
+
+ //boost vectors back to the lab frame
+ d_pi0_plus.Boost(-cm_px,-cm_py,-cm_pz,cm_e,cm_mass);
+ d_pi_plus.Boost(-cm_px,-cm_py,-cm_pz,cm_e,cm_mass);
+ d_pi0_minus.Boost(-cm_px,-cm_py,-cm_pz,cm_e,cm_mass);
+ d_pi_minus.Boost(-cm_px,-cm_py,-cm_pz,cm_e,cm_mass);
+
+ //construct effective tau 4 vectors (without neutrino)
+ double e_tau = 120.0/2.0;
+ double m_tau = 1.78;
+ double p_mag_tau = sqrt(e_tau*e_tau - m_tau*m_tau);
+
+ MC4Vector p_tau_plus = d_pi_plus + d_pi0_plus;
+ MC4Vector p_tau_minus = d_pi_minus + d_pi0_minus;
+
+ double norm_plus = p_mag_tau/p_tau_plus.Length();
+ double norm_minus = p_mag_tau/p_tau_minus.Length();
+
+ p_tau_plus.SetX0(e_tau);
+ p_tau_plus.SetX1(norm_plus*p_tau_plus.GetX1());
+ p_tau_plus.SetX2(norm_plus*p_tau_plus.GetX2());
+ p_tau_plus.SetX3(norm_plus*p_tau_plus.GetX3());
+ p_tau_plus.SetM(m_tau);
+
+ p_tau_minus.SetX0(e_tau);
+ p_tau_minus.SetX1(norm_minus*p_tau_minus.GetX1());
+ p_tau_minus.SetX2(norm_minus*p_tau_minus.GetX2());
+ p_tau_minus.SetX3(norm_minus*p_tau_minus.GetX3());
+ p_tau_minus.SetM(m_tau);
+
+ //boost to the (reco) tau's frames
+ d_pi0_plus.BoostP(p_tau_plus);
+ d_pi_plus.BoostP(p_tau_plus);
+ d_pi0_minus.BoostP(p_tau_minus);
+ d_pi_minus.BoostP(p_tau_minus);
+
+ //calculate y1 and y2
+ double y1=(d_pi_plus.GetX0()-d_pi0_plus.GetX0())/(d_pi_plus.GetX0()+d_pi0_plus.GetX0());
+ double y2=(d_pi_minus.GetX0()-d_pi0_minus.GetX0())/(d_pi_minus.GetX0()+d_pi0_minus.GetX0());
+
+ //make seperate plots for different photon energy ranges
+ if(photon_e==0)
+ {
+ if(y1*y2>0)
+ {
+ if(L[0]<=0) return 0;
+ L[0]--;
+ char name[] = "acoplanarity-angle-C-no-photon";
+ fillUserHisto(name,theta,1.0,0,2*M_PI);
+ }
+ else
+ {
+ if(L[1]<=0) return 0;
+ L[1]--;
+ char name[] = "acoplanarity-angle-D-no-photon";
+ fillUserHisto(name,theta,1.0,0,2*M_PI);
+ }
+
+ }
+ if(photon_e>0&&photon_e<1.0)
+ {
+ if(y1*y2>0)
+ {
+ if(L[2]<=0) return 0;
+ L[2]--;
+ char name[] = "acoplanarity-angle-C-photon-up-to-1-GeV";
+ fillUserHisto(name,theta,1.0,0,2*M_PI);
+ }
+ else
+ {
+ if(L[3]<=0) return 0;
+ L[3]--;
+ char name[] = "acoplanarity-angle-D-photon-up-to-1-GeV";
+ fillUserHisto(name,theta,1.0,0,2*M_PI);
+ }
+ }
+ if(photon_e>1.0)
+ {
+ if(y1*y2>0)
+ {
+ if(L[4]<=0) return 0;
+ L[4]--;
+ char name[] = "acoplanarity-angle-C-photon-over-1-GeV";
+ fillUserHisto(name,theta,1.0,0,2*M_PI);
+ }
+ else
+ {
+ if(L[5]<=0) return 0;
+ L[5]--;
+ char name[] = "acoplanarity-angle-D-photon-over-1-GeV";
+ fillUserHisto(name,theta,1.0,0,2*M_PI);
+ }
+ }
+
+ return 0;
+};
+
--- /dev/null
+{
+ if (!Setup::stage == 0) { //generation step configurables
+ //look at higgs decays
+ Setup::decay_particle=25;
+ Setup::mass_power=1;
+ Setup::mass_scale_on=true;
+
+ // Setup histograms
+ int n_bins=60;
+ double default_min_bin=0.0;
+ double default_max_bin=1.1;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+
+ // Setup User Histograms
+ Setup::UserTreeAnalysis = "RhoRhoPHOTOSUserTreeAnalysis";
+
+ // Description
+ Setup::gen1_desc_1=" Pythia + Tauola + Photos Interface Test";
+ Setup::gen1_desc_2=" $H \\rightarrow 2 \\pi^0 \\pi^+ \\pi^- \\nu_{\\tau} \\bar{\\nu_{\\tau}} $";
+ Setup::gen1_desc_3=" No photon symmetrization";
+
+ Setup::SuppressDecay(111); // suppress pi0 decays
+ }
+ else{ //Setup for analysis step
+ Setup::user_analysis=MCTest01;
+ //Setup::rebin_factor=4; // to reduce no of bins by rebin_factor
+ }
+};
+
--- /dev/null
+HiggsSM:ffbar2H = on
+25:onMode = off
+25:onIfAny = 15
+25:m0 = 120
+15:mayDecay = off
--- /dev/null
+include ../make.inc
+include $(PHOTOSLOCATION)/make.inc
+
+ROOTLIB := $(shell root-config --glibs)
+ROOTINC := $(shell root-config --cflags)
+ROOTLIBPATH := $(shell root-config --libdir)
+PYTHIA_LIBS = -L$(PYTHIALOCATION)/lib/archive -lpythia8 -llhapdfdummy -lhepmcinterface
+MC_TESTER_LIBS = -L$(MCTESTERLOCATION)/lib -lHEPEvent -lHepMCEvent -lMCTester
+HEPMC_LIBS = -L$(HEPMCLOCATION)/lib -lHepMC
+TAUOLA_LIBS = -L$(TAUOLALOCATION)/lib -lTauolaCxxInterface -lTauolaFortran
+PHOTOS_LIBS = -L$(PHOTOSLOCATION)/lib -lPhotosCxxInterface -lPhotosFortran $(HEPMC_LIBS)
+
+all:
+ifneq ($(HEPMCLOCATION), )
+ifneq ($(PYTHIALOCATION), )
+ifneq ($(MCTESTERLOCATION), )
+ @make photos_test.exe
+ifneq ($(TAUOLALOCATION), )
+ @make photos_tauola_test.exe
+endif
+endif
+endif
+endif
+ @echo "##################################################################"
+ @echo " Available programs:"
+ @if test -e photos_test.exe; then \
+ echo " ./photos_test.exe"; else \
+ echo ""; \
+ echo " WARNING: Main program used for tests - 'photos_test.exe' "; \
+ echo " requires HepMC, Pythia8 and MC-TESTER."; \
+ fi
+ @if test -e photos_tauola_test.exe; then \
+ echo " ./photos_tauola_test.exe"; else \
+ echo ""; \
+ echo " WARNING: Second program used for tests - 'photos_tauola_test.exe' "; \
+ echo " requires HepMC, Tauola++, Pythia8 and MC-TESTER."; \
+ fi
+ @echo ""
+ @echo " To execute all available tests: 'make run',"
+ @echo " For single test: cd to chosen sub-directory and 'make' "
+ @echo "##################################################################"
+
+%.exe: %.cxx
+ $(CC) $(CFLAGS) -I$(PHOTOSLOCATION)/include -I$(HEPMCLOCATION)/include \
+ $(LDFLAGS) $(HEPMC_LIBS) $(PHOTOS_LIBS) $< -o $@ \
+ -Wl,-rpath,$(PHOTOSLOCATION)/lib \
+ -Wl,-rpath,$(HEPMCLOCATION)/lib
+
+photos_test.exe: photos_test.cxx
+ $(CC) $(CFLAGS) -I$(PHOTOSLOCATION)/include -I$(PYTHIALOCATION)/include -I$(MCTESTERLOCATION)/include -I$(HEPMCLOCATION)/include \
+ $(ROOTINC) $< -o $@ \
+ $(LDFLAGS) $(ROOTLIB) $(PYTHIA_LIBS) $(MC_TESTER_LIBS) $(HEPMC_LIBS) $(PHOTOS_LIBS) \
+ -Wl,-rpath,$(PHOTOSLOCATION)/lib \
+ -Wl,-rpath,$(ROOTLIBPATH) \
+ -Wl,-rpath,$(HEPMCLOCATION)/lib \
+ -Wl,-rpath,$(PYTHIALOCATION)/lib \
+ -Wl,-rpath,$(MCTESTERLOCATION)/lib
+
+photos_tauola_test.exe: photos_tauola_test.cxx
+ $(CC) $(CFLAGS) -I$(PHOTOSLOCATION)/include -I$(TAUOLALOCATION)/include -I$(PYTHIALOCATION)/include -I$(MCTESTERLOCATION)/include \
+ -I$(HEPMCLOCATION)/include $(ROOTINC) $< -o $@ \
+ $(LDFLAGS) $(ROOTLIB) $(PYTHIA_LIBS) $(MC_TESTER_LIBS) $(HEPMC_LIBS) $(TAUOLA_LIBS) $(PHOTOS_LIBS) \
+ -Wl,-rpath,$(PHOTOSLOCATION)/lib \
+ -Wl,-rpath,$(TAUOLALOCATION)/lib \
+ -Wl,-rpath,$(ROOTLIBPATH) \
+ -Wl,-rpath,$(HEPMCLOCATION)/lib \
+ -Wl,-rpath,$(PYTHIALOCATION)/lib \
+ -Wl,-rpath,$(MCTESTERLOCATION)/lib
+
+make.inc:
+ @echo ""
+ @echo "Please execute ./configure in main examples directory first!"
+ @echo ""
+ @false
+
+$(PHOTOSLOCATION)/make.inc:
+ @echo ""
+ @echo "Please compile the interface first!"
+ @echo ""
+ @false
+
+run:
+ make -C Zee
+ make -C Zmumu
+ make -C ZmumuNLO
+ make -C Wenu
+ make -C Wmunu
+ make -C WmunuNLO
+ make -C ttbar
+ifneq ($(TAUOLALOCATION), )
+ make -C Htautau
+ make -C Ztautau
+ make -C ScalNLO
+endif
+
+clean:
+ rm -f *.o *~ *.exe
+ rm -f *~ */*~
+
+clobber: clean
+ make -C Zee clobber
+ make -C Zmumu clobber
+ make -C ZmumuNLO clobber
+ make -C Wenu clobber
+ make -C Wmunu clobber
+ make -C WmunuNLO clobber
+ make -C ttbar clobber
+ make -C Htautau clobber
+ make -C Ztautau clobber
+ make -C ScalNLO clobber
--- /dev/null
+---------------------------------------------------------------------------
+This directory contains a number of MC-TESTER based tests which can be
+performed to validate the currently installed version of PHOTOS and its
+interface against benchmark results encoded in root files.
+---------------------------------------------------------------------------
+
+These tests use code located in "photos_test.c" and "photot_tauola_test.c".
+These files contain hardcoded options for all of the tests and are not
+designed to be manipulated by user. Appropriate options are set by makefiles.
+For users willing to investigate all options, examples provided in
+"PHOTOS/examples" may represent better starting point.
+
+To run, type "make" in directory testing. You can run a single test by
+"make" in the corresponding subdirectory. After the test is completed,
+ MC-TESTER booklets can be found in the subdirectories of each test.
+The number of generated events can be set in the "test.inc" file.
+
+Note that examples:
+- Htautau
+- Ztautau
+
+use "photos_tauola_test.c"; it requires that path to Tauola C++ Interface
+is defined during configuration.
+
+---------------------------------------------------------------------------
+The list of modes and options used for generation is located in the
+"test.inc" file. It is used by make.
+
+In some cases further changes to Makefile or SETUP.C files (located
+in subdirectory of particular test) are needed.
+Full list of such changes resides in: README-comparison-options
+---------------------------------------------------------------------------
+
+------------------
+ DEBUGGING
+------------------
+An additional directory is stored in our repository on kasztan.ifj.edu.pl,
+for those with privileges it can be obtained with:
+
+svn export file:///home/theory/svnroot/camtoph/PHOTOS/branches/debug
+
+It contains number of tests; in particular unusual events stored in HepMC
+data files. Thanks to James Monk, Andy Buckley, Sebastian Piec and others
+for some of those files. In the past, we have used those events to localize
+bugs in previous versions of Photos++ event interface
+(or to understand necesity for new extensions of
+its event record algorithm). From now on we use those events
+for validation of new changes. The files are large and that is why
+we do no not include them in the distribution tar-ball.
+
--- /dev/null
+LATER IN THE FILE WE COLLECT REFERENCES FOR PHYSIC CONEXTS
+LET US START TECHNICAL ASPECTS OF TEST ROOT FILES:
+
+Htautau/mc-tester.benchmark.Htautau.root
+----------------------------------------
+
+PROCESS:
+ collision: e+e-@500GeV
+ generator: pythia, HiggsSM:ffbar2H, using "25:m0=120"
+ tauola, decay mode: 4 (tau => pi pi nu_tau)
+ events: 10M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 1.e-6
+
+MCTESTER:
+ particle: 25 (higgs)
+ mass power: 1
+ mass scale: on
+ histograms: 60 bins; [0 , 1.1]
+
+ analysis: RhoRhoPHOTOSUserTreeAnalysis.C
+ E_test: -
+
+--------------------------------------------------------------------------------
+
+ScalNLO/mc-tester.root-1000M-LO-EXP
+----------------------------------------
+
+PROCESS:
+ collision: pp@14TeV
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ tauola, decay mode: 7 (K-STAR mode)
+ events: 1000M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 1.e-6
+ max weight: 3.0
+
+MCTESTER:
+ particle: 310 (K-STAR)
+ mass power: 1
+ mass scale: on
+ histograms: 60 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.01/0.49 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+ScalNLO/mc-tester.root-1000M-NLO-EXP
+----------------------------------------
+
+PROCESS:
+ collision: pp@14TeV
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ tauola, decay mode: 7 (K-STAR mode)
+ events: 1000M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 1.e-6
+ max weight: 3.0
+ NLO: yes
+
+MCTESTER:
+ particle: 310 (K-STAR)
+ mass power: 1
+ mass scale: on
+ histograms: 60 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.01/0.49 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+ScalNLO/mc-tester.root-1000M-LO-1-phot
+----------------------------------------
+
+PROCESS:
+ collision: pp@14TeV
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ tauola, decay mode: 7 (K-STAR mode)
+ events: 1000M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 0.01/91.187
+ max weight: 2.0
+
+MCTESTER:
+ particle: 310 (K-STAR)
+ mass power: 1
+ mass scale: on
+ histograms: 60 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.01/0.49 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+ScalNLO/mc-tester.root-1000M-NLO-1-phot
+----------------------------------------
+
+PROCESS:
+ collision: pp@14TeV
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ tauola, decay mode: 7 (K-STAR mode)
+ events: 1000M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 0.01/91.187
+ max weight: 2.0
+ NLO: yes
+
+MCTESTER:
+ particle: 310 (K-STAR)
+ mass power: 1
+ mass scale: on
+ histograms: 60 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.01/0.49 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+ttbar/mc-tester.root-ttbar-10M
+------------------------------
+
+PROCESS:
+ collision: pp@14TeV
+ generator: pythia, Top:ffbar2ttbar(s:gmZ) + Top:gg2ttbar
+ events: 10M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 0.001/200
+ max weight: 3.0
+
+MCTESTER:
+ particle: 100 (special/artificial particle)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.001, max 2 photons
+
+
+--------------------------------------------------------------------------------
+
+Wenu/mc-tester.root-Wenu-photos-100M-sym-10MeV
+----------------------------------------------
+
+PROCESS:
+ collision: -
+ generator: custom BORN, CMSene=80.403, symmetric photons
+ events: 100M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 10e-7 (default)
+
+MCTESTER:
+ particle: 24 (W+)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.01/80.403 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+Wmunu/mc-tester.root-Wmunu-photos-100M-sym-10MeV
+----------------------------------------------
+
+PROCESS:
+ collision: -
+ generator: custom BORN, CMSene=80.403, symmetric photons
+ events: 100M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 10e-7 (default)
+
+MCTESTER:
+ particle: 24 (W+)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.01/80.403 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+Wmumu/mc-tester.root-Wmunu-photos-F77-100M-1-phot-5MeV
+--------------------------------------
+
+PROCESS:
+ collision: -
+ generator: custom BORN, CMSene=80.403
+ events: 100M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 0.005
+
+MCTESTER:
+ particle: 24 (W+)
+ mass power: 1
+ mass scale: off
+ histograms: 120 bins; [0 , 100.0]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.005 , max 2 photons
+
+SOURCE:
+ http://cern.ch/~wasm/public/prod1-photos-mc-tester.root
+--------------------------------------------------------------------------------
+
+WmunuNLO/mc-tester.root-Wmunu-photos-100M-1-phot
+WmunuNLO/mc-tester.root-Wmunu-photos-100M-1-phot-NLO
+--------------------------------------
+
+PROCESS:
+ collision: -
+ generator: custom BORN, CMSene=80.403
+ events: 100M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 0.005
+ NLO: yes
+
+MCTESTER:
+ particle: 24 (W+)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.01 , max 2 photons
+
+--------------------------------------------------------------------------------
+
+WmunuNLO/mc-tester.root-Wmunu-photos-100M-nosym-10MeV-1-phot-NLO
+--------------------------------------
+
+PROCESS:
+ collision: -
+ generator: custom BORN, CMSene=80.403
+ events: 100M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 0.01/80.403
+ NLO: yes
+
+MCTESTER:
+ particle: 24 (W+)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.01/80.403 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+WmunuNLO/mc-tester.root-Wmunu-photos-F77-100M-1-phot-5MeV-NLO
+--------------------------------------
+
+PROCESS:
+ collision: -
+ generator: custom BORN, CMSene=80.403
+ events: 100M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 0.005
+
+MCTESTER:
+ particle: 24 (W+)
+ mass power: 1
+ mass scale: off
+ histograms: 120 bins; [0 , 100.0]
+
+ analysis: UserTreeAnalysis
+ E_test: 0.005 , max 2 photons
+
+--------------------------------------------------------------------------------
+
+WmunuNLO/mc-tester.root-Wmunu-photos-100M-sym-10MeV - COPIED FROM Wmunu
+
+--------------------------------------------------------------------------------
+
+Zee/mc-tester.root-Zee-kkmc-sym-1GeV
+------------------------------------
+
+PROCESS:
+ collision: -
+ generator: KKMC, CMSene=91.187, symmetric photons
+ events: 6.5M (6442925)
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: F77 code equivalent to ZeeAnalysis used
+ E_test: 1./91.187 (1GeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+Zee/mc-tester.root-Zee-photos-100M-sym-10MeV
+--------------------------------------------
+
+PROCESS:
+ collision: -
+ generator: custom BORN, CMSene=91.187, symmetric photons
+ events: 100M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 10e-7 (default)
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: F77 code equivalent to ZeeAnalysis used
+ E_test: 0.01/91.187 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+Zee/mc-tester.root-Zee-photos-10M-nosym-10MeV
+--------------------------------------------
+
+PROCESS:
+ collision: -
+ generator: custom BORN, CMSene=91.187
+ events: 10M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 10e-7 (default)
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: F77 code equivalent to ZeeAnalysis used
+ E_test: 0.01/91.187 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+Zmumu/mc-tester.root-Zmumu-CEEX1-100M-nosym-1GeV
+------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.177GeV
+ generator: KKMC-CEEX1
+ events: 100M
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 1./91.177 (1GeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+Zmumu/mc-tester.root-Zmumu-CEEX2-100M-nosym-1GeV
+------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.177GeV
+ generator: KKMC-CEEX2
+ events: 100M
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 1./91.177 (1GeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+Zmumu/mc-tester.root-Zmumu-kkmc-F77-100M-sym-1GeV
+-------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.177GeV
+ generator: KKMC, symmetric photons
+ events: 10M
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: F77 code equivalent to UserTreeAnalysis used
+ E_test: 1./91.177 (1GeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+Zmumu/mc-tester.root-Zmumu-photos-F77-100M-sym-10MeV
+----------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.187
+ generator: BORN, symmetric photons
+ events: 100M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 10e-7 (default)
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: F77 code equivalent to ZeeAnalysis used
+ E_test: 0.01/91.187 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+Zmumu/mc-tester.root-Zmumu-photos-F77-1-phot-EXP-1GeV
+----------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.187
+ generator: KK+PHOTOS
+ events: 100M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 1./91.187
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: off
+ histograms: 1200 bins; [0 , 120]
+
+ analysis: F77 code equivalent to UserTreeAnalysis used
+ E_test: 1./91.177 (1GeV), max 2 photons
+
+SOURCE:
+ http://mc-tester.web.cern.ch/MC-TESTER/PHOTOS-MCTESTER/Results/Data/91GeV/PHOTOS-EXP-1PHOTON/ET-1.0/
+ NOTE: source file has been converted to new format.
+ Ordering of particles in decay modes has changed.
+--------------------------------------------------------------------------------
+
+
+ZmumuNLO/mc-tester.root-Zmumu-CEEX1-100M-nosym-1GeV - COPIED FROM Zmumu
+ZmumuNLO/mc-tester.root-Zmumu-CEEX2-100M-nosym-1GeV - COPIED FROM Zmumu
+ZmumuNLO/mc-tester.root-Zmumu-kkmc-F77-10M-sym-1GeV - COPIED FROM Zmumu
+ZmumuNLO/mc-tester.root-Zmumu-photos-F77-100M-sym-10MeV - COPIED FROM Zmumu
+
+--------------------------------------------------------------------------------
+
+ZmumuNLO/mc-tester.root-Zmumu-LO-100M
+----------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.187
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ events: 100M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 10e-7 (default)
+ max weight: 3.0
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 1./91.187; (1GeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+ZmumuNLO/mc-tester.root-Zmumu-NLO-100M
+----------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.187
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ events: 100M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 10e-7 (default)
+ max weight: 3.0
+ NLO: yes
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 1./91.187; (1GeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+ZmumuNLO/mc-tester.root-Zmumu-1-phot-LO-100M
+----------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.187
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ events: 100M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 0.001
+ max weight: 2.0
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 1./91.187; (1GeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+ZmumuNLO/mc-tester.root-Zmumu-1-phot-NLO-100M
+----------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.187
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ events: 100M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 0.001
+ max weight: 2.0
+ NLO: yes
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: UserTreeAnalysis
+ E_test: 1./91.187; (1GeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+ZmumuNLO/mc-tester.root-Zmumu-koralz-100M-1-phot-1GeV-NLO
+----------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.187
+ generator: KORALZ
+ events: 100M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 1./91.187
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: off
+ histograms: 120 bins; [0 , 100]
+
+SOURCE:
+ http://mc-tester.web.cern.ch/MC-TESTER/PHOTOS-MCTESTER/AtNLO/Data/O1/mc-tester.root-koralz-O-alpha
+--------------------------------------------------------------------------------
+
+ZmumuNLO/mc-tester.root-Zmumu-koralz-100M-1-photon-1GeV-NLO
+----------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.187
+ generator: KK+PHOTOS
+ events: 100M
+
+PHOTOS:
+ first: yes
+ second: no
+ exp: no
+ cutoff: 1./91.187
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: off
+ histograms: 120 bins; [0 , 100]
+
+SOURCE:
+ http://mc-tester.web.cern.ch/MC-TESTER/PHOTOS-MCTESTER/AtNLO/Data/O1/mc-tester.root-PHOTOS-NLO-O-alpha
+--------------------------------------------------------------------------------
+
+ZmumuNLO/mc-tester.root-Zmumu-kkmc-100M-1GeV-nosym-NLO
+----------------------------------------------------
+
+PROCESS:
+ collision: e+e-@91.187
+ generator: KKMC, photons are ordered
+ events: 100M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 10e-7 (default)
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 1
+ mass scale: off
+ histograms: 1200 bins; [0 , 120]
+
+ analysis: F77 code equivalent to UserTreeAnalysis used
+ E_test: 1./91.187 (1GeV), max 2 photons
+
+SOURCE:
+ http://mc-tester.web.cern.ch/MC-TESTER/PHOTOS-MCTESTER/AtNLO/Data/EXP-2PHOTON/mc-tester-kkmc3-2.root
+ NOTE: source file has been converted to new format.
+ Ordering of particles in decay modes has changed.
+--------------------------------------------------------------------------------
+
+Ztautau/mc-tester.root-pispectr-RCall
+-------------------------------------
+
+PROCESS:
+ collision: ee@91.17GeV
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ tauola, decay mode: 3 (tau => pi nu_tau)
+ events: 10M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 0.01/200
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 2
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: ZtautauAnalysis.C
+ E_test: 0.01/91.187 (10MeV), max 2 photons
+
+--------------------------------------------------------------------------------
+
+Ztautau/mc-tester.root-pispectr-RCno
+------------------------------------
+
+PROCESS:
+ collision: ee@91.17GeV
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ tauola, decay mode: 3 (tau => pi nu_tau)
+ events: 10M
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 2
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: -
+ E_test: -
+
+--------------------------------------------------------------------------------
+
+Ztautau/mc-tester.root-pispectr-RCtau
+-------------------------------------
+
+PROCESS:
+ collision: ee@91.17GeV
+ generator: pythia, WeakSingleBoson:ffbar2gmZ
+ tauola, decay mode: 3 (tau => pi nu_tau)
+ events: 10M
+
+PHOTOS:
+ first: no
+ second: no
+ exp: yes
+ cutoff: 0.01/200
+ radiative corrections in tau decays only
+
+MCTESTER:
+ particle: 23 (Z0)
+ mass power: 2
+ mass scale: on
+ histograms: 120 bins; [0 , 1.1]
+
+ analysis: ZtautauAnalysis.C
+ E_test: 0.01/91.187 (10MeV), max 2 photons
+
+#######################################################################
+PHYSICS ASPECTS OF TESTS.
+In the most documented cases mentioned root files are directly
+originating from software environments of listed below publications
+or their web pages. In other
+cases publications are less directly connected to the collected tests.
+Sometimes it is just the question of changed input parameter or Born level
+generatiors. Typycally in old days we had monohromatic Z or W decay samples.
+Now it is usually combined with lineshape spread of LHC generators
+(limited or not to M_Z+/-3 GeV).
+
+In some cases old papers are mentioned, but tests are just reproducing
+the most significant aspects of that works only. No old benchmar distributions
+were available in an appropriate form.
+
+Let us now review the list of tests from directory PHOTOS/examples/testing
+
+#1# Zee, Zmumu, ZmumuNLO:
+Main paper: P. Golonka, Z. Was Next to Leading Logarithms and the PHOTOS Monte Carlo.
+Eur.Phys.J. C50 (2007) 53-62 e-Print: hep-ph/0604232
+http://mc-tester.web.cern.ch/MC-TESTER/PHOTOS-MCTESTER/
+
+ROOT FILES cr4eated by other programs than PHOTOS:
+mc-tester.root-Zmumu-CEEX1-100M-nosym-1GeV
+mc-tester.root-Zmumu-CEEX2-100M-nosym-1GeV
+mc-tester.root-Zee-kkmc-sym-1GeV
+powinien byc jeszcze jeden dla 1-photon-a
+
+ROOT FILES created by PHOTOS but in F77 env:
+mc-tester.root-Zee-photos-100M-sym-10MeV
+mc-tester.root-Zee-photos-10M-nosym-10MeV
+
+
+#2# Wenu, WmunuNLO, Wmunu
+G. Nanava et al. Eur.Phys.J. C70 (2010) 673-688 arXiv:0906.4052 [hep-ph]
+http://mc-tester.web.cern.ch/MC-TESTER/PHOTOS-MCTESTER/
+
+
+#3# ScalNLO
+G. Nanava, Z. Was, Scalar QED, NLO and PHOTOS Monte Carlo.
+Eur.Phys.J. C51 (2007) 569-583 hep-ph/0607019
+
+
+#4# Htautau
+A. Andonov Comparison of SANC with KORALZ and PHOTOS.
+Acta Phys.Polon. B34 (2003) 2665-2672,: hep-ph/0212209
+
+#5# Ztautau
+F. Sanchez, Z. Was Phys.Lett. B351 (1995) 562-568
+P.H. Eberhard et al. The Tau Polarization Measurement At Lep. CERN-EP-89-129
+transverse spin effects
+
+Tests with CEEX1 and CEEX2 for full tau decay spin possible
+if request from experiments will arise.
+
+F. Boillot, Z. Was UNCERTAINTIES IN tau POLARIZATION MEASUREMENT AT SLC/LEP
+AND QED/ELECTROWEAK RADIATIVE CORRECTIONS. Z.Phys. C43 (1989) 109
+longitudinal spin effects.
+
+#6# ttbar
+
+E. Richter-Was Hard Bremsstrahlung photons in the t anti-t
+production and decay: A background for the intermediate Higgs search.
+Z.Phys. C61 (1994) 323-340
+
+
--- /dev/null
+This README contains list of changes required to compare against benchmark
+files located in subdirectories of "examples/testing". All tests require that
+appropriate NAME_BENCHMARK provided at the top of the Makefile is uncommented.
+
+Description of changes attributed to particular benchmark root files
+listed below:
+
+1) Change to be introduced in Makefile of testing sub-directory:
+
+ ONE_PHOTON_MODE = 0 ( or 1 )
+ SPECIAL_MODE = 0 ( or $(NLO_MODE) )
+
+
+
+
+2) Require change in SETUP.C:
+
+ CUTOFF
+
+ Line: Setup::UTA_params[0]=0.01/<M>; //10 MeV
+ Changed to: Setup::UTA_params[0]= <NEW_VALUE> ;
+
+ ( <M>: either 80.403 or 91.187 depending if W or Z decay is monitored )
+
+############################ Basic benchmark files ###########################
+ One (or more) of the changes listed above may be needed. If nothing is
+ listed next to benchmark file name, then the file can be compared with
+ the results of run without any initialization changes
+##############################################################################
+
+Htautau/mc-tester.benchmark.Htautau.root
+ScalarNLO/mc-tester.root-1000M-NLO-EXP
+ScalarNLO/mc-tester.root-1000M-NLO-1-phot ONE_PHOTON_MODE = 1
+ScalarNLO/mc-tester.root-1000M-LO-EXP SPECIAL_MODE = 0
+ScalarNLO/mc-tester.root-1000M-LO-1-phot ONE_PHOTON_MODE = 1
+ SPECIAL_MODE = 0
+ttbar/mc-tester.root-ttbar-10M
+Wenu/mc-tester.root-Wenu-photos-100M-sym-10MeV
+Wmunu/mc-tester.root-Wmunu-photos-100M-sym-10MeV
+WmunuNLO/mc-tester.root-Wmunu-photos-100M-nosym-10MeV-1-phot-NLO
+WmunuNLO/mc-tester.root-Wmunu-photos-100M-sym-10MeV SPECIAL_MODE = 0
+ ONE_PHOTON_MODE = 0
+WmunuNLO/mc-tester.root-Wmunu-photos-100M-1-phot-NLO CUTOFF = 0.005
+WmunuNLO/mc-tester.root-Wmunu-photos-100M-1-phot CUTOFF = 0.005
+Zee/mc-tester.root-Zee-10M-nosym-10MeV
+Zee/mc-tester.root-Zee-photos-100M-sym-10MeV
+Zee/mc-tester.root-Zee-kkmc-sym-1GeV CUTOFF = 1./91.187
+Zmumu/mc-tester.root-Zmumu-photos-F77-100M-sym-10MeV
+Zmumu/mc-tester.root-Zmumu-kkmc-F77-10M-sym-1GeV CUTOFF = 1./91.187
+Zmumu/mc-tester.root-Zmumu-CEEX1-100M-nosym-1GeV CUTOFF = 1./91.187
+Zmumu/mc-tester.root-Zmumu-CEEX2-100M-nosym-1GeV CUTOFF = 1./91.187
+ZmumuNLO/mc-tester.root-Zmumu-photos-F77-100M-sym-10MeV
+ZmumuNLO/mc-tester.root-Zmumu-NLO-100M
+ZmumuNLO/mc-tester.root-Zmumu-1-phot-NLO-100M ONE_PHOTON_MODE = 1
+ZmumuNLO/mc-tester.root-Zmumu-LO-100M SPECIAL_MODE = 0
+ZmumuNLO/mc-tester.root-Zmumu-1-phot-LO-100M ONE_PHOTON_MODE = 1
+ SPECIAL_MODE = 0
+ZmumuNLO/mc-tester.root-Zmumu-CEEX1-100M-nosym-1GeV CUTOFF = 1./91.187
+ZmumuNLO/mc-tester.root-Zmumu-CEEX2-100M-nosym-1GeV CUTOFF = 1./91.187
+ZmumuNLO/mc-tester.root-Zmumu-kkmc-F77-10M-sym-1GeV CUTOFF = 1./91.187
+Ztautau/mc-tester.root-pispectr-RCall
+
+########################## Further benchmark files ###########################
+ Require more advanced changes
+##############################################################################
+
+1)
+The following two tests reqire recompilation of "photos_test.c"
+with additional options added:
+
+Ztautau/mc-tester.root-pispectr-RCno
+------------------------------------
+
+// Suppress processing of whole Z0 decay
+Photos::suppressBremForBranch(0,23);
+
+Ztautau/mc-tester.root-pispectr-RCtau
+-------------------------------------
+
+// Suppress processing of whole Z0 decay
+// leaving only the Z0 -> tau+ tau- decay and whole branch starting
+// from tau- to be processed
+Photos::suppressBremForBranch(0,23);
+Photos::forceBremForDecay (2,23,15,-15);
+Photos::forceBremForBranch(0,15);
+
+2)
+The following tests require similar steps to be performed in their
+repsective directories:
+
+Wmunu/mc-tester.root-Wmunu-photos-F77-100M-1-phot-5MeV
+WmunuNLO/mc-tester.root-Wmunu-photos-F77-100M-1-phot-5MeV-NLO
+Zmumu/mc-tester.root-Zmumu-photos-F77-1-phot-EXP-1GeV
+ZmumuNLO/mc-tester.root-Zmumu-koralz-100M-1-phot-1GeV-NLO
+ZmumuNLO/mc-tester.root-Zmumu-photos-F77-100M-1-phot-1GeV-NLO
+ZmumuNLO/mc-tester.root-Zmumu-kkmc-F77-100M-nosym-1GeV-NLO
+-------------------------------------------------------------
+
+In Makefile, uncomment line:
+
+#CONF=pythia_W_resonance_peak.conf (or 'Z')
+ONE_PHOTON_MODE = 1
+
+In SETUP.C, uncomment block of code provided at the end of the file.
+
+ZmumuNLO/mc-tester.root-Zmumu-kkmc-F77-100M-nosym-1GeV-NLO
+-------------------------------------------------------------
+
+Same as with above examples, but ONE_PHOTON_MODE = 0
+
+Note that for this example, second set of options located
+at the end of ZmumuNLO/SETUP.C must be used
+
--- /dev/null
+####################################################################
+# README-plots #
+# ------------ #
+# #
+# Instructions on how to recreate the plots used in #
+# our program documentation (IFJPAN-IV-2010-6) #
+####################################################################
+
+####################################################################
+# Figs 2a, 2b: pi- energy spectrum with bremsstrahlung on/off #
+####################################################################
+
+FAST, SIMPLE METHOD:
+(No generation, use of benchmark root files stored in tar ball only)
+--------------------------------------------------------------------
+
+To create these plots you need to turn off the logarithmic scale
+and compare the benchmark files. To do so:
+
+> Turn off logarithmic scale:
+ - enter the 'examples/testing/Ztautau' directory of PHOTOS
+ - open 'SETUP.C' in an editor
+ - turn "Setup::use_log_y" from true to false
+
+> Perform analysis:
+ - execute '../compare.sh mc-tester.root-pispectr-RCno mc-tester.root-pispectr-RCtau'
+ or '../compare.sh mc-tester.root-pispectr-RCno mc-tester.root-pispectr-RCall'
+ for left-hand plot and right-hand plot accordingly.
+
+The resulting booklet, 'tester.Htautau.pdf', will include the appropriate
+plot under the USER HISTOGRAMS section.
+
+COMPLETE, ADVANCED METHOD:
+(The root files for figures will be regenerated)
+--------------------------------------------------
+
+To create these plots you need to set up the generation parameters,
+create the appropriate .root files and compare them using
+MC-TESTER. To do so:
+
+> For both plots; generate a file without PHOTOS processing:
+ - change the generation setup:
+ - enter the 'examples/testing' directory of PHOTOS
+ - open 'photos_tauola_test.c'
+ - after 'Photos::initialize();' add line 'Photos::suppressBremForBranch(0,23);'
+ - execute 'make' in this directory
+ - enter the 'examples/testing/Ztautau' directory
+ - clean any previous generation using 'make clobber'
+ - execute 'make mc-tester.Ztautau.root'
+ - rename 'mc-tester.Ztautau.root' to 'Ztautau.RCno.root'
+
+> For the left-hand plot; generate a file with PHOTOS processing
+ 23 -> 15 -15 decays only:
+ - follow all of the instructions for the first file again,
+ but in addition to: 'Photos::suppressBremForBranch(0,23);'
+ add line 'Photos::forceBremForDecay (2,23,15,-15);'
+ as well.
+ - rename 'mc-tester.Ztautau.root' (created as described above)
+ to 'Ztautau.RCtau.root'
+
+> For the right-hand plot; generate a file with PHOTOS processing
+ 23 -> 15 -15 and the tau decay branchs:
+ - follow all of the instructions for the first file again,
+ but in addition to: 'Photos::suppressBremForBranch(0,23);'
+ add line 'Photos::forceBremForDecay (2,23,15,-15);'
+ and line 'Photos::forceBremForBranch(0,15);'
+ as well.
+ -- OR --
+ revert any changes made to 'photos_tauola_test.c'
+ (the default setup ensures that the whole event will be processed)
+ - rename 'mc-tester.Ztautau.root' (created as described above)
+ to 'Ztautau.RCall.root'
+
+> Perform the analysis:
+ - enter the 'examples/testing/Ztautau' directory
+ - execute '../compare.sh Ztautau.RCno.root Ztautau.RCtau.root'
+ or '../compare.sh Ztautau.RCno.root Ztautau.RCall.root'
+ for the left-hand plot and right-hand plot accordingly.
+ (remember that MCTESTERLOCATION must be set)
+
+The resulting booklet, 'tester.pdf', will include the appropriate
+plot in its USER_HISTOGRAM section.
+
+####################################################################
+# Figs 3a, 3b: acoplanarity distribution in H -> tau+ tau- decays #
+####################################################################
+
+To create these plots you need to use the default options and
+switch the samples with and without photons so that they are
+compared on the same plot. To do so:
+
+> Generate the first file:
+ - enter the 'examples/testing/Htautau' directory
+ - clean any previous generation using 'make clobber'
+ - execute 'make mc-tester.Htautau.root'
+ - rename 'mc-tester.Htautau.root' to 'Htautau.on.root'
+
+> Generate the second file:
+ - advanced users may want to use ROOT to edit the first
+ file, plotting the two histograms for cases without
+ photons over the two histograms for cases with photons
+ with energy over 1GeV
+ -- OR --
+ - switch plots in the user analysis code and generate a second file:
+ - enter the 'examples/testing/Htautau' directory
+ - open 'RhoRhoPHOTOSUserTreeAnalysis.C'
+ - search for lines 'if(photon_e==0)'
+ and 'if(photon_e>1.0)'
+ and switch their places
+ - follow all of the instructions for the first file again,
+ copying the resulting file to 'Htautau.off.root'.
+ (For this generation, the number of events can be changed
+ in 'examples/testing/test.inc' to 1/10 of the previous value)
+
+> Compare:
+ - execute '../compare.sh Htautau.off.root Htautau.on.root'
+
+The resulting booklet, 'tester.pdf', will include the appropriate
+plot in its USER_HISTOGRAM section - histograms regarding photons
+with energy over 1 GeV.
+
+####################################################################
+# Fig 4: e+ e- mass distribution in Z -> e+ e- decays #
+####################################################################
+
+To create this plot you need to use the default options and
+generate samples with and without PHOTOS.
+
+> Generate the first file:
+ - enter the 'examples/testing/Zee' directory
+ - clean any previous generation using 'make clobber'
+ - execute 'make mc-tester.Zee.root'
+ - copy 'mc-tester.Zee.root' to 'Zee.photos.on.root'
+
+> Generate the second file:
+ - turn off photos:
+ - enter the 'examples/testing' directory
+ - open 'photos_test.c'
+ - comment out the lines 'PhotosHepMCEvent evt(HepMCEvt);'
+ and 'evt.process();'
+ - execute 'make' in this directory
+ - follow all of the instructions for the first file again,
+ copying the resulting file to 'Zee.photos.off.root'
+
+> Compare:
+ - execute '../compare.sh Zee.photos.off.root Zee.photos.on.root'
+
+The resulting booklet, 'tester.pdf', will include the appropriate
+plot in its USER_HISTOGRAM section
+
+####################################################################
+# Figs 5a, 5b: gamma gamma mass distribution in Z -> mu mu decays #
+####################################################################
+
+To create these plots you need to use the benchmark files. Files used
+for CEEX1 and CEEX2 have been generated using an external program and
+cannot be reproduced using the PHOTOS C++ interface. These files need
+to be compared against the default setup for Zmumu. To do so:
+
+> For the left-hand plot:
+ - enter the 'examples/testing/Zmumu' directory
+ - execute '../compare.sh mc-tester.root-Zmumu-CEEX2-100M-nosym-1GeV mc-tester.root-Zmumu-CEEX1-100M-nosym-1GeV'
+> For the right-hand plot:
+ - enter the 'examples/testing/Zmumu' directory
+ - clean any previous generation using 'make clobber'
+ - execute 'make mc-tester.Htautau.root'
+ - execute '../compare.sh mc-tester.root-Zmumu-CEEX2-100M-nosym-1GeV mc-tester.Htautau.root'
+
+The resulting booklet, 'tester.pdf', will contain the appropriate
+plots under the 'Z -> gamma gamma mu mu' decay channel section.
+Note that PHOTOS does not use photon symmetrization as compared
+to the benchmark files.
--- /dev/null
+############## Make tests ###########################
+include ../test.inc
+
+NAME_BENCHMARK=mc-tester.root-1000M-NLO-EXP
+# Or use other benchmark reference files:
+#NAME_BENCHMARK=mc-tester.root-1000M-LO-EXP
+#NAME_BENCHMARK=mc-tester.root-1000M-LO-1-phot
+#NAME_BENCHMARK=mc-tester.root-1000M-NLO-1-phot
+
+CONF=pythia_Z.conf
+NAME=ScalarNLO
+
+PROGRAM=$(PHOTOS_TAUOLA)
+PYTHIA_MODE=$(Z_MU_MODE)
+TAUOLA_MODE=$(K-STAR_MODE)
+
+ONE_PHOTON_MODE= 0
+USE_NLO = 1
+
+tester.$(NAME).pdf: mc-tester.$(NAME).root
+ $(COMPARE) $(NAME_BENCHMARK) mc-tester.$(NAME).root
+ mv tester.pdf tester.$(NAME).pdf
+ $(VIEWER) tester.$(NAME).pdf &
+
+mc-tester.$(NAME).root: $(PROGRAM) $(CONF)
+ $(PROGRAM) $(CONF) $(PYTHIA_MODE) $(EVENTS) $(TAUOLA_MODE) $(ONE_PHOTON_MODE) $(USE_NLO)
+ mv mc-tester.root mc-tester.$(NAME).root
+
+clean:
+ rm -rf *~ booklet* tester* mc-results*
+ rm -rf MC-TESTER.DAT *_C.so *_C.d
+
+clobber: clean
+ rm -f mc-tester.$(NAME).root
--- /dev/null
+{
+ if(!Setup::stage == 0) { //generation step configurables
+
+ Setup::decay_particle=310;
+ Setup::debug_mode=false; //verbose output from MC-Tester?
+ // Setup histograms
+ int n_bins=120;
+ double default_min_bin=0.0;
+ double default_max_bin=1.1;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+
+ Setup::mass_scale_on=true;
+ Setup::mass_power=2;
+
+ // Description
+ Setup::gen1_desc_1=" Pythia + Tauola + Photos Interface Test";
+ Setup::gen1_desc_2=" scalar to 2 scalars. Photons filtered below 10 MeV";
+ Setup::gen1_desc_3=" No photon symmetrization";
+
+ //Filter photons
+ // Setup::UserTreeAnalysis = "ZtautauAnalysis";
+ Setup::UserTreeAnalysis = "UserTreeAnalysis";
+ Setup::UTA_params[0]=0.01/0.49; //10 MeV
+ // p_t threshold as fraction of particle energy in
+ // mothers frame
+ Setup::UTA_params[1]=2;
+ Setup::UTA_params[2]=0.0;
+ Setup::UTA_params[3]=1.0;
+ Setup::UTA_params[4]=22;
+
+ Setup::UTA_nparams=5;
+
+ Setup::SuppressDecay(22);
+ Setup::SuppressDecay(23);
+ Setup::SuppressDecay(-15);
+ //Setup::SuppressDecay(11);
+ //Setup::SuppressDecay(-11);
+ }
+ else //Setup for analysis step
+ {
+ Setup::user_analysis=MCTest01;
+ Setup::use_log_y=true;
+ }
+};
--- /dev/null
+WeakSingleBoson:ffbar2gmZ = on
+23:onMode = off
+23:onIfAny = 15
+15:mayDecay = off
--- /dev/null
+############## Make tests ###########################
+include ../test.inc
+
+NAME_BENCHMARK=mc-tester.root-Wenu-photos-100M-sym-10MeV
+
+
+CONF=pythia_W.conf
+NAME=Wenu
+
+PROGRAM=$(PHOTOS_ONLY)
+PYTHIA_MODE=$(DEFAULT_MODE)
+
+tester.$(NAME).pdf: mc-tester.$(NAME).root
+ $(COMPARE) $(NAME_BENCHMARK) mc-tester.$(NAME).root
+ mv tester.pdf tester.$(NAME).pdf
+ $(VIEWER) tester.$(NAME).pdf &
+
+mc-tester.$(NAME).root: $(PROGRAM) $(CONF)
+ $(PROGRAM) $(CONF) $(PYTHIA_MODE) $(EVENTS)
+ mv mc-tester.root mc-tester.$(NAME).root
+
+clean:
+ rm -rf *~ booklet* tester* mc-results*
+ rm -rf MC-TESTER.DAT *_C.so *_C.d
+
+clobber: clean
+ rm -f mc-tester.$(NAME).root
--- /dev/null
+{
+
+ if (!Setup::stage == 0) { //generation step configurables
+
+ Setup::decay_particle=24;
+ Setup::debug_mode=false;
+
+ // Setup histograms
+ int n_bins=120;
+ double default_min_bin=0.0;
+ double default_max_bin=1.1;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=true;
+
+
+ // Description
+ Setup::gen1_desc_1=" Pythia + Photos Interface Test";
+ Setup::gen1_desc_2=" $W^+ \\rightarrow e^+ nu$. Photons filtered below 10 MeV";
+ Setup::gen1_desc_3=" No photon symmetrization";
+
+ //Filter photons
+ Setup::UserTreeAnalysis = "UserTreeAnalysis";
+ Setup::UTA_params[0]=0.01/80.398; //10 MeV
+ // p_t threshold as fraction of particle energy in
+ // mothers frame
+ Setup::UTA_params[1]=2;
+ Setup::UTA_params[2]=0.0;
+ Setup::UTA_params[3]=1.0;
+ Setup::UTA_params[4]=22;
+
+ Setup::UTA_nparams=5;
+
+ Setup::SuppressDecay(22);
+ Setup::SuppressDecay(24);
+
+ }
+ else{ //Setup for analysis step
+ Setup::user_analysis=MCTest01;
+ //Setup::rebin_factor=4; // to reduce no of bins by rebin_factor
+ Setup::use_log_y=true;
+ }
+};
--- /dev/null
+WeakDoubleBoson:ffbar2WW = on
+24:onMode = off
+24:onIfAny = 11
\ No newline at end of file
--- /dev/null
+############## Make tests ###########################
+include ../test.inc
+
+NAME_BENCHMARK=mc-tester.root-Wmunu-photos-100M-sym-10MeV
+# Or use other benchmark reference files:
+
+#WARNING! Comparison with this benchmark file requires:
+# - uncommenting few lines at the end of SETUP.C file
+# - usage of pythia_W_resonance_peak.conf -
+# comment out line 'CONF' below.
+#NAME_BENCHMARK=mc-tester.root-Wmunu-photos-F77-100M-1-phot-5MeV
+
+CONF=pythia_W.conf
+#CONF=pythia_W_resonance_peak.conf
+NAME=Wmunu
+
+PROGRAM=$(PHOTOS_ONLY)
+PYTHIA_MODE=$(DEFAULT_MODE)
+SPECIAL_MODE=0
+ONE_PHOTON_MODE=0
+
+tester.$(NAME).pdf: mc-tester.$(NAME).root
+ $(COMPARE) $(NAME_BENCHMARK) mc-tester.$(NAME).root
+ mv tester.pdf tester.$(NAME).pdf
+ $(VIEWER) tester.$(NAME).pdf &
+
+mc-tester.$(NAME).root: $(PROGRAM) $(CONF)
+ $(PROGRAM) $(CONF) $(PYTHIA_MODE) $(EVENTS) $(SPECIAL_MODE) $(ONE_PHOTON_MODE)
+ mv mc-tester.root mc-tester.$(NAME).root
+
+clean:
+ rm -rf *~ booklet* tester* mc-results*
+ rm -rf MC-TESTER.DAT *_C.so *_C.d
+
+clobber: clean
+ rm -f mc-tester.$(NAME).root
--- /dev/null
+{
+
+ if (!Setup::stage == 0) { //generation step configurables
+
+ Setup::decay_particle=24;
+ Setup::debug_mode=false;
+
+ // Setup histograms
+ int n_bins=120;
+ double default_min_bin=0.0;
+ double default_max_bin=1.1;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=true;
+
+
+ // Description
+ Setup::gen1_desc_1=" Pythia + Photos Interface Test";
+ Setup::gen1_desc_2=" $W^+ \\rightarrow \\mu^+ nu$. Photons filtered below 10 MeV";
+ Setup::gen1_desc_3=" No photon symmetrization";
+
+ //Filter photons
+ Setup::UserTreeAnalysis = "UserTreeAnalysis";
+ Setup::UTA_params[0]=0.01/80.403; //10 MeV
+ // p_t threshold as fraction of particle energy in
+ // mothers frame
+ Setup::UTA_params[1]=2;
+ Setup::UTA_params[2]=0.0;
+ Setup::UTA_params[3]=1.0;
+ Setup::UTA_params[4]=22;
+
+ Setup::UTA_nparams=5;
+
+ Setup::SuppressDecay(22);
+ Setup::SuppressDecay(24);
+
+ /**************************************************************************
+ Settings for old FORTRAN tests
+ Uncomment when generating comparison with these files
+ ***************************************************************************/
+/*
+ n_bins=120;
+ default_min_bin=0.0;
+ default_max_bin=100.0;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=false;
+ Setup::mass_power=1;
+
+ Setup::UTA_params[0]=0.005;
+*/
+ /**************************************************************************/
+ }
+ else{ //Setup for analysis step
+ Setup::user_analysis=MCTest01;
+ //Setup::rebin_factor=4; // to reduce no of bins by rebin_factor
+ Setup::use_log_y=true;
+ }
+};
--- /dev/null
+WeakDoubleBoson:ffbar2WW = on
+24:onMode = off
+24:onIfAny = 13
\ No newline at end of file
--- /dev/null
+WeakDoubleBoson:ffbar2WW = on
+24:onMode = off
+24:onIfAny = 13
+24:mWidth = 0
+24:m0 = 80.403
+24:mMin = 80.4029
+24:mMax = 80.4031
\ No newline at end of file
--- /dev/null
+############## Make tests ###########################
+include ../test.inc
+
+NAME_BENCHMARK=mc-tester.root-Wmunu-photos-100M-1-phot-NLO
+# Or use other benchmark reference files:
+#NAME_BENCHMARK=mc-tester.root-Wmunu-photos-100M-1-phot
+#NAME_BENCHMARK=mc-tester.root-Wmunu-photos-100M-nosym-10MeV-1-phot-NLO
+#NAME_BENCHMARK=mc-tester.root-Wmunu-photos-100M-sym-10MeV
+
+#WARNING! Comparison with this benchmark file requires:
+# - uncommenting few lines at the end of SETUP.C file
+# - usage of pythia_W_resonance_peak.conf -
+# comment out line 'CONF' below.
+#NAME_BENCHMARK=mc-tester.root-Wmunu-photos-F77-100M-1-phot-5MeV-NLO
+
+CONF=pythia_W.conf
+#CONF=pythia_W_resonance_peak.conf
+NAME=WmunuNLO
+
+PROGRAM=$(PHOTOS_ONLY)
+PYTHIA_MODE=$(DEFAULT_MODE)
+SPECIAL_MODE=$(NLO_MODE)
+ONE_PHOTON_MODE=1
+
+tester.$(NAME).pdf: mc-tester.$(NAME).root
+ $(COMPARE) $(NAME_BENCHMARK) mc-tester.$(NAME).root
+ mv tester.pdf tester.$(NAME).pdf
+ $(VIEWER) tester.$(NAME).pdf &
+
+mc-tester.$(NAME).root: $(PROGRAM) $(CONF)
+ $(PROGRAM) $(CONF) $(PYTHIA_MODE) $(EVENTS) $(SPECIAL_MODE) $(ONE_PHOTON_MODE)
+ mv mc-tester.root mc-tester.$(NAME).root
+
+clean:
+ rm -rf *~ booklet* tester* mc-results*
+ rm -rf MC-TESTER.DAT *_C.so *_C.d
+
+clobber: clean
+ rm -f mc-tester.$(NAME).root
--- /dev/null
+{
+
+ if (!Setup::stage == 0) { //generation step configurables
+
+ Setup::decay_particle=24;
+ Setup::debug_mode=false;
+
+ // Setup histograms
+ int n_bins=120;
+ double default_min_bin=0.0;
+ double default_max_bin=1.1;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=true;
+
+
+ // Description
+ Setup::gen1_desc_1=" Pythia + Photos Interface Test";
+ Setup::gen1_desc_2=" $W^+ \\rightarrow \\mu^+ nu$. Photons filtered below 10 MeV";
+ Setup::gen1_desc_3=" No photon symmetrization";
+
+ //Filter photons
+ Setup::UserTreeAnalysis = "UserTreeAnalysis";
+ Setup::UTA_params[0]=0.005;
+ // p_t threshold as fraction of particle energy in
+ // mothers frame
+ Setup::UTA_params[1]=2;
+ Setup::UTA_params[2]=0.0;
+ Setup::UTA_params[3]=1.0;
+ Setup::UTA_params[4]=22;
+
+ Setup::UTA_nparams=5;
+
+ Setup::SuppressDecay(22);
+ Setup::SuppressDecay(24);
+
+ /**************************************************************************
+ Settings for old FORTRAN tests
+ Uncomment when generating comparison with these files
+ ***************************************************************************/
+/*
+ n_bins=120;
+ default_min_bin=0.0;
+ default_max_bin=100.0;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=false;
+ Setup::mass_power=1;
+
+ Setup::UTA_params[0]=0.005;
+*/
+ /**************************************************************************/
+ }
+ else{ //Setup for analysis step
+ Setup::user_analysis=MCTest01;
+ //Setup::rebin_factor=4; // to reduce no of bins by rebin_factor
+ Setup::use_log_y=true;
+ }
+};
--- /dev/null
+WeakDoubleBoson:ffbar2WW = on
+24:onMode = off
+24:onIfAny = 13
\ No newline at end of file
--- /dev/null
+WeakDoubleBoson:ffbar2WW = on
+24:onMode = off
+24:onIfAny = 13
+24:mWidth = 0
+24:m0 = 80.403
+24:mMin = 80.4029
+24:mMax = 80.4031
\ No newline at end of file
--- /dev/null
+############## Make tests ###########################
+include ../test.inc
+
+NAME_BENCHMARK=mc-tester.root-Zee-10M-nosym-10MeV
+# Or use other benchmarks reference files:
+# NAME_BENCHMARK=mc-tester.root-Zee-kkmc-sym-1GeV
+# NAME_BENCHMARK=mc-tester.root-Zee-photos-100M-sym-10MeV
+
+CONF=pythia_Z.conf
+NAME=Zee
+
+PROGRAM=$(PHOTOS_ONLY)
+PYTHIA_MODE=$(PP_MODE)
+
+tester.$(NAME).pdf: mc-tester.$(NAME).root
+ $(COMPARE) $(NAME_BENCHMARK) mc-tester.$(NAME).root
+ mv tester.pdf tester.$(NAME).pdf
+ $(VIEWER) tester.$(NAME).pdf &
+ @echo
+ @echo "Error messages redirected to /dev/null due to large output from Pythia"
+ @echo
+
+mc-tester.$(NAME).root: $(PROGRAM) $(CONF)
+ $(PROGRAM) $(CONF) $(PYTHIA_MODE) $(EVENTS) 2>/dev/null
+ mv mc-tester.root mc-tester.$(NAME).root
+
+clean:
+ rm -rf *~ booklet* tester* mc-results*
+ rm -rf MC-TESTER.DAT *_C.so *_C.d
+
+clobber: clean
+ rm -f mc-tester.$(NAME).root
--- /dev/null
+{
+
+ if (!Setup::stage == 0) { //generation step configurables
+
+ Setup::decay_particle=23;
+ Setup::debug_mode=false;
+
+ // Setup histograms
+ int n_bins=120;
+ double default_min_bin=0.0;
+ double default_max_bin=1.1;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=true;
+
+ // Description
+ Setup::gen1_desc_1=" Pythia + Photos Interface Test, Low virtuality Z dominate";
+ Setup::gen1_desc_2=" $Z \\rightarrow e^+ e^-$. Photons filtered below 10 MeV";
+ Setup::gen1_desc_3=" No photon symmetrization";
+
+ //Filter photons
+ Setup::UserTreeAnalysis = "ZeeAnalysis";
+ Setup::UTA_params[0]=0.01/91.187; //10 MeV
+ // p_t threshold as fraction of particle energy in
+ // mothers frame
+ Setup::UTA_params[1]=2;
+ Setup::UTA_params[2]=0.0;
+ Setup::UTA_params[3]=1.0;
+ Setup::UTA_params[4]=22;
+
+ Setup::UTA_nparams=5;
+
+ Setup::SuppressDecay(22);
+ Setup::SuppressDecay(23);
+ }
+ else{ //Setup for analysis step
+ Setup::user_analysis=MCTest01;
+ //Setup::rebin_factor=4; // to reduce no of bins by rebin_factor
+ Setup::use_log_y=true;
+ }
+};
--- /dev/null
+//#include "UserTreeAnalysis.H" // remove if copied to user working directory
+#include <stdio.h>
+#include <assert.h>
+#include <math.h>
+#include "MC4Vector.H"
+#include "HEPParticle.H"
+#include "TH1.h"
+#include "Setup.H"
+#include "TObjArray.h"
+#include "TMath.h"
+#define PI 3.141592653
+
+inline bool ifSofty(int Id,int nparams, double *params){
+ if (nparams<5 && Id==22) return true; // to remove photons only
+ for (int i=nparams-1; i>3; i--)
+ if (Id==params[i]) return true; // to remove all what is in params from nparams down to 4
+ return false;
+}
+
+// very similar to MC_FillUserHistogram from Generate.cxx
+inline void fillUserHisto(char *name,double val, double weight=1.0,
+ double min=Setup::bin_min[0][0],
+ double max=Setup::bin_max[0][0]){
+
+ TH1D *h=(TH1D*)(Setup::user_histograms->FindObject(name));
+ if(!h){
+ h=new TH1D(name,name,Setup::nbins[0][0],min,max);
+ if(!h) return;
+ Setup::user_histograms->Add(h);
+ // printf("user histogram created %s\n", name);
+}
+ h->Fill(val,weight);
+
+}
+double angle(double X, double Y){
+
+
+ double an=0.0;
+ double R=sqrt(X*X+Y*Y);
+ // if(R<pow(10,-20)) printf(" angle this time X %f\n", 10000*X);
+ if(R<pow(10,-20)) return an;
+
+ if(TMath::Abs(X)/R<0.8)
+ {
+ an=acos(X/R);
+ if(Y<0 && an>0) an=-an;
+ if(Y>0 && an<0) an=-an;
+ }
+ else
+ {
+ an=asin(Y/R);
+ if(X<0 && an>=0.) an=PI-an;
+ else if(X<0.) an=-PI-an;
+
+ }
+ return an;
+}
+
+int counter=0;
+
+int ZeeAnalysis(HEPParticle *mother,HEPParticleList *stableDaughters, int nparams, double *params)
+{
+ // THIS IS EXAMPLE of userTreeAnalysis. It acts on list of particle X (under our MC-test) final
+ // daughters. Of course in real life many options may need to be introduced by the user.
+ // PARAMETERS:
+ // params[0] threshold on Energy (or p_T) of particle expressed as a fraction of mother's
+ // Energy (or p_T) in mother's frame. If not specified - default is 0.05
+ // Note that setting it to zero is possible.
+ // params[1] maximum number of left soft-suspected particles.
+ // 0: (default) all listed particles are removed, even if hard
+ // 1: 2: one two etc removable particles are kept (at most)
+ // -1: this option is off, all hard particles stay.
+ // params[2] control tag on discriminating particles,
+ // 0: (default) Energy in decaying particle rest frame
+ // 1: Energy in lab frame
+ // 2: p_T with respect to beam direction in lab frame.
+ // params[3] type of action to be applied on removed daughters
+ // 0: (default) nothing is done, they are lost
+ // 1: algorithm as in studies on PHOTOS is used, see papers P. Golonka and Z. Was.
+ // params[4] from this paramter on PDG id-s of particles to be removed can be added.
+ // Default is that only photons are removed.
+ // To get to origin of our particle (mother) one need to go after UserEventAnalysis,
+ // instructive example will be given later.
+ assert(mother!=0);
+ assert(stableDaughters!=0);
+
+
+ double threshold=0.05, leftmax=0.0, selector=0.0, actLost=0.0;
+ if (nparams>0 && params==0) return -1;
+ if (nparams>0) threshold=params[0];
+ if (nparams>1) leftmax =params[1];
+ if (nparams>2) selector =params[2];
+ if (nparams>3) actLost =params[3];
+
+
+ HEPParticleList *lostDaughters=new HEPParticleList;
+ double pt_limit=threshold*mother->GetM();
+
+ HEPParticleListIterator daughters (*stableDaughters);
+ int nphot=0;
+ double ephot=pow(10,22);
+ bool redo=false;
+ for (HEPParticle *part=daughters.first(); part!=0; (redo)? part=part:part=daughters.next() ) {
+ if(redo) redo=false;
+ MC4Vector d4(part->GetE(),part->GetPx(),part->GetPy(),part->GetPz(),part->GetM());
+ // boost to mother's frame:
+ d4.Boost(mother->GetPx(),mother->GetPy(),mother->GetPz(),mother->GetE(),mother->GetM());
+
+
+
+ double p_t=d4.GetX0(); // default
+ switch ((int) selector)
+ {
+ case 1: p_t=part->GetE(); break;
+ case 2: p_t=d4.Xt(); break;
+ }
+
+
+ if(ifSofty(part->GetPDGId(),nparams,params)) nphot++;
+ if ( ifSofty(part->GetPDGId(),nparams,params) && p_t < pt_limit) {
+ // printf("Odrzucamy! %i\n",count++);
+ nphot=0;
+ lostDaughters->push_back(part);
+ stableDaughters->remove(part);
+ part=daughters.first();
+ redo=true;
+ continue;
+ }
+ if( ifSofty(part->GetPDGId(),nparams,params) && ephot>p_t) ephot=p_t;
+ }
+ while(nphot>(int) leftmax)
+ {
+ double ephot1=pow(10,22);
+ redo=false;
+ for (HEPParticle *part=daughters.first(); part!=0; (redo)? part=part:part=daughters.next() ) {
+ if(redo) redo=false;
+ MC4Vector d4(part->GetE(),part->GetPx(),part->GetPy(),part->GetPz(),part->GetM());
+ // boost to mother's frame:
+ d4.Boost(mother->GetPx(),mother->GetPy(),mother->GetPz(),mother->GetE(),mother->GetM());
+
+
+ double p_t=d4.GetX0(); // default
+ switch ((int) selector)
+ {
+ case 1: p_t=part->GetE(); break;
+ case 2: p_t=d4.Xt(); break;
+ }
+
+
+ if ( ifSofty(part->GetPDGId(),nparams,params) && p_t == ephot) {
+
+ nphot--;
+ lostDaughters->push_back(part);
+ stableDaughters->remove(part);
+ ephot1=pow(10,22);
+ part=daughters.first();
+ redo=true;
+ continue;
+ }
+ if( ifSofty(part->GetPDGId(),nparams,params) && ephot1>p_t) ephot1=p_t;
+ }
+ ephot=ephot1;
+
+ }
+
+ // ##############################################################
+ // here functionality of removig some daughters is finished
+ // now we reconsider what to do with them
+ // ##############################################################
+ // delete lostDaughters;
+ // return 1;
+
+
+ // ##############################################################
+ // Now: What to do with lost daughters?
+ // ##############################################################
+ // lostDaughters->ls();
+ int version=(int) actLost;
+
+ switch(version)
+ {
+ case 1: // add lost to charged
+ {
+ HEPParticleListIterator lost (*lostDaughters);
+ for (HEPParticle *lostpart=lost.first(); lostpart!=0; lostpart=lost.next() ) {
+ HEPParticle* Best=0;
+ double searchvirt=pow(10.0,22);
+ MC4Vector VV;
+ for( HEPParticle *part=daughters.first(); part!=0; part=daughters.next() ){
+ if(part->GetCharge()==0) continue;
+ VV=lostpart->GetP4()+part->GetP4();
+ VV.AdjustM();
+ if (VV.GetM()<searchvirt) {searchvirt=VV.GetM(); Best=part;}
+ }
+ if(Best) {
+ Best->SetPx(Best->GetPx()+lostpart->GetPx());
+ Best->SetPy(Best->GetPy()+lostpart->GetPy());
+ Best->SetPz(Best->GetPz()+lostpart->GetPz());
+ Best->SetE (Best->GetE ()+lostpart->GetE ());
+ }
+ }
+ break;
+ }
+ default: break; // do nothing
+ }
+
+ delete lostDaughters;
+
+
+ /*
+ Create e+e- inv. mass histogram
+ */
+ double px=0,py=0,pz=0,e=0;
+
+ //loop over all daughters
+ for(HEPParticle *part=daughters.first();part!=0;part=daughters.next())
+ {
+ if(abs(part->GetPDGId())!=11) continue;
+ //Sum e+ e- 4-vectors
+ px+=part->GetPx();
+ py+=part->GetPy();
+ pz+=part->GetPz();
+ e+=part->GetE();
+ }
+ double mass=sqrt(e*e-px*px-py*py-pz*pz);
+ char mm[] = "e+e-mass_distribution";
+ fillUserHisto(mm,mass,1.0,40.0,140.0);
+
+ //For ZeeAnalysis - other histograms are not needed
+ bool activateUserHist=false;
+ if(!activateUserHist) return 1;
+
+ // segmet of user defined histograms
+
+ double X=mother->GetPx(), Y=mother->GetPy(), Z=mother->GetPz();
+ // double E=mother->GetE(), MM=mother->GetM();
+
+
+ double pt=sqrt(X*X+Y*Y);
+ double eta=log((sqrt(pt*pt+Z*Z)+TMath::Abs(Z))/pt);
+ if(Z<0 && eta>0) eta=-eta;
+ if(Z>0 && eta<0) eta=-eta;
+ double phi=angle(X,Y);
+ char hist1[] = "mother-PT";
+ char hist2[] = "mother-eta";
+ char hist3[] = "mother-phi";
+ fillUserHisto(hist1,pt,1.0,0.0,100.0);
+ fillUserHisto(hist2,eta,1.0,-8.0,8.0);
+ fillUserHisto(hist3,phi,1.0,-PI,PI);
+ return 1;
+}
--- /dev/null
+WeakSingleBoson:ffbar2gmZ = on
+23:onMode = off
+23:onIfAny = 11
+Random:setSeed = on
+Random:seed = 123456
--- /dev/null
+############## Make tests ###########################
+include ../test.inc
+
+NAME_BENCHMARK=mc-tester.root-Zmumu-photos-F77-100M-sym-10MeV
+# Or use other benchmark reference files:
+# NAME_BENCHMARK=mc-tester.root-Zmumu-kkmc-F77-10M-sym-1GeV
+# NAME_BENCHMARK=mc-tester.root-Zmumu-CEEX1-100M-nosym-1GeV
+# NAME_BENCHMARK=mc-tester.root-Zmumu-CEEX2-100M-nosym-1GeV
+
+#WARNING! Comparison with this benchmark file requires:
+# - uncommenting few lines at the end of SETUP.C file
+# - usage of pythia_Z_resonance_peak.conf -
+# comment out line 'CONF' below.
+#NAME_BENCHMARK=mc-tester.root-Zmumu-photos-F77-1-phot-EXP-1GeV
+
+CONF=pythia_Z.conf
+#CONF=pythia_Z_resonance_peak.conf
+NAME=Zmumu
+
+PROGRAM=$(PHOTOS_ONLY)
+PYTHIA_MODE=$(Z_MU_MODE)
+SPECIAL_MODE=0
+ONE_PHOTON_MODE=0
+
+tester.$(NAME).pdf: mc-tester.$(NAME).root
+ $(COMPARE) $(NAME_BENCHMARK) mc-tester.$(NAME).root
+ mv tester.pdf tester.$(NAME).pdf
+ $(VIEWER) tester.$(NAME).pdf &
+
+mc-tester.$(NAME).root: $(PROGRAM) $(CONF)
+ $(PROGRAM) $(CONF) $(PYTHIA_MODE) $(EVENTS) $(SPECIAL_MODE) $(ONE_PHOTON_MODE)
+ mv mc-tester.root mc-tester.$(NAME).root
+
+clean:
+ rm -rf *~ booklet* tester* mc-results*
+ rm -rf MC-TESTER.DAT *_C.so *_C.d
+
+clobber: clean
+ rm -f mc-tester.$(NAME).root
--- /dev/null
+{
+
+ if (!Setup::stage == 0) { //generation step configurables
+
+ Setup::decay_particle=23;
+ Setup::debug_mode=false;
+
+ // Setup histograms
+ int n_bins=120;
+ double default_min_bin=0.0;
+ double default_max_bin=1.1;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=true;
+
+
+ // Description
+ Setup::gen1_desc_1=" Pythia + Photos Interface Test";
+ Setup::gen1_desc_2=" $Z \\rightarrow \\mu^+ \\mu^-$. Photons filtered below 10 MeV";
+ Setup::gen1_desc_3=" No photon symmetrization";
+
+ //Filter photons
+ Setup::UserTreeAnalysis = "UserTreeAnalysis";
+ Setup::UTA_params[0]=0.01/91.187; //10 MeV
+ // p_t threshold as fraction of particle energy in
+ // mothers frame
+ Setup::UTA_params[1]=2;
+ Setup::UTA_params[2]=0.0;
+ Setup::UTA_params[3]=1.0;
+ Setup::UTA_params[4]=22;
+
+ Setup::UTA_nparams=5;
+
+ Setup::SuppressDecay(22);
+ Setup::SuppressDecay(23);
+ /**************************************************************************
+ Settings for old FORTRAN tests
+ Uncomment when generating comparison with these files
+ ***************************************************************************/
+/*
+ n_bins=1200;
+ default_min_bin=0.0;
+ default_max_bin=120.0;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=false;
+ Setup::mass_power=1;
+
+ Setup::UserTreeAnalysis = "UserTreeAnalysis";
+ Setup::UTA_params[0]=1./91.187;
+ Setup::UTA_params[1]=1;
+*/
+ /**************************************************************************/
+
+ }
+ else{ //Setup for analysis step
+ Setup::user_analysis=MCTest01;
+ //Setup::rebin_factor=4; // to reduce no of bins by rebin_factor
+ Setup::use_log_y=true;
+ }
+};
--- /dev/null
+WeakSingleBoson:ffbar2gmZ = on
+23:onMode = off
+23:onIfAny = 13
\ No newline at end of file
--- /dev/null
+WeakSingleBoson:ffbar2gmZ = on
+23:onMode = off
+23:onIfAny = 13
+23:mWidth = 0
+23:m0 = 91.187
+23:mMin = 91.17
+23:mMax = 91.2
--- /dev/null
+############## Make tests ###########################
+include ../test.inc
+
+NAME_BENCHMARK=mc-tester.root-Zmumu-NLO-100M
+# Or use other benchmark reference files:
+#NAME_BENCHMARK=mc-tester.root-Zmumu-LO-100M
+#NAME_BENCHMARK=mc-tester.root-Zmumu-1-phot-NLO-100M
+#NAME_BENCHMARK=mc-tester.root-Zmumu-1-phot-LO-100M
+#NAME_BENCHMARK=mc-tester.root-Zmumu-CEEX1-100M-nosym-1GeV
+#NAME_BENCHMARK=mc-tester.root-Zmumu-CEEX2-100M-nosym-1GeV
+#NAME_BENCHMARK=mc-tester.root-Zmumu-kkmc-F77-10M-sym-1GeV
+#NAME_BENCHMARK=mc-tester.root-Zmumu-photos-F77-100M-sym-10MeV
+
+#WARNING! Comparison with this benchmark file requires:
+# - uncommenting few lines at the end of SETUP.C file
+# - usage of pythia_Z_resonance_peak.conf -
+# comment out line 'CONF' below.
+#NAME_BENCHMARK=mc-tester.root-Zmumu-photos-F77-100M-1-phot-1GeV-NLO
+#NAME_BENCHMARK=mc-tester.root-Zmumu-koralz-100M-1-phot-1GeV-NLO
+#NAME_BENCHMARK=mc-tester.root-Zmumu-kkmc-F77-100M-nosym-1GeV-NLO
+
+CONF=pythia_Z.conf
+#CONF=pythia_Z_resonance_peak.conf
+NAME=ZmumuNLO
+
+PROGRAM=$(PHOTOS_ONLY)
+PYTHIA_MODE=$(Z_MU_MODE)
+SPECIAL_MODE=$(NLO_MODE)
+ONE_PHOTON_MODE=0
+
+tester.$(NAME).pdf: mc-tester.$(NAME).root
+ $(COMPARE) $(NAME_BENCHMARK) mc-tester.$(NAME).root
+ mv tester.pdf tester.$(NAME).pdf
+ $(VIEWER) tester.$(NAME).pdf &
+
+mc-tester.$(NAME).root: $(PROGRAM) $(CONF)
+ $(PROGRAM) $(CONF) $(PYTHIA_MODE) $(EVENTS) $(SPECIAL_MODE) $(ONE_PHOTON_MODE)
+ mv mc-tester.root mc-tester.$(NAME).root
+
+clean:
+ rm -rf *~ booklet* tester* mc-results*
+ rm -rf MC-TESTER.DAT *_C.so *_C.d
+
+clobber: clean
+ rm -f mc-tester.$(NAME).root
--- /dev/null
+{
+
+ if (!Setup::stage == 0) { //generation step configurables
+
+ Setup::decay_particle=23;
+ Setup::debug_mode=false;
+
+ // Setup histograms
+ int n_bins=120;
+ double default_min_bin=0.0;
+ double default_max_bin=1.1;
+
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=true;
+
+
+ // Description
+ Setup::gen1_desc_1=" Pythia + Photos Interface Test";
+ Setup::gen1_desc_2=" $Z \\rightarrow \\mu^+ \\mu^-$. Photons filtered below 10 MeV";
+ Setup::gen1_desc_3=" No photon symmetrization";
+
+ //Filter photons
+ Setup::UserTreeAnalysis = "UserTreeAnalysis";
+ Setup::UTA_params[0]=1./91.187; //1GeV
+ // p_t threshold as fraction of particle energy in
+ // mothers frame
+ Setup::UTA_params[1]=2;
+ Setup::UTA_params[2]=0.0;
+ Setup::UTA_params[3]=1.0;
+ // Setup::UTA_params[4]=22;
+
+ Setup::UTA_nparams=4;
+
+ Setup::SuppressDecay(22);
+ Setup::SuppressDecay(23);
+
+ /**************************************************************************
+ Settings for old FORTRAN tests
+ Uncomment when generating comparison with these files
+ ***************************************************************************/
+/*
+ // for benchmark files: mc-tester.root-Zmumu-koralz-100M-1-phot-1GeV-NLO
+ // mc-tester.root-Zmumu-photos-F77-100M-1-phot-1GeV-NLO
+
+ n_bins=120;
+ default_min_bin=0.0;
+ default_max_bin=100.0;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=false;
+ Setup::mass_power=1;
+
+ Setup::UTA_params[0]=1./91.187;
+*/
+ // for benchmark file: mc-tester.root-Zmumu-kkmc-F77-100M-nosym-1GeV-NLO
+/*
+ n_bins=1200;
+ default_min_bin=0.0;
+ default_max_bin=120.0;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+ Setup::mass_scale_on=false;
+ Setup::mass_power=1;
+
+ Setup::UserTreeAnalysis = "ZmumuAnalysis"; // Orders photons as in KKMC
+ Setup::UTA_params[0]=1./91.187;
+*/
+ /**************************************************************************/
+
+ }
+ else{ //Setup for analysis step
+ Setup::user_analysis=MCTest01;
+ //Setup::rebin_factor=4; // to reduce no of bins by rebin_factor
+ Setup::use_log_y=true;
+ }
+};
--- /dev/null
+/*
+ UserTreeAnalysis implementation
+
+ Details regarding the working of the analysis itself are given below,
+ just after the function header.
+*/
+
+//#include "UserTreeAnalysis.H" // remove if copied to user working directory
+#include <stdio.h>
+#include <assert.h>
+#include <math.h>
+#include "MC4Vector.H"
+#include "HEPParticle.H"
+#include "TH1.h"
+#include "Setup.H"
+#include "TObjArray.h"
+#include "TMath.h"
+#define PI 3.141592653
+
+inline bool ifSofty(int Id,int nparams, double *params){
+ if (nparams<5 && Id==22) return true; // to remove photons only
+ for (int i=nparams-1; i>3; i--)
+ if (Id==params[i]) return true; // to remove all what is in params from nparams down to 4
+ return false;
+}
+
+// very similar to MC_FillUserHistogram from Generate.cxx
+inline void fillUserHisto(char *name,double val, double weight=1.0,
+ double min=Setup::bin_min[0][0],
+ double max=Setup::bin_max[0][0]){
+
+ TH1D *h=(TH1D*)(Setup::user_histograms->FindObject(name));
+ if(!h){
+ h=new TH1D(name,name,Setup::nbins[0][0],min,max);
+ if(!h) return;
+ Setup::user_histograms->Add(h);
+ // printf("user histogram created %s\n", name);
+}
+ h->Fill(val,weight);
+
+}
+double angle(double X, double Y){
+
+
+ double an=0.0;
+ double R=sqrt(X*X+Y*Y);
+ // if(R<pow(10,-20)) printf(" angle this time X %f\n", 10000*X);
+ if(R<pow(10,-20)) return an;
+
+ if(TMath::Abs(X)/R<0.8)
+ {
+ an=acos(X/R);
+ if(Y<0 && an>0) an=-an;
+ if(Y>0 && an<0) an=-an;
+ }
+ else
+ {
+ an=asin(Y/R);
+ if(X<0 && an>=0.) an=PI-an;
+ else if(X<0.) an=-PI-an;
+
+ }
+ return an;
+}
+
+int ZmumuAnalysis(HEPParticle *mother,HEPParticleList *stableDaughters, int nparams, double *params)
+{
+ // THIS IS EXAMPLE of userTreeAnalysis. It acts on list of particle X (under our MC-test) final
+ // daughters. Of course in real life many options may need to be introduced by the user.
+ // PARAMETERS:
+ // params[0] threshold on Energy (or p_T) of particle expressed as a fraction of mother's
+ // Energy (or p_T) in mother's frame. If not specified - default is 0.05
+ // Note that setting it to zero is possible.
+ // params[1] maximum number of left soft-suspected particles.
+ // 0: (default) all listed particles are removed, even if hard
+ // 1: 2: one two etc removable particles are kept (at most)
+ // -1: this option is off, all hard particles stay.
+ // params[2] control tag on discriminating particles,
+ // 0: (default) Energy in decaying particle rest frame
+ // 1: Energy in lab frame
+ // 2: p_T with respect to beam direction in lab frame.
+ // params[3] type of action to be applied on removed daughters
+ // 0: (default) nothing is done, they are lost
+ // 1: algorithm as in studies on PHOTOS is used, see papers P. Golonka and Z. Was.
+ // params[4] from this paramter on PDG id-s of particles to be removed can be added.
+ // Default is that only photons are removed.
+ // To get to origin of our particle (mother) one need to go after UserEventAnalysis,
+ // instructive example will be given later.
+ assert(mother!=0);
+ assert(stableDaughters!=0);
+
+
+ double threshold=0.05, leftmax=0.0, selector=0.0, actLost=0.0;
+ if (nparams>0 && params==0) return -1;
+ if (nparams>0) threshold=params[0];
+ if (nparams>1) leftmax =params[1];
+ if (nparams>2) selector =params[2];
+ if (nparams>3) actLost =params[3];
+
+
+ HEPParticleList *lostDaughters=new HEPParticleList;
+ double pt_limit=threshold*mother->GetM();
+
+ HEPParticleListIterator daughters (*stableDaughters);
+ int nphot=0;
+ double ephot=pow(10,22);
+ bool redo=false;
+ for (HEPParticle *part=daughters.first(); part!=0; (redo)? part=part:part=daughters.next() ) {
+ if(redo) redo=false;
+ MC4Vector d4(part->GetE(),part->GetPx(),part->GetPy(),part->GetPz(),part->GetM());
+ // boost to mother's frame:
+ d4.Boost(mother->GetPx(),mother->GetPy(),mother->GetPz(),mother->GetE(),mother->GetM());
+
+
+
+ double p_t=d4.GetX0(); // default
+ switch ((int) selector)
+ {
+ case 1: p_t=part->GetE(); break;
+ case 2: p_t=d4.Xt(); break;
+ }
+
+
+ if(ifSofty(part->GetPDGId(),nparams,params)) nphot++;
+ if ( ifSofty(part->GetPDGId(),nparams,params) && p_t < pt_limit) {
+ // printf("Odrzucamy! %i\n",count++);
+ nphot=0;
+ lostDaughters->push_back(part);
+ stableDaughters->remove(part);
+ part=daughters.first();
+ redo=true;
+ continue;
+ }
+ if( ifSofty(part->GetPDGId(),nparams,params) && ephot>p_t) ephot=p_t;
+ }
+ while(nphot>(int) leftmax)
+ {
+ double ephot1=pow(10,22);
+ redo=false;
+ for (HEPParticle *part=daughters.first(); part!=0; (redo)? part=part:part=daughters.next() ) {
+ if(redo) redo=false;
+ MC4Vector d4(part->GetE(),part->GetPx(),part->GetPy(),part->GetPz(),part->GetM());
+ // boost to mother's frame:
+ d4.Boost(mother->GetPx(),mother->GetPy(),mother->GetPz(),mother->GetE(),mother->GetM());
+
+
+ double p_t=d4.GetX0(); // default
+ switch ((int) selector)
+ {
+ case 1: p_t=part->GetE(); break;
+ case 2: p_t=d4.Xt(); break;
+ }
+
+
+ if ( ifSofty(part->GetPDGId(),nparams,params) && p_t == ephot) {
+
+ nphot--;
+ lostDaughters->push_back(part);
+ stableDaughters->remove(part);
+ ephot1=pow(10,22);
+ part=daughters.first();
+ redo=true;
+ continue;
+ }
+ if( ifSofty(part->GetPDGId(),nparams,params) && ephot1>p_t) ephot1=p_t;
+ }
+ ephot=ephot1;
+
+ }
+
+ // ##############################################################
+ // SPECIAL CASE - ordered or symmetrical photons
+ // This code changes order of photons
+ // ##############################################################
+ HEPParticleListIterator symmetry (*stableDaughters);
+ HEPParticle *phot1 = NULL;
+ HEPParticle *phot2 = NULL;
+ for (HEPParticle *part=symmetry.first(); part!=0; part=symmetry.next() )
+ {
+ if(part->GetPDGId()==22)
+ {
+ if(!phot1) phot1=part;
+ else
+ {
+ phot2=part;
+ break;
+ }
+ }
+ }
+ if(phot1 && phot2)
+ {
+ if(phot1->GetE()<phot2->GetE()) // for ordered photons
+ //if( rand()*1.0/RAND_MAX > 0.5) // for photon symmetrization
+ {
+ double buf_x = phot1->GetPx();
+ double buf_y = phot1->GetPy();
+ double buf_z = phot1->GetPz();
+ double buf_e = phot1->GetE();
+
+ phot1->SetPx(phot2->GetPx());
+ phot1->SetPy(phot2->GetPy());
+ phot1->SetPz(phot2->GetPz());
+ phot1->SetE (phot2->GetE() );
+
+ phot2->SetPx(buf_x);
+ phot2->SetPy(buf_y);
+ phot2->SetPz(buf_z);
+ phot2->SetE (buf_e);
+ }
+ }
+
+ // ##############################################################
+ // here functionality of removig some daughters is finished
+ // now we reconsider what to do with them
+ // ##############################################################
+ // delete lostDaughters;
+ // return 1;
+
+
+ // ##############################################################
+ // Now: What to do with lost daughters?
+ // ##############################################################
+ // lostDaughters->ls();
+ int version=(int) actLost;
+
+ switch(version)
+ {
+ case 1: // add lost to charged
+ {
+ HEPParticleListIterator lost (*lostDaughters);
+ for (HEPParticle *lostpart=lost.first(); lostpart!=0; lostpart=lost.next() ) {
+ HEPParticle* Best=0;
+ double searchvirt=pow(10.0,22);
+ MC4Vector VV;
+ for( HEPParticle *part=daughters.first(); part!=0; part=daughters.next() ){
+ if(part->GetCharge()==0) continue;
+ VV=lostpart->GetP4()+part->GetP4();
+ VV.AdjustM();
+ if (VV.GetM()<searchvirt) {searchvirt=VV.GetM(); Best=part;}
+ }
+ if(Best) {
+ Best->SetPx(Best->GetPx()+lostpart->GetPx());
+ Best->SetPy(Best->GetPy()+lostpart->GetPy());
+ Best->SetPz(Best->GetPz()+lostpart->GetPz());
+ Best->SetE (Best->GetE ()+lostpart->GetE ());
+ }
+ }
+ break;
+ }
+ default: break; // do nothing
+ }
+
+ delete lostDaughters;
+
+
+ bool activateUserHist=true;
+ if(!activateUserHist) return 1;
+
+ // segmet of user defined histograms
+
+ double X=mother->GetPx(), Y=mother->GetPy(), Z=mother->GetPz();
+ // double E=mother->GetE(), MM=mother->GetM();
+
+
+ double pt=sqrt(X*X+Y*Y);
+ double eta=log((sqrt(pt*pt+Z*Z)+TMath::Abs(Z))/pt);
+ if(Z<0 && eta>0) eta=-eta;
+ if(Z>0 && eta<0) eta=-eta;
+ double phi=angle(X,Y);
+ char hist1[] = "mother-PT";
+ char hist2[] = "mother-eta";
+ char hist3[] = "mother-phi";
+ fillUserHisto(hist1,pt,1.0,0.0,100.0);
+ fillUserHisto(hist2,eta,1.0,-8.0,8.0);
+ fillUserHisto(hist3,phi,1.0,-PI,PI);
+ return 1;
+}
+
--- /dev/null
+WeakSingleBoson:ffbar2gmZ = on
+23:onMode = off
+23:onIfAny = 13
\ No newline at end of file
--- /dev/null
+WeakSingleBoson:ffbar2gmZ = on
+23:onMode = off
+23:onIfAny = 13
+23:mWidth = 0
+23:m0 = 91.187
+23:mMin = 91.17
+23:mMax = 91.2
--- /dev/null
+############## Make tests ###########################
+include ../test.inc
+
+NAME_BENCHMARK=mc-tester.root-pispectr-RCall
+# Or use other benchmark reference files:
+# NAME_BENCHMARK=mc-tester.root-pispectr-RCtau
+# NAME_BENCHMARK=mc-tester.root-pispectr-RCno
+
+CONF=pythia_Z.conf
+NAME=Ztautau
+
+PROGRAM=$(PHOTOS_TAUOLA)
+PYTHIA_MODE=$(Z_MU_MODE)
+TAUOLA_MODE=$(PIPI_MODE)
+
+tester.$(NAME).pdf: mc-tester.$(NAME).root
+ $(COMPARE) $(NAME_BENCHMARK) mc-tester.$(NAME).root
+ mv tester.pdf tester.$(NAME).pdf
+ $(VIEWER) tester.$(NAME).pdf &
+
+mc-tester.$(NAME).root: $(PROGRAM) $(CONF)
+ $(PROGRAM) $(CONF) $(PYTHIA_MODE) $(EVENTS) $(TAUOLA_MODE) 2>/dev/null
+ mv mc-tester.root mc-tester.$(NAME).root
+
+clean:
+ rm -rf *~ booklet* tester* mc-results*
+ rm -rf MC-TESTER.DAT *_C.so *_C.d
+
+clobber: clean
+ rm -f mc-tester.$(NAME).root
--- /dev/null
+{
+ if(!Setup::stage == 0) { //generation step configurables
+
+ Setup::decay_particle=23;
+ Setup::debug_mode=false; //verbose output from MC-Tester?
+ // Setup histograms
+ int n_bins=120;
+ double default_min_bin=0.0;
+ double default_max_bin=1.1;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+
+ Setup::mass_scale_on=true;
+ Setup::mass_power=2;
+
+ // Description
+ Setup::gen1_desc_1=" Pythia + Tauola + Photos Interface Test";
+ Setup::gen1_desc_2=" $Z \\rightarrow \\tau^+ \\tau^-$. Photons filtered below 10 MeV";
+ Setup::gen1_desc_3=" No photon symmetrization";
+
+ //Filter photons
+ Setup::UserTreeAnalysis = "ZtautauAnalysis";
+ Setup::UTA_params[0]=0.01/91.187; //10 MeV
+ // p_t threshold as fraction of particle energy in
+ // mothers frame
+ Setup::UTA_params[1]=2;
+ Setup::UTA_params[2]=0.0;
+ Setup::UTA_params[3]=1.0;
+ Setup::UTA_params[4]=22;
+
+ Setup::UTA_nparams=5;
+
+ Setup::SuppressDecay(22);
+ Setup::SuppressDecay(23);
+ Setup::SuppressDecay(-15);
+ //Setup::SuppressDecay(11);
+ //Setup::SuppressDecay(-11);
+ }
+ else //Setup for analysis step
+ {
+ Setup::user_analysis=MCTest01;
+ Setup::use_log_y=true;
+ }
+};
--- /dev/null
+//#include "UserTreeAnalysis.H" // remove if copied to user working directory
+#include <stdio.h>
+#include <assert.h>
+#include <math.h>
+#include "MC4Vector.H"
+#include "HEPParticle.H"
+#include "TH1.h"
+#include "Setup.H"
+#include "TObjArray.h"
+#include "TMath.h"
+#define PI 3.141592653
+
+inline bool ifSofty(int Id,int nparams, double *params){
+ if (nparams<5 && Id==22) return true; // to remove photons only
+ for (int i=nparams-1; i>3; i--)
+ if (Id==params[i]) return true; // to remove all what is in params from nparams down to 4
+ return false;
+}
+
+// very similar to MC_FillUserHistogram from Generate.cxx
+inline void fillUserHisto(char *name,double val, double weight=1.0,
+ double min=Setup::bin_min[0][0],
+ double max=Setup::bin_max[0][0]){
+
+ TH1D *h=(TH1D*)(Setup::user_histograms->FindObject(name));
+ if(!h){
+ h=new TH1D(name,name,Setup::nbins[0][0],min,max);
+ if(!h) return;
+ Setup::user_histograms->Add(h);
+ // printf("user histogram created %s\n", name);
+}
+ h->Fill(val,weight);
+
+}
+double angle(double X, double Y){
+
+
+ double an=0.0;
+ double R=sqrt(X*X+Y*Y);
+ // if(R<pow(10,-20)) printf(" angle this time X %f\n", 10000*X);
+ if(R<pow(10,-20)) return an;
+
+ if(TMath::Abs(X)/R<0.8)
+ {
+ an=acos(X/R);
+ if(Y<0 && an>0) an=-an;
+ if(Y>0 && an<0) an=-an;
+ }
+ else
+ {
+ an=asin(Y/R);
+ if(X<0 && an>=0.) an=PI-an;
+ else if(X<0.) an=-PI-an;
+
+ }
+ return an;
+}
+
+int counter=0;
+
+int ZtautauAnalysis(HEPParticle *mother,HEPParticleList *stableDaughters, int nparams, double *params)
+{
+ // THIS IS EXAMPLE of userTreeAnalysis. It acts on list of particle X (under our MC-test) final
+ // daughters. Of course in real life many options may need to be introduced by the user.
+ // PARAMETERS:
+ // params[0] threshold on Energy (or p_T) of particle expressed as a fraction of mother's
+ // Energy (or p_T) in mother's frame. If not specified - default is 0.05
+ // Note that setting it to zero is possible.
+ // params[1] maximum number of left soft-suspected particles.
+ // 0: (default) all listed particles are removed, even if hard
+ // 1: 2: one two etc removable particles are kept (at most)
+ // -1: this option is off, all hard particles stay.
+ // params[2] control tag on discriminating particles,
+ // 0: (default) Energy in decaying particle rest frame
+ // 1: Energy in lab frame
+ // 2: p_T with respect to beam direction in lab frame.
+ // params[3] type of action to be applied on removed daughters
+ // 0: (default) nothing is done, they are lost
+ // 1: algorithm as in studies on PHOTOS is used, see papers P. Golonka and Z. Was.
+ // params[4] from this paramter on PDG id-s of particles to be removed can be added.
+ // Default is that only photons are removed.
+ // To get to origin of our particle (mother) one need to go after UserEventAnalysis,
+ // instructive example will be given later.
+ assert(mother!=0);
+ assert(stableDaughters!=0);
+
+
+ double threshold=0.05, leftmax=0.0, selector=0.0, actLost=0.0;
+ if (nparams>0 && params==0) return -1;
+ if (nparams>0) threshold=params[0];
+ if (nparams>1) leftmax =params[1];
+ if (nparams>2) selector =params[2];
+ if (nparams>3) actLost =params[3];
+
+
+ HEPParticleList *lostDaughters=new HEPParticleList;
+ double pt_limit=threshold*mother->GetM();
+
+ HEPParticleListIterator daughters (*stableDaughters);
+ int nphot=0;
+ double ephot=pow(10,22);
+ bool redo=false;
+ for (HEPParticle *part=daughters.first(); part!=0; (redo)? part=part:part=daughters.next() ) {
+ if(redo) redo=false;
+ MC4Vector d4(part->GetE(),part->GetPx(),part->GetPy(),part->GetPz(),part->GetM());
+ // boost to mother's frame:
+ d4.Boost(mother->GetPx(),mother->GetPy(),mother->GetPz(),mother->GetE(),mother->GetM());
+
+
+
+ double p_t=d4.GetX0(); // default
+ switch ((int) selector)
+ {
+ case 1: p_t=part->GetE(); break;
+ case 2: p_t=d4.Xt(); break;
+ }
+
+
+ if(ifSofty(part->GetPDGId(),nparams,params)) nphot++;
+ if ( ifSofty(part->GetPDGId(),nparams,params) && p_t < pt_limit) {
+ // printf("Odrzucamy! %i\n",count++);
+ nphot=0;
+ lostDaughters->push_back(part);
+ stableDaughters->remove(part);
+ part=daughters.first();
+ redo=true;
+ continue;
+ }
+ if( ifSofty(part->GetPDGId(),nparams,params) && ephot>p_t) ephot=p_t;
+ }
+ while(nphot>(int) leftmax)
+ {
+ double ephot1=pow(10,22);
+ redo=false;
+ for (HEPParticle *part=daughters.first(); part!=0; (redo)? part=part:part=daughters.next() ) {
+ if(redo) redo=false;
+ MC4Vector d4(part->GetE(),part->GetPx(),part->GetPy(),part->GetPz(),part->GetM());
+ // boost to mother's frame:
+ d4.Boost(mother->GetPx(),mother->GetPy(),mother->GetPz(),mother->GetE(),mother->GetM());
+
+
+ double p_t=d4.GetX0(); // default
+ switch ((int) selector)
+ {
+ case 1: p_t=part->GetE(); break;
+ case 2: p_t=d4.Xt(); break;
+ }
+
+
+ if ( ifSofty(part->GetPDGId(),nparams,params) && p_t == ephot) {
+
+ nphot--;
+ lostDaughters->push_back(part);
+ stableDaughters->remove(part);
+ ephot1=pow(10,22);
+ part=daughters.first();
+ redo=true;
+ continue;
+ }
+ if( ifSofty(part->GetPDGId(),nparams,params) && ephot1>p_t) ephot1=p_t;
+ }
+ ephot=ephot1;
+
+ }
+
+ // ##############################################################
+ // here functionality of removig some daughters is finished
+ // now we reconsider what to do with them
+ // ##############################################################
+ // delete lostDaughters;
+ // return 1;
+
+
+ // ##############################################################
+ // Now: What to do with lost daughters?
+ // ##############################################################
+ // lostDaughters->ls();
+ int version=(int) actLost;
+
+ switch(version)
+ {
+ case 1: // add lost to charged
+ {
+ HEPParticleListIterator lost (*lostDaughters);
+ for (HEPParticle *lostpart=lost.first(); lostpart!=0; lostpart=lost.next() ) {
+ HEPParticle* Best=0;
+ double searchvirt=pow(10.0,22);
+ MC4Vector VV;
+ for( HEPParticle *part=daughters.first(); part!=0; part=daughters.next() ){
+ if(part->GetCharge()==0) continue;
+ VV=lostpart->GetP4()+part->GetP4();
+ VV.AdjustM();
+ if (VV.GetM()<searchvirt) {searchvirt=VV.GetM(); Best=part;}
+ }
+ if(Best) {
+ Best->SetPx(Best->GetPx()+lostpart->GetPx());
+ Best->SetPy(Best->GetPy()+lostpart->GetPy());
+ Best->SetPz(Best->GetPz()+lostpart->GetPz());
+ Best->SetE (Best->GetE ()+lostpart->GetE ());
+ }
+ }
+ break;
+ }
+ default: break; // do nothing
+ }
+
+ delete lostDaughters;
+
+
+ /*
+ Create histogram
+ */
+ double px=0,py=0,pz=0,e=0;
+ double px1=0,py1=0,pz1=0,e1=0;
+
+ //loop over all daughters
+ for(HEPParticle *part=daughters.first();part!=0;part=daughters.next())
+ {
+ if(abs(part->GetPDGId())==211)
+ {
+ px1+=part->GetPx();
+ py1+=part->GetPy();
+ pz1+=part->GetPz();
+ e1+=part->GetE();
+ }
+ if(abs(part->GetPDGId())==211) continue;
+ //Sum e+ e- 4-vectors
+ px+=part->GetPx();
+ py+=part->GetPy();
+ pz+=part->GetPz();
+ e+=part->GetE();
+ }
+ double mass=e*e-px*px-py*py-pz*pz;
+ double mass1=(e+e1)*(e+e1)-(px+px1)*(px+px1)-(py+py1)*(py+py1)-(pz+pz1)*(pz+pz1);
+ mass=1-mass/mass1;
+ char mm[] = "pi-energy";
+ fillUserHisto(mm,mass,1.0,0.0,1.1);
+
+ //For ZtautauAnalysis - other histograms are not needed
+ bool activateUserHist=false;
+ if(!activateUserHist) return 1;
+
+ // segmet of user defined histograms
+
+ double X=mother->GetPx(), Y=mother->GetPy(), Z=mother->GetPz();
+ // double E=mother->GetE(), MM=mother->GetM();
+
+
+ double pt=sqrt(X*X+Y*Y);
+ double eta=log((sqrt(pt*pt+Z*Z)+TMath::Abs(Z))/pt);
+ if(Z<0 && eta>0) eta=-eta;
+ if(Z>0 && eta<0) eta=-eta;
+ double phi=angle(X,Y);
+ char hist1[] = "mother-PT";
+ char hist2[] = "mother-eta";
+ char hist3[] = "mother-phi";
+ fillUserHisto(hist1,pt,1.0,0.0,100.0);
+ fillUserHisto(hist2,eta,1.0,-8.0,8.0);
+ fillUserHisto(hist3,phi,1.0,-PI,PI);
+ return 1;
+}
--- /dev/null
+WeakSingleBoson:ffbar2gmZ = on
+23:onMode = off
+23:onIfAny = 15
+15:mayDecay = off
--- /dev/null
+#!/bin/bash
+# Written by N. Davidson (2008)
+# This bash script demonstrates how to perform the "Analysis"
+# step from a directory outside MC-TESTER.
+if test -z ${MCTESTERLOCATION}; then
+ echo ""
+ echo "ERROR: \$MCTESTERLOCATION not set. Analysis cannot be performed."
+ echo " Use: export MCTESTERLOCATION=<path_to_mc_tester>"
+ echo ""
+ exit -1
+fi
+#----------------------------------
+# Change these variables
+#----------------------------------
+FILE1=$1 #first generation step file
+FILE2=$2 #second generation step file
+MCTESTER_DIR=${MCTESTERLOCATION} #location of MC-TESTER
+
+#----------------------------------
+
+MCTESTER_ANALYZE_DIR=${MCTESTER_DIR}/analyze
+export MC_TESTER_LIBS_DIR=${MCTESTER_DIR}/lib
+
+WORKING_DIR=`pwd`
+
+#change to MCTester directory and run macros
+cd $MCTESTER_ANALYZE_DIR
+root -b -q "ANALYZE.C(\"${WORKING_DIR}\",\"${WORKING_DIR}/${FILE1}\",\"${WORKING_DIR}/${FILE2}\")"
+root -b -q "BOOKLET.C(\"${WORKING_DIR}\")"
+cd $WORKING_DIR
+
+#copy base .tex file needed for booklet and create
+cp ${MCTESTER_ANALYZE_DIR}/tester.tex ./
+latex tester.tex
+latex tester.tex
+latex tester.tex
+dvipdf tester
+
+#do a bit of clean up
+rm -rf tester.aux tester.log texput.log tester.toc
+rm -rf mc-results.aux booklet.aux
--- /dev/null
+/**
+ * Main program for testing photos C++ interface.
+ * Pythia events are generated first, Tauola++ used for tau decays
+ * and photos used for FSR.
+ *
+ * @author Nadia Davidson and Tomasz Przedzinski
+ * @date 10 May 2011
+ */
+
+//Pythia header files
+#include "Pythia.h"
+#include "HepMCInterface.h"
+
+//MC-TESTER header files
+#include "Generate.h"
+#include "HepMCEvent.H"
+#include "Setup.H"
+
+//TAUOLA header files
+#include "Tauola/Tauola.h"
+#include "Tauola/TauolaHepMCEvent.h"
+
+//PHOTOS header files
+#include "Photos/Photos.h"
+#include "Photos/PhotosHepMCParticle.h"
+#include "Photos/PhotosHepMCEvent.h"
+#include "Photos/Log.h"
+
+using namespace std;
+using namespace Pythia8;
+using namespace Photospp;
+using namespace Tauolapp;
+
+unsigned long NumberOfEvents = 10000;
+unsigned int EventsToCheck=20;
+
+// elementary test of HepMC typically executed before
+// detector simulation based on http://home.fnal.gov/~mrenna/HCPSS/HCPSShepmc.html
+// similar test was performed in Fortran
+// we perform it before and after Photos (for the first several events)
+void checkMomentumConservationInEvent(HepMC::GenEvent *evt)
+{
+ //cout<<"List of stable particles: "<<endl;
+
+ double px=0.0,py=0.0,pz=0.0,e=0.0;
+
+ for ( HepMC::GenEvent::particle_const_iterator p = evt->particles_begin();
+ p != evt->particles_end(); ++p )
+ {
+ if( (*p)->status() == 1 )
+ {
+ HepMC::FourVector m = (*p)->momentum();
+ px+=m.px();
+ py+=m.py();
+ pz+=m.pz();
+ e +=m.e();
+ //(*p)->print();
+ }
+ }
+ cout.precision(6);
+ cout.setf(ios_base::floatfield);
+ cout<<endl<<"Vector Sum: "<<px<<" "<<py<<" "<<pz<<" "<<e<<endl;
+}
+
+int main(int argc,char **argv)
+{
+
+ // Program needs at least 4 parameters
+ if(argc<5)
+ {
+ cout<<endl<<"Usage: "<<argv[0]<<" <pythia_conf> <pythia_mode> <no_events> <tauola_mode> [ <alpha_order> <ScalarNLO_mode> ]"<<endl;
+ cout<<endl<<" eg. "<<argv[0]<<" pythia_H.conf 0 10000 4 0 0"<<endl;
+ cout<<endl;
+ return -1;
+ }
+
+ HepMC::I_Pythia8 ToHepMC;
+
+ // Initialization of pythia
+ Pythia pythia;
+ Event& event = pythia.event;
+
+ pythia.readString("HadronLevel:Hadronize = off");
+ pythia.readString("SpaceShower:QEDshower = off");
+ pythia.readString("SpaceShower:QEDshowerByL = off");
+ pythia.readString("SpaceShower:QEDshowerByQ = off");
+ pythia.readString("PartonLevel:ISR = off");
+ pythia.readString("PartonLevel:FSR = off");
+
+ // Tauola is currently set to undecay taus. Otherwise, uncomment this line.
+ //pythia.particleData.readString("15:mayDecay = off");
+
+ /********************************************************
+ Read input parameters from console. List of parameters:
+ 1. Pythia configuration filename
+ 2. Pythia mode - e+e-@200GeV , e+e-@91.187GeV, pp@14TeV or e+e-@500GeV
+ (only e+e-@91.187GeV and e+e-@500GeV are used in this example)
+ 3. Number of events
+ 4. Tauola decay mode (refer to Tauola documentation)
+ 5. Photos - use 1-photon mode on/off
+ 6. Photos - use ScalarNLO mode on/off
+
+ Example where all input parameters are used:
+
+ ./photos_tauola_test.exe pythia_H.conf 1 100000 4 0 0
+ - use pythia_H.conf
+ - initialize using e+ e- @ 91.187GeV collisions
+ - generate 100 000 events
+ - fix TAUOLA decay to channel 4 (RHORHO_MODE)
+ - Photos is not using 1-photon mode (default option)
+ - Photos is not in ScalarNLO mode (default option)
+ *********************************************************/
+
+ // 1. Load pythia configuration file (argv[1], from console)
+ if(argc>1) pythia.readFile(argv[1]);
+
+ // 2. Initialize pythia to e+e-@91.17GeV or e+e-@500GeV collisions (argv[2], from console)
+ if(atoi(argv[2])==1) pythia.init( 11, -11, 91.187); // e+ e- collisions
+ else if(atoi(argv[2])==3) pythia.init( 11, -11, 500.); // e+ e- collisions
+ else
+ {
+ cout<<"ERROR: Wrong Pythia mode ("<<atoi(argv[4])<<")"<<endl;
+ cout<<" Only modes '1' and '3' are used by this program."<<endl;
+ return -1;
+ }
+
+ // 3. Get number of events (argv[3], from console)
+ if(argc>3) NumberOfEvents=atoi(argv[3]);
+
+ // 4. Set Tauola decay mode (argv[4], from console)
+ if(argc>4)
+ {
+ // argv[4]=3 (tau => pi nu_tau) for Ztautau
+ // argv[4]=4 (tau => pi pi nu_tau) for Htautau
+ Tauola::setSameParticleDecayMode(atoi(argv[4]));
+ Tauola::setOppositeParticleDecayMode(atoi(argv[4]));
+ }
+
+ Tauola::initialize();
+ Photos::initialize();
+
+ Photos::setExponentiation(true);
+ Photos::setInfraredCutOff(1.e-6);
+ Photos::maxWtInterference(3.0);
+
+ // 5. Check if we're using 1-photon mode
+ if( argc>5 && atoi(argv[5]) )
+ {
+ Photos::setDoubleBrem(false);
+ Photos::setExponentiation(false);
+
+ // Set infrared cutoff to 10MeV for scale M_Z=91.187GeV or 500 GeV
+ if(atoi(argv[2])==1) Photos::setInfraredCutOff(0.01/91.187);
+ else Photos::setInfraredCutOff(0.01/500.);
+
+ Photos::maxWtInterference(2.0);
+ }
+
+ // 6. Check if we're in ScalarNLO mode
+ if( argc>6 )
+ {
+ Tauola::setEtaK0sPi(1,1,0);
+
+ // Check if we are using NLO
+ if(atoi(argv[6])) Photos::setMeCorrectionWtForScalar(true);
+ }
+
+ Log::SummaryAtExit();
+ cout.setf(ios::fixed);
+
+ MC_Initialize();
+
+ // Begin event loop
+ for(unsigned long iEvent = 0; iEvent < NumberOfEvents; ++iEvent)
+ {
+ if(iEvent%1000==0) Log::Info()<<"Event: "<<iEvent<<"\t("<<iEvent*(100./NumberOfEvents)<<"%)"<<endl;
+ if(!pythia.next()) continue;
+
+ HepMC::GenEvent * HepMCEvt = new HepMC::GenEvent();
+ ToHepMC.fill_next_event(event, HepMCEvt);
+
+ if(iEvent<EventsToCheck)
+ {
+ cout<<" "<<endl;
+ cout<<"Momentum conservation chceck BEFORE/AFTER Photos"<<endl;
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ // Run TAUOLA on the event
+ TauolaHepMCEvent * t_event = new TauolaHepMCEvent(HepMCEvt);
+
+ // Since we let Pythia decay taus, we have to undecay them first.
+ t_event->undecayTaus();
+ t_event->decayTaus();
+ delete t_event;
+
+ // Run PHOTOS on the event
+ PhotosHepMCEvent evt(HepMCEvt);
+ evt.process();
+
+ if(iEvent<EventsToCheck)
+ {
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ // Run MC-TESTER on the event
+ HepMCEvent temp_event(*HepMCEvt,false);
+ MC_Analyze(&temp_event);
+
+ //clean up
+ delete HepMCEvt;
+ }
+ pythia.statistics();
+ MC_Finalize();
+}
--- /dev/null
+/**
+ * Main program for testing photos C++ interface.
+ * Pythia events are generated first and photos used for FSR.
+ *
+ * @author Nadia Davidson and Tomasz Przedzinski
+ * @date 10 May 2011
+ */
+
+//Pythia header files
+#include "Pythia.h"
+#include "HepMCInterface.h"
+
+//MC-TESTER header files
+#include "Generate.h"
+#include "HepMCEvent.H"
+#include "Setup.H"
+
+//PHOTOS header files
+#include "Photos/Photos.h"
+#include "Photos/PhotosHepMCEvent.h"
+#include "Photos/Log.h"
+
+using namespace std;
+using namespace Pythia8;
+using namespace Photospp;
+
+unsigned long NumberOfEvents = 10000;
+unsigned int EventsToCheck=20;
+
+// elementary test of HepMC typically executed before
+// detector simulation based on http://home.fnal.gov/~mrenna/HCPSS/HCPSShepmc.html
+// similar test was performed in Fortran
+// we perform it before and after Photos (for the first several events)
+void checkMomentumConservationInEvent(HepMC::GenEvent *evt)
+{
+ //cout<<"List of stable particles: "<<endl;
+
+ double px=0.0,py=0.0,pz=0.0,e=0.0;
+
+ for ( HepMC::GenEvent::particle_const_iterator p = evt->particles_begin();
+ p != evt->particles_end(); ++p )
+ {
+ if( (*p)->status() == 1 )
+ {
+ HepMC::FourVector m = (*p)->momentum();
+ px+=m.px();
+ py+=m.py();
+ pz+=m.pz();
+ e +=m.e();
+ //(*p)->print();
+ }
+ }
+ cout.precision(6);
+ cout.setf(ios_base::floatfield);
+ cout<<endl<<"Vector Sum: "<<px<<" "<<py<<" "<<pz<<" "<<e<<endl;
+}
+
+// Finds X Y -> 6 -6 decay and converts it to 100 -> 6 -6, where 100 = X + Y
+// Method used only in test for t bar t pair production
+void fixForMctester(HepMC::GenEvent *evt)
+{
+ for(HepMC::GenEvent::particle_const_iterator p=evt->particles_begin();p!=evt->particles_end(); p++)
+ if((*p)->pdg_id()==6)
+ {
+ HepMC::GenParticle *pt = *p;
+ int id=(* pt->production_vertex()->particles_in_const_begin() )->pdg_id();
+ if(id!=21 && id!=11 && id>5) continue;
+
+ // Get first mother and add 2x second mother to it
+ HepMC::GenParticle *X = (* pt->production_vertex()->particles_in_const_begin());
+ HepMC::GenParticle *Y = (* ++(pt->production_vertex()->particles_in_const_begin()) );
+ HepMC::FourVector fX = X->momentum();
+ HepMC::FourVector fY = Y->momentum();
+ HepMC::FourVector fXY(fX.px()+fY.px(),fX.py()+fY.py(),fX.pz()+fY.pz(),fX.e()+fY.e());
+ X->set_momentum(fXY);
+ // Unique ID for MC-Tester to analyze
+ X->set_pdg_id(100);
+
+ // Set 2nd mother as decayed and delete it from production vertex
+ Y->set_status(1);
+ (* Y->production_vertex()->particles_in_const_begin())->set_status(1);
+ pt->production_vertex()->remove_particle(Y);
+ return;
+ }
+}
+
+int main(int argc,char **argv)
+{
+
+ // Program needs at least 3 parameters
+ if(argc<4)
+ {
+ cout<<endl<<"Usage: "<<argv[0]<<" <pythia_conf> <pythia_mode> <no_events> [ <special_mode> ]"<<endl;
+ cout<<endl<<" eg. "<<argv[0]<<" pythia_W.conf 0 10000 4 0"<<endl;
+ cout<<endl;
+ return -1;
+ }
+
+ HepMC::I_Pythia8 ToHepMC;
+
+ // Initialization of pythia
+ Pythia pythia;
+ Event& event = pythia.event;
+
+ pythia.readString("HadronLevel:Hadronize = off");
+ pythia.readString("SpaceShower:QEDshower = off");
+ pythia.readString("SpaceShower:QEDshowerByL = off");
+ pythia.readString("SpaceShower:QEDshowerByQ = off");
+ pythia.readString("PartonLevel:ISR = off");
+ pythia.readString("PartonLevel:FSR = off");
+
+ // Tauola is currently set to undecay taus. Otherwise, uncomment this line.
+ //pythia.particleData.readString("15:mayDecay = off");
+
+ /********************************************************
+ Read input parameters from console. List of parameters:
+ 1. Pythia configuration filename
+ 2. Pythia mode - e+e-@200GeV , e+e-@91.187GeV or pp@14TeV
+ 3. Number of events
+ 4. Special mode - default(off), ttbar, NLO
+ 5. Photos - use 1-photon mode on/off
+
+ Example where all input parameters are used:
+
+ ./photos_test.exe pythia_W.conf 0 100000 0 0
+ - use pythia_W.conf
+ - initialize using e+ e- @ 200GeV collisions
+ - generate 100 000 events
+ - default configuration (not using any special mode)
+ - Photos is not using 1-photon mode (default option, except for WmunuNLO and ZmumuNLO)
+ *********************************************************/
+
+ // 1. Load pythia configuration file (argv[1], from console)
+ if(argc>1) pythia.readFile(argv[1]);
+
+ // 2. Initialize pythia (argv[2], from console)
+ if(atoi(argv[2])==0) pythia.init( 11, -11, 200.); //e+ e- collisions
+ else if(atoi(argv[2])==1) pythia.init( 11, -11, 91.187); //e+ e- collisions
+ else pythia.init( -2212, -2212, 14000.0); //p p collisions
+
+ // 3. Get number of events (argv[3], from console)
+ if(argc>3) NumberOfEvents=atoi(argv[3]);
+
+ Photos::initialize();
+
+ Photos::setInfraredCutOff(1.e-6);
+ Photos::maxWtInterference(3.0);
+
+ bool topDecays = false;
+
+ // 5. Check if we're using any special mode
+ if(argc>4)
+ {
+ // Top decays
+ if(atoi(argv[4])==1) topDecays=true;
+ // NLO mode
+ else if(atoi(argv[4])==2)
+ {
+ Photos::setMeCorrectionWtForW(true);
+ Photos::setMeCorrectionWtForZ(true);
+ //Photos::meCorrectionWtForScalar(true);
+ }
+ }
+
+ // 1-photon mode
+ if(argc>5 && atoi(argv[5])==1)
+ {
+ Photos::setDoubleBrem(false);
+ Photos::setExponentiation(false);
+ Photos::setInfraredCutOff(0.001);
+ Photos::maxWtInterference(2.0);
+
+
+ }
+
+
+ MC_Initialize();
+
+ Photos::iniInfo();
+ Log::SummaryAtExit();
+ cout.setf(ios::fixed);
+
+ // Begin event loop
+ for(unsigned long iEvent = 0; iEvent < NumberOfEvents; ++iEvent)
+ {
+ if(iEvent%1000==0) Log::Info()<<"Event: "<<iEvent<<"\t("<<iEvent*(100./NumberOfEvents)<<"%)"<<endl;
+ if (!pythia.next()) continue;
+
+ HepMC::GenEvent * HepMCEvt = new HepMC::GenEvent();
+ ToHepMC.fill_next_event(event, HepMCEvt);
+
+ if(iEvent<EventsToCheck)
+ {
+ cout<<" "<<endl;
+ cout<<"Momentum conservation chceck BEFORE/AFTER Photos"<<endl;
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ // Run PHOTOS on the event
+ PhotosHepMCEvent evt(HepMCEvt);
+ evt.process();
+
+ if(iEvent<EventsToCheck)
+ {
+ checkMomentumConservationInEvent(HepMCEvt);
+ }
+
+ // Top decays - we mess with the event so MC-TESTER can work on it as in LC analysis case
+ if(topDecays) fixForMctester(HepMCEvt);
+
+ // Run MC-TESTER on the event
+ HepMCEvent temp_event(*HepMCEvt,false);
+ MC_Analyze(&temp_event);
+
+ // Clean up
+ delete HepMCEvt;
+ }
+ pythia.statistics();
+ MC_Finalize();
+}
--- /dev/null
+EVENTS = 1000000
+
+VIEWER=gv
+COMPARE=../compare.sh
+
+# Programs
+PHOTOS_ONLY =../photos_test.exe
+PHOTOS_TAUOLA =../photos_tauola_test.exe
+
+# Pythia modes
+DEFAULT_MODE =0 # ee@200GeV (for Wenu, Wmunu, WmunuNLO)
+Z_MU_MODE =1 # ee@91.187GeV (for Zmumu, ZmumuNLO, Ztautau, ScalarNLO)
+PP_MODE =2 # pp@14TeV (for Zee, ttbar)
+HIGGS_MODE =3 # ee@500GeV (for Htautau)
+
+# Special modes
+TOP_MODE =1 # Turn on MC-Tester fix for Top decays
+NLO_MODE =2 # Turn on Photos NLO corrections
+
+# Tauola generation modes
+PIPI_MODE =3 # ee@91.187GeV (for Ztautau)
+RHORHO_MODE =4 # ee@500GeV (for Htautau)
+K-STAR_MODE =7 # ee@91.187GeV (for ScalarNLO)
--- /dev/null
+############## Make tests ###########################
+include ../test.inc
+
+NAME_BENCHMARK=mc-tester.root-ttbar-10M
+
+
+CONF=pythia_ttbar.conf
+NAME=ttbar
+
+PROGRAM=$(PHOTOS_ONLY)
+PYTHIA_MODE =$(PP_MODE)
+SPECIAL_MODE=$(TOP_MODE)
+
+tester.$(NAME).pdf: mc-tester.$(NAME).root
+ $(COMPARE) $(NAME_BENCHMARK) mc-tester.$(NAME).root
+ mv tester.pdf tester.$(NAME).pdf
+ $(VIEWER) tester.$(NAME).pdf &
+ @echo
+ @echo "IMPORTANT:"
+ @echo "Following example is missing hadronization of b b_bar pair."
+ @echo
+ @echo "Error messages redirected to /dev/null due to large output from Pythia"
+ @echo
+
+mc-tester.$(NAME).root: $(PROGRAM) $(CONF)
+ $(PROGRAM) $(CONF) $(PYTHIA_MODE) $(EVENTS) $(SPECIAL_MODE) 2>/dev/null
+ mv mc-tester.root mc-tester.$(NAME).root
+
+clean:
+ rm -rf *~ booklet* tester* mc-results*
+ rm -rf MC-TESTER.DAT *_C.so *_C.d
+
+clobber: clean
+ rm -f mc-tester.$(NAME).root
--- /dev/null
+{
+ if(!Setup::stage == 0) // Setup for generation step
+ {
+ Setup::decay_particle=100;
+
+ // Setup histograms
+ int n_bins=120;
+ double default_min_bin=0.0;
+ double default_max_bin=1.1;
+ Setup::SetHistogramDefaults(n_bins,default_min_bin,default_max_bin);
+
+ Setup::mass_scale_on=true;
+
+ // Description
+ Setup::gen1_desc_1=" Pythia + Photos Interface Test";
+ Setup::gen1_desc_2=" $g g \\rightarrow t \\bar t$. Photons filtered below 10 MeV";
+ Setup::gen1_desc_3=" No photon symmetrization";
+
+ // Filter photons
+ Setup::UserTreeAnalysis = "UserTreeAnalysis";
+ // p_t threshold as fraction of particle energy in mothers frame
+ Setup::UTA_params[0]=0.001;
+ Setup::UTA_params[1]=2;
+ Setup::UTA_params[2]=0.0;
+ Setup::UTA_params[3]=1.0;
+ Setup::UTA_params[4]=22;
+
+ Setup::UTA_nparams=5;
+
+ Setup::SuppressDecay(22);
+ Setup::SuppressDecay(23);
+ Setup::SuppressDecay(6);
+ Setup::SuppressDecay(-6);
+ }
+ else // Setup for analysis step
+ {
+ Setup::user_analysis=MCTest01;
+ Setup::use_log_y=true;
+ }
+};
--- /dev/null
+Top:ffbar2ttbar(s:gmZ) = on
+Top:gg2ttbar = on
+24:onMode = off
+24:onIfAny = 11
+-24:onMode = off
+-24:onIfAny = 11
+
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007 Free Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 6. Often, you can also type `make uninstall' to remove the installed
+ files again.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about. Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug. Until the bug is fixed you can use this workaround:
+
+ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+ Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
+
--- /dev/null
+SUBDIRS = src
+
--- /dev/null
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.59)
+AC_INIT( [Photos C++ Interface], [3.3], [tomasz.przedzinski@cern.ch] )
+
+AC_CONFIG_AUX_DIR([config])
+
+AM_INIT_AUTOMAKE
+
+AC_LANG_CPLUSPLUS
+
+AC_PREFIX_DEFAULT([`pwd`])
+AC_CONFIG_HEADERS([config/config.h])
+AC_CONFIG_SRCDIR([src/photosCInterfaces/Photos.cxx])
+##############################################################################
+# Check for debug flags
+
+AC_MSG_CHECKING([if debug flags are enabled])
+AC_ARG_ENABLE(
+ [debug],
+ [AS_HELP_STRING([--enable-debug],[Enable debug flags])],
+ [
+ AC_MSG_RESULT([$enable_debug]) ;
+ FFLAGS="-g3 -O0" ;
+ CXXFLAGS="-g3 -O0"
+ ],
+ [
+ AC_MSG_RESULT([no]) ;
+ FFLAGS="-O2" ;
+ CXXFLAGS="-O2"
+ ]
+)
+
+# Check for HepMC
+
+AC_MSG_CHECKING([if HepMC location defined])
+AC_ARG_WITH(
+ [hepmc],
+ [AS_HELP_STRING([--with-hepmc], [Path to HepMC 2.xx (use --without-hepmc to compile without HepMC)] )],
+ [
+ AC_MSG_RESULT([$with_hepmc]) ;
+ AC_SUBST(HEPMC_DIR,[$with_hepmc])
+ ],
+ [AC_MSG_RESULT([no])]
+)
+
+# autoconf 2.59 requires at least one check to be preformed unconditionally
+# before other conditional checks can be done
+AC_CHECK_HEADERS([stdio.h],,)
+
+if ! test "$with_hepmc" == "no"; then
+
+CPPFLAGS="-I$with_hepmc/include $CPPFLAGS"
+
+AC_CHECK_HEADERS([HepMC/Version.h], ,
+[ echo "" &&
+ echo "ERROR: HepMC not found. To provide location use:" &&
+ echo " './configure --with-hepmc=<path_to_HepMC>' "
+ echo " or use:"
+ echo " './configure --without-hepmc"
+ echo " (Consider using 'source platform/afs.paths.sh' (or .csh) )"
+ echo ""
+ exit -1
+])
+
+else
+ with_hepmc=""
+fi
+
+##############################################################################
+# Check for programs
+AC_PROG_MAKE_SET
+AC_PROG_LN_S
+AC_PROG_CC
+AC_PROG_CXX
+
+if ${CXX} --version | grep -E "GCC.* 3" >&/dev/null ; then
+ AC_PROG_F77([g77 gfortran f77 fortran fort])
+else
+ AC_PROG_F77([gfortran g77 f77 fortran fort])
+fi
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_CHECK_TYPES([ptrdiff_t])
+
+# Checks for library functions.
+AC_FUNC_MALLOC
+AC_FUNC_STRFTIME
+AC_CHECK_FUNCS([atexit getcwd pow sqrt], ,
+[ echo "" &&
+ echo "ERROR: Basic functions not found. Something's wrong with paths." &&
+ exit -1
+])
+
+AC_PROG_LIBTOOL
+AC_PROG_INSTALL
+AC_PROG_LN_S
+
+##############################################################################
+# Check for other paths
+
+AC_MSG_CHECKING([if Pythia8 location defined])
+AC_ARG_WITH(
+ [pythia8],
+ [AS_HELP_STRING([--with-pythia8], [Path to Pythia 8.1 or later] )],
+ [
+ AC_MSG_RESULT([$with_pythia8]) ;
+ AC_SUBST(PYTHIA8_DIR,[$with_pythia8])
+ ],
+ [
+ AC_MSG_RESULT([no]) ;
+ echo ""
+ echo "INFO: Pythia8 location not specified. Not all examples will be available." ;
+ echo " To define location use parameter: --with-pythia8" ;
+ echo ""
+ ]
+)
+
+if test "x$with_pythia8" != "x"; then
+ if test "x$PYTHIA8DATA" == "x" ; then
+ echo ""
+ echo "WARNING: Pythia8 location specified but PYTHIA8DATA variable not set."
+ echo " This variable is required to run the examples. Try:"
+ echo " export PYTHIA8DATA=<path_to_pythia8>/xmldoc"
+ echo ""
+ fi
+fi
+
+AC_MSG_CHECKING([if MC-TESTER location defined])
+AC_ARG_WITH(
+ [mc-tester],
+ [AS_HELP_STRING([--with-mc-tester], [Path to MC-TESTER 1.23 or later] )],
+ [
+ AC_MSG_RESULT([$with_mc_tester]) ;
+ AC_SUBST(MCTESTER_DIR,[$with_mc_tester])
+ ],
+ [
+ AC_MSG_RESULT([no]) ;
+ echo "" ;
+ echo "INFO: MC-TESTER location not specified. Not all examples will be available." ;
+ echo " To define location use parameter: --with-mc-tester" ;
+ echo ""
+ ]
+)
+
+if test "x$with_mc_tester" != "x"; then
+ AC_CHECK_PROG(HAS_ROOT_CONFIG,root-config,[yes],[no])
+ if test "$HAS_ROOT_CONFIG" == "no"; then
+ echo ""
+ echo "WARNING: root-config not found. ROOT is not installed or path"
+ echo " to ROOT bin folder not provied via \$PATH variable. Use:"
+ echo " export PATH=\$PATH:<path_to_root>/bin"
+ echo " export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\`root-config --libdir\`"
+ echo ""
+ else
+ ROOT_LIBS=`root-config --glibs`
+ ROOT_INC=`root-config --incdir`
+ AC_SUBST(ROOTLIBS,[$ROOT_LIBS])
+ AC_SUBST(ROOTINC,[$ROOT_INC])
+ fi
+fi
+
+AC_MSG_CHECKING([if Tauola C++ Interface location defined])
+AC_ARG_WITH(
+ [tauola],
+ [AS_HELP_STRING([--with-tauola], [Path to Tauola C++ Interface v1.0.0 or later] )],
+ [
+ AC_MSG_RESULT([$with_tauola]) ;
+ AC_SUBST(TAUOLA_DIR,[$with_tauola])
+ ],
+ [
+ AC_MSG_RESULT([no]) ;
+ echo ""
+ echo "INFO: Tauola location not specified. Not all examples will be available." ;
+ echo " To define location use parameter: --with-tauola" ;
+ echo ""
+ ]
+)
+
+AM_CONDITIONAL([HAS_HEPMC], [test "x$with_hepmc" != "x"])
+AM_CONDITIONAL([HAS_PYTHIA8], [test "x$with_pythia8" != "x"])
+AM_CONDITIONAL([HAS_MCTESTER], [test "x$with_mc_tester" != "x"])
+AM_CONDITIONAL([HAS_TAUOLA], [test "x$with_tauola" != "x"])
+
+AC_CONFIG_FILES([Makefile src/Makefile examples/Makefile])
+AC_OUTPUT
--- /dev/null
+exampledir = $(top_srcdir)/examples
+
+noinst_LTLIBRARIES = libphotos_hepevt_example_interface.la
+libphotos_hepevt_example_interface_la_SOURCES = photos_hepevt_example_interface.cxx
+
+### HEPEVT example ###
+example_PROGRAMS = photos_hepevt_example.exe
+
+photos_hepevt_example_exe_SOURCES = photos_hepevt_example.f
+photos_hepevt_example_exe_FFLAGS = -fno-automatic -fno-backslash -ffixed-line-length-132
+
+INCLUDES = -I$(prefix)/include
+
+AM_LDFLAGS = -R $(prefix)/lib
+
+LDADD = \
+$(FLIBS) \
+$(prefix)/lib/libPhotosCxxInterface.so \
+$(prefix)/lib/libPhotosFortran.so
+
+photos_hepevt_example_exe_LDADD = -lphotos_hepevt_example_interface $(LDADD)
+
+### All other examples require HepMC ###
+if HAS_HEPMC
+
+AM_LDFLAGS += -R $(HEPMC_DIR)/lib
+
+INCLUDES += -I$(HEPMC_DIR)/include
+LDADD += -L$(HEPMC_DIR)/lib -lHepMC
+
+photos_hepevt_example_exe_LDADD += -L$(HEPMC_DIR)/lib -lHepMC
+
+example_PROGRAMS += photos_standalone_example.exe
+
+photos_standalone_example_exe_SOURCES = photos_standalone_example.cxx
+
+### Photos gun example (require Pythia8) ###
+if HAS_PYTHIA8
+
+AM_LDFLAGS += -R $(PYTHIA8_DIR)/lib/archive
+
+INCLUDES += -I$(PYTHIA8_DIR)/include
+LDADD += -L$(PYTHIA8_DIR)/lib/archive -lpythia8 -llhapdfdummy -lhepmcinterface
+
+example_PROGRAMS += single_photos_gun_example.exe photosLCG_pythia_example.exe
+
+single_photos_gun_example_exe_SOURCES = single_photos_gun_example.cxx
+photosLCG_pythia_example_exe_SOURCES = photosLCG_pythia_example.cxx
+
+### Pythia example (requires Pythia8 and MC-Tester) ###
+if HAS_MCTESTER
+
+AM_LDFLAGS += -R $(MCTESTER_DIR)/lib
+
+INCLUDES += -I$(MCTESTER_DIR)/include -I$(ROOTINC)
+LDADD += -L$(MCTESTER_DIR)/lib -lHEPEvent -lHepMCEvent -lMCTester $(ROOTLIBS)
+
+example_PROGRAMS += photos_pythia_example.exe
+
+photos_pythia_example_exe_SOURCES = photos_pythia_example.cxx
+
+if HAS_TAUOLA
+
+AM_LDFLAGS += -R $(TAUOLA_DIR)/lib
+
+INCLUDES += -I$(TAUOLA_DIR)/include
+LDADD += -L$(TAUOLA_DIR)/lib -lTauolaFortran -lTauolaCxxInterface
+
+example_PROGRAMS += tauola_photos_pythia_example.exe
+
+tauola_photos_pythia_example_exe_SOURCES = tauola_photos_pythia_example.cxx
+
+endif # TAUOLA
+
+endif # MC-TESTER
+
+endif # PYTHIA8
+
+endif # HEPMC
--- /dev/null
+includedir=$(prefix)/include/Photos
+
+lib_LTLIBRARIES = libPhotosFortran.la libPhotosCxxInterface.la
+
+libPhotosFortran_la_SOURCES = photos-fortran/photosC.cxx \
+photos-fortran/forW-MEc.cxx \
+photos-fortran/forZ-MEc.cxx
+
+################################################################################
+
+libPhotosCxxInterface_la_SOURCES = \
+eventRecordInterfaces/PhotosHEPEVTEvent.cxx \
+eventRecordInterfaces/PhotosHEPEVTParticle.cxx \
+photosCInterfaces/Photos.cxx \
+photosCInterfaces/PhotosParticle.cxx \
+photosCInterfaces/PhotosBranch.cxx \
+photosCInterfaces/PhotosEvent.cxx \
+photosFortranInterfaces/PH_HEPEVT_Interface.cxx \
+utilities/Log.cxx \
+utilities/PhotosUtilities.cxx \
+utilities/PhotosRandom.cxx
+
+include_HEADERS = \
+eventRecordInterfaces/PhotosHEPEVTParticle.h \
+eventRecordInterfaces/PhotosHEPEVTEvent.h \
+photosCInterfaces/Photos.h \
+photosCInterfaces/PhotosParticle.h \
+photosCInterfaces/PhotosBranch.h \
+photosCInterfaces/PhotosEvent.h \
+photosFortranInterfaces/PH_HEPEVT_Interface.h \
+photosFortranInterfaces/f_Init.h \
+utilities/Log.h \
+utilities/PhotosRandom.h
+
+if HAS_HEPMC
+ libPhotosCxxInterface_la_SOURCES += \
+ eventRecordInterfaces/PhotosHepMCEvent.cxx \
+ eventRecordInterfaces/PhotosHepMCParticle.cxx
+
+ include_HEADERS += \
+ eventRecordInterfaces/PhotosHepMCParticle.h \
+ eventRecordInterfaces/PhotosHepMCEvent.h
+endif
+
+INCLUDES = -I$(top_srcdir)/src/photosFortranInterfaces \
+ -I$(top_srcdir)/src/photosCInterfaces \
+ -I$(top_srcdir)/src/utilities \
+ -I$(HEPMC_DIR)/include
+
+libPhotosCxxInterface_la_LIBADD = libPhotosFortran.la
--- /dev/null
+#! /bin/csh
+
+# This file can be modified by user to provide local path or afs path to
+# different platofrm or version of HepMC, Pythia8 and ROOT.
+
+# Safeguard test if running with /afs paths.
+if (! -d "/afs/cern.ch/sw/lcg") then
+ echo ""
+ echo "This script is for use on CERN server only."
+ echo ""
+ exit 0
+endif
+
+
+# Prevents user to modify these paths by using e.g.
+# ./configure --with-HepMC=<path>
+setenv AFS_PATHS 'yes'
+
+setenv HEPMCLOCATION '/afs/cern.ch/sw/lcg/external/HepMC/2.03.11/slc4_amd64_gcc34'
+setenv PYTHIALOCATION '/afs/cern.ch/sw/lcg/external/MCGenerators/pythia8/135/slc4_amd64_gcc34'
+setenv TAUOLALOCATION 'afs/cern.ch/sw/lcg/external/MCGenerators/tauola++/1.0.2a/slc4_amd64_gcc34'
+setenv MCTESTERLOCATION '/afs/cern.ch/sw/lcg/external/MCGenerators/mctester/1.24/slc4_amd64_gcc34'
+setenv PYTHIA8DATA "${PYTHIALOCATION}/xmldoc"
+
+setenv PATH "/afs/cern.ch/sw/lcg/app/releases/ROOT/5.22.00/slc4_amd64_gcc34/root/bin:${PATH}"
+
+set ROOTLIBPATH=`root-config --libdir`
+set HERE=`(cd .. && pwd)`
+
+if (! $?LD_LIBRARY_PATH) setenv LD_LIBRARY_PATH ""
+
+setenv LD_LIBRARY_PATH "${HERE}/lib:${ROOTLIBPATH}:${HEPMCLOCATION}/lib:${PYTHIALOCATION}/lib:${TAUOLALOCATION}/lib:${MCTESTERLOCATION}/lib:${LD_LIBRARY_PATH}"
+
+echo ""
+echo "Paths for HepMC, Pythia8, MC-Tester and ROOT set to AFS software"
+echo "WARNING: As of today (30 Oct 2010) MC-TESTER 1.24 is available on AFS."
+echo " Note, however, that AFS path contains separate path for files"
+echo " needed for analysis, therefore only generation step can be"
+echo " performed. Analysis step used by advanced tests"
+echo " must be done manualy."
+echo ""
+
--- /dev/null
+#! /bin/sh
+
+# This file can be modified by user to provide local path or afs path to
+# different platofrm or version of HepMC, Pythia8, MC-Tester and ROOT.
+
+# Safeguard test if running with /afs paths.
+if test ! -d /afs/cern.ch/sw/lcg; then
+ echo ""
+ echo "This script is for use on CERN server only."
+ echo ""
+ exit 0
+fi
+
+# Prevents user to modify these paths by using e.g.
+# ./configure --with-HepMC=<path>
+export AFS_PATHS=yes
+
+export HEPMCLOCATION=/afs/cern.ch/sw/lcg/external/HepMC/2.03.11/slc4_amd64_gcc34
+export PYTHIALOCATION=/afs/cern.ch/sw/lcg/external/MCGenerators/pythia8/135/slc4_amd64_gcc34
+export TAUOLALOCATION=/afs/cern.ch/sw/lcg/external/MCGenerators/tauola++/1.0.2a/slc4_amd64_gcc34
+export MCTESTERLOCATION=/afs/cern.ch/sw/lcg/external/MCGenerators/mctester/1.24/slc4_amd64_gcc34
+export PYTHIA8DATA=$PYTHIALOCATION/xmldoc
+
+export PATH=/afs/cern.ch/sw/lcg/app/releases/ROOT/5.22.00/slc4_amd64_gcc34/root/bin:$PATH
+
+ROOTLIBPATH=`root-config --libdir`
+HERE=`(cd .. && pwd)`
+
+export LD_LIBRARY_PATH=$HERE/lib:$ROOTLIBPATH:$HEPMCLOCATION/lib:$MCTESTERLOCATION/lib:$PYTHIALOCATION/lib:$TAUOLALOCATION/lib:$LD_LIBRARY_PATH
+
+echo ""
+echo "Paths for HepMC, Pythia8, MC-Tester and ROOT set to AFS software"
+echo "WARNING: As of today (30 Oct 2010) MC-TESTER 1.24 is available on AFS."
+echo " Note, however, that AFS path contains separate path for files"
+echo " needed for analysis, therefore only generation step can be"
+echo " performed. Analysis step used by advanced tests"
+echo " must be done manualy."
+echo ""
--- /dev/null
+PREFIX = @prefix@
+HEPMCLOCATION = @with_hepmc@
+
+F77 = @F77@
+F77FLAGS = @FFLAGS@ -fPIC -fno-automatic -fno-backslash -ffixed-line-length-132
+FFLAGS = $(F77FLAGS)
+
+LD = @F77@
+LDFLAGS = -g -lstdc++
+SOFLAGS = -shared
+
+RANLIB = @RANLIB@
+AR = ar
+DIFF = diff -ib
+
+CPP = @DIRECT_CPP@
+CPPFLAGS= -C -P -traditional-cpp
+
+CC = @CXX@
+CFLAGS = @CXXFLAGS@ -fPIC -Wall -Wno-write-strings
+
+GCC = @CC@
+GCCFLAGS= -O3 -fomit-frame-pointer -DHAVE_UNDERSCORE
+
+#Uncomment to compile with debug mode turned on
+#DEBUG = -D"_LOG_DEBUG_MODE_"
--- /dev/null
+#!/bin/sh
+
+if test ! -d ../src; then
+ echo "WARNING! Script must be running from PHOTOS/platform directory!"
+ return
+fi
+
+echo "This option will overwrite all configuration scripts/makefiles"
+echo "and modify the configuration procedure to match LCG setup."
+echo ""
+echo "You will need autotools version 2.59 or higher."
+echo ""
+echo "Proceed? (Yes/No)"
+read ANSWER
+
+ANSWER=`echo $ANSWER | tr "[:upper:]" "[:lower:]"`
+
+if test "$ANSWER" = "yes" || test "$ANSWER" = "y"; then
+ echo "Removing previous installation scripts"
+ rm -rf ../config* ../make* ../Make*
+ rm -rf ../src/make.inc ../src/*/Makefile ../src/photos-fortran/make*
+ rm -rf ../examples/config* ../examples/make* ../examples/Make*
+
+ echo "Copying and configuring new scripts"
+ cp -rf LCGCONFIG/* ../.
+ cd ..
+ autoreconf --install --force
+ echo "Done."
+else
+ echo "Aborted."
+fi
--- /dev/null
+include ../make.inc
+
+SOURCES_CC = PhotosHEPEVTEvent.cxx PhotosHEPEVTParticle.cxx
+
+ifneq ($(HEPMCLOCATION), )
+ SOURCES_CC += PhotosHepMCParticle.cxx PhotosHepMCEvent.cxx
+endif
+
+OBJECTS_CC=$(SOURCES_CC:.cxx=.o)
+
+%.o: %.cxx
+ $(CC) $(CFLAGS) $(DEBUG) -I$(HEPMCLOCATION)/include -I. -I../utilities -I../photosFortranInterfaces -I../photosCInterfaces -c $< -o $@
+
+all: $(OBJECTS_CC)
+
+clean:
+ rm -f *.o *~;
clear(m_mothers);
clear(m_daughters);
// clear(m_created_particles);
-
- // Delete HepMC particle if it's not attached to any vertex
- if( m_particle &&
- !m_particle->production_vertex() &&
- !m_particle->end_vertex()) delete m_particle;
}
--- /dev/null
+../make.inc
\ No newline at end of file
cout << " ERROR IN InProd_zero:"<<endl;
cout << " WRONG VALUES FOR l1,l2: l1,l2 = -1,+1 "<<endl;
cout << " " <<endl;
- exit(0);
+ exit(-1);
}
}
cout <<" ERROR IN InProd_mass.."<<endl;
cout <<" WRONG VALUES FOR l1,l2"<<endl;
cout <<" " <<endl;
- exit(0);
+ exit(-1);
}
}
cout << " ERROR IN BsFactor: "<<endl;
cout << " WRONG VALUES FOR s : s = -1,+1"<<endl;
cout << " " <<endl;
- exit(0);
+ exit(-1);
}
}
cout << " ERROR IN TrMatrix_zero: " <<endl;
cout << " WRONG VALUES FOR l1,l2,s" <<endl;
cout << "" <<endl;
- exit(0);
+ exit(-1);
}
cout << " ERROR IN TrMatrix_zero: " << endl;
cout << " WRONG VALUES FOR l1,l2,s" << endl;
cout << "" << endl;
- exit(0);
+ exit(-1);
}
}
cout << " TrMatrix_mass: Wrong values for l1,l2,s:"<< endl;
cout << " l1,l2 = -1,+1; s = -1,0,1 "<< endl;
cout << " "<< endl;
- exit(0);
+ exit(-1);
}
int IH, IDTYPE, IC, LEPQUA, IUPDOW;
if (IDFERM==0 || abs(IDFERM)>4 || abs(IHELIC)!=1){
cout << "STOP IN GIVIZO: WRONG PARAMS" << endl;
- exit(0);
+ exit(-1);
}
IH =IHELIC;
Af = 2*T3f;
if(fabs(costhe) > 1.0){
cout << "+++++STOP in PHBORN: costhe>0 =" << costhe << endl;
- exit(0);
+ exit(-1);
}
MZ2 = MZ*MZ;
RaZ = (GFermi *MZ2 *AlfInv )/( sqrt(2.0) *8.0 *PI); //
--- /dev/null
+include ../make.inc
+
+SOURCES_C=photosC.cxx forZ-MEc.cxx forW-MEc.cxx
+OBJECTS_C=$(SOURCES_C:.cxx=.o)
+
+%.o: %.cxx
+ $(CC) $(CFLAGS) $(DEBUG) -I. -I../photosCInterfaces -I../photosFortranInterfaces -I../utilities -c $< -o $@
+
+all: $(OBJECTS_C)
+
+clean:
+ rm -f *.o *~;
#include "f_Init.h"
#include "PH_HEPEVT_Interface.h"
#include "PhotosUtilities.h"
-
using std::cout;
using std::endl;
using std::max;
else{
fprintf(PHLUN,"PHCORK wrong MODCOR=%4i\n",MODCOR);
- exit(0);
+ exit(-1);
}
return;
}
if(MODOP==0&&MODCOR==0){
fprintf(PHLUN,"PHCORK lack of initialization\n");
- exit(0);
+ exit(-1);
}
// execution mode
pho.isthep[pho.nhep-i]=1;
pho.idhep[pho.nhep-i] =22;
//-- Photon mother and daughter pointers !
- pho.jmohep[pho.nhep-i][1]=IP;
- pho.jmohep[pho.nhep-i][2]=0;
- pho.jdahep[pho.nhep-i][1]=0;
- pho.jdahep[pho.nhep-i][2]=0;
+ pho.jmohep[pho.nhep-i][1-i]=IP;
+ pho.jmohep[pho.nhep-i][2-i]=0;
+ pho.jdahep[pho.nhep-i][1-i]=0;
+ pho.jdahep[pho.nhep-i][2-i]=0;
pho.phep[pho.nhep-i][4-i]=EPHOTO*pho.phep[IP-i][5-i]/PMAVIR;
//--
//-- ...and photon momenta
phwt_.wt2=(1.0-XX/YY/(1.0-phwt_.beta*phwt_.beta*phophs_.costhg*phophs_.costhg))*(1.0+phophs_.costhg*phwt_.beta)/2.0;
- IscaNLO=Photos::meCorrectionWtForScalar; ///// @@@@@
+ IscaNLO=Photos::meCorrectionWtForScalar;
if(ME==1 && IscaNLO ==1){ // this switch NLO in scalar decays.
// overrules default calculation.
// Need tests including basic ones
// Last Update: 16/11/93
//
//----------------------------------------------------------------------
-void PHOIN(int IP,bool *BOOST,int nhep0){
+void PHOIN(int IP,bool *BOOST,int *NHEP0){
int FIRST,LAST,I,LL,IP2,J,NA;
double PB;
static int i=1;
+ int &nhep0 = *NHEP0;
//--
// let-s calculate size of the little common entry
pho.jdahep[1-i][2-i]=3+LAST-FIRST+hep.nhep-nhep0;
}
if (pho.idhep[pho.nhep-i]==22) PHLUPA(100001);
- // if (pho.idhep[pho.nhep-i]==22) exit(0);
+ // if (pho.idhep[pho.nhep-i]==22) exit(-1);
PHCORK(0);
if(pho.idhep[pho.nhep-i]==22) PHLUPA(100002);
*BOOST=true;
//PHOERR(404,"PHOIN",1.0); // we need to improve this warning: program should never
// enter this place
- // may be exit(0);
+ // may be exit(-1);
//--
//-- Boost daughter particles to rest frame of parent...
//-- Resultant neutral system already calculated in rest frame !
if(phokey_.iftop) PHOTWO(1);
PHLUPA(2);
if(pho.idhep[pho.nhep-i]==22) PHLUPA(10000);
- //if (pho.idhep[pho.nhep-1-i]==22) exit(0); // this is probably form very old times ...
+ //if (pho.idhep[pho.nhep-1-i]==22) exit(-1); // this is probably form very old times ...
return;
}
//-- When parent was not in its rest-frame, boost back...
PHLUPA(10);
if (BOOST){
- PHOERR(404,"PHOOUT",1.0); // we need to improve this warning: program should never
- // enter this place
+ //PHOERR(404,"PHOOUT",1.0); // we need to improve this warning: program should never
+ // enter this place
+
+ double phocms_check = fabs(1 - phocms_.gam) + fabs(phocms_.bet[1-i]) + fabs(phocms_.bet[2-i]) + fabs(phocms_.bet[3-i]);
+ if( phocms_check > 0.001 ) {
+ Log::Error() << "Msg. from PHOOUT: possible problems with boosting due to the rounding errors." << endl
+ << "Boost parameters: ("<< phocms_.gam << ","
+ << phocms_.bet[1-i] << "," << phocms_.bet[2-i] << "," << phocms_.bet[3-i] << ")"<<endl
+ << "should be equal to: (1,0,0,0) up to at least several digits." << endl;
+ }
+ else{
+ Log::Warning() << "Msg. from PHOOUT: possible problems with boosting due to the rounding errors." << endl
+ << "Boost parameters: ("<< phocms_.gam << ","
+ << phocms_.bet[1-i] << "," << phocms_.bet[2-i] << "," << phocms_.bet[3-i] << ")"<<endl
+ << "should be equal to: (1,0,0,0) up to at least several digits." << endl;
+ }
for (J=pho.jdahep[1-i][1-i];J<=pho.jdahep[1-i][2-i];J++){
PB=-phocms_.bet[1-i]*pho.phep[J-i][1-i]-phocms_.bet[2-i]*pho.phep[J-i][2-i]-phocms_.bet[3-i]*pho.phep[J-i][3-i];
}
else{
cout << "problem with ME_CHANNEL IDME= " << IDME << endl;
- exit(0);
+ exit(-1);
}
//----------- END OF VARIANT A ------------------
IDUM=1;
NCHARG=0;
//--
- PHOIN(IP,&BOOST,NHEP0);
+ PHOIN(IP,&BOOST,&NHEP0);
PHOCHK(hep.jdahep[IP-i][1-i]);
WT=0.0;
PHOPRE(1,&WT,&NEUDAU,&NCHARB);
}
else{
cout << "problem with ME_CHANNEL IDME= " << IDME << endl;
- exit(0);
+ exit(-1);
}
#ifndef VARIANTB
--- /dev/null
+include ../make.inc
+
+SOURCES_CC=PhotosParticle.cxx PhotosEvent.cxx PhotosBranch.cxx Photos.cxx
+OBJECTS_CC=$(SOURCES_CC:.cxx=.o)
+
+%.o: %.cxx
+ $(CC) $(CFLAGS) $(DEBUG) -I. -I../utilities -I../photosFortranInterfaces -I../eventRecordInterfaces -c $< -o $@
+
+all: $(OBJECTS_CC)
+
+clean:
+ rm -f *.o *~;
#include "PhotosEvent.h"
#include "Photos.h"
#include "Log.h"
-
-
using std::vector;
using std::cout;
using std::endl;
static int IPHQRK_MODOP=-1;
if(IPHQRK_MODOP==-1 && MODCOR==0){
cout << "stop from IPHQRK_setQarknoEmission lack of initialization" << endl ;
- exit(0);
+ exit(-1);
}
else if (MODCOR != 0){
IPHQRK_MODOP = MODCOR;
*
* @author Nadia Davidson
* @date 16th June 2008
- *
*/
#include <stdarg.h>
#include <vector>
class Photos
{
public:
- static const int VER_MAJOR=3, VER_MINOR=54;
- static const int DAT_DAY =2, DAT_MONTH=12,DAT_YEAR=13;
+ static const int VER_MAJOR=3, VER_MINOR=56;
+ static const int DAT_DAY =3, DAT_MONTH=5, DAT_YEAR=14;
public:
/** Initalize Photos with the parameters previously set via the
--- /dev/null
+include ../make.inc
+
+SOURCES_C=PH_HEPEVT_Interface.cxx
+OBJECTS_C=$(SOURCES_C:.cxx=.o)
+
+%.o: %.cxx
+ $(CC) $(CFLAGS) $(DEBUG) -I. -I../photosCInterfaces -I../photosFortranInterfaces -I../utilities -c $< -o $@
+
+all: $(OBJECTS_C)
+
+clean:
+ rm -f *.o *~;
//now set the element of PH_HEPEVT
hep.nevhep=0; //dummy
- hep.nhep=hep.nhep++;
+ hep.nhep = hep.nhep + 1; // 1.II.2014: fix for gcc 4.8.1. Previously it was:
+ // hep.nhep = hep.nhep++; which technically is an undefined operation
hep.isthep[i]=particle->getStatus();
hep.idhep[i]=particle->getPdgID();
fprintf(PHLUN,"*\n"); //9120
fprintf(PHLUN,"%s\n",star80);
if (IFSTOP){
- exit(0);
+ exit(-1);
}
else{
fprintf(PHLUN,"*\n"); //9120
fprintf(PHLUN,"*\n");//9120
fprintf(PHLUN,"%s\n",star80);
if (IFSTOP){
- exit(0);
+ exit(-1);
}
else{
fprintf(PHLUN,"*\n"); //9120
--- /dev/null
+include ../make.inc
+
+SOURCES_CC=Log.cxx PhotosRandom.cxx PhotosDebugRandom.cxx PhotosUtilities.cxx
+OBJECTS_CC=$(SOURCES_CC:.cxx=.o)
+
+%.o: %.cxx
+ $(CC) $(CFLAGS) $(DEBUG) -I. -I../photosCInterfaces -I../photosFortranInterfaces -I../eventRecordInterfaces -c $< -o $@
+
+all: $(OBJECTS_CC)
+
+clean:
+ rm -f *.o *~;
}
else{
cout << " ++++++++ wrong mode in boostdq " << endl;
- exit(0);
+ exit(-1);
}
r[1-i]=p[1-i]+fac*q[1-i];
r[2-i]=p[2-i]+fac*q[2-i];
http://svnweb.cern.ch/guest/evtgen/tags/R01-03-00
//------------------------------------------------------------------------------//
-[23/05/2014]
+[28/05/2014]
1)This module contains:
- EvtGen original code organized in four directories:
in the directory TEvtGen/EvtGen/DecayTable and are used to generate "forced" decay modes.
All parameters, models and BR used in these tables are not modified with respect
to the official EvtGen release.
+ The following decay tables are tested: BTOD.DEC, BTOELE.DEC, BTOJPSI.DEC, BTOJPSITOELE.DEC,
+ BTOJPSITOMU.DEC.
4)Polarization is still to be implemented in the interface classes.
5)Below an example of the usage of EvtGen in AliRoot to decay beauty particles.
The following lines should be added in the Config.C:
+ // set the xmldoc path using PYTHIA8DATA enviroement var
+ gSystem->Setenv("PYTHIA8DATA", gSystem->ExpandPathName("$ALICE_ROOT/PYTHIA8/pythia8175/xmldoc"));
//----- load libraries
gSystem->Load("libHepMC.so");
#include "DecayList.h"
-#include "Log.h"
+#include "TauolaLog.h"
using namespace std;
#include <fstream>
#include <cstring>
#include <vector>
-#include "Log.h"
+#include "TauolaLog.h"
#include "Tauola.h"
#include "TauolaEvent.h"
#include <iostream>
#include "TauolaParticle.h"
-#include "f_Init.h"
+#include "f_InitTauola.h"
#include "f_Variables.h"
namespace Tauolapp
#include "TauolaHEPEVTEvent.h"
-#include "Log.h"
+#include "TauolaLog.h"
namespace Tauolapp
{
#include "TauolaHEPEVTParticle.h"
-#include "Log.h"
+#include "TauolaLog.h"
namespace Tauolapp
{
#include "TauolaHepMCEvent.h"
-#include "Log.h"
+#include "TauolaLog.h"
using namespace std;
#include "TauolaHepMCParticle.h"
-#include "Log.h"
+#include "TauolaLog.h"
namespace Tauolapp
{
#include <fstream>
-#include "Log.h"
+#include "TauolaLog.h"
using std::streambuf;
using std::stringstream;
using std::ostream;
#include "TauolaParticle.h"
-#include "Log.h"
+#include "TauolaLog.h"
#include <stdexcept>
namespace Tauolapp
#include "Tauola.h"
#include "TauolaParticlePair.h"
-#include "Log.h"
+#include "TauolaLog.h"
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include "f_FilHep.h"
#include "Tauola.h"
-#include "Log.h"
+#include "TauolaLog.h"
namespace Tauolapp
{
-#include "f_Init.h"
-#include "Log.h"
+#include "f_InitTauola.h"
+#include "TauolaLog.h"
#include <iostream>
using std::endl;
// gROOT->SetStyle("Plain"); gStyle->SetPalette(1);
// TCanvas *c2 = new TCanvas("cAliTPCROCVoltError3D","cAliTPCROCVoltError3D",500,400);
// AliTPCROCVoltError3D roc;
+// roc.SetROCDataFileName("$ALICE_ROOT/TPC/Calib/maps/TPCROCdzSurvey.root");
// roc.SetElectronArrivalCorrection(kFALSE); // Correction for electron arrival offset, IROC vs OROC
// roc.SetROCDisplacement(kTRUE); // include the chamber offset in z when calculating the dz
// roc.SetOmegaTauT1T2(0,1,1); // B=0
TH1D * corrMax = (TH1D*)arrMax.At(1)->Clone();
histQtot->FitSlicesY(0,0,-1,0,"QNR",&arrTot);
TH1D * corrTot = (TH1D*)arrTot.At(1)->Clone();
+ AliInfo(Form("hisQtot.GetEntries()=%d",histQtot->GetEntries()));
+ AliInfo(Form("hisQmax.GetEntries()=%d",histQmax->GetEntries()));
+ if (histQmax->GetMean(2)<=0 || histQtot->GetMean(2)) {
+ return kFALSE;
+ }
corrMax->Scale(1./histQmax->GetMean(2));
corrTot->Scale(1./histQtot->GetMean(2));
//
fMaxSnpTrack(0.999),
fUseOuterDetectors(kFALSE),
fMaxChi2TPCTRD(36), // maximal allowed chi2 between the TRD in and TPC out to be accepted for refit
+ fMaxChi2TPCITS(36), // maximal allowed chi2 between the ITS in and TPC out to be accepted for backpropagation
fDumpSignal(kFALSE),
fFirstBin(0),
fLastBin(-1),
void SetUseOuterDetectors(Bool_t flag) { fUseOuterDetectors=flag;}
void SetMaxChi2TPCTRD(Double_t maxChi2){fMaxChi2TPCTRD=maxChi2;}
Double_t GetMaxChi2TPCTRD() const {return fMaxChi2TPCTRD;}
+ void SetMaxChi2TPCITS(Double_t maxChi2){fMaxChi2TPCITS=maxChi2;}
+ Double_t GetMaxChi2TPCITS() const {return fMaxChi2TPCITS;}
Double_t GetCutSharedClusters(Int_t index)const { return fCutSharedClusters[index];}
void SetCutSharedClusters(Int_t index, Float_t value){ fCutSharedClusters[index]=value;}
Int_t GetClusterMaxRange(Int_t index)const { return fClusterMaxRange[index];}
Double_t fMaxSnpTrack; // max sin of local angle - for track
Bool_t fUseOuterDetectors; // switch - to use the outer detectors
Double_t fMaxChi2TPCTRD; // maximal allowed chi2 between the TRD in and TPC out to be accepted for refit
+ Double_t fMaxChi2TPCITS; // maximal allowed chi2 between the ITS in and TPC out to be accepted for backpropagation
//
//
Double_t fCutSharedClusters[2]; // cut value - maximal amount of shared clusters
// to be switched off for pass 0 reconstruction
// Use static function, other option will be to use
// additional specific storage ?
- ClassDef(AliTPCRecoParam, 18)
+ ClassDef(AliTPCRecoParam, 19)
};
const AliExternalTrackParam *tpcout=(t.GetFriendTrack())? ((AliESDfriendTrack*)(t.GetFriendTrack()))->GetTPCOut():0;
const AliExternalTrackParam *tpcin = t.GetInnerParam();
const AliExternalTrackParam *tpc=(tpcout)?tpcout:tpcin;
+ Bool_t isBackProp = tpcout==0; // is this backpropagation?
if (!tpc) tpc=¶m;
- //Bool_t isOK=kTRUE;// RS recoParam->GetUseOuterDetectors();
- Bool_t isOK=recoParam->GetUseOuterDetectors();
- if (param.GetCovariance()[0]>kmaxC[0]*kmaxC[0]) isOK=kFALSE;
- if (param.GetCovariance()[2]>kmaxC[1]*kmaxC[1]) isOK=kFALSE;
- if (param.GetCovariance()[5]>kmaxC[2]*kmaxC[2]) isOK=kFALSE;
- if (param.GetCovariance()[9]>kmaxC[3]*kmaxC[3]) isOK=kFALSE;
- param.Rotate(tpc->GetAlpha());
+
+ Bool_t isOK = (recoParam->GetUseOuterDetectors() && t.IsOn(AliESDtrack::kTRDrefit)) || isBackProp;
+ if (param.GetCovariance()[0]>kmaxC[0]*kmaxC[0] ||
+ param.GetCovariance()[2]>kmaxC[1]*kmaxC[1] ||
+ param.GetCovariance()[5]>kmaxC[2]*kmaxC[2] ||
+ param.GetCovariance()[9]>kmaxC[3]*kmaxC[3]) isOK=kFALSE;
+ //
+ if (isOK) isOK &= param.Rotate(tpc->GetAlpha()); // using external seed
Double_t oldX=param.GetX(), oldY=param.GetY(), oldZ=param.GetZ();
if (!isOK ){
param=*tpc;
isOK=kTRUE;
reject=1;
}
- param.Rotate(tpc->GetAlpha());
- isOK=AliTracker::PropagateTrackToBxByBz(¶m,tpc->GetX(),t.GetMass(),2.,kFALSE);
- if (param.GetCovariance()[0]>kmaxC[0]*kmaxC[0]) isOK=kFALSE;
- if (param.GetCovariance()[2]>kmaxC[1]*kmaxC[1]) isOK=kFALSE;
- if (param.GetCovariance()[5]>kmaxC[2]*kmaxC[2]) isOK=kFALSE;
- if (param.GetCovariance()[9]>kmaxC[3]*kmaxC[3]) isOK=kFALSE;
- Double_t chi2= param.GetPredictedChi2(tpc);
- if (chi2>recoParam->GetMaxChi2TPCTRD()){
- isOK=kFALSE;
+ else { // using external seed
+ // param.Rotate(tpc->GetAlpha()); // not needed
+ if (!AliTracker::PropagateTrackToBxByBz(¶m,tpc->GetX(),t.GetMass(),2.,kFALSE) ||
+ param.GetCovariance()[0]>kmaxC[0]*kmaxC[0] ||
+ param.GetCovariance()[2]>kmaxC[1]*kmaxC[1] ||
+ param.GetCovariance()[5]>kmaxC[2]*kmaxC[2] ||
+ param.GetCovariance()[9]>kmaxC[3]*kmaxC[3]) isOK=kFALSE;
+ }
+ if (isOK) {
+ Double_t chi2= param.GetPredictedChi2(tpc);
+ if (isBackProp) {
+ if (chi2>recoParam->GetMaxChi2TPCITS()) isOK=kFALSE; // protection against outliers in the ITS
+ }
+ else if (chi2>recoParam->GetMaxChi2TPCTRD()) isOK=kFALSE; // protection against outliers in the TRD
}
if (!isOK){
}
}
}
+ }
- // in case of tracklet writing copy temp data to final buffer
- if (trackletOn) {
- if (nw + *tempnw < maxSize) {
- memcpy(&buf[nw], tempBuffer, *tempnw * sizeof(UInt_t));
- nw += *tempnw;
- }
- else {
- AliError("Buffer overflow detected");
- }
+ // in case of tracklet writing copy temp data to final buffer
+ if (trackletOn) {
+ if (nw + *tempnw < maxSize) {
+ memcpy(&buf[nw], tempBuffer, *tempnw * sizeof(UInt_t));
+ nw += *tempnw;
+ }
+ else {
+ AliError("Buffer overflow detected");
}
- }
- if (trackletOn) {
delete [] tempBuffer;
delete tempof;
delete tempnw;
,fNumberOfConfigs(3)
,fFlags(0)
,fRawStreamVersion("DEFAULT")
+ ,fdzdxXcrossFactor(0.)
,fMinMaxCutSigma(4.)
,fMinLeftRightCutSigma(8.)
,fClusMaxThresh(4.5)
SetImproveTracklets();
SetLUT();
SetTailCancelation();
+ SetTrackletParams();
}
//______________________________________________________________
,fNumberOfConfigs(ref.fNumberOfConfigs)
,fFlags(ref.fFlags)
,fRawStreamVersion(ref.fRawStreamVersion)
+ ,fdzdxXcrossFactor(ref.fdzdxXcrossFactor)
,fMinMaxCutSigma(ref.fMinMaxCutSigma)
,fMinLeftRightCutSigma(ref.fMinLeftRightCutSigma)
,fClusMaxThresh(ref.fClusMaxThresh)
memcpy(fTCParams, ref.fTCParams, 8*sizeof(Double_t));
memcpy(fPIDThreshold, ref.fPIDThreshold, AliTRDCalPID::kNMom*sizeof(Double_t));
memcpy(fStreamLevel, ref.fStreamLevel, kTRDreconstructionTasks * sizeof(Int_t));
+
+ // tracklet params
+ memcpy(fdzdxCorrFactor, ref.fdzdxCorrFactor, 2*sizeof(Double_t));
+ memcpy(fdzdxCorrRCbias, ref.fdzdxCorrRCbias, 2*sizeof(Double_t));
+ memcpy(fYcorrTailCancel, ref.fdzdxCorrRCbias, 6*sizeof(Double_t));
+ memcpy(fS2Ycorr, ref.fS2Ycorr, 2*sizeof(Double_t));
}
//______________________________________________________________
fNumberOfConfigs = ref.fNumberOfConfigs;
fFlags = ref.fFlags;
fRawStreamVersion = ref.fRawStreamVersion;
+ fdzdxXcrossFactor = ref.fdzdxXcrossFactor;
fMinMaxCutSigma = ref.fMinMaxCutSigma;
fMinLeftRightCutSigma = ref.fMinLeftRightCutSigma;
fClusMaxThresh = ref.fClusMaxThresh;
memcpy(fTCParams, ref.fTCParams, 8*sizeof(Double_t));
memcpy(fPIDThreshold, ref.fPIDThreshold, AliTRDCalPID::kNMom*sizeof(Double_t));
memcpy(fStreamLevel, ref.fStreamLevel, kTRDreconstructionTasks * sizeof(Int_t));
+
+ // tracklet params
+ memcpy(fdzdxCorrFactor, ref.fdzdxCorrFactor, 2*sizeof(Double_t));
+ memcpy(fdzdxCorrRCbias, ref.fdzdxCorrRCbias, 2*sizeof(Double_t));
+ memcpy(fYcorrTailCancel, ref.fdzdxCorrRCbias, 6*sizeof(Double_t));
+ memcpy(fS2Ycorr, ref.fS2Ycorr, 2*sizeof(Double_t));
return *this;
}
}
}
+//___________________________________________________
+void AliTRDrecoParam::SetTrackletParams(Double_t *par)
+{
+ // Load tracklet reconstruction parameters. If none are set use defaults
+ if(par){
+ // correct dzdx for the bias in z
+ fdzdxCorrFactor[0] = par[0]; // !RC
+ fdzdxCorrFactor[1] = par[1]; // RC
+ // correct dzdx in RC tracklets for the bias in cluster attachment
+ fdzdxCorrRCbias[0] = par[2]; // dz/dx > 0
+ fdzdxCorrRCbias[1] = par[3]; // dz/dx < 0
+ /// correct x_cross for the bias in dzdx
+ fdzdxXcrossFactor = par[4];
+ // y linear q/pt correction due to wrong tail cancellation.
+ fYcorrTailCancel[0][0] = par[5]; fYcorrTailCancel[0][1] = par[6]; // opposite sign !RC
+ fYcorrTailCancel[1][0] = par[7]; fYcorrTailCancel[1][1] = par[8]; // same sign !RC
+ fYcorrTailCancel[2][0] = par[9]; fYcorrTailCancel[2][1] = par[10]; // RC
+ // inflation factor of error parameterization in r-phi due to wrong estimation of residuals.
+ fS2Ycorr[0] = par[11]; // opposite sign,
+ fS2Ycorr[1] = par[12]; // same sign
+
+ } else {
+ // correct dzdx for the bias in z
+ fdzdxCorrFactor[0] = 1.09; // !RC
+ fdzdxCorrFactor[1] = 1.05; // RC
+ // correct dzdx in RC tracklets for the bias in cluster attachment
+ fdzdxCorrRCbias[0] = 0.; // dz/dx > 0
+ fdzdxCorrRCbias[1] = -0.012; // dz/dx < 0
+ /// correct x_cross for the bias in dzdx
+ fdzdxXcrossFactor = 0.14;
+ // y linear q/pt correction due to wrong tail cancellation.
+ fYcorrTailCancel[0][0] = 0.; fYcorrTailCancel[0][1] = 0.027; // opposite sign !RC
+ fYcorrTailCancel[1][0] = 0.04; fYcorrTailCancel[1][1] = 0.027; // same sign !RC
+ fYcorrTailCancel[2][0] = 0.013;fYcorrTailCancel[2][1] = 0.018; // RC
+ // inflation factor of error parameterization in r-phi due to wrong estimation of residuals.
+ fS2Ycorr[0] = 5.; // opposite sign,
+ fS2Ycorr[1] = 10; // same sign
+ }
+}
Double_t GetNMeanClusters() const { return fkNMeanClusters; }
Double_t GetNSigmaClusters() const { return fkNSigmaClusters; }
Double_t GetFindableClusters() const { return fkFindable; }
- inline Int_t GetPIDLQslices() const;
- inline AliTRDPIDResponse::ETRDPIDMethod GetPIDmethod() const;
+ Int_t GetPIDLQslices() const;
+ AliTRDPIDResponse::ETRDPIDMethod GetPIDmethod() const;
Double_t GetMaxTheta() const { return fkMaxTheta; }
Double_t GetMaxPhi() const { return fkMaxPhi; }
Double_t GetPlaneQualityThreshold() const { return fkPlaneQualityThreshold; }
Double_t GetRoad2z() const { return fkRoad2z; }
Double_t GetRoadzMultiplicator() const { return fkRoadzMultiplicator; }
Double_t GetTrackLikelihood() const { return fkTrackLikelihood; }
- inline void GetSysCovMatrix(Double_t *sys) const;
- inline void GetTCParams(Double_t *par) const;
- inline Int_t GetStreamLevel(ETRDReconstructionTask task) const;
+ void GetSysCovMatrix(Double_t *sys) const;
+ void GetTCParams(Double_t *par) const;
+ Int_t GetStreamLevel(ETRDReconstructionTask task) const;
const TString *GetRawStreamVersion() const{ return &fRawStreamVersion; };
Double_t GetMinMaxCutSigma() const { return fMinMaxCutSigma; };
Double_t GetMinLeftRightCutSigma() const { return fMinLeftRightCutSigma; };
Int_t GetNumberOfPostsamples() const { return fNumberOfPostsamples;}
Int_t GetNumberOfSeedConfigs() const { return fNumberOfConfigs;}
Int_t GetRecEveryNTB() const { return fRecEveryNTB; }
+ // Tracklet parameters
+ Double_t GetCorrDZDXbiasRC(Bool_t dzdx) const { return fdzdxCorrRCbias[dzdx];}
+ Double_t GetCorrDZDX(Bool_t rc) const { return fdzdxCorrFactor[rc];}
+ Double_t GetCorrDZDXxcross() const { return fdzdxXcrossFactor;}
+ void GetYcorrTailCancel(Int_t it, Double_t par[2]) const;
+ Double_t GetS2Ycorr(Bool_t sgn) const { return fS2Ycorr[sgn];}
+
Bool_t IsArgon() const { return TESTBIT(fFlags, kDriftGas); }
Bool_t IsCheckTimeConsistency() const { return kCheckTimeConsistency;}
Bool_t IsOverPtThreshold(Double_t pt) const {return Bool_t(pt>fkPtThreshold);}
void SetLUT(Bool_t b=kTRUE) {if(b) SETBIT(fFlags, kLUT); else CLRBIT(fFlags, kLUT);}
void SetGAUS(Bool_t b=kTRUE) {if(b) SETBIT(fFlags, kGAUS); else CLRBIT(fFlags, kGAUS);}
void SetPIDNeuralNetwork(Bool_t b=kTRUE) {if(b) SETBIT(fFlags, kSteerPID); else CLRBIT(fFlags, kSteerPID);}
- inline void SetPIDmethod(AliTRDPIDResponse::ETRDPIDMethod method);
+ void SetPIDmethod(AliTRDPIDResponse::ETRDPIDMethod method);
void SetPIDLQslices(Int_t s);
void SetTailCancelation(Bool_t b=kTRUE) {if(b) SETBIT(fFlags, kTailCancelation); else CLRBIT(fFlags, kTailCancelation);}
void SetXenon(Bool_t b = kTRUE) {if(b) CLRBIT(fFlags, kDriftGas); else SETBIT(fFlags, kDriftGas);}
void SetMinLeftRightCutSigma(Float_t minLeftRightCutSigma) { fMinLeftRightCutSigma = minLeftRightCutSigma; };
void SetClusMaxThresh(Float_t thresh) { fClusMaxThresh = thresh; };
void SetClusSigThresh(Float_t thresh) { fClusSigThresh = thresh; };
- inline void SetPIDThreshold(Double_t *pid);
+ void SetPIDThreshold(Double_t *pid);
void SetPtThreshold(Double_t pt) {fkPtThreshold = pt;}
void SetNexponential(Int_t nexp) { fTCnexp = nexp; };
- inline void SetTCParams(Double_t *par);
- inline void SetStreamLevel(ETRDReconstructionTask task, Int_t level);
- inline void SetSysCovMatrix(Double_t *sys);
+ void SetTCParams(Double_t *par);
+ void SetTrackletParams(Double_t *par=NULL);
+ void SetStreamLevel(ETRDReconstructionTask task, Int_t level);
+ void SetSysCovMatrix(Double_t *sys);
void SetNumberOfPresamples(Int_t n) { fNumberOfPresamples = n;}
void SetNumberOfPostsamples(Int_t n) { fNumberOfPostsamples = n;}
void SetRecEveryTwoTB() { fRecEveryNTB = 2; fkNMeanClusters = 10; }
// Raw Reader Params
TString fRawStreamVersion; // Raw Reader version
+ // Tracklet parameters
+ Double_t fdzdxCorrFactor[2]; // correction of dzdx estimation due to z bias; [0] for !RC, [1] for RC
+ Double_t fdzdxCorrRCbias[2]; // correction of dzdx estimation bias for RC; [0] for dz/dx>0, [1] for dz/dx<0
+ Double_t fdzdxXcrossFactor; // bias in dzdx of estimated xcross [RC]
+ Double_t fYcorrTailCancel[3][2]; // y linear q/pt correction due to wrong tail cancellation. [0] opposite sign !RC, [1] same sign !RC, [2] RC
+ Double_t fS2Ycorr[2]; // inflation factor of error parameterization in r-phi due to wrong estimation of residuals. [0] opposite sign, [1] same sign
+
// Clusterization parameter
Double_t fMinMaxCutSigma; // Threshold sigma noise pad middle
Double_t fMinLeftRightCutSigma; // Threshold sigma noise sum pad
Int_t fNumberOfPresamples; // number of presamples
Int_t fNumberOfPostsamples; // number of postsamples
- ClassDef(AliTRDrecoParam, 12) // Reconstruction parameters for TRD detector
+ ClassDef(AliTRDrecoParam, 13) // Reconstruction parameters for TRD detector
};
memcpy(fTCParams, par, 8*sizeof(Double_t));
}
+
+//___________________________________________________
+inline void AliTRDrecoParam::GetYcorrTailCancel(Int_t it, Double_t par[2]) const
+{
+ if(it<0||it>2) return;
+ par[0] = fYcorrTailCancel[it][0]; par[1] = fYcorrTailCancel[it][1];
+}
+
//___________________________________________________
inline Int_t AliTRDrecoParam::GetPIDLQslices() const
{
fZfit[1] = (fZfit[0]+zoff)/dx;
// correct dzdx for the bias
- if(!IsRowCross()) fZfit[1] *= 1.09;
- else{
- // correct dzdx for the bias
- fZfit[1] *= 1.05;
- if(fZfit[1]<0) fZfit[1] -= 0.012;
-
+ UnbiasDZDX(IsRowCross());
+ if(IsRowCross()){
// correct x_cross/sigma(x_cross) for the bias in dzdx
- fS2Y += 0.14*TMath::Abs(fZfit[1]);
- sx += 2.e-2*GetS2DZDX(fZfit[1]);
+ const AliTRDrecoParam* const recoParam = fkReconstructor->GetRecoParam();
+ if(recoParam){
+ fS2Y += recoParam->GetCorrDZDXxcross()*TMath::Abs(fZfit[1]);
+ sx += recoParam->GetCorrDZDXxcross()*recoParam->GetCorrDZDXxcross()*GetS2DZDX(fZfit[1]);
+ }
// correct sigma(x_cross) for the width of the crossing area
- Double_t sxdz = TMath::Abs(fZfit[1])>0.05?(TMath::Exp(-1.58839-TMath::Abs(fZfit[1])*3.24116)):
- (0.957043 -TMath::Abs(fZfit[1])*12.4597);
- sx += sxdz;
+ sx += GetS2XcrossDZDX(TMath::Abs(fZfit[1]));
// estimate z and error @ anode wire
fZfit[0] += fZfit[1]*fS2Y;
return sx;
}
+//____________________________________________________________________
+void AliTRDseedV1::UnbiasDZDX(Bool_t rc)
+{
+ // correct dzdx for the bias in z according to MC
+ const AliTRDrecoParam* const recoParam = fkReconstructor->GetRecoParam();
+ if(!recoParam) return;
+ fZfit[1] *= recoParam->GetCorrDZDX(rc);
+ if(rc) fZfit[1] += recoParam->GetCorrDZDXbiasRC(fZfit[1]<0);
+}
+
+//____________________________________________________________________
+Double_t AliTRDseedV1::UnbiasY(Bool_t rc, Bool_t sgn, Int_t chg)
+{
+// correct y coordinate for tail cancellation. This should be fixed by considering TC as a function of q/pt.
+// rc : TRUE if tracklet crosses rows
+// sgn : TRUE if track has same sign with magnetic field
+// chg : -1 for negative particles, +1 for the rest
+
+ const AliTRDrecoParam* const recoParam = fkReconstructor->GetRecoParam();
+ if(!recoParam) return 0.;
+ Double_t par[2]={0.};
+ if(rc) recoParam->GetYcorrTailCancel(2, par);
+ else{
+ if(sgn && 1./fPt > 1.5) recoParam->GetYcorrTailCancel(1, par);
+ else if(!sgn) recoParam->GetYcorrTailCancel(0, par);
+ }
+ return par[0]+par[1]*chg/fPt;
+}
+
+
//____________________________________________________________________
Float_t AliTRDseedV1::GetQperTB(Int_t tb) const
{
//____________________________________________________________________
-Bool_t AliTRDseedV1::FitRobust(AliTRDpadPlane *pp, Int_t opt)
+Bool_t AliTRDseedV1::FitRobust(AliTRDpadPlane *pp, Bool_t sgn, Int_t chg, Int_t opt)
{
//
// Linear fit of the clusters attached to the tracklet
Int_t n(0), // clusters used in fit
row[]={-1, -1},// pad row spanned by the tracklet
col(-1); // pad column of current cluster
- Double_t ycorr(0.); Int_t chg(fYref[1]>0?1:-1);
- if(IsRowCross()) ycorr = 0.013 + 0.018*chg/fPt;
- else{
- if(chg<0 && 1./fPt > 1.5) ycorr = 0.04 + 0.027*chg/fPt;
- else if(chg>0) ycorr = 0.027*chg/fPt;
- }
+ Double_t ycorr(UnbiasY(IsRowCross(), sgn, chg)),
+ kS2Ycorr(recoParam->GetS2Ycorr(sgn));
AliTRDcluster *c(NULL), **jc = &fClusters[0];
for(Int_t ic=0; ic<kNtb; ic++, ++jc) {
fYfit[1] = -par[1];
//printf(" yfit: %f [%f] x[%e] dydx[%f]\n", fYfit[0], par[0], fX, par[1]);
// store covariance
- fCov[0] = (chg>0?5.:10.)*cov[0]; // variance of y0
+ fCov[0] = kS2Ycorr*cov[0]; // variance of y0
fCov[1] = kScalePulls*cov[2]; // covariance of y0, dydx
fCov[2] = kScalePulls*cov[1]; // variance of dydx
// check radial position
void CookLabels();
Bool_t CookPID();
Bool_t Fit(UChar_t opt=0); // OBSOLETE
- Bool_t FitRobust(AliTRDpadPlane *pp, Int_t opt=0);
+ Bool_t FitRobust(AliTRDpadPlane *pp, Bool_t sgn, Int_t chg, Int_t opt=0);
Double_t EstimatedCrossPoint(AliTRDpadPlane *pp);
Bool_t Init(const AliTRDtrackV1 *track);
void Init(const AliRieman *fit);
Float_t GetS2Z() const { return fS2Z;}
Double_t GetS2DYDX(Float_t) const { return fCov[2];}
inline Double_t GetS2DZDX(Float_t) const;
+ inline Double_t GetS2XcrossDZDX(Double_t absdzdx) const;
Float_t GetSigmaY() const { return fS2Y > 0. ? TMath::Sqrt(fS2Y) : 0.2;}
Float_t GetSnp() const { return fYref[1]/TMath::Sqrt(1+fYref[1]*fYref[1]);}
Float_t GetTgl() const { return fZref[1]/TMath::Sqrt(1+fYref[1]*fYref[1]);}
protected:
void Copy(TObject &ref) const;
+ void UnbiasDZDX(Bool_t rc);
+ Double_t UnbiasY(Bool_t rc, Bool_t sgn, Int_t chg);
private:
inline void SetN(Int_t n);
return 0.;
}
+//____________________________________________________________
+Double_t AliTRDseedV1::GetS2XcrossDZDX(Double_t absdzdx) const
+{
+ // correct sigma(x_cross) for the width of the crossing area
+ if(absdzdx>0.05) return TMath::Exp(-1.58839-absdzdx*3.24116);
+ else return 0.957043-absdzdx*12.4597;
+}
+
//____________________________________________________________
Double_t AliTRDseedV1::GetS2DZDX(Float_t dzdx) const
{
continue;
}
+ Float_t prod(t.GetBz()*t.Charge());
ptrTracklet = tracklets[ily];
if(!ptrTracklet){ // BUILD TRACKLET
AliDebug(3, Form("Building tracklet det[%d]", det));
// Select attachment base on track to B field sign not only track charge which is buggy
// mark kFALSE same sign tracks and kTRUE opposite sign tracks
// A.Bercuci 3.11.2011
- Float_t prod(t.GetBz()*t.Charge());
if(!ptrTracklet->AttachClusters(chamber, kTRUE, prod<0.?kTRUE:kFALSE, fEventInFile)){
t.SetErrStat(AliTRDtrackV1::kNoAttach, ily);
if(debugLevel>3){
// tilt correction options
// 0 : no correction
// 2 : pseudo tilt correction
- if(!ptrTracklet->FitRobust(fGeom->GetPadPlane(ily, stk))){
+ if(!ptrTracklet->FitRobust(fGeom->GetPadPlane(ily, stk), prod>0., t.Charge())){
t.SetErrStat(AliTRDtrackV1::kNoFit, ily);
AliDebug(4, "Failed Tracklet Fit");
continue;
// update Kalman with the TRD measurement
if (chi2> fkRecoParam->GetChi2Cut()){ // MI parameterizad chi2 cut 03.05.2014
- // if(chi2>10){ // RS
- // if(chi2>1e+10){ // TODO
t.SetErrStat(AliTRDtrackV1::kChi2, ily);
if(debugLevel > 2){
UChar_t status(t.GetStatusTRD());
gSystem->Load("libANALYSIS.so");
gSystem->Load("libANALYSISalice.so");
gSystem->Load("libANALYSIScalib.so");
+ gSystem->Load("libESDfilter.so");
gSystem->Load("libEventMixing.so");
gSystem->Load("libTENDER.so");
gSystem->Load("libTENDERSupplies.so");