//////////////////////////////////////////////////////////////////////////////// /// /// /// AliFemtoModelCorrFctn - the base class for correlation function which /// /// uses the model framework and weight generation /// /// /// //////////////////////////////////////////////////////////////////////////////// #ifdef __ROOT__ ClassImp(AliFemtoModelCorrFctn, 1) #endif #include "AliFemtoModelGausLCMSFreezeOutGenerator.h" #include "AliFemtoModelHiddenInfo.h" #include "AliFemtoModelCorrFctn.h" #include "AliFemtoPair.h" #include "AliFemtoModelManager.h" #include #include //_______________________ AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(): AliFemtoCorrFctn(), fManager(0), fNumeratorTrue(0), fNumeratorFake(0), fDenominator(0), fNumeratorTrueIdeal(0), fNumeratorFakeIdeal(0), fDenominatorIdeal(0), fQgenQrec(0) { // Default constructor fNumeratorTrue = new TH1D("ModelNumTrue","ModelNumTrue",50,0.0,0.5); fNumeratorFake = new TH1D("ModelNumFake","ModelNumFake",50,0.0,0.5); fDenominator = new TH1D("ModelDen","ModelDen",50,0.0,0.5); fNumeratorTrueIdeal = new TH1D("ModelNumTrueIdeal","ModelNumTrueIdeal",50,0.0,0.5); fNumeratorFakeIdeal = new TH1D("ModelNumFakeIdeal","ModelNumFakeIdeal",50,0.0,0.5); fDenominatorIdeal = new TH1D("ModelDenIdeal","ModelDenIdeal",50,0.0,0.5); fQgenQrec = new TH2D("QgenQrec","QgenQrec",50,0.0,0.5,50,0.0,0.5); fNumeratorTrue->Sumw2(); fNumeratorFake->Sumw2(); fDenominator->Sumw2(); fNumeratorTrueIdeal->Sumw2(); fNumeratorFakeIdeal->Sumw2(); fDenominatorIdeal->Sumw2(); fQgenQrec->Sumw2(); } //_______________________ AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(const char *title, Int_t aNbins, Double_t aQinvLo, Double_t aQinvHi): AliFemtoCorrFctn(), fManager(0), fNumeratorTrue(0), fNumeratorFake(0), fDenominator(0), fNumeratorTrueIdeal(0), fNumeratorFakeIdeal(0), fDenominatorIdeal(0), fQgenQrec(0) { // Normal constructor char buf[100]; snprintf(buf , 100, "NumTrue%s", title); fNumeratorTrue = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi); snprintf(buf , 100, "NumFake%s", title); fNumeratorFake = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi); snprintf(buf , 100, "Den%s", title); fDenominator = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi); snprintf(buf , 100, "NumTrueIdeal%s", title); fNumeratorTrueIdeal = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi); snprintf(buf , 100, "NumFakeIdeal%s", title); fNumeratorFakeIdeal = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi); snprintf(buf , 100, "DenIdeal%s", title); fDenominatorIdeal = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi); snprintf(buf , 100, "QgenQrec%s", title); fQgenQrec = new TH2D(buf,buf,aNbins,aQinvLo,aQinvHi,aNbins,aQinvLo,aQinvHi); fNumeratorTrue->Sumw2(); fNumeratorFake->Sumw2(); fDenominator->Sumw2(); fNumeratorTrueIdeal->Sumw2(); fNumeratorFakeIdeal->Sumw2(); fDenominatorIdeal->Sumw2(); fQgenQrec->Sumw2(); } //_______________________ AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(const AliFemtoModelCorrFctn& aCorrFctn) : AliFemtoCorrFctn(), fManager(0), fNumeratorTrue(0), fNumeratorFake(0), fDenominator(0), fNumeratorTrueIdeal(0), fNumeratorFakeIdeal(0), fDenominatorIdeal(0), fQgenQrec(0) { // Copy constructor if (aCorrFctn.fNumeratorTrue) fNumeratorTrue = new TH1D(*(aCorrFctn.fNumeratorTrue)); if (aCorrFctn.fNumeratorFake) fNumeratorFake = new TH1D(*(aCorrFctn.fNumeratorFake)); if (aCorrFctn.fDenominator) fDenominator = new TH1D(*(aCorrFctn.fDenominator)); if (aCorrFctn.fNumeratorTrueIdeal) fNumeratorTrueIdeal = new TH1D(*(aCorrFctn.fNumeratorTrueIdeal)); if (aCorrFctn.fNumeratorFakeIdeal) fNumeratorFakeIdeal = new TH1D(*(aCorrFctn.fNumeratorFakeIdeal)); if (aCorrFctn.fDenominatorIdeal) fDenominatorIdeal = new TH1D(*(aCorrFctn.fDenominatorIdeal)); if (aCorrFctn.fQgenQrec) fQgenQrec = new TH2D(*(aCorrFctn.fQgenQrec)); fManager = aCorrFctn.fManager; } //_______________________ AliFemtoModelCorrFctn::~AliFemtoModelCorrFctn() { // Destructor if (fNumeratorTrue) delete fNumeratorTrue; if (fNumeratorFake) delete fNumeratorFake; if (fDenominator) delete fDenominator; if (fNumeratorTrueIdeal) delete fNumeratorTrueIdeal; if (fNumeratorFakeIdeal) delete fNumeratorFakeIdeal; if (fDenominatorIdeal) delete fDenominatorIdeal; if (fQgenQrec) delete fQgenQrec; } //_______________________ AliFemtoModelCorrFctn& AliFemtoModelCorrFctn::operator=(const AliFemtoModelCorrFctn& aCorrFctn) { // Assignment operator if (this == &aCorrFctn) return *this; if (aCorrFctn.fNumeratorTrue) fNumeratorTrue = new TH1D(*(aCorrFctn.fNumeratorTrue)); else fNumeratorTrue = 0; if (aCorrFctn.fNumeratorFake) fNumeratorFake = new TH1D(*(aCorrFctn.fNumeratorFake)); else fNumeratorFake = 0; if (aCorrFctn.fDenominator) fDenominator = new TH1D(*(aCorrFctn.fDenominator)); else fDenominator = 0; if (aCorrFctn.fQgenQrec) fQgenQrec = new TH2D(*(aCorrFctn.fQgenQrec)); else fQgenQrec = 0; fManager = aCorrFctn.fManager; if (aCorrFctn.fNumeratorTrueIdeal) fNumeratorTrueIdeal = new TH1D(*(aCorrFctn.fNumeratorTrueIdeal)); else fNumeratorTrueIdeal = 0; if (aCorrFctn.fNumeratorFakeIdeal) fNumeratorFakeIdeal = new TH1D(*(aCorrFctn.fNumeratorFakeIdeal)); else fNumeratorFake = 0; if (aCorrFctn.fDenominatorIdeal) fDenominatorIdeal = new TH1D(*(aCorrFctn.fDenominatorIdeal)); else fDenominatorIdeal = 0; fManager = aCorrFctn.fManager; return *this; } //_______________________ void AliFemtoModelCorrFctn::ConnectToManager(AliFemtoModelManager *aManager) { fManager = aManager; } //_______________________ AliFemtoString AliFemtoModelCorrFctn::Report() { // Prepare report AliFemtoString tStr = "AliFemtoModelCorrFctn report"; return tStr; } //_______________________ void AliFemtoModelCorrFctn::AddRealPair(AliFemtoPair* aPair) { Double_t weight = fManager->GetWeight(aPair); fNumeratorTrue->Fill(aPair->QInv(), weight); Double_t tQinvTrue = GetQinvTrue(aPair); fNumeratorTrueIdeal->Fill(tQinvTrue, weight); } //_______________________ void AliFemtoModelCorrFctn::AddMixedPair(AliFemtoPair* aPair) { Double_t weight = fManager->GetWeight(aPair); fNumeratorFake->Fill(aPair->QInv(), weight); fDenominator->Fill(aPair->QInv(), 1.0); Double_t tQinvTrue = GetQinvTrue(aPair); fNumeratorFakeIdeal->Fill(tQinvTrue, weight); fDenominatorIdeal->Fill(tQinvTrue, 1.0); fQgenQrec->Fill(tQinvTrue,aPair->QInv()); } //_______________________ Double_t AliFemtoModelCorrFctn::GetQinvTrue(AliFemtoPair* aPair) { AliFemtoTrack *inf1 = (AliFemtoTrack *) aPair->Track1()->Track(); AliFemtoTrack *inf2 = (AliFemtoTrack *) aPair->Track2()->Track(); AliFemtoLorentzVector fm1; AliFemtoThreeVector* temp = inf1->GetTrueMomentum(); fm1.SetVect(*temp); double ener = TMath::Sqrt(temp->Mag2()+(aPair->Track1()->Track()->GetMass())*(aPair->Track1()->Track()->GetMass())); fm1.SetE(ener); AliFemtoLorentzVector fm2; AliFemtoThreeVector* temp2 = inf2->GetTrueMomentum(); fm2.SetVect(*temp2); ener = TMath::Sqrt(temp2->Mag2()+(aPair->Track2()->Track()->GetMass())*(aPair->Track2()->Track()->GetMass())); fm2.SetE(ener); AliFemtoLorentzVector tQinvTrueVec = (fm1-fm2); Double_t tQinvTrue = -1.* tQinvTrueVec.m(); return tQinvTrue; } //_______________________ void AliFemtoModelCorrFctn::EventBegin(const AliFemtoEvent* /* aEvent */) { /* Do nothing */ } //_______________________ void AliFemtoModelCorrFctn::EventEnd(const AliFemtoEvent* /* aEvent */) { /* Do nothing */ } //_______________________ void AliFemtoModelCorrFctn::Finish() { /* Do nothing */ } //_______________________ void AliFemtoModelCorrFctn::Write() { // Write out data histos fQgenQrec->Write(); fNumeratorTrue->Write(); fNumeratorFake->Write(); fDenominator->Write(); fNumeratorTrueIdeal->Write(); fNumeratorFakeIdeal->Write(); fDenominatorIdeal->Write(); } //_______________________ AliFemtoModelCorrFctn* AliFemtoModelCorrFctn::Clone() { // Create clone AliFemtoModelCorrFctn *tCopy = new AliFemtoModelCorrFctn(*this); return tCopy; } //_________________________ TList* AliFemtoModelCorrFctn::GetOutputList() { // Prepare the list of objects to be written to the output TList *tOutputList = new TList(); tOutputList->Add(fNumeratorTrue); tOutputList->Add(fNumeratorFake); tOutputList->Add(fDenominator); tOutputList->Add(fNumeratorTrueIdeal); tOutputList->Add(fNumeratorFakeIdeal); tOutputList->Add(fDenominatorIdeal); tOutputList->Add(fQgenQrec); return tOutputList; }