]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/DPhi/AliAnalysisTaskDiJetCorrelations.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / AliAnalysisTaskDiJetCorrelations.cxx
1
2 // Di-Jet angular correlations class
3 // Author: Greeshma Koyithatta Meethaleveedu and Ragahva Varma
4
5 #include "TChain.h"
6 #include "TTree.h"
7 #include "TH1F.h"
8 #include "TH2F.h"
9 #include "TH3F.h"
10 #include "TCanvas.h"
11 #include "TList.h"
12 #include "TObjArray.h"
13 #include "THnSparse.h"
14
15 #include "AliAnalysisTask.h"
16 #include "AliAnalysisManager.h"
17 #include "AliAnalysisTaskSE.h"
18 #include "AliCentrality.h"
19 #include "AliMultiplicity.h"
20 #include "AliESDEvent.h"
21 #include "AliESDtrackCuts.h"
22 #include "AliESDInputHandler.h"
23 #include "AliVEvent.h"
24 #include "AliAODEvent.h"
25 #include "AliVTrack.h"
26 #include "AliAODTrack.h"
27 #include "AliAODHandler.h"
28 #include "AliAODInputHandler.h"
29 #include "AliAODMCParticle.h"
30 #include "AliAODMCHeader.h"
31 #include "AliMCParticle.h"
32 #include "AliMCEvent.h"
33 #include "AliStack.h"
34 #include "AliInputEventHandler.h"
35 #include "AliEventPoolManager.h"
36
37 #include "AliAnalysisTaskDiJetCorrelations.h"
38
39 using std::cout;
40 using std::endl;
41
42 ClassImp(AliAnalysisTaskDiJetCorrelations)
43
44 //_____________________| Constructor
45 AliAnalysisTaskDiJetCorrelations::AliAnalysisTaskDiJetCorrelations():
46   AliAnalysisTaskSE(),
47   fSetSystemValue(kTRUE),
48   fRecoOrMontecarlo(kTRUE),
49   fReadMC(kFALSE),
50   fSetFilterBit(kTRUE),
51   fbit(272),
52   farrayMC(0),
53   fCentrOrMult(1),
54   fMinCentrality(0),
55   fMaxCentrality(100),
56   fTrigger1pTLowThr(0),
57   fTrigger1pTHighThr(0),
58   fTrigger2pTLowThr(0),
59   fTrigger2pTHighThr(0),
60   fAlpha(0),
61   fCutResonances(kTRUE),
62   fCutConversions(kTRUE),
63   ftwoTrackEfficiencyCut(kTRUE),
64   fuseVarCentBins(kFALSE),
65   fuseVarPtBins(kFALSE),
66   fHistNEvents(0),
67   fHistT1CorrTrack(0),
68   fHistT2CorrTrack(0),
69   fOutputQA(0),
70   fOutputCorr(0),
71   f3DEffCor(0),
72   fPool(0x0),
73   fPoolMgr(0x0),
74   fMixedEvent(kTRUE),
75   fMEMaxPoolEvent(1000),
76   fMEMinTracks(20000),
77   fMEMinEventToMix(6),
78   fHistTrigDPhi(0x0),
79   fControlConvResT1(0x0),
80   fControlConvResT2(0x0),
81   fControlConvResMT1(0x0),
82   fControlConvResMT2(0x0)
83 {
84   for ( Int_t i = 0; i < 9; i++)fHistQA[i] = NULL;
85 }
86
87 //_____________________| Specific Constructor
88 AliAnalysisTaskDiJetCorrelations::AliAnalysisTaskDiJetCorrelations(const char *name):
89   AliAnalysisTaskSE(name),
90   fSetSystemValue(kTRUE),
91   fRecoOrMontecarlo(kTRUE),
92   fReadMC(kFALSE),
93   fSetFilterBit(kTRUE),
94   fbit(272),
95   farrayMC(0),
96   fCentrOrMult(1),
97   fMinCentrality(0),
98   fMaxCentrality(100),
99   fTrigger1pTLowThr(0),
100   fTrigger1pTHighThr(0),
101   fTrigger2pTLowThr(0),
102   fTrigger2pTHighThr(0),
103   fAlpha(0),
104   fCutResonances(kTRUE),
105   fCutConversions(kTRUE),
106   ftwoTrackEfficiencyCut(kTRUE),
107   fuseVarCentBins(kFALSE),
108   fuseVarPtBins(kFALSE),
109   fHistNEvents(0),
110   fHistT1CorrTrack(0),
111   fHistT2CorrTrack(0),
112   fOutputQA(0),
113   fOutputCorr(0),
114   f3DEffCor(0),
115   fPool(0x0),
116   fPoolMgr(0x0),
117   fMixedEvent(kTRUE),
118   fMEMaxPoolEvent(1000),
119   fMEMinTracks(2000),
120   fMEMinEventToMix(6),
121   fHistTrigDPhi(0x0),
122   fControlConvResT1(0x0),
123   fControlConvResT2(0x0),
124   fControlConvResMT1(0x0),
125   fControlConvResMT2(0x0)
126
127 {
128   Info("AliAnalysisTaskDiJetCorrelations","Calling Constructor");
129   for ( Int_t i = 0; i < 9; i++)fHistQA[i] = NULL;
130   DefineInput(0, TChain::Class());
131   DefineOutput(1, TList::Class()); // Basic output slot (..)
132   DefineOutput(2, TList::Class()); // Correlations form Data and MC    
133 }
134
135 //___________________________________| Copy Constructor
136 AliAnalysisTaskDiJetCorrelations::AliAnalysisTaskDiJetCorrelations(const AliAnalysisTaskDiJetCorrelations &source):
137   AliAnalysisTaskSE(source),
138   fSetSystemValue(source.fSetSystemValue),
139   fRecoOrMontecarlo(source.fSetSystemValue),
140   fReadMC(source.fReadMC),
141   fSetFilterBit(source.fSetFilterBit),
142   fbit(source.fbit),
143   farrayMC(source.farrayMC),
144   fCentrOrMult(source.fCentrOrMult),
145   fMinCentrality(source.fMinCentrality),
146   fMaxCentrality(source.fMaxCentrality),
147   fTrigger1pTLowThr(source.fTrigger1pTLowThr),
148   fTrigger1pTHighThr(source.fTrigger1pTHighThr),
149   fTrigger2pTLowThr(source.fTrigger2pTLowThr),
150   fTrigger2pTHighThr(source.fTrigger2pTHighThr),
151   fAlpha(source.fAlpha),
152   fCutResonances(source.fCutResonances),
153   fCutConversions(source.fCutConversions),
154   ftwoTrackEfficiencyCut(source.ftwoTrackEfficiencyCut),
155   fuseVarCentBins(source.fuseVarCentBins),
156   fuseVarPtBins(source.fuseVarPtBins),
157   fHistNEvents(source.fHistNEvents),
158   fHistT1CorrTrack(source.fHistT1CorrTrack),
159   fHistT2CorrTrack(source.fHistT2CorrTrack),
160   fOutputQA(source.fOutputQA),
161   fOutputCorr(source.fOutputCorr),
162   f3DEffCor(source.f3DEffCor),
163   fPool(source.fPool),
164   fPoolMgr(source.fPoolMgr),
165   fMixedEvent(source.fMixedEvent),
166   fMEMaxPoolEvent(source.fMEMaxPoolEvent),
167   fMEMinTracks(source.fMEMinTracks),
168   fMEMinEventToMix(source.fMEMinEventToMix),
169   fHistTrigDPhi(source.fHistTrigDPhi),
170   fControlConvResT1(source.fControlConvResT1),
171   fControlConvResT2(source.fControlConvResT2),
172   fControlConvResMT1(source.fControlConvResMT1),
173   fControlConvResMT2(source.fControlConvResMT2)
174 {
175   for ( Int_t i = 0; i < 9; i++)fHistQA[i] = NULL;
176 }
177
178 //_____________________| Destructor
179 AliAnalysisTaskDiJetCorrelations::~AliAnalysisTaskDiJetCorrelations()
180 {
181   if(fOutputQA) {delete fOutputQA; fOutputQA = 0;}
182   if(fOutputCorr) {delete fOutputCorr; fOutputCorr = 0;}
183   if(fHistNEvents) {delete fHistNEvents; fHistNEvents = 0;}
184 }
185
186 //________________________________________|  Assignment Constructor
187 AliAnalysisTaskDiJetCorrelations& AliAnalysisTaskDiJetCorrelations::operator=(const AliAnalysisTaskDiJetCorrelations& orig)
188 {
189   if (&orig == this) return *this; 
190   AliAnalysisTaskSE::operator=(orig); 
191
192   fSetSystemValue= orig.fSetSystemValue;
193   fRecoOrMontecarlo = orig.fRecoOrMontecarlo;
194   fReadMC = orig.fReadMC;
195   fSetFilterBit = orig.fSetFilterBit;
196   fbit  = orig.fbit;
197   farrayMC = orig.farrayMC;
198   fCentrOrMult = orig.fCentrOrMult;
199   fMinCentrality = orig.fMinCentrality;
200   fMaxCentrality = orig.fMaxCentrality;
201   fTrigger1pTLowThr = orig.fTrigger1pTLowThr;
202   fTrigger1pTHighThr = orig.fTrigger1pTHighThr;
203   fTrigger2pTLowThr = orig.fTrigger2pTLowThr;
204   fTrigger2pTHighThr = orig.fTrigger2pTHighThr;
205   fAlpha= orig.fAlpha;
206   fCutResonances = orig.fCutResonances;
207   fCutConversions = orig.fCutConversions;
208   ftwoTrackEfficiencyCut = orig.ftwoTrackEfficiencyCut;
209   fuseVarCentBins = orig.fuseVarCentBins;
210   fuseVarPtBins = orig.fuseVarPtBins;
211   fHistNEvents = orig.fHistNEvents;
212   fHistT1CorrTrack = orig.fHistT1CorrTrack;
213   fHistT2CorrTrack = orig.fHistT2CorrTrack;
214   fOutputQA = orig.fOutputQA;
215   fOutputCorr = orig.fOutputCorr;
216   f3DEffCor = orig.f3DEffCor;
217   fPool = orig.fPool;
218   fPoolMgr = orig.fPoolMgr;
219   fMixedEvent = orig.fMixedEvent;
220   fMEMaxPoolEvent = orig.fMEMaxPoolEvent;
221   fMEMinTracks = orig.fMEMinTracks;
222   fMEMinEventToMix = orig.fMEMinEventToMix;
223   return *this; 
224 }
225
226 //_____________________| UserCreate Output
227 void AliAnalysisTaskDiJetCorrelations::UserCreateOutputObjects()
228 {
229   fOutputQA = new TList();
230   fOutputQA->SetOwner();
231   fOutputQA->SetName("BasicQAHistograms");
232   
233   fOutputCorr = new TList();
234   fOutputCorr->SetOwner();
235   fOutputCorr->SetName("CorrelationsHistograms");
236
237   fHistNEvents = new TH1F("fHistNEvents", "number of events ", 10, -0.5, 9.5);
238   fHistNEvents->GetXaxis()->SetBinLabel(1,"nEvents analyzed");
239   fHistNEvents->GetXaxis()->SetBinLabel(2,"Rejected due Null Vtx and B");
240   fHistNEvents->GetXaxis()->SetBinLabel(3,"Within choosen centrality");
241   fHistNEvents->GetXaxis()->SetBinLabel(4,"With Good Vertex");
242   fHistNEvents->GetXaxis()->SetBinLabel(5,"With Good SPDVertex");
243   fHistNEvents->GetXaxis()->SetBinLabel(6,"nTrack all chosen");
244   fHistNEvents->GetXaxis()->SetBinLabel(7,"nTrack Trigger1");
245   fHistNEvents->GetXaxis()->SetBinLabel(8,"nTrack Trigger2");
246   fHistNEvents->GetXaxis()->SetBinLabel(9,"nEvents with T1");
247   fHistNEvents->GetXaxis()->SetBinLabel(10,"number of DiJet");
248   fHistNEvents->GetXaxis()->SetNdivisions(1,kFALSE);
249   fHistNEvents->Sumw2();
250   fHistNEvents->SetMinimum(0);
251   fOutputQA->Add(fHistNEvents);
252   
253   fHistT1CorrTrack = new TH1F("fHistT1CorrTrack", "T1 nCorr tracks ", 5, -0.5, 4.5);
254   fHistT1CorrTrack->GetXaxis()->SetBinLabel(1,"nTrack Total");
255   fHistT1CorrTrack->GetXaxis()->SetBinLabel(2,"after conversion");
256   fHistT1CorrTrack->GetXaxis()->SetBinLabel(3,"after K0 resonance");
257   fHistT1CorrTrack->GetXaxis()->SetBinLabel(4,"after Lambda resonance");
258   fHistT1CorrTrack->GetXaxis()->SetBinLabel(5,"after 2track eff");
259   fHistT1CorrTrack->GetXaxis()->SetNdivisions(1,kFALSE);
260   fHistT1CorrTrack->Sumw2();
261   fHistT1CorrTrack->SetMinimum(0);
262   fOutputQA->Add(fHistT1CorrTrack);
263   
264   fHistT2CorrTrack = new TH1F("fHistT2CorrTrack", "T2 nCorr tracks ", 5, -0.5, 4.5);
265   fHistT2CorrTrack->GetXaxis()->SetBinLabel(1,"nTrack Total");
266   fHistT2CorrTrack->GetXaxis()->SetBinLabel(2,"after conversion");
267   fHistT2CorrTrack->GetXaxis()->SetBinLabel(3,"after K0 resonance");
268   fHistT2CorrTrack->GetXaxis()->SetBinLabel(4,"after Lambda resonance");
269   fHistT2CorrTrack->GetXaxis()->SetBinLabel(5,"after 2track eff");
270   fHistT2CorrTrack->GetXaxis()->SetNdivisions(1,kFALSE);
271   fHistT2CorrTrack->Sumw2();
272   fHistT2CorrTrack->SetMinimum(0);
273   fOutputQA->Add(fHistT2CorrTrack);
274   
275   DefineHistoNames();
276   
277   Bool_t DefPool = DefineMixedEventPool();
278   if(!DefPool){
279     AliInfo("UserCreateOutput: Pool is not define properly");
280     return;
281   }
282   
283   PostData(1,fOutputQA);
284   PostData(2,fOutputCorr);
285 }
286
287
288 //_____________________| User Exec Part
289 void  AliAnalysisTaskDiJetCorrelations::UserExec(Option_t *) 
290 {
291   
292     AliAODEvent *aod = dynamic_cast<AliAODEvent*>(InputEvent());
293     if(!aod && AODEvent() && IsStandardAOD()) {
294         aod = dynamic_cast<AliAODEvent*> (AODEvent());
295     } else if(!aod)  {
296         printf("AliAnalysisTaskDiJetCorrelations::UserExec: AOD not found!\n");
297         return;
298     }
299   
300   fHistNEvents->Fill(0);
301     
302   if(!fRecoOrMontecarlo){ // MC Kine
303     farrayMC = dynamic_cast<TClonesArray*>(aod->FindListObject(AliAODMCParticle::StdBranchName()));
304     if(!farrayMC){
305       AliError("Array of MC particles not found");
306       return;
307     }
308     AliAODMCHeader *mcHeader = NULL;
309     mcHeader =  (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
310     if(!mcHeader) {
311       printf("AliAnalysisTaskDiJetCorrelations::UserExec: MC header branch not found!\n");
312       return;
313     }
314   }
315   
316   if(!aod->GetPrimaryVertex()||TMath::Abs(aod->GetMagneticField())<0.001) return;
317   Float_t bSign = 0;
318   bSign = (aod->GetMagneticField() > 0) ? 1 : -1;
319   fHistNEvents->Fill(1);
320   
321   AliCentrality *centralityObj = 0x0;
322   if(fSetSystemValue){ // pPb, PbPb
323     centralityObj = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP();
324     fCentrOrMult = centralityObj->GetCentralityPercentileUnchecked("V0M");
325     if(centralityObj->GetQuality()!=0) return;
326     if((abs(fCentrOrMult)) < 0. || (abs(fCentrOrMult)) > 100.1)return;
327   }
328   else if(!fSetSystemValue){ // pp, pPb
329     Double_t count = -1, mineta = -1.0, maxeta = 1.0;
330     AliAODTracklets* tracklets = aod->GetTracklets();
331     Int_t nTr=tracklets->GetNumberOfTracklets();
332     for(Int_t iTr=0; iTr<nTr; iTr++){
333       Double_t theta=tracklets->GetTheta(iTr);
334       Double_t eta=-TMath::Log(TMath::Tan(theta/2.));
335       if(eta>mineta && eta<maxeta) count++;
336     }
337     fCentrOrMult = count;
338   }
339   fHistNEvents->Fill(2); //
340   
341   AliAODVertex *vtxPrm = (AliAODVertex*)aod->GetPrimaryVertex();
342   Bool_t isGoodVtx=kFALSE;
343   TString primTitle = vtxPrm->GetTitle();
344   if(primTitle.Contains("VertexerTracks") && vtxPrm->GetNContributors()>0) {
345     isGoodVtx=kTRUE;
346     fHistNEvents->Fill(3);
347   }
348   if(!isGoodVtx) return;
349   
350   Float_t zVertex = vtxPrm->GetZ();
351   if (TMath::Abs(zVertex) > 10) return;
352   fHistQA[0]->Fill(zVertex);
353   
354   const AliAODVertex* vtxSPD = aod->GetPrimaryVertexSPD();
355   if(vtxSPD->GetNContributors()<=0) return;
356   TString vtxTyp = vtxSPD->GetTitle();
357   Double_t cov[6] = {0};
358   vtxSPD->GetCovarianceMatrix(cov);
359   Double_t zRes = TMath::Sqrt(cov[5]);
360   if(vtxTyp.Contains("vertexer:Z") && (zRes > 0.25)) return;
361   if(TMath::Abs(vtxSPD->GetZ() - vtxPrm->GetZ()) > 0.5) return;
362   fHistNEvents->Fill(4);
363    
364   TObjArray* fTrackArray = new TObjArray;
365   fTrackArray->SetOwner(kTRUE);
366   
367   Double_t refmaxpT1 = -999, refmaxpT2 = -999;
368   Double_t etaMaxpT1 = -999, etaMaxpT2 = -999;
369   Double_t phiMaxpT1 = -999, phiMaxpT2 = -999;
370   Short_t Charge1 = -999, Charge2 = -999;
371   
372   TString typeData = "";
373   TString SEorME = "";
374   
375   if(fRecoOrMontecarlo){
376     if(!fReadMC){
377       typeData += "Data";//data
378     }else
379       typeData += "MCrc"; // MC reco
380   }else{
381     typeData += "MCKn"; // MC Generations  
382   }
383   
384   if(!fMixedEvent){
385     SEorME += "SE";
386   }else if(fMixedEvent){
387     SEorME += "ME";
388   }
389   
390   //Mixed Events..
391
392   if(fMixedEvent){
393     if(TMath::Abs(zVertex)>=10){
394           AliInfo(Form("Event with Zvertex = %0.2f cm out of pool bounds, SKIPPING",zVertex));
395           return;
396     }
397       
398     fPool= fPoolMgr->GetEventPool(fCentrOrMult, zVertex);
399     if(!fPool){
400       AliInfo(Form("No pool found for Event: multiplicity = %f, zVtx = %f cm", fCentrOrMult, zVertex));
401       return;
402     }
403   }
404   
405   for (Int_t iTracks = 0; iTracks < aod->GetNumberOfTracks(); iTracks++){
406     
407     AliAODTrack* fAodTracks = (AliAODTrack*)aod->GetTrack(iTracks);
408     if (!fAodTracks)continue;
409
410     if(fSetFilterBit) if (!fAodTracks->TestFilterBit(fbit)) continue;
411     if(fAodTracks->Eta() < -0.8 || fAodTracks->Eta() > 0.8)continue;
412     if (fAodTracks->Pt() < 0.5 || fAodTracks->Pt() > 30.)continue;
413     
414       
415     fHistNEvents->Fill(5); 
416     fHistQA[1]->Fill(fAodTracks->GetTPCClusterInfo(2,1));
417     fHistQA[3]->Fill(fAodTracks->DCA());
418     fHistQA[4]->Fill(fAodTracks->ZAtDCA());
419     fHistQA[5]->Fill(fAodTracks->Chi2perNDF());
420     fHistQA[6]->Fill(fAodTracks->Pt());
421     fHistQA[7]->Fill(fAodTracks->Phi());
422     fHistQA[8]->Fill(fAodTracks->Eta());
423     
424     if(fRecoOrMontecarlo){ // reconstruction of data and MC
425       if(fReadMC){
426         // is track associated to particle ? if yes + implimenting the physical primary..
427         Int_t label = TMath::Abs(fAodTracks->GetLabel());
428         if (label<=0){
429           AliDebug(3,"Particle not matching MC label \n");
430           continue;
431         }
432         
433         AliAODMCParticle *mcPart  = (AliAODMCParticle*)fMCEvent->GetTrack(label);
434         if (!mcPart->IsPhysicalPrimary()) continue;
435         fTrackArray->Add(fAodTracks);
436       }else
437         fTrackArray->Add(fAodTracks); //Storing all tracks for Data
438     }
439     
440     if(fAodTracks->Pt() >= fTrigger1pTLowThr && fAodTracks->Pt()  <= fTrigger1pTHighThr){  
441       if(fAodTracks->Pt() > refmaxpT1){
442         refmaxpT1 = fAodTracks->Pt();
443         etaMaxpT1 = fAodTracks->Eta();
444         phiMaxpT1 = fAodTracks->Phi();
445         Charge1 = fAodTracks->Charge();
446       }
447       fHistNEvents->Fill(6);//shouldn't the line be here?
448     }
449   }
450
451   
452   if(!fMixedEvent)if(refmaxpT1 < fTrigger1pTLowThr || refmaxpT1 > fTrigger1pTHighThr)return;
453   fHistNEvents->Fill(8);
454     
455   for(Int_t entryT2=0; entryT2<fTrackArray->GetEntries(); entryT2++){
456         
457         TObject* obj = fTrackArray->At(entryT2);
458         AliAODTrack* fAodTracksT2 = (AliAODTrack*)obj;
459         
460         if(fAodTracksT2->Pt() >= fTrigger2pTLowThr && fAodTracksT2->Pt()  <= fTrigger2pTHighThr){
461           
462           Double_t phiT2 = fAodTracksT2->Phi();
463           Double_t TrigDPhi = phiMaxpT1-phiT2;
464           
465           Double_t TrigDPhi12 =  AssignCorrectPhiRange(TrigDPhi);
466           Double_t B2BTrigDPhi = TMath::Abs(TrigDPhi12-fAlpha);
467             
468           if(B2BTrigDPhi > (TMath::Pi())/8)continue;
469           fHistTrigDPhi->Fill(B2BTrigDPhi);
470             
471           if(fAodTracksT2->Pt() > refmaxpT2 ){
472             fHistNEvents->Fill(7);
473             refmaxpT2 = fAodTracksT2->Pt();
474             etaMaxpT2 = fAodTracksT2->Eta();
475             phiMaxpT2 = fAodTracksT2->Phi();
476             Charge2 = fAodTracksT2->Charge();
477           }
478         }
479   }
480     
481     if(!fMixedEvent)if(refmaxpT2 < fTrigger2pTLowThr || refmaxpT2 > fTrigger2pTHighThr)return;
482     fHistNEvents->Fill(9);
483     
484     if (refmaxpT1 != -999 && refmaxpT2 != -999){
485       
486       if(TMath::Abs(zVertex)>=10)AliInfo(Form("Event with Zvertex = %.2f cm out of pool bounds, SKIPPING",zVertex));
487       
488       Double_t fCentZvtxpT1[3] = {fCentrOrMult, zVertex, refmaxpT1};
489       if(!fMixedEvent)((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg1CentZvtxpT_%s_%s",typeData.Data(), SEorME.Data())))->Fill(fCentZvtxpT1);
490       
491       Double_t fCentZvtxpT2[3] = {fCentrOrMult, zVertex, refmaxpT2};
492       if(!fMixedEvent)((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg2CentZvtxpT_%s_%s",typeData.Data(), SEorME.Data())))->Fill(fCentZvtxpT2);
493       
494       Int_t NofEventsinPool = 1, NumberOfTracksStore=0; // SE
495       if(fMixedEvent){ //ME
496              Bool_t PoolQuality = ProcessMixedEventPool();
497              if(!PoolQuality){
498          AliInfo("Mixed event analysis: pool is not ready");
499              return;
500             }
501              NofEventsinPool = fPool->GetCurrentNEvents();
502       }
503       
504       TObjArray* SEMEEvtTracks = (TObjArray*)fTrackArray->Clone("SE");
505       for (Int_t jMix =0; jMix < NofEventsinPool; jMix++){
506         
507       if(fMixedEvent)SEMEEvtTracks = fPool->GetEvent(jMix); // replacing from pool
508       if(!SEMEEvtTracks)return;
509             
510           NumberOfTracksStore = SEMEEvtTracks->GetEntriesFast();
511         //cout << "Number of Tracks in this event are = " << NumberOfTracksStore << endl;
512         for(int k=0; k < NumberOfTracksStore; k++){
513           
514           TObject* objSEorME = SEMEEvtTracks->At(k);
515           AliAODTrack* fAodTracksAS = (AliAODTrack*)objSEorME;
516           if(!fAodTracksAS) continue;
517           if (fAodTracksAS->Pt() > refmaxpT1)continue;
518                 
519           if(fMixedEvent){
520             if(fAodTracksAS->Eta() < -0.8 || fAodTracksAS->Eta() > 0.8)continue;
521             if(fAodTracksAS->Pt() < 0.5 || fAodTracksAS->Pt() > 30)continue;
522             if(fSetFilterBit) if (!fAodTracksAS->TestFilterBit(fbit)) continue;
523           }
524           
525           if(fAodTracksAS->Pt() < refmaxpT1){
526             
527             Bool_t CutForConversionResonanceTrg1 = ConversionResonanceCut(refmaxpT1, phiMaxpT1, etaMaxpT1, Charge1, fAodTracksAS,fControlConvResT1, fHistT1CorrTrack);
528             if(fCutConversions || fCutResonances)if(!CutForConversionResonanceTrg1)continue;
529             
530             Bool_t CutForTwoTrackEffiTrg1 = TwoTrackEfficiencyCut(refmaxpT1, phiMaxpT1, etaMaxpT1, Charge1, fAodTracksAS, bSign);
531             if(ftwoTrackEfficiencyCut)if(!CutForTwoTrackEffiTrg1)continue;
532             fHistT1CorrTrack->Fill(4);
533             
534             Double_t deltaPhi1 = AssignCorrectPhiRange(phiMaxpT1 - fAodTracksAS->Phi());
535             Double_t deltaEta1  = etaMaxpT1 - fAodTracksAS->Eta();
536             
537             Double_t ptTrack1 = fAodTracksAS->Pt();
538             Double_t ptLim_Sparse1 = 0.0;
539             ptLim_Sparse1 =((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg1CentZvtxDEtaDPhi_%s_%s",typeData.Data(), SEorME.Data())))->GetAxis(4)->GetXmax();
540             if(ptTrack1 > ptLim_Sparse1)ptTrack1 = ptLim_Sparse1-0.01; //filling all pT
541             
542             Double_t CentzVtxDEtaDPhiTrg1[5] = {fCentrOrMult, zVertex, deltaEta1, deltaPhi1, ptTrack1};
543             Double_t effvalueT1 = 1.0;// GetTrackbyTrackEffValue(fAodTracksAS, fCentrOrMult, f3DEffCor);
544             ((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg1CentZvtxDEtaDPhi_%s_%s",typeData.Data(), SEorME.Data())))->Fill(CentzVtxDEtaDPhiTrg1, 1/effvalueT1);
545                     
546             //Double_t fBasicsTrg1[5] = {fAodTracksAS->Pt(), fAodTracksAS->Eta(), fCentrOrMult, zVertex, fAodTracksAS->Phi()};
547             //if(!fMixedEvent)((THnSparseD*)fOutputQA->FindObject(Form("ThnTrg1BasicsPlots_%s_%s",typeData.Data(), SEorME.Data())))->Fill(fBasicsTrg1);           
548           }
549           
550           
551           if (fAodTracksAS->Pt() < refmaxpT2){
552             
553             Bool_t CutForConversionResonanceTrg2 = ConversionResonanceCut(refmaxpT2, phiMaxpT2, etaMaxpT2, Charge2, fAodTracksAS,fControlConvResT2, fHistT2CorrTrack);
554             if(fCutConversions || fCutResonances)if(!CutForConversionResonanceTrg2)continue;
555             
556             Bool_t CutForTwoTrackEffiTrg2 = TwoTrackEfficiencyCut(refmaxpT2, phiMaxpT2, etaMaxpT2, Charge2, fAodTracksAS, bSign);
557             if(ftwoTrackEfficiencyCut)if(!CutForTwoTrackEffiTrg2)continue;
558             fHistT2CorrTrack->Fill(4);
559                     
560             Double_t deltaPhi2 =  AssignCorrectPhiRange(phiMaxpT2 - fAodTracksAS->Phi());
561             Double_t deltaEta2 = etaMaxpT2 - fAodTracksAS->Eta();
562             
563             Double_t ptLim_Sparse2 = 0.0;
564             Double_t ptTrack2 = fAodTracksAS->Pt();
565             ptLim_Sparse2 =((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg2CentZvtxDEtaDPhi_%s_%s",typeData.Data(), SEorME.Data())))->GetAxis(4)->GetXmax();
566             if(ptTrack2 > ptLim_Sparse2) ptTrack2 = ptLim_Sparse2-0.01; //filling all the pT in last bin
567             
568             Double_t CentzVtxDEtaDPhiTrg2[5] = {fCentrOrMult, zVertex, deltaEta2, deltaPhi2,ptTrack2};
569             Double_t effvalueT2 =1.0;// GetTrackbyTrackEffValue(fAodTracksAS, fCentrOrMult,f3DEffCor);
570             
571             ((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg2CentZvtxDEtaDPhi_%s_%s",typeData.Data(), SEorME.Data())))->Fill(CentzVtxDEtaDPhiTrg2,1/effvalueT2);
572             
573             //Double_t fBasicsTrg2[5] = {fAodTracksAS->Pt(), fAodTracksAS->Eta(), fCentrOrMult, zVertex, fAodTracksAS->Phi()};
574             //if(!fMixedEvent)((THnSparseD*)fOutputQA->FindObject(Form("ThnTrg2BasicsPlots_%s_%s",typeData.Data(), SEorME.Data())))->Fill(fBasicsTrg2);
575             
576           }
577         }
578       }   
579     }
580     
581     
582     TObjArray* tracksClone = NULL;//
583     tracksClone = (TObjArray*)fTrackArray->Clone();
584     if(fMixedEvent && tracksClone->GetEntriesFast()>0)fPool->UpdatePool(tracksClone);
585     
586     PostData(1, fOutputQA);
587     PostData(2, fOutputCorr);    
588 }
589
590 //_____________________|Terminate
591 void AliAnalysisTaskDiJetCorrelations::Terminate(Option_t *){
592   
593   fOutputQA = dynamic_cast<TList*> (GetOutputData(1));
594   if (!fOutputQA) {
595     printf("ERROR: Output list not available\n");
596     return;
597   }
598   
599   fOutputCorr = dynamic_cast<TList*> (GetOutputData(2));
600   if (!fOutputCorr) {
601     printf("ERROR: fOutputCorr not available\n");
602     return;
603   }
604   return;
605 }
606
607 //______________________________|  Cuts of Resonance and Conversions..
608 Bool_t AliAnalysisTaskDiJetCorrelations::ConversionResonanceCut(Double_t refmaxpT, Double_t phiMaxpT, Double_t etaMaxpT, Double_t Charge, AliAODTrack* AodTracks, TH2F*fControlConvResT, TH1F* fHistTCorrTrack){
609   
610   fHistTCorrTrack->Fill(0); //
611   //Conversions
612   if(fCutConversions && AodTracks->Charge() * Charge < 0){
613     Float_t mass = GetInvMassSquaredCheap(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.510e-3, 0.510e-3); 
614     if (mass < 0.1){
615       mass = GetInvMassSquared(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.510e-3, 0.510e-3);
616       fControlConvResT->Fill(0.0, mass);
617       if(mass < 0.04 * 0.04)    return kFALSE;
618     }
619   }
620   fHistTCorrTrack->Fill(1); //
621   
622   //K0s
623   if (fCutResonances && AodTracks->Charge() * Charge < 0){   
624     Float_t mass = GetInvMassSquaredCheap(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.1396, 0.1396);
625     const Float_t kK0smass = 0.4976;
626     if (TMath::Abs(mass -kK0smass * kK0smass)  < 0.1){
627       mass = GetInvMassSquared(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.1396, 0.1396);
628       fControlConvResT->Fill(1, mass -kK0smass * kK0smass);
629       if(mass > (kK0smass-0.02)*(kK0smass-0.02) && mass < (kK0smass+0.02)*(kK0smass+0.02))return kFALSE;
630     }
631   }
632   fHistTCorrTrack->Fill(2); //
633   
634   //lambda
635   if (fCutResonances && AodTracks->Charge() * Charge < 0){
636     Float_t mass1 = GetInvMassSquaredCheap(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.1396, 0.9383);
637     Float_t mass2 = GetInvMassSquaredCheap(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.9383, 0.1396);
638     const Float_t kLambdaMass = 1.115;
639     if (TMath::Abs(mass1 -kLambdaMass * kLambdaMass)  < 0.1){
640       mass1 = GetInvMassSquared(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.1396, 0.9383);
641       fControlConvResT->Fill(2, mass1 - kLambdaMass * kLambdaMass);
642       if(mass1 > (kLambdaMass-0.02)*(kLambdaMass-0.02) && mass1 < (kLambdaMass+0.02)*(kLambdaMass+0.02))return kFALSE;  
643     }
644     
645     if (TMath::Abs(mass2 -kLambdaMass * kLambdaMass)  < 0.1){
646       mass2 = GetInvMassSquared(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.1396, 0.9383);
647       fControlConvResT->Fill(2, mass2 - kLambdaMass * kLambdaMass);
648       if(mass2 > (kLambdaMass-0.02)*(kLambdaMass-0.02) && mass2 < (kLambdaMass+0.02)*(kLambdaMass+0.02))return kFALSE;
649     }
650   }
651   
652   fHistTCorrTrack->Fill(3); //
653   return kTRUE; 
654 }
655
656 //_____________________|  Two track Efficiency
657 Bool_t AliAnalysisTaskDiJetCorrelations::TwoTrackEfficiencyCut(Double_t refmaxpT, Double_t phiMaxpT, Double_t etaMaxpT, Double_t Charge, AliAODTrack* AodTracks, Float_t bSigntmp){
658   Float_t pt1  = refmaxpT;
659   Float_t phi1 = phiMaxpT;
660   Float_t eta1 = etaMaxpT;
661   Float_t charge1 = Charge;
662   
663   Float_t phi2 = AodTracks->Phi();
664   Float_t eta2 = AodTracks->Eta();
665   Float_t pt2  = AodTracks->Pt();
666   Float_t charge2 = AodTracks->Charge();
667   
668   Float_t deta = eta1 - eta2;
669   
670   if (TMath::Abs(deta) < 0.02 * 2.5 * 3){
671     Float_t dphistar1 = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, 0.8, bSigntmp);
672     Float_t dphistar2 = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, 2.5, bSigntmp);
673     
674     const Float_t kLimit = 0.02*3;
675     Float_t dphistarminabs = 1e5;
676     //Float_t dphistarmin = 1e5;
677   
678     if (TMath::Abs(dphistar1) < kLimit || TMath::Abs(dphistar2) < kLimit || dphistar1 * dphistar2 < 0){
679       for (Double_t rad=0.8; rad<2.51; rad+=0.01){
680         Float_t dphistar = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, rad, bSigntmp);
681         Float_t dphistarabs = TMath::Abs(dphistar);
682         if (dphistarabs < dphistarminabs){
683           //dphistarmin = dphistar;
684           dphistarminabs = dphistarabs;
685         }
686       }
687        
688       if (dphistarminabs < 0.02 && TMath::Abs(deta) < 0.02){
689         return kFALSE;
690       }
691     }
692   }
693   return kTRUE;
694 }
695
696
697 //______________________________|  Nomenclature of Histograms
698 void AliAnalysisTaskDiJetCorrelations::DefineHistoNames(){
699   
700   Double_t Pi = TMath::Pi();
701   //QA histograms
702   fHistQA[0] = new TH1F("fHistZVtx", "Z vertex distribution", 100, -15., 15.);
703   fHistQA[1] = new TH1F("fHistnTPCCluster", "n TPC Cluster", 100, 0., 200.);
704   fHistQA[2] = new TH1F("fHistnTPCClusterF", "n TPC Cluster findable", 100, 0., 200.);
705   fHistQA[3] = new TH1F("fHistDCAXY", "dca-XY", 100, -5., 5.);
706   fHistQA[4] = new TH1F("fHistDCAZ", "dca-Z", 100, -5., 5.);
707   fHistQA[5] = new TH1F("fHistChi2TPC", "Chi2 TPC", 100, 0., 10.);
708   fHistQA[6] = new TH1F("fHistpT", "pT distribution",1000,0.,20.);
709   fHistQA[7] = new TH1F("fHistPhi", "Phi distribution" , 100, -0.5, 2*Pi+0.5);
710   fHistQA[8] = new TH1F("fHistEta", "Eta distribution" , 100, -2, 2);
711   
712   for( Int_t i = 0; i < 9; i++)
713     {
714       fHistQA[i]->Sumw2();
715       fOutputQA->Add(fHistQA[i]);
716     }
717   
718   //1 SE Distributuons Phi, Eta for Trg1 and Trg2
719   fHistTrigDPhi = new TH1F("fHistTrigDPhi", " Trig Phi Difference Same",100, 0, 0.5);
720   fHistTrigDPhi->Sumw2();
721   fOutputQA->Add(fHistTrigDPhi);
722   
723   fControlConvResT1 = new TH2F("fControlConvResT1", ";id;delta mass;T1", 3, -0.5, 2.5, 100, -0.1, 0.1);
724   fControlConvResT2 = new TH2F("fControlConvResT2", ";id;delta mass;T2", 3, -0.5, 2.5, 100, -0.1, 0.1);
725   fControlConvResT1->Sumw2();
726   fControlConvResT2->Sumw2();
727   fOutputQA->Add(fControlConvResT1);
728   fOutputQA->Add(fControlConvResT2);
729   
730   //Thnsprase Distributuons Phi, Eta for Trg1 and Trg2
731   TString nameThnTrg1CentZvtxDEtaDPhi   = "ThnTrg1CentZvtxDEtaDPhi";
732   TString nameThnTrg2CentZvtxDEtaDPhi   = "ThnTrg2CentZvtxDEtaDPhi";
733   TString nameThnTrg1CentZvtxpT     = "ThnTrg1CentZvtxpT" ;
734   TString nameThnTrg2CentZvtxpT    = "ThnTrg2CentZvtxpT" ;
735   //TString nameThnTrg1BasicsPlots    = "ThnTrg1BasicsPlots";
736   //TString nameThnTrg2BasicsPlots    = "ThnTrg2BasicsPlots";
737   
738   if(fRecoOrMontecarlo){
739     if(!fReadMC){ //data
740       nameThnTrg1CentZvtxDEtaDPhi  += "_Data";
741       nameThnTrg2CentZvtxDEtaDPhi  += "_Data";
742       nameThnTrg1CentZvtxpT  += "_Data";
743       nameThnTrg2CentZvtxpT  += "_Data";
744       //nameThnTrg1BasicsPlots  += "_Data";
745       //nameThnTrg2BasicsPlots  += "_Data";
746     }
747     else {// MC reco
748       nameThnTrg1CentZvtxDEtaDPhi  += "_MCrc";
749       nameThnTrg2CentZvtxDEtaDPhi  += "_MCrc";
750       nameThnTrg1CentZvtxpT  += "_MCrc";
751       nameThnTrg2CentZvtxpT  += "_MCrc";
752       //nameThnTrg1BasicsPlots  += "_MCrc";
753       //nameThnTrg2BasicsPlots  += "_MCrc";
754     }
755   }
756   else{ // MC Generations
757     nameThnTrg1CentZvtxDEtaDPhi  += "_MCKn";
758     nameThnTrg2CentZvtxDEtaDPhi  += "_MCKn";
759     nameThnTrg1CentZvtxpT  += "_MCKn";
760     nameThnTrg2CentZvtxpT  += "_MCKn";
761     //nameThnTrg1BasicsPlots  += "_MCKn";
762     //nameThnTrg2BasicsPlots  += "_MCKn";
763   }
764   
765   if(!fMixedEvent){
766     nameThnTrg1CentZvtxDEtaDPhi  += "_SE";
767     nameThnTrg2CentZvtxDEtaDPhi  += "_SE";
768     nameThnTrg1CentZvtxpT  += "_SE";
769     nameThnTrg2CentZvtxpT  += "_SE";
770     //nameThnTrg1BasicsPlots  += "_SE";
771     //nameThnTrg2BasicsPlots  += "_SE";
772   }else if(fMixedEvent){
773     nameThnTrg1CentZvtxDEtaDPhi  += "_ME";
774     nameThnTrg2CentZvtxDEtaDPhi  += "_ME";
775     nameThnTrg1CentZvtxpT  += "_ME";
776     nameThnTrg2CentZvtxpT  += "_ME";
777     }
778
779   //Catgry :1 Trigger Particles --> Cent, Zvtx, Trigger_pT
780   //_____________________________________________Trigger-1
781   const Int_t pTbinTrigger1 = Int_t(fTrigger1pTHighThr - fTrigger1pTLowThr);
782   Int_t   fBinsTrg1[3]   = {12,       10,        pTbinTrigger1};
783   Double_t fMinTrg1[3]   = {0.0,   -10.0,    fTrigger1pTLowThr};
784   Double_t fMaxTrg1[3]   = {100.0,  10.0,   fTrigger1pTHighThr};
785   THnSparseD *THnTrig1CentZvtxpT = new THnSparseD(nameThnTrg1CentZvtxpT.Data(),"Cent-Zvtx-pTtr1",3, fBinsTrg1, fMinTrg1, fMaxTrg1);
786   THnTrig1CentZvtxpT->Sumw2();
787   fOutputCorr->Add(THnTrig1CentZvtxpT);
788
789   //_____________________________________________Trigger-2
790   const Int_t pTbinTrigger2 = Int_t(fTrigger2pTHighThr - fTrigger2pTLowThr);
791   Int_t   fBinsTrg2[3]   = {12,       10,        pTbinTrigger2};
792   Double_t fMinTrg2[3]   = {0.0,   -10.0,    fTrigger2pTLowThr};
793   Double_t fMaxTrg2[3]   = {100.0,  10.0,   fTrigger2pTHighThr};
794   THnSparseD *THnTrig2CentZvtxpT = new THnSparseD(nameThnTrg2CentZvtxpT.Data(),"Cent-Zvtx-pTtr2",3, fBinsTrg2, fMinTrg2, fMaxTrg2);
795   THnTrig2CentZvtxpT->Sumw2();
796   fOutputCorr->Add(THnTrig2CentZvtxpT);
797   
798     
799   //Catgry2: Correaltions Plots for SE and ME (T1, T2)
800   Int_t    fBins12[5] = {12,     10,   16,               36,    11};
801   Double_t  fMin12[5] = {0.0,   -10., -1.6, -0.5*TMath::Pi(),  0.5};
802   Double_t  fMax12[5] = {100.0,  10.,  1.6,  1.5*TMath::Pi(), 6.00};
803   THnSparseD *THnTrig1CentZvtxDEtaDPhi   = new THnSparseD(nameThnTrg1CentZvtxDEtaDPhi.Data(),"Cent-zVtx-DEta1-DPhi1-Trk",5, fBins12, fMin12, fMax12);
804   THnSparseD *THnTrig2CentZvtxDEtaDPhi   = new THnSparseD(nameThnTrg2CentZvtxDEtaDPhi.Data(),"Cent-zVtx-DEta2-DPhi2-Trk",5, fBins12, fMin12, fMax12);
805   if(fuseVarCentBins){
806     const Int_t nvarBinsCent = 12;
807     Double_t varBinsCent[nvarBinsCent+1] = {0., 1., 2., 3., 4., 5., 7.5, 10., 20., 30., 40., 50., 100.1};
808     THnTrig1CentZvtxDEtaDPhi->GetAxis(0)->Set(nvarBinsCent, varBinsCent);
809     THnTrig2CentZvtxDEtaDPhi->GetAxis(0)->Set(nvarBinsCent, varBinsCent);
810     THnTrig1CentZvtxpT->GetAxis(0)->Set(nvarBinsCent, varBinsCent);
811     THnTrig2CentZvtxpT->GetAxis(0)->Set(nvarBinsCent, varBinsCent);
812   }
813
814   //Munual pT tracks Values
815   if(fuseVarPtBins){
816     const Int_t nvarBinspT = 11;
817     Double_t varBinspT[nvarBinspT+1] = {0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0, 6.0};
818     THnTrig1CentZvtxDEtaDPhi->GetAxis(4)->Set(nvarBinspT, varBinspT);
819     THnTrig2CentZvtxDEtaDPhi->GetAxis(4)->Set(nvarBinspT, varBinspT);
820     }
821     
822   THnTrig1CentZvtxDEtaDPhi->Sumw2();
823   THnTrig2CentZvtxDEtaDPhi->Sumw2();
824   fOutputCorr->Add(THnTrig1CentZvtxDEtaDPhi);
825   fOutputCorr->Add(THnTrig2CentZvtxDEtaDPhi);
826  /*
827   
828   Int_t   fBinsTrk[5]   = {  20,   16,    10,    10,  36};
829   Double_t fMinTrk[5]   = { 0.0, -0.8,   0.0,  -10.,  0};
830   Double_t fMaxTrk[5]   = {20.0,  0.8, 100.1,   10.,  2*TMath::Pi()};
831   THnSparseD *THnTrg1BasicsPlots = new THnSparseD(nameThnTrg1BasicsPlots.Data(),"pTtr1-Eta-Cent-zvtx-Phi",5, fBinsTrk, fMinTrk, fMaxTrk);
832   THnSparseD *THnTrg2BasicsPlots = new THnSparseD(nameThnTrg2BasicsPlots.Data(),"pTtr2-Eta-Cent-zvtx-Phi",5, fBinsTrk, fMinTrk, fMaxTrk);
833   //THnTrg1BasicsPlots->Sumw2();
834   //THnTrg2BasicsPlots->Sumw2();
835   //fOutputQA->Add(THnTrg1BasicsPlots);
836   //fOutputQA->Add(THnTrg2BasicsPlots);*/
837 }
838
839
840 //______________________________|  Track Efficiency
841 Double_t AliAnalysisTaskDiJetCorrelations::GetTrackbyTrackEffValue(AliAODTrack* track, Double_t CentrOrMult, TH3F* h){
842   Float_t effvalue = -999.;
843         
844   //if(!h)cout << "Histograms was not there" << endl;
845   Int_t binX = h->GetXaxis()->FindBin(CentrOrMult);
846   Int_t binY = h->GetYaxis()->FindBin(track->Eta());
847   Int_t binZ = h->GetZaxis()->FindBin(track->Pt());
848   effvalue = h->GetBinContent(binX, binY, binZ);
849   cout <<"effi value = "<< effvalue << endl; exit(1);
850   if(effvalue==0) effvalue=1.;
851   return effvalue;
852 }
853
854
855 //end of file : Greeshma
856