/*
$Log$
+Revision 1.54 2002/03/18 17:59:13 kowal2
+Chnges in the pad geometry - 3 pad lengths introduced.
+
Revision 1.53 2002/02/25 11:02:56 kowal2
Changes towards speeding up the code. Thanks to Marian Ivanov.
// Set response functions
AliTPCParamSR *param=(AliTPCParamSR*)gDirectory->Get("75x40_100x60");
+ if(param){
+ printf("You are using 2 pad-length geom hits with 3 pad-lenght geom digits...\n");
+ delete param;
+ param = new AliTPCParamSR();
+ }
+ else {
+ param=(AliTPCParamSR*)gDirectory->Get("75x40_100x60_150x60");
+ }
+ if(!param){
+ printf("No TPC parameters found\n");
+ exit(4);
+ }
+
+
AliTPCPRF2D * prfinner = new AliTPCPRF2D;
AliTPCPRF2D * prfouter1 = new AliTPCPRF2D;
AliTPCPRF2D * prfouter2 = new AliTPCPRF2D;
TDirectory *cwd = gDirectory;
- AliTPCParam *dig=(AliTPCParam *)gDirectory->Get("75x40_100x60");
+ AliTPCParamSR *dig=(AliTPCParamSR *)gDirectory->Get("75x40_100x60");
+ if(dig){
+ printf("You are running 2 pad-length geom hits with 3 pad-length geom digits\n");
+ delete dig;
+ dig = new AliTPCParamSR();
+ }
+ else
+ {
+ dig=(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60");
+ }
+ if(!dig){
+ printf("No TPC parameters found\n");
+ exit(3);
+ }
+
SetParam(dig);
cout<<"AliTPC::Digits2Reco: TPC parameteres have been set"<<endl;
TFile *out;
Int_t ver = TPC->IsVersion();
cerr<<"TPC version "<<ver<<" has been found !\n";
- AliTPCParam *digp=(AliTPCParam*)file->Get("75x40_100x60");
+ AliTPCParamSR *digp=(AliTPCParamSR*)file->Get("75x40_100x60");
+ if(digp){
+ cerr<<"2 pad-lenght geom hits with 3 pad-length geom digits...\n";
+ delete digp;
+ digp = new AliTPCParamSR();
+ }
+ else
+ {
+ digp =(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60");
+ }
if (!digp) { cerr<<"TPC parameters have not been found !\n"; exit(6); }
TPC->SetParam(digp);
break;
case 2:
{
- char dname[100]; sprintf(dname,"TreeD_75x40_100x60_%d",event);
+ char dname[100]; sprintf(dname,"TreeD_75x40_100x60_150x60_%d",event);
TTree *TD=(TTree*)gDirectory->Get(dname);
AliSimDigits da, *digits=&da;
TD->GetBranch("Segment")->SetAddress(&digits);
// if(gAlice)delete gAlice; COMMENTED BECAUSE OF A BUG (IN COMPILED MODE)
gAlice = (AliRun*)inkin->Get("gAlice");
cout<<"AliRun object found on file "<<gAlice<<endl;
- Float_t fifac=gAlice->Field()->Factor();
- AliKalmanTrack::SetConvConst(100/0.299792458/0.2/fifac);
- cout<<fifac*0.2<<" T Magnetic field is used\n";
+ AliKalmanTrack::SetConvConst(1000/0.299792458/gAlice->Field()->SolenoidField());
inkin->Close();
/*
delete gAlice; COMMENTED BECAUSE OF A BUG IN COMPILED MODE
if(kOLD){
cf=TFile::Open("AliTPCclusters.root");
if (!cf->IsOpen()) {cerr<<"Can't open AliTPCclusters.root !\n"; return 1;}
- digp= (AliTPCParam*)cf->Get("75x40_100x60");
+ digp= (AliTPCParam*)cf->Get("75x40_100x60_150x60");
if (!digp) { cerr<<"TPC parameters have not been found !\n"; return 2; }
}
///////////
gt[ngood].x >>gt[ngood].y >>gt[ngood].z) {
ngood++;
cerr<<ngood<<"\r";
+ //cout<<ngood<<"\r";
if (ngood==MAX) {
cerr<<"Too many good tracks !\n";
break;
} else {
cerr<<"Marking good tracks (this will take a while)...\n";
ngood=good_tracks(gt,45000,firstev,eventn);
+ printf("Goood %d\n", ngood);
ofstream out("good_tracks_tpc");
- ofstream out2("good_tracks_tpc_par");
-
if (out) {
cout<<"File good_tracks_tpc opened\n";
for (Int_t ngd=0; ngd<ngood; ngd++) {
- Float_t pt = TMath::Sqrt(gt[ngd].px*gt[ngd].px+gt[ngd].py*gt[ngd].py);
- Float_t angle = gt[ngd].pz/pt;
out<<gt[ngd].fEventN<<' '<<gt[ngd].lab<<' '<<gt[ngd].code<<' '<<
gt[ngd].px<<' '<<gt[ngd].py<<' '<<gt[ngd].pz<<' '<<
gt[ngd].x <<' '<<gt[ngd].y <<' '<<gt[ngd].z <<endl;
- out2<<gt[ngd].fEventN<<"\t"<<gt[ngd].lab<<"\t"<<gt[ngd].code<<"\t"<<
- pt<<"\t"<<angle<<"\t"<<endl;
}
} else cerr<<"Can not open file (good_tracks_tpc) !\n";
+ out<<flush;
out.close();
+
+ ofstream out2("good_tracks_tpc_par");
+
+ if (out2) {
+ //cout<<"File good_tracks_tpc opened\n";
+ for (Int_t ngd=0; ngd<ngood; ngd++) {
+ Float_t pt = TMath::Sqrt(gt[ngd].px*gt[ngd].px+gt[ngd].py*gt[ngd].py);
+ Float_t angle = 0;
+ if (TMath::Abs(pt)>0.01) angle = gt[ngd].pz/pt;
+ out2<<gt[ngd].fEventN<<"\t"<<gt[ngd].lab<<"\t"<<gt[ngd].code<<"\t"<<
+ pt<<"\t"<<angle<<"\t"<<endl;
+ }
+ } else cerr<<"Can not open file (good_tracks_tpc) !\n";
+ out2<<flush;
out2.close();
+
}
cerr<<"Number of good tracks : "<<ngood<<endl;
+ cout<<"Number of good tracks : "<<ngood<<endl;
if(ngood==0)return 5;
- TH1F *hp=new TH1F("hp","PHI resolution",50,-200.,200.); hp->SetFillColor(4);
- TH1F *hl=new TH1F("hl","LAMBDA resolution",50,-200,200);hl->SetFillColor(4);
+ TH1F *hp=new TH1F("hp","PHI resolution",50,-20.,20.); hp->SetFillColor(4);
+ TH1F *hl=new TH1F("hl","LAMBDA resolution",50,-20,20);hl->SetFillColor(4);
TH1F *hpt=new TH1F("hpt","Relative Pt resolution",30,-10.,10.);
hpt->SetFillColor(2);
TH1F *hmpt=new TH1F("hmpt","Relative Pt resolution (pt>4GeV/c)",30,-60,60);
//
Double_t xk=gt[ngood].x;
- printf("Track =%p\n",track);
+ if (!track) continue;
+ // printf("Track =%p\n",track);
track->PropagateTo(xk);
if (lab==tlab) hfound->Fill(ptg);
if (TMath::Abs(gt[ngood].code)==11 && ptg>4.) {
hmpt->Fill((pt_1 - 1/ptg)/(1/ptg)*100.);
- } else {
+ }
+ //else
+ {
Float_t phig=TMath::ATan2(gt[ngood].py,gt[ngood].px);
hp->Fill((phi - phig)*1000.);
Stat_t ng=hgood->GetEntries(), nf=hfound->GetEntries();
if (ng!=0) cerr<<"\n\nIntegral efficiency is about "<<nf/ng*100.<<" %\n";
+ if (ng!=0) cout<<"\n\nIntegral efficiency is about "<<nf/ng*100.<<" %\n";
cout<<"Total number of found tracks ="<<nentr<<endl;
cout<<"Total number of \"good\" tracks ="
<<mingood<<" (selected for comparison: "<<ng<<')'<<endl<<endl;
Int_t good_tracks(GoodTrackTPC *gt, Int_t max, Int_t firstev, Int_t eventn) {
//eventn - number of events in file
- TFile *file=TFile::Open("rfio:galice.root");
+ TFile *file=TFile::Open("galice.root");
if (!file->IsOpen()) {cerr<<"Can't open galice.root !\n"; exit(4);}
// delete gAlice; gAlice = 0;
if (!(gAlice=(AliRun*)file->Get("gAlice"))) {
cerr<<"TPC version "<<ver<<" has been found !\n";
AliTPCParam *digp=(AliTPCParam*)file->Get("75x40_100x60");
+ if(digp){
+ cerr<<"2 pad-lenght geom hits with 3 pad-length geom digits...\n";
+ delete digp;
+ digp = new AliTPCParamSR();
+ }
+ else
+ {
+ digp =(AliTPCParam*)gDirectory->Get("75x40_100x60_150x60");
+ }
+
if (!digp) { cerr<<"TPC parameters have not been found !\n"; exit(6); }
TPC->SetParam(digp);
break;
case 2:
{
- sprintf(treeName,"TreeD_75x40_100x60_%d",event);
+ sprintf(treeName,"TreeD_75x40_100x60_150x60_%d",event);
TD=(TTree*)gDirectory->Get(treeName);
TD->GetBranch("Segment")->SetAddress(&digits);
count = new Int_t[np];
}
/** select tracks which are "good" enough **/
+ //printf("\t %d \n",np);
for (Int_t i=0; i<np; i++) {
if ((good[i]&0x5000) != 0x5000)
if ((good[i]&0x2800) != 0x2800) continue;
//if (!(pp->TestBit(kPrimaryCharged))) continue; //only one decay is allowed
}
- //if(!(p->TestBit(kPrimaryCharged)))continue; // only primaries
+ if(!(p->TestBit(kPrimaryCharged)))continue; // only primaries
+ // printf("1");
gt[nt].fEventN=event;
gt[nt].lab=i;
Int_t j, lab=phit->Track();
for (j=0; j<nt; j++) {if (gt[j].fEventN==event && gt[j].lab==lab) break;}
if (j==nt) continue;
-
+ //printf("1-");
// (px,py,pz) - in global coordinate system, (x,y,z) - in local !
gt[j].px=px; gt[j].py=py; gt[j].pz=pz;
Float_t cs,sn; digp->AdjustCosSin(phit->fSector,cs,sn);
}
cerr<<np-i<<" \r";
}
+ //printf("\n%d\n",nt);
cout<<endl;
delete[] good;
} // /// loop on events
#include "AliTPC.h"
#include "AliTPCParam.h"
+#include "AliTPCParamSR.h"
#include "AliRun.h"
#include "AliPDG.h"
#include "AliRunDigitizer.h"
// merge input tree's with summable digits
//output stored in TreeTPCD
-
+ char s[100];
+ char ss[100];
TString optionString = option;
if (optionString.Data() == "deb") {
cout<<"AliTPCDigitizer::Exec: called with option deb "<<endl;
//get detector and geometry
AliTPC *pTPC = (AliTPC *) gAlice->GetModule("TPC");
AliTPCParam * param = pTPC->GetParam();
+
+ sprintf(s,param->GetTitle());
+ sprintf(ss,"75x40_100x60");
+ if(strcmp(s,ss)==0){
+ printf("2 pad-length geom hits with 3 pad-lenght geom digits...\n");
+ delete param;
+ param=new AliTPCParamSR();
+ }
+ else{
+ sprintf(ss,"75x40_100x60_150x60");
+ if(strcmp(s,ss)!=0) {
+ printf("No TPC parameters found...\n");
+ exit(2);
+ }
+ }
+
pTPC->GenerNoise(500000); //create teble with noise
//
Int_t nInputs = fManager->GetNinputs();
#include "TView.h"
#include "TPolyMarker3D.h"
#include "AliSimDigits.h"
+#include "AliTPCParamSR.h"
#endif
//
TFile *cf=TFile::Open("galice.root");
// if (!cf->IsOpen()){cerr<<"Can't open AliTPCclusters.root !\n"; return 3;}
- AliTPCParam *param=(AliTPCParam *)cf->Get("75x40_100x60");
+ AliTPCParamSR *param=(AliTPCParamSR *)cf->Get("75x40_100x60");
+ if(param){
+ cerr<<"2 pad-length geom hits with 3 pad-lengths geom parameters\n";
+ delete param;
+ param = new AliTPCParamSR();
+ }
+ else
+ {
+ param=(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60");
+ }
+
if (!param) {cerr<<"TPC parameters have not been found !\n"; return 2;}
TCanvas *c1=new TCanvas("ddisplay", "Digits display",0,0,700,730);
char cname[100];
if (!sdigits)
- sprintf(cname,"TreeD_75x40_100x60_%d",eventn);
+ sprintf(cname,"TreeD_75x40_100x60_150x60_%d",eventn);
else
- sprintf(cname,"TreeS_75x40_100x60_%d",eventn);
+ sprintf(cname,"TreeS_75x40_100x60_150x60_%d",eventn);
// some "constants"
Int_t markerColorSignal = 5;
Int_t ver = TPC->IsVersion();
cerr<<"TPC version "<<ver<<" has been found !\n";
- AliTPCParam *dig=(AliTPCParam *)in->Get("75x40_100x60");
+ AliTPCParamSR *dig=(AliTPCParamSR *)in->Get("75x40_100x60");
+ if(dig){
+ cerr<<"2 pad-length geom hits with 3 pad-lengths geom digits\n";
+ delete dig;
+ dig = new AliTPCParamSR();
+ }
+ else
+ {
+ dig=(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60");
+ }
if (!dig) {cerr<<"TPC parameters have not been found !\n"; return 4;}
TStopwatch timer;
TFile *in=TFile::Open("AliTPCclusters.root");
if (!in->IsOpen()) {cerr<<"Can't open AliTPCclusters.root !\n"; return 2;}
- AliTPCParam *par=(AliTPCParam*)in->Get("75x40_100x60");
+ AliTPCParam *par=(AliTPCParam*)in->Get("75x40_100x60_150x60");
if (!par) {cerr<<"Can't get TPC parameters !\n"; return 3;}
TStopwatch timer;
timer.Start();
// uncomment below lines to set sectors active
- //Int_t sec[10]={0,1,2,3,4,5,6,7,8,9};
- //TPC->SetActiveSectors(sec,10);
+ // Int_t sec[10]={0,1,2,3,4,5,6,7,8,9};
+ // TPC->SetActiveSectors(sec,10);
for(Int_t eventn =0;eventn<nevent;eventn++){
printf("Processing event %d \n",eventn);
/*
$Log$
+Revision 1.13 2002/03/18 17:59:13 kowal2
+Chnges in the pad geometry - 3 pad lengths introduced.
+
Revision 1.12 2002/02/05 09:12:26 hristov
Small mods for gcc 3.02
fResponseBin = 0;
fResponseWeight = 0;
fRotAngle = 0;
- SetTitle("75x40_100x60");
+ SetTitle("75x40_100x60_150x60");
SetDefault();
}
//
//sector default parameters
//
- const static Float_t kInnerRadiusLow = 83.0;
- const static Float_t kInnerRadiusUp = 133.2;
- const static Float_t kOuterRadiusLow = 133.5;
- const static Float_t kOuterRadiusUp = 247.7;
+ const static Float_t kInnerRadiusLow = 82.97;
+ const static Float_t kInnerRadiusUp = 133.17;
+ const static Float_t kOuterRadiusLow = 133.58;
+ const static Float_t kOuterRadiusUp = 247.78;
const static Float_t kInnerAngle = 20; // 20 degrees
const static Float_t kInnerAngleShift = 10;
const static Float_t kOuterAngle = 20; // 20 degrees
// gAlice->GetEvent(0);
- AliTPC *TPC = (AliTPC*)gAlice->GetDetector("TPC");
+ AliTPC *TPC = (AliTPC*)gAlice->GetDetector("TPC");
+
+ AliTPCParamSR *dig=(AliTPCParamSR *)file->Get("75x40_100x60");
+ if(dig){
+ cerr<<"2 pad-length geom hits with 3 pad-lengths geom digits\n";
+ delete dig;
+ dig = new AliTPCParamSR();
+ }
+ else
+ {
+ dig=(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60");
+ }
+ if (!dig) {cerr<<"TPC parameters have not been found !\n"; return 4;}
+ TPC->SetParam(dig);
+
TStopwatch timer;
timer.Start();
//
//it merge two events -one from current directory -second from directory ev2
+ if(gAlice) delete gAlice;
AliRunDigitizer * manager = new AliRunDigitizer(2,1);
+ manager->SetTreeDTPCBaseName("TreeD_75x40_100x60_150x60_");
+ manager->SetInputTreeTPCSBaseName("TreeS_75x40_100x60_150x60_");
manager->SetInputStream(0,"galice.root");
manager->SetInputStream(1,"ev2/galice.root.sdigits");
- AliTPCDigitizer dTPC(manager);
+ AliTPCDigitizer *dTPC = new AliTPCDigitizer(manager);
manager->SetNrOfEventsToWrite(1);
TStopwatch timer;
timer.Start();
TFile * f = new TFile("galice.root");
TFile * f1= new TFile("ev1/galice.root.digits");
TFile * f2= new TFile("ev2/galice.root.digits");
- TTree * tree = (TTree*)f->Get("TreeD_75x40_100x60_0");
- TTree * tree1 = (TTree*)f1->Get("TreeD_75x40_100x60_0");
- TTree * tree2 = (TTree*)f2->Get("TreeD_75x40_100x60_0");
+ TTree * tree = (TTree*)f->Get("TreeD_75x40_100x60_150x60_0");
+ TTree * tree1 = (TTree*)f1->Get("TreeD_75x40_100x60_150x60_0");
+ TTree * tree2 = (TTree*)f2->Get("TreeD_75x40_100x60_150x60_0");
//
AliSimDigits *dig=0;
AliSimDigits *dig1=0;
tree1->GetBranch("Segment")->SetAddress(&dig1);
tree2->GetBranch("Segment")->SetAddress(&dig2);
AliTPCParam * param =(AliTPCParam*) f->Get("75x40_100x60");
+ if(param){
+ delete param;
+ param=new AliTPCParamSR();
+ }
+ else param=(AliTPCParam*) f->Get("75x40_100x60_150x60");
Int_t index = param->GetIndex(sec,row);
tree->GetEvent(index);
tree1->GetEvent(index);
void drawd(TFile * f, Int_t amp1, Int_t amp2)
{
- TTree * tree = (TTree*)f->Get("TreeD_75x40_100x60_0");
+ TTree * tree = (TTree*)f->Get("TreeD_75x40_100x60_150x60_0");
AliSimDigits *dig=0;
tree->GetBranch("Segment")->SetAddress(&dig);
TH1F * his = new TH1F("his","his",amp2-amp1,amp1,amp2);
TFile f("galice.root");
TFile f1("ev1/galice.root.digits");
TFile f2("ev2/galice.root.digits");
- TTree * tree = (TTree*)f.Get("TreeD_75x40_100x60_0");
- TTree * tree1 = (TTree*)f1.Get("TreeD_75x40_100x60_0");
- TTree * tree2 = (TTree*)f2.Get("TreeD_75x40_100x60_0");
+ TTree * tree = (TTree*)f.Get("TreeD_75x40_100x60_150x60_0");
+ TTree * tree1 = (TTree*)f1.Get("TreeD_75x40_100x60_150x60_0");
+ TTree * tree2 = (TTree*)f2.Get("TreeD_75x40_100x60_150x60_0");
//
AliSimDigits *dig=0;
AliSimDigits *dig1=0;
TFile f("galice.root");
TFile f1("ev1/galice.root.dig2");
TFile f2("ev2/galice.root.dig2");
- TTree * tree = (TTree*)f.Get("TreeD_75x40_100x60_0");
- TTree * tree1 = (TTree*)f1.Get("TreeD_75x40_100x60_0");
- TTree * tree2 = (TTree*)f2.Get("TreeD_75x40_100x60_0");
+ TTree * tree = (TTree*)f.Get("TreeD_75x40_100x60_150x60_0");
+ TTree * tree1 = (TTree*)f1.Get("TreeD_75x40_100x60_150x60_0");
+ TTree * tree2 = (TTree*)f2.Get("TreeD_75x40_100x60_150x60_0");
AliSimDigits *dig=0;
AliSimDigits *dig1=0;
TFile f("galice.root");
TFile f1("ev1/galice.root.sdigits");
TFile f2("ev2/galice.root.sdigits");
- TTree * tree = (TTree*)f.Get("TreeD_75x40_100x60_0");
- TTree * tree1 = (TTree*)f1.Get("TreeS_75x40_100x60_0");
- TTree * tree2 = (TTree*)f2.Get("TreeS_75x40_100x60_0");
+ TTree * tree = (TTree*)f.Get("TreeD_75x40_100x60_150x60_0");
+ TTree * tree1 = (TTree*)f1.Get("TreeS_75x40_100x60_150x60_0");
+ TTree * tree2 = (TTree*)f2.Get("TreeS_75x40_100x60_150x60_0");
//
AliSimDigits *dig=0;
AliSimDigits *dig1=0;
TFile f1("galice.root.digits");
TFile f2("galice.root.dig2");
//
- TTree * tree1 = (TTree*)f1.Get("TreeD_75x40_100x60_0");
- TTree * tree2 = (TTree*)f2.Get("TreeD_75x40_100x60_0");
+ TTree * tree1 = (TTree*)f1.Get("TreeD_75x40_100x60_150x60_0");
+ TTree * tree2 = (TTree*)f2.Get("TreeD_75x40_100x60_150x60_0");
//
AliSimDigits *dig1=0;
AliSimDigits *dig2=0;
TFile f1("galice.root.digits");
TFile f2("galice.root.dig2");
//
- TTree * tree1 = (TTree*)f1.Get("TreeD_75x40_100x60_0");
- TTree * tree2 = (TTree*)f2.Get("TreeD_75x40_100x60_0");
+ TTree * tree1 = (TTree*)f1.Get("TreeD_75x40_100x60_150x60_0");
+ TTree * tree2 = (TTree*)f2.Get("TreeD_75x40_100x60_150x60_0");
//
AliSimDigits *dig1=0;
AliSimDigits *dig2=0;
//TPC internal test
TFile f1("galice.root.sdigits");
TFile f2("galice.root.digits");
- TTree * tree1 = (TTree*)f1.Get("TreeS_75x40_100x60_0");
- TTree * tree2 = (TTree*)f2.Get("TreeD_75x40_100x60_0");
+ TTree * tree1 = (TTree*)f1.Get("TreeS_75x40_100x60_150x60_0");
+ TTree * tree2 = (TTree*)f2.Get("TreeD_75x40_100x60_150x60_0");
//
AliSimDigits *dig1=0;
AliSimDigits *dig2=0;
/*
$Log$
+Revision 1.7 2001/10/21 19:04:55 hristov
+Several patches were done to adapt the barel reconstruction to the multi-event case. Some memory leaks were corrected. (Yu.Belikov)
+
Revision 1.6 2001/08/30 09:28:48 hristov
TTree names are explicitly set via SetName(name) and then Write() is called
// for backward compatibility
- sprintf(dname,"TreeD_75x40_100x60");
+ sprintf(dname,"TreeD_75x40_100x60_150x60");
sprintf(cname,"TreeC_TPC");
}
else {
- sprintf(dname,"TreeD_75x40_100x60_%d",eventn);
+ sprintf(dname,"TreeD_75x40_100x60_150x60_%d",eventn);
sprintf(cname,"TreeC_TPC_%d",eventn);
}
TTree *t = (TTree *)gDirectory->Get(dname);
Int_t ver = TPC->IsVersion();
cerr<<"+++ TPC version "<<ver<<" has been found !\n";
AliTPCParam *digp=(AliTPCParam*)infile->Get("75x40_100x60");
+ if(digp){
+ delete digp;
+ digp = new AliTPCParamSR();
+ }
+ else digp=(AliTPCParam*)infile->Get("75x40_100x60_150x60");
+
if(!digp) { cerr<<"TPC parameters have not been found !\n"; return 1; }
TPC->SetParam(digp);
//TPC headers
#include "AliTPC.h"
#include "AliTPCParam.h"
+#include "AliTPCParamSR.h"
#include "AliTPCPRF2D.h"
#include "AliTPCRF1D.h"
#include "AliDigits.h"