#include "Riostream.h"
#endif
-void CompareFlatESDs(const char* filename1="outFlatESD1.root",const char* filename2="outFlatESD2.root") {
+void CompareFlatESDs(const char* filename1="outFlatESD1.dat",const char* filename2="outFlatESD2.dat", Bool_t verbose=kFALSE) {
// Create output histograms
- TH2F* hNTracks;
TString outputFilename = "$PWD/compare.root";
cout<< "creating histograms"<<endl;
- hNTracks = new TH2F("nTracks","number of tracks", 100,0,100, 100,0,100);
+ TH2F* hNTracks = new TH2F("nTracks","number of tracks", 100,0,100, 100,0,100);
+ TH2F* hNV0s = new TH2F("nV0s","number of V0s", 10,0,10, 10,0,10);
+ TH2F* hVtxTr = new TH2F("vtxTr","vtx Tracks", 2,0,2, 2,0,2);
+ TH2F* hVtxSPD = new TH2F("vtxSPD","vtx SPD", 2,0,2, 2,0,2);
+ TH1F * hStat = new TH1F("stat","statistics Differences",20,0,20);
+ hStat->GetXaxis()->SetBinLabel(1,"All events");
+ hStat->GetXaxis()->SetBinLabel(2,"no diffs");
+ hStat->GetXaxis()->SetBinLabel(3,"nTracks");
+ hStat->GetXaxis()->SetBinLabel(4,"nV0s");
+ hStat->GetXaxis()->SetBinLabel(5,"vtxTracks");
+ hStat->GetXaxis()->SetBinLabel(6,"vtxSPD");
+ hStat->GetXaxis()->SetBinLabel(7,"tracks->extParams");
+
char *endBuff2 = buffer2+length2;
int iEvent = 0;
+ static const int nExt = 4;
while( curr1 < endBuff1 && curr2 < endBuff2 ){
+//cout<<" curr1 endBuff1 curr2 endBuff2 "<< static_cast<void*> (curr1)<<" "<<static_cast<void*> (endBuff1)<<" "<<static_cast<void*> (curr2)<<" "<<static_cast<void*> (endBuff2)<<endl;
+
+ Int_t diff[6]={0};
AliFlatESDEvent *flatEsd1 = reinterpret_cast<AliFlatESDEvent *>(curr1);
AliFlatESDEvent *flatEsd2 = reinterpret_cast<AliFlatESDEvent *>(curr2);
-
+ /*
if(flatEsd1->GetNumberOfTracks()==0 || flatEsd2->GetNumberOfTracks() ==0){
if(flatEsd1->GetNumberOfTracks()==0){
curr1=curr1+ flatEsd1->GetSize();
}
continue;
}
-
+ */
cout<<endl<<"Reading event "<<iEvent<<":"<<endl;
+ /*
+ if( flatEsd1->GetNumberOfTracks() != flatEsd2->GetNumberOfTracks() ) {
+ cout<<"\t\tDIFFERENCE!: ";
+ diff[0] =1;
+ }
+ cout<<"\t\tntracks: "<<flatEsd1->GetNumberOfTracks()<< " | " <<flatEsd2->GetNumberOfTracks();
+ hNTracks->Fill(flatEsd1->GetNumberOfTracks(),flatEsd2->GetNumberOfTracks());
-
- if( (Bool_t) flatEsd1->GetPrimaryVertexSPD() != (Bool_t) flatEsd2->GetPrimaryVertexSPD() ) cout<<"DIFFERENCE!: ";
- cout<<"vtx SPD: "<<(Bool_t) flatEsd1->GetPrimaryVertexSPD() << " | " << (Bool_t) flatEsd2->GetPrimaryVertexSPD() << endl;
+ if( flatEsd1->GetNumberOfV0s() != flatEsd2->GetNumberOfV0s() ){
+ cout<<"\t\tDIFFERENCE!: ";
+ diff[1] =1;
+ }
+ cout<<"\t\tnV0's: "<<flatEsd1->GetNumberOfV0s()<< " | " <<flatEsd2->GetNumberOfV0s()<<endl;
+ hNV0s->Fill(flatEsd1->GetNumberOfV0s(),flatEsd2->GetNumberOfV0s());
+
+ if( (Bool_t) flatEsd1->GetPrimaryVertexTracks() != (Bool_t) flatEsd2->GetPrimaryVertexTracks() ){
+ cout<<"\t\tDIFFERENCE!: ";
+ diff[2] =1;
+ }
+
+
+ cout<<"\t\tvtx tracks: "<<(Bool_t) flatEsd1->GetPrimaryVertexTracks()<< " | " << (Bool_t) flatEsd2->GetPrimaryVertexTracks();
+ hVtxTr->Fill( (Bool_t) flatEsd1->GetPrimaryVertexTracks(), (Bool_t) flatEsd2->GetPrimaryVertexTracks());
+
- if( (Bool_t) flatEsd1->GetPrimaryVertexTracks() != (Bool_t) flatEsd2->GetPrimaryVertexTracks() ) cout<<"DIFFERENCE!: ";
- cout<<" vtx tracks: "<<(Bool_t) flatEsd1->GetPrimaryVertexTracks()<< " | " << (Bool_t) flatEsd2->GetPrimaryVertexTracks()<< endl;
-
- if( flatEsd1->GetNumberOfTracks() != flatEsd2->GetNumberOfTracks() ) cout<<"DIFFERENCE!: ";
- cout<<" ntracks: "<<flatEsd1->GetNumberOfTracks()<< " | " <<flatEsd2->GetNumberOfTracks()<< endl;
-
- if( flatEsd1->GetNumberOfV0s() != flatEsd2->GetNumberOfV0s() ) cout<<"DIFFERENCE!: ";
- cout<<" nV0's: "<<flatEsd1->GetNumberOfV0s()<< " | " <<flatEsd2->GetNumberOfV0s()<< endl;
-
+ if( (Bool_t) flatEsd1->GetPrimaryVertexSPD() != (Bool_t) flatEsd2->GetPrimaryVertexSPD() ){
+ cout<<"\t\tDIFFERENCE!: ";
+ diff[3] =1;
+ }
+ cout<<"\t\tvtx SPD: "<<(Bool_t) flatEsd1->GetPrimaryVertexSPD() << " | " << (Bool_t) flatEsd2->GetPrimaryVertexSPD()<<endl;
+ hVtxSPD->Fill( (Bool_t) flatEsd1->GetPrimaryVertexSPD(), (Bool_t) flatEsd2->GetPrimaryVertexSPD());
+
+ if(true|| (Bool_t)flatEsd1->GetPrimaryVertexSPD() && (Bool_t)flatEsd2->GetPrimaryVertexSPD() ){
+ cout<<endl<<"\t\tvtx tracksX: "<< flatEsd1->GetPrimaryVertexSPD()<<" | " << flatEsd2->GetPrimaryVertexSPD();
+ }
+ */
// compare tracks
-
-
+ #if 1
AliFlatESDTrack *track1 = flatEsd1->GetTracks();
AliFlatESDTrack *track2 = flatEsd2->GetTracks();
- for (Int_t idxTrack = 0; idxTrack < flatEsd1->GetNumberOfTracks(); ++idxTrack) {
+ for (Int_t idxTrack = 0; idxTrack < flatEsd1->GetNumberOfTracks() && track1 && track2; ++idxTrack) {
- if (track1 && track2) {
- AliFlatExternalTrackParam* exp11 = track1->GetTrackParamCp();
- AliFlatExternalTrackParam* exp21 = track1->GetTrackParamIp();
- AliFlatExternalTrackParam* exp31 = track1->GetTrackParamTPCInner();
- AliFlatExternalTrackParam* exp41 = track1->GetTrackParamOp();
-
- AliFlatExternalTrackParam* exp12 = track2->GetTrackParamCp();
- AliFlatExternalTrackParam* exp22 = track2->GetTrackParamIp();
- AliFlatExternalTrackParam* exp32 = track2->GetTrackParamTPCInner();
- AliFlatExternalTrackParam* exp42 = track2->GetTrackParamOp();
-
- Float_t alphaFLAT1[4] = {-99., -99., -99., -99.};
- if (exp11) alphaFLAT1[0] = exp11->GetAlpha();
- if (exp21) alphaFLAT1[1] = exp21->GetAlpha();
- if (exp31) alphaFLAT1[2] = exp31->GetAlpha();
- if (exp41) alphaFLAT1[3] = exp41->GetAlpha();
-
- Float_t alphaFLAT2[4] = {-99.,-99., -99., -99.};
- if (exp12) alphaFLAT2[0] = exp12->GetAlpha();
- if (exp22) alphaFLAT2[1] = exp22->GetAlpha();
- if (exp32) alphaFLAT2[2] = exp32->GetAlpha();
- if (exp42) alphaFLAT2[3] = exp42->GetAlpha();
-
-
- Float_t pFLAT1[4] = {-99., -99., -99., -99.};
- if (exp11) pFLAT1[0] = exp11->GetSigned1Pt();
- if (exp21) pFLAT1[1] = exp21->GetSigned1Pt();
- if (exp31) pFLAT1[2] = exp31->GetSigned1Pt();
- if (exp41) pFLAT1[3] = exp41->GetSigned1Pt();
-
- Float_t pFLAT2[4] = {-99., -99., -99., -99.};
- if (exp12) pFLAT2[0] = exp12->GetSigned1Pt();
- if (exp22) pFLAT2[1] = exp22->GetSigned1Pt();
- if (exp32) pFLAT2[2] = exp32->GetSigned1Pt();
- if (exp42) pFLAT2[3] = exp42->GetSigned1Pt();
-
-
-
- if( alphaFLAT1[0] != alphaFLAT2[0] ) cout<<"DIFFERENCE!: ";
- cout<<" alpha0: "<<alphaFLAT1[0]<< " | " <<alphaFLAT2[0]<< endl;
- if( alphaFLAT1[1] != alphaFLAT2[1] ) cout<<"DIFFERENCE!: ";
- cout<<" alpha1: "<<alphaFLAT1[1]<< " | " <<alphaFLAT2[1]<< endl;
- if( alphaFLAT1[2] != alphaFLAT2[2] ) cout<<"DIFFERENCE!: ";
- cout<<" alpha2: "<<alphaFLAT1[2]<< " | " <<alphaFLAT2[2]<< endl;
- if( alphaFLAT1[3] != alphaFLAT2[3] ) cout<<"DIFFERENCE!: ";
- cout<<" alpha3: "<<alphaFLAT1[3]<< " | " <<alphaFLAT2[3]<< endl;
-
+ AliFlatExternalTrackParam* ext[2][nExt] ={
+ {
+ track1->GetTrackParamRefitted(),
+ track1->GetTrackParamIp(),
+ track1->GetTrackParamTPCInner(),
+ track1->GetTrackParamOp(),
+ // track1->GetTrackParamCp(),
+ // track1->GetTrackParamITSOut()
+ },
+ {
+ track2->GetTrackParamRefitted(),
+ track2->GetTrackParamIp(),
+ track2->GetTrackParamTPCInner(),
+ track2->GetTrackParamOp(),
+ // track2->GetTrackParamCp(),
+ // track2->GetTrackParamITSOut()
+ }
+ };
+ //Printf(" TEST: FlatTrack1 %d > FlatExternalTrackParam1 > %p %p %p %p", idxTrack, exp11, exp21, exp31, exp41);
+ //Printf(" TEST: FlatTrack2 %d > FlatExternalTrackParam2 > %p %p %p %p", idxTrack, exp12, exp22, exp32, exp42);
+
+
+ for(int iExt=0; iExt<nExt; ++iExt){
+cout<<endl<<iExt<<endl;
+if(!ext[0][iExt] && !ext[1][iExt]) continue;
+ if(!ext[0][iExt] && ext[1][iExt]){
+ // cout<<"DIFFERENCE!: ";
+ cout<<" ext"<<iExt<<" not set in "<<filename1<<endl;
+ }
+ if(ext[0][iExt] && !ext[1][iExt]){
+ // cout<<"DIFFERENCE!: ";
+ cout<<" ext"<<iExt<<" not set in "<<filename2<<endl;
+ }
+
+
+ if( (!ext[0][iExt] || !ext[1][iExt])|| ext[0][iExt]->GetAlpha() != ext[1][iExt]->GetAlpha() ) {
+ // cout<<"DIFFERENCE!: ";
+ //cout<<" alpha"<<iExt<<" :" << (ext[0][iExt] ? ext[0][iExt]->GetAlpha() : -99.) << "\t\t" << (ext[1][iExt] ? ext[1][iExt]->GetAlpha(): -99.)<<endl;
+ diff[4]=1;
+ } cout<<" alpha"<<iExt<<" :" << (ext[0][iExt] ? ext[0][iExt]->GetAlpha() : -99.) << "\t\t" << (ext[1][iExt] ? ext[1][iExt]->GetAlpha(): -99.)<<endl;
+
+
+ if( (!ext[0][iExt] || !ext[1][iExt])||ext[0][iExt]->GetX() != ext[1][iExt]->GetX() ) {
+ //cout<<"DIFFERENCE!: ";
+ //cout<<" GetX"<<iExt<<" :" << (ext[0][iExt] ? ext[0][iExt]->GetX(): -99.) << " | " << (ext[1][iExt] ? ext[1][iExt]->GetX(): -99.)<<endl;
+ diff[4]=1;
+ }
+cout<<" GetX"<<iExt<<" :" << (ext[0][iExt] ? ext[0][iExt]->GetX(): -99.) << " | " << (ext[1][iExt] ? ext[1][iExt]->GetX(): -99.)<<endl;
+
+
+ if( (!ext[0][iExt] || !ext[1][iExt])||ext[0][iExt]->GetSigned1Pt() != ext[0][iExt]->GetSigned1Pt() ) {
+ //cout<<"DIFFERENCE!: ";
+ //cout<<" 1/pt"<<iExt<<" :" << (ext[0][iExt] ? ext[0][iExt]->GetSigned1Pt(): -99.) << " | " << (ext[1][iExt] ? ext[1][iExt]->GetSigned1Pt(): -99.)<<endl;
+ diff[4]=1;
+ }
+ cout<<" 1/pt"<<iExt<<" :" << (ext[0][iExt] ? ext[0][iExt]->GetSigned1Pt(): -99.) << " | " << (ext[1][iExt] ? ext[1][iExt]->GetSigned1Pt(): -99.)<<endl;
+
+
+}
- if( pFLAT1[0] != pFLAT2[0] ) cout<<"DIFFERENCE!: ";
- cout<<" p0: "<<pFLAT1[0]<< " | " <<pFLAT2[0]<< endl;
- if( pFLAT1[1] != pFLAT2[1] ) cout<<"DIFFERENCE!: ";
- cout<<" p1: "<<pFLAT1[1]<< " | " <<pFLAT2[1]<< endl;
- if( pFLAT1[2] != pFLAT2[2] ) cout<<"DIFFERENCE!: ";
- cout<<" p2: "<<pFLAT1[2]<< " | " <<pFLAT2[2]<< endl;
- if( pFLAT1[3] != pFLAT2[3] ) cout<<"DIFFERENCE!: ";
- cout<<" p3: "<<pFLAT1[3]<< " | " <<pFLAT2[3]<< endl;
-
-
- if( track1->GetNumberOfTPCClusters() != track2->GetNumberOfTPCClusters() ) cout<<"DIFFERENCE!: ";
- cout<<" nTPCclusters: "<<track1->GetNumberOfTPCClusters()<< " | " <<track2->GetNumberOfTPCClusters()<< endl;
- if( track1->GetNumberOfITSClusters() != track2->GetNumberOfITSClusters() ) cout<<"DIFFERENCE!: ";
- cout<<" nITSclusters: "<<track1->GetNumberOfITSClusters()<< " | " <<track2->GetNumberOfITSClusters()<< endl;
-
+ /*
+ if( track1->GetNumberOfTPCClusters() != track2->GetNumberOfTPCClusters() ){
+ cout<<"DIFFERENCE!: ";
+ cout<<" nTPCclusters: "<<track1->GetNumberOfTPCClusters()<< " | " <<track2->GetNumberOfTPCClusters()<< endl;
+ diff[4]=1;
+ }
+ if( track1->GetNumberOfITSClusters() != track2->GetNumberOfITSClusters() ){
+ cout<<"DIFFERENCE!: ";
+ cout<<" nITSclusters: "<<track1->GetNumberOfITSClusters()<< " | " <<track2->GetNumberOfITSClusters()<< endl;
+ diff[4]=1;
+ }
+*/
+
+// compare clusters
+ if( verbose && track1->GetNumberOfTPCClusters() == track2->GetNumberOfTPCClusters()){
+ for (Int_t idxCluster = 0; idxCluster < track1->GetNumberOfTPCClusters(); ++idxCluster){
+ AliFlatTPCCluster * cl1 = track1->GetTPCCluster(idxCluster);
+ AliFlatTPCCluster * cl2 = track2->GetTPCCluster(idxCluster);
/*
+ if( cl1->GetX()&& cl2->GetX() && cl1->GetX() != cl2->GetX() ){
+ cout<<"DIFFERENCE!: ";
+ cout<<" cluster: "<<idxCluster<<" GetX :"<<cl1->GetX()<< " | " <<cl2->GetX()<< endl;
+ diff=kTRUE;
+ }
+ cout<<" cluster: "<<idxCluster<<" GetX :"<<cl1->GetX()<< " | " <<cl2->GetX()<< endl;
+ cout<<" cluster: "<<idxCluster<<" GetY :"<<cl1->GetY()<< " | " <<cl2->GetY()<< endl;
- for (Int_t idxCluster = 0; idxCluster < track1->GetNumberOfTPCClusters(); ++idxCluster){
- Printf(" TEST: FlatTrack %d > FlatCluster %d has row %d", idxTrack, idxCluster, track1->GetTPCCluster(idxCluster).GetPadRow());
- }
- */
+ if( cl1 && cl2 && cl1->GetY() != cl2->GetY() ){
+ cout<<"DIFFERENCE!: ";
+ cout<<" cluster: "<<idxCluster<<" GetY :"<<cl1->GetY()<< " | " <<cl2->GetY()<< endl;
+ diff=kTRUE;
+ }
+ if( cl1->GetZ()&& cl2->GetZ() && cl1->GetZ() != cl2->GetZ() ){
+ cout<<"DIFFERENCE!: ";
+ cout<<" cluster: "<<idxCluster<<" GetZ :"<<cl1->GetZ()<< " | " <<cl2->GetZ()<< endl;
+ diff=kTRUE;
+ }
+*/
+ if( cl1->GetPadRow()&& cl2->GetPadRow() && cl1->GetPadRow() != cl2->GetPadRow() ){
+ cout<<"DIFFERENCE!: ";
+ cout<<" cluster: "<<idxCluster<<" GetPadRow :"<<cl1->GetPadRow()<< " | " <<cl2->GetPadRow()<< endl;
+ diff[5]=1;
+ }
+
+ }
}
track1 = track1->GetNextTrack();
track2 = track2->GetNextTrack();
+ }
+#endif
+ hStat->Fill(0);
+ Bool_t diffs=kFALSE;
+ for(int iDiff=0; iDiff<5;++iDiff){
+ if(diff[iDiff]){
+ hStat->Fill(iDiff+2);
+ diffs = kTRUE;
+ }
}
-
-
-
- hNTracks->Fill(flatEsd1->GetNumberOfTracks(),flatEsd2->GetNumberOfTracks());
-
-
+ if(!diffs) hStat->Fill(1);
+
+
curr1=curr1+ flatEsd1->GetSize();
curr2=curr2+ flatEsd2->GetSize();
iEvent++;
else {
cout << "File could not be read" << endl;
}
+
+
+
TList histosList;
+ histosList.Add(hStat);
histosList.Add(hNTracks);
+ histosList.Add(hNV0s);
+ histosList.Add(hVtxTr);
+ histosList.Add(hVtxSPD);
histosList.SaveAs(outputFilename);
return;