--- /dev/null
+///////////////////////////////////////////////////////////////////////////
+// //
+// AliFemtoCorrFctn3DLCMSSym: a class to calculate 3D correlation //
+// for pairs of identical particles. //
+// In analysis the function should be first created in a macro, then //
+// added to the analysis, and at the end of the macro the procedure to //
+// write out histograms should be called. //
+// //
+///////////////////////////////////////////////////////////////////////////
+
+#include "AliFemtoCorrFctn3DLCMSSym.h"
+#include <cstdio>
+
+#ifdef __ROOT__
+ClassImp(AliFemtoCorrFctn3DLCMSSym)
+#endif
+
+//____________________________
+AliFemtoCorrFctn3DLCMSSym::AliFemtoCorrFctn3DLCMSSym(char* title, const int& nbins, const float& QHi)
+ :
+ AliFemtoCorrFctn(),
+ fNumerator(0),
+ fDenominator(0)
+{
+ // Basic constructor
+
+ // set up numerator
+ char tTitNum[100] = "Num";
+ strncat(tTitNum,title, 100);
+ fNumerator = new TH3F(tTitNum,title,nbins,-QHi,QHi,nbins,-QHi,QHi,nbins/2,0.0,QHi);
+ // set up denominator
+ char tTitDen[100] = "Den";
+ strncat(tTitDen,title, 100);
+ fDenominator = new TH3F(tTitDen,title,nbins,-QHi,QHi,nbins,-QHi,QHi,nbins/2,0.0,QHi);
+
+ // to enable error bar calculation...
+ fNumerator->Sumw2();
+ fDenominator->Sumw2();
+}
+
+AliFemtoCorrFctn3DLCMSSym::AliFemtoCorrFctn3DLCMSSym(const AliFemtoCorrFctn3DLCMSSym& aCorrFctn) :
+ AliFemtoCorrFctn(aCorrFctn),
+ fNumerator(0),
+ fDenominator(0)
+{
+ // Copy constructor
+ fNumerator = new TH3F(*aCorrFctn.fNumerator);
+ fDenominator = new TH3F(*aCorrFctn.fDenominator);
+}
+//____________________________
+AliFemtoCorrFctn3DLCMSSym::~AliFemtoCorrFctn3DLCMSSym(){
+ // Destructor
+ delete fNumerator;
+ delete fDenominator;
+}
+//_________________________
+AliFemtoCorrFctn3DLCMSSym& AliFemtoCorrFctn3DLCMSSym::operator=(const AliFemtoCorrFctn3DLCMSSym& aCorrFctn)
+{
+ // assignment operator
+ if (this == &aCorrFctn)
+ return *this;
+
+ if (fNumerator) delete fNumerator;
+ fNumerator = new TH3F(*aCorrFctn.fNumerator);
+ if (fDenominator) delete fDenominator;
+ fDenominator = new TH3F(*aCorrFctn.fDenominator);
+
+ return *this;
+}
+
+//_________________________
+void AliFemtoCorrFctn3DLCMSSym::WriteOutHistos(){
+ // Write out all histograms to file
+ fNumerator->Write();
+ fDenominator->Write();
+}
+//______________________________
+TList* AliFemtoCorrFctn3DLCMSSym::GetOutputList()
+{
+ // Prepare the list of objects to be written to the output
+ TList *tOutputList = new TList();
+
+ tOutputList->Add(fNumerator);
+ tOutputList->Add(fDenominator);
+
+ return tOutputList;
+}
+
+//_________________________
+void AliFemtoCorrFctn3DLCMSSym::Finish(){
+ // here is where we should normalize, fit, etc...
+
+}
+
+//____________________________
+AliFemtoString AliFemtoCorrFctn3DLCMSSym::Report(){
+ // Construct the report
+ string stemp = "LCMS Frame Bertsch-Pratt 3D Correlation Function Report:\n";
+ char ctemp[100];
+ snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fNumerator->GetEntries());
+ stemp += ctemp;
+ snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fDenominator->GetEntries());
+ stemp += ctemp;
+
+ if (fPairCut){
+ snprintf(ctemp , 100, "Here is the PairCut specific to this CorrFctn\n");
+ stemp += ctemp;
+ stemp += fPairCut->Report();
+ }
+ else{
+ snprintf(ctemp , 100, "No PairCut specific to this CorrFctn\n");
+ stemp += ctemp;
+ }
+
+ //
+ AliFemtoString returnThis = stemp;
+ return returnThis;
+}
+//____________________________
+void AliFemtoCorrFctn3DLCMSSym::AddRealPair( AliFemtoPair* pair){
+ // perform operations on real pairs
+ if (fPairCut){
+ if (!(fPairCut->Pass(pair))) return;
+ }
+
+ double qOut = (pair->QOutCMS());
+ double qSide = (pair->QSideCMS());
+ double qLong = (pair->QLongCMS());
+
+ if (qLong > 0.0)
+ fNumerator->Fill(qOut,qSide,qLong);
+ else
+ fNumerator->Fill(-qOut,-qSide,-qLong);
+
+}
+//____________________________
+void AliFemtoCorrFctn3DLCMSSym::AddMixedPair( AliFemtoPair* pair){
+ // perform operations on mixed pairs
+ if (fPairCut){
+ if (!(fPairCut->Pass(pair))) return;
+ }
+
+ double qOut = (pair->QOutCMS());
+ double qSide = (pair->QSideCMS());
+ double qLong = (pair->QLongCMS());
+
+ if (qLong > 0.0)
+ fDenominator->Fill(qOut,qSide,qLong,1.0);
+ else
+ fDenominator->Fill(-qOut,-qSide,-qLong,1.0);
+}
+
+
--- /dev/null
+///////////////////////////////////////////////////////////////////////////
+// //
+// AliFemtoCorrFctn3DLCMSSym: a class to calculate 3D correlation //
+// for pairs of identical particles vs. Bertsh-Pratt coordinates. //
+// //
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef ALIFEMTOCORRFCTN3DLCMS_H
+#define ALIFEMTOCORRFCTN3DLCMS_H
+
+#include "AliFemtoCorrFctn.h"
+#include "AliFemtoPairCut.h"
+#include "TH3F.h"
+
+class AliFemtoCorrFctn3DLCMSSym : public AliFemtoCorrFctn {
+public:
+ AliFemtoCorrFctn3DLCMSSym(char* title, const int& nbins, const float& QHi);
+ AliFemtoCorrFctn3DLCMSSym(const AliFemtoCorrFctn3DLCMSSym& aCorrFctn);
+ virtual ~AliFemtoCorrFctn3DLCMSSym();
+
+ AliFemtoCorrFctn3DLCMSSym& operator=(const AliFemtoCorrFctn3DLCMSSym& aCorrFctn);
+
+ virtual AliFemtoString Report();
+ virtual void AddRealPair( AliFemtoPair* aPair);
+ virtual void AddMixedPair( AliFemtoPair* aPair);
+
+ virtual void Finish();
+
+ TH3F* Numerator();
+ TH3F* Denominator();
+
+ void WriteOutHistos();
+ virtual TList* GetOutputList();
+
+private:
+
+ TH3F* fNumerator; // numerator
+ TH3F* fDenominator; // denominator
+
+#ifdef __ROOT__
+ ClassDef(AliFemtoCorrFctn3DLCMSSym, 1)
+#endif
+};
+
+inline TH3F* AliFemtoCorrFctn3DLCMSSym::Numerator(){return fNumerator;}
+inline TH3F* AliFemtoCorrFctn3DLCMSSym::Denominator(){return fDenominator;}
+
+#endif
+