Addition of the theta variable. New macro (Xavier)
authormartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 Sep 2010 07:21:27 +0000 (07:21 +0000)
committermartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 Sep 2010 07:21:27 +0000 (07:21 +0000)
PWG3/muon/AliCFMuonSingleTask1.C [new file with mode: 0644]
PWG3/muon/AliCFMuonSingleTask1.cxx

diff --git a/PWG3/muon/AliCFMuonSingleTask1.C b/PWG3/muon/AliCFMuonSingleTask1.C
new file mode 100644 (file)
index 0000000..3cf1497
--- /dev/null
@@ -0,0 +1,109 @@
+Bool_t AliCFMuonSingleTask1(Int_t runmin = 17, Int_t runmax = 17)
+{
+    Bool_t isMC=kTRUE;
+    
+    TBenchmark benchmark;
+    benchmark.Start("AliMuonSingleTask1");
+    AliLog::SetGlobalDebugLevel(0);
+    Load() ; // load the required libraries
+    TChain * analysisChain ;
+    analysisChain = new TChain("esdTree");
+
+    Char_t RunFile[256];
+    for(Int_t i=runmin; i<=runmax; i++){
+       sprintf(RunFile,"/home/lopez/alice/data/TEST/run%d-10/AliESDs.root",i);
+       analysisChain->Add(RunFile);
+    }
+
+    enum             { kEta,  kY, kPhi, kPt, kP3, kHit, kChi2Fit, kTrM, kChi2TrM,  kContrN,  kVt,  kVz, kTrig, kDCA, kZcoor, kRabs, kCharge, kTheta, kNVars };
+    Int_t  nBins[] = {   5 , 5  ,  45 , 60 ,150 ,  20 ,      20 ,  4  ,      20 ,     202 , 100 ,  100 ,  10 , 500 ,   1000,  100 ,     3 , 100      };
+    Double_t min[] = {  -4.,-4. ,-180.,  0.,  0.,   0.,       0., -0.5,       0.,     -2.5,   0., -100.,   0.,   0., -3000.,    0.,  -1.5 , 2.95      };
+    Double_t max[] = {-2.5.,-2.5, 180., 30.,150.,  20.,      20.,  3.5,      10.,    199.5, 200.,  100.,  10., 500.,  1000.,  100.,   1.5 , 3.15     };
+    
+    Double_t *binLimits = 0;
+    Int_t nSteps=1; if (isMC) nSteps=2;
+    AliCFContainer* contCF = new AliCFContainer("container", "", nSteps, kNVars, nBins);
+    for (Int_t var=kNVars; var--;) {
+       binLimits = new Double_t[nBins[var]+1];
+       for (Int_t i=0; i<=nBins[var]; i++) binLimits[i]=min[var]+i*(max[var]-min[var])/nBins[var];
+       contCF->SetBinLimits(var, binLimits);
+       delete [] binLimits; binLimits=0;
+    }
+    
+    TList *qaList = new TList();
+    TObjArray *genList = new TObjArray(0);
+    AliCFTrackKineCuts *genKineCuts = new AliCFTrackKineCuts("genKineCuts", "GenKineCuts");
+    genKineCuts->SetPtRange(min[kPt], max[kPt]);
+    genKineCuts->SetRapidityRange(min[kY], max[kY]);
+    genKineCuts->SetQAOn(qaList);
+    genList->AddLast(genKineCuts);
+
+    TObjArray *recList = new TObjArray(0);
+    AliCFTrackKineCuts *recKineCuts = new AliCFTrackKineCuts("recKineCuts", "RecKineCuts");
+    recKineCuts->SetPtRange(min[kPt], max[kPt]);
+    recKineCuts->SetRapidityRange(min[kY], max[kY]);
+    recKineCuts->SetQAOn(qaList);
+    recList->AddLast(recKineCuts);
+//__
+
+    AliCFManager* managerCF = new AliCFManager() ;
+    managerCF->SetParticleContainer(contCF);
+    managerCF->SetParticleCutsList(AliCFManager::kPartGenCuts, genList);
+    managerCF->SetParticleCutsList(AliCFManager::kPartAccCuts, recList);
+
+    AliCFMuonSingleTask1 *taskMuonCF = new AliCFMuonSingleTask1("AliMuonSingleTask1");
+    taskMuonCF->SetCFManager(managerCF);
+    taskMuonCF->SetQAList(qaList);
+    taskMuonCF->SetUseMC(isMC);
+
+    AliAnalysisManager *mgr = new AliAnalysisManager("TestManager");
+    mgr->SetAnalysisType(AliAnalysisManager::kLocalAnalysis);
+    
+    AliMCEventHandler*  mcHandler = new AliMCEventHandler();
+    mgr->SetMCtruthEventHandler(mcHandler);
+
+//  AliInputEventHandler* dataHandler ;
+//  dataHandler = new AliESDInputHandler();
+//  mgr->SetInputEventHandler(dataHandler);
+
+    AliESDInputHandler *esdHandler = new AliESDInputHandler();
+    esdHandler->SetReadFriends(kFALSE);
+    mgr->SetInputEventHandler(esdHandler);
+
+
+    AliAnalysisDataContainer *cinput0  = mgr->CreateContainer("cchain0",TChain::Class(),AliAnalysisManager::kInputContainer);
+    cinput0->SetData(analysisChain);
+
+    mgr->AddTask(taskMuonCF);
+    mgr->ConnectInput(taskMuonCF, 0, mgr->GetCommonInputContainer());  
+
+    Char_t fileName[256];
+    sprintf(fileName,"muonCF_%d_%d.root",runmin,runmax);
+    printf("Analysis output in %s \n",fileName);
+
+    mgr->ConnectOutput(taskMuonCF,1,mgr->CreateContainer("chist",TH1I::Class(),AliAnalysisManager::kOutputContainer,fileName));
+    mgr->ConnectOutput(taskMuonCF,2,mgr->CreateContainer("ccont",AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,fileName));
+    printf("READY TO RUN\n");
+    //RUN !!!
+    if (mgr->InitAnalysis()) {
+       mgr->PrintStatus();
+       mgr->StartAnalysis("local",analysisChain);
+  }
+    benchmark.Stop("AliMuonSingleTask1");
+    benchmark.Show("AliMuonSingleTask1");
+
+    return kTRUE ;
+}
+
+void Load() {
+
+  //load the required aliroot libraries
+    gSystem->Load("libANALYSIS") ;
+    gSystem->Load("libANALYSISalice") ;
+    gSystem->Load("$ALICE_ROOT/lib/tgt_linux/libCORRFW.so") ;
+
+  //compile online the task class
+    gSystem->SetIncludePath("-I. -I$ALICE_ROOT/include -I$ALICE_ROOT/MUON -I$ALICE_ROOT/STEER -I$ROOTSYS/include");
+    gROOT->LoadMacro("./AliCFMuonSingleTask1.cxx+");
+}
index ebede9a..d089ff4 100644 (file)
@@ -145,7 +145,7 @@ void AliCFMuonSingleTask1::UserExec(Option_t *)
 
   fNevt++;
   fCFManager->SetEventInfo(fMCEvent);
-  Double_t containerInput[17] ;
+  Double_t containerInput[18] ;
 
 ////////
 //// MC
@@ -179,6 +179,11 @@ void AliCFMuonSingleTask1::UserExec(Option_t *)
              Float_t chargemc=0;
              if(pdg==13) chargemc=-1;
              if(pdg==-13) chargemc=1;
+             Float_t thetamc;
+             thetamc = TMath::Abs(-TMath::Pi()+TMath::ASin(ptmc/pmc)); // convention for EVGEN
+             Float_t ymc = part->Vy();
+             Float_t xmc = part->Vx();
+             Float_t rmc = TMath::Sqrt(xmc*xmc+ymc*ymc);   
       
              containerInput[0] = etamc ;   
              containerInput[1] = rapmc ;   
@@ -187,20 +192,23 @@ void AliCFMuonSingleTask1::UserExec(Option_t *)
              containerInput[4] = pmc ;
              containerInput[14] = zmc ;
              containerInput[16] = chargemc ;
+             containerInput[17] = thetamc ;
 
              // 10 var calculated only for ESD .i.e set at 1 in MC step
              for(Int_t i=5; i<=13; i++){
                  containerInput[i] = 1;
              }
-             containerInput[7]=3;            
-             containerInput[15] = 25 ; // rabsmc
+
+             containerInput[7] = 3;
+             containerInput[10] = rmc ; // radius at production      
+             containerInput[15] = 45 ;  // rabsmc
              
              // fill the container at the first step
              fCFManager->GetParticleContainer()->Fill(containerInput,0);
          }
       }
   }
-  
+             
 
 ////////
 //// ESD
@@ -227,7 +235,7 @@ void AliCFMuonSingleTask1::UserExec(Option_t *)
 
   Float_t vx = -200 , vy = -200 , vz = -200, vt=-200;
   
-  Double_t Ncont = 0.;  // mmmmmmmmmodified
+  Double_t Ncont = 0.; 
   AliESDVertex* vertex = (AliESDVertex*) fESD->GetVertex();
   if (vertex->GetNContributors()) {
       vz = vertex->GetZv();
@@ -262,6 +270,8 @@ void AliCFMuonSingleTask1::UserExec(Option_t *)
        Float_t zr = mu1->GetZ();
        Float_t etar = mu1->Eta();
        Float_t rabs = mu1->GetRAtAbsorberEnd();
+       Float_t thetar ;
+       thetar = TMath::Abs(-TMath::Pi()+TMath::ASin(ptr/pr)); 
   
 // rapidity and Pt cuts (default -4<y<-2.5 et 0<pt<20)
        if (!fCFManager->CheckParticleCuts(AliCFManager::kPartAccCuts,mu1)) continue;
@@ -283,6 +293,7 @@ void AliCFMuonSingleTask1::UserExec(Option_t *)
        containerInput[14] = zr ;
        containerInput[15] = rabs ;
        containerInput[16] = charger ;
+       containerInput[17] = thetar ;
 
 // fill the container at the second step (for simu, first for data)
        if(fIsMC){
@@ -332,15 +343,15 @@ void AliCFMuonSingleTask1::Terminate(Option_t *)
 
     AliCFContainer *cont = dynamic_cast<AliCFContainer*> (GetOutputData(2));
 
-    TH1D *kpt = cont->ShowProjection(3,0);
-//    TH1D *rpt = cont->ShowProjection(3,1);
+    TH1D *kpt = cont->ShowProjection(16,0);
+    TH1D *rpt = cont->ShowProjection(16,1);
 
     TCanvas *c1 = new TCanvas("AliCFMuonSingleTask1"," MC & ESD",10,10,510,510);
     c1->Divide(1,2);
     c1->cd(1);
     kpt->Draw("HIST");
-//    c1->cd(2);
-//    rpt->Draw("HIST");
+    c1->cd(2);
+    rpt->Draw("HIST");
 
 }
 //________________________________________________________________________