FEDRA emulsion software from the OPERA Collaboration
emflipraw.cpp File Reference
#include <iostream>
#include <string>
#include <TEnv.h>
#include <TMath.h>
#include <EdbRun.h>
#include <EdbView.h>
#include "EdbLog.h"
Include dependency graph for emflipraw.cpp:

Functions

void FlipRaw (const char *infile, const char *outfile, TEnv &env)
 
int main (int argc, char *argv[])
 
void print_help_message ()
 
void set_default (TEnv &cenv)
 
void ViewTurn (EdbView *v, const EdbAffine2D *aff, bool invertZ)
 

Function Documentation

◆ FlipRaw()

void FlipRaw ( const char *  infile,
const char *  outfile,
TEnv &  env 
)
79 {
80  int do_cut=0;
81  float xcut, ycut, dxcut, dycut;
82  if( 5 != sscanf( env.GetValue("flipraw.PositionCut" , "0 0. 0. 0. 0." ), "%d %f %f %f %f", &do_cut, &xcut, &ycut, &dxcut, &dycut ) )
83  {
84  Log(1, "flipraw", "Error read flipraw.PositionCut!");
85  exit;
86  }
87 
88  bool invertZ = env.GetValue("flipraw.do_invertZ" , 0 );
89  EdbAffine2D affTotal( env.GetValue("flipraw.AFF" , "1 0 0 1 0 0" ) );
90 
91  EdbAffine2D affRotation;
92  affRotation.Set( affTotal.A11(), affTotal.A12(), affTotal.A21(),affTotal.A22(), 0 , 0);
93 
94  EdbRun rin( infile );
95 
96  EdbRun *rout=0;
97  if(!outfile) rout = new EdbRun("flipraw.raw.root", "RECREATE");
98  else rout = new EdbRun(outfile, "RECREATE");
99 
100  rin.SetView(rout->GetView());
101 
102  int n = rin.GetEntries();
103  for(int i=0; i<n; i++) {
104  EdbView *v = rin.GetEntry(i,1,0,0,0,0);
105  bool inside_cut= do_cut? (Abs(v->GetXview()- xcut)< dxcut) && (Abs(v->GetYview() - ycut)<dycut) : true;
106  if(inside_cut) {
107  v = rin.GetEntry(i,1,1,1,1,1);
108  v->Print();
109  ViewTurn(v, &affTotal, invertZ);
110  rout->AddView();
111  }
112  }
113 
114  rout->Close();
115  rin.Close();
116 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
Definition: EdbAffine.h:17
void Set(EdbAffine2D &a)
Definition: EdbAffine.h:36
Definition: EdbRun.h:74
void Close()
Definition: EdbRun.cxx:466
void AddView()
Definition: EdbRun.cxx:332
EdbView * GetView() const
Definition: EdbRun.h:109
Definition: EdbView.h:134
Float_t GetXview() const
Definition: EdbView.h:193
void Print(Option_t *opt=0) const
Definition: EdbView.cxx:185
Float_t GetYview() const
Definition: EdbView.h:194
void ViewTurn(EdbView *v, const EdbAffine2D *aff, bool invertZ)
Definition: emflipraw.cpp:119

◆ main()

int main ( int  argc,
char *  argv[] 
)
37 {
38  TEnv cenv("flipraw");
40  cenv.WriteFile("flipraw.save.rootrc");
41  if (argc < 2) { print_help_message(); return 0; }
42  gEDBDEBUGLEVEL = cenv.GetValue("flipraw.EdbDebugLevel" , 1 );
43  const char *outdir = cenv.GetValue("flipraw.outdir" , "..");
44 
45  const char *infile=0;
46  const char *outfile=0;
47 
48  for(int i=1; i<argc; i++ )
49  {
50  char *key = argv[i];
51 
52  if(!strncmp(key,"-input=",7))
53  {
54  if(strlen(key)>7) { infile = key+7; }
55  }
56  else if(!strncmp(key,"-output=",8))
57  {
58  if(strlen(key)>8) { outfile = key+8; }
59  }
60  else if(!strncmp(key,"-v=",3))
61  {
62  if(strlen(key)>3) gEDBDEBUGLEVEL = atoi(key+3);
63  }
64 
65  }
66 
67  cenv.ReadFile( "flipraw.rootrc" ,kEnvLocal);
68  cenv.WriteFile("flipraw.save.rootrc");
69 
70  if(infile)
71  {
72  FlipRaw(infile, outfile, cenv);
73  }
74  else print_help_message();
75 }
void set_default(TEnv &cenv)
Definition: emflipraw.cpp:26
void print_help_message()
Definition: emflipraw.cpp:17
void FlipRaw(const char *infile, const char *outfile, TEnv &env)
Definition: emflipraw.cpp:78
TEnv cenv("emrec")
const char * outdir
Definition: emrec.cpp:37
gEDBDEBUGLEVEL
Definition: energy.C:7

◆ print_help_message()

void print_help_message ( )
18 {
19  cout<< "\nUsage: \n\t emflipraw -input=INFILE [-output=OUTFILE -v=verbosyty] \n";
20  cout<< "\t Flip and rotate raw data file INFILE \n";
21  cout<< "\t \t OUTFILE - result of rotation (default flipraw.raw.root)\n";
22  cout<<endl;
23 }

◆ set_default()

void set_default ( TEnv &  cenv)
27 {
28  cenv.SetValue("flipraw.outdir" , "..");
29  cenv.SetValue("flipraw.AFF" , "1 0 0 1 0 0");
30  cenv.SetValue("flipraw.do_invertZ" , 0 );
31  cenv.SetValue("flipraw.PositionCut" , "0 0. 0. 0. 0." ); // do_cut x y dx dy
32  cenv.SetValue("flipraw.EdbDebugLevel" , 1 );
33 }

◆ ViewTurn()

void ViewTurn ( EdbView v,
const EdbAffine2D aff,
bool  invertZ 
)
120 {
121  float xv = v->GetXview();
122  float yv = v->GetYview();
123  float x_new = aff->A11()*xv + aff->A12()*yv + aff->B1();
124  float y_new = aff->A21()*xv + aff->A22()*yv + aff->B2();
125  EdbAffine2D aa( *(v->GetHeader()->GetAffine()) );
126  v->GetHeader()->SetAffine(aa.A11(), aa.A12(), aa.A21(), aa.A22(), x_new, y_new );
127  int top = v->GetNframesTop();
128  int bot = v->GetNframesBot();
129  float z0 = top? v->GetZ2(): v->GetZ3();
130  if(invertZ)
131  {
132 
133  int top = v->GetNframesTop();
134  int bot = v->GetNframesBot();
135 
136  float z1 = v->GetZ1(), z2 = v->GetZ2(), z3 = v->GetZ3(), z4 = v->GetZ4();
137  printf("z1 = %f, z2 = %f, z3 = %f, z4 = %f\n",z1,z2,z3,z4);
138 
139  z4 = top? -1*v->GetZ1()+1000:0; //TODO
140  z3 = top? -1*v->GetZ2()+1000:0;
141  z2 = top? 0:-1*v->GetZ3()+1000;
142  z1 = top? 0:-1*v->GetZ4()+1000;
143  printf("after flipping: z1 = %f, z2 = %f, z3 = %f, z4 = %f\n",z1,z2,z3,z4);
144  v->SetNframes(bot,top );
145  v->SetCoordZ(z1,z2,z3,z4);
146  float z0 = top? z3: z2;
147  }
148 
149  v->SetCoordXY(x_new,y_new);
150  printf("z0 = %f\n",z0);
151 
152  if(v->GetSegments())
153  {
154  int nseg=v->Nsegments();
155  for( int i=0; i<nseg; i++ )
156  {
157  EdbSegment *seg = v->GetSegment(i);
158  float x = seg->GetX0();
159  float y = seg->GetY0();
160  float xr = aff->A11()*x + aff->A12()*y;
161  float yr = aff->A21()*x + aff->A22()*y;
162  float eTx = seg->GetTx();
163  float eTy = seg->GetTy();
164 
165  float tx_r = aff->A11()*eTx + aff->A12()*eTy; // rotate angles
166  float ty_r = aff->A21()*eTx + aff->A22()*eTy;
167  if(invertZ)
168  {
169  int invert_side = (seg->GetSide() == 0) ? 1 : 0;
170  seg->Set(xr,yr,z0,tx_r,ty_r, seg->GetDz(), invert_side, seg->GetPuls(), seg->GetID());
171  }
172  else seg->Set(xr,yr,seg->GetZ0(),tx_r,ty_r, seg->GetDz(), seg->GetSide(), seg->GetPuls(), seg->GetID());
173  }
174  }
175 }
brick z0
Definition: RecDispMC.C:106
Float_t B2() const
Definition: EdbAffine.h:48
Float_t A22() const
Definition: EdbAffine.h:46
Float_t A21() const
Definition: EdbAffine.h:45
Float_t A12() const
Definition: EdbAffine.h:44
Float_t B1() const
Definition: EdbAffine.h:47
Float_t A11() const
Definition: EdbAffine.h:43
virtual Float_t GetDz() const
Definition: EdbSegment.h:42
virtual Float_t GetX0() const
Definition: EdbSegment.h:37
virtual Float_t GetTx() const
Definition: EdbSegment.h:40
virtual Float_t GetZ0() const
Definition: EdbSegment.h:39
virtual Float_t GetY0() const
Definition: EdbSegment.h:38
virtual Float_t GetTy() const
Definition: EdbSegment.h:41
Definition: EdbSegment.h:61
Int_t GetPuls() const
Definition: EdbSegment.h:88
void Set(float x, float y, float z, float tx, float ty, float dz=0, int side=0, int puls=0, int id=0)
Definition: EdbSegment.cxx:92
Int_t GetID() const
Definition: EdbSegment.h:90
Int_t GetSide() const
Definition: EdbSegment.h:87
EdbAffine2D const * GetAffine() const
Definition: EdbView.h:72
void SetAffine(float a11, float a12, float a21, float a22, float b1, float b2)
Definition: EdbView.h:67
EdbViewHeader * GetHeader() const
Definition: EdbView.h:163
Int_t GetNframesTop() const
Definition: EdbView.h:207
void SetCoordZ(float z1, float z2, float z3, float z4)
Definition: EdbView.h:186
Float_t GetZ3() const
Definition: EdbView.h:198
Int_t GetNframesBot() const
Definition: EdbView.h:208
Int_t Nsegments() const
Definition: EdbView.h:216
void SetCoordXY(float x, float y)
Definition: EdbView.h:185
Float_t GetZ1() const
Definition: EdbView.h:196
EdbSegment * GetSegment(int i) const
Definition: EdbView.h:219
TClonesArray * GetSegments() const
Definition: EdbView.h:165
Float_t GetZ4() const
Definition: EdbView.h:199
void SetNframes(int top, int bot)
Definition: EdbView.h:184
Float_t GetZ2() const
Definition: EdbView.h:197