scanMap.f90

00001 
00002 
00003   TYPE(m3_f77_runconfig) :: runConfig
00004   TYPE(m3_f77_dataset) :: dataSet
00005   TYPE(m3_f77_interval) :: intervalNode
00006   integer(i4b) :: storeSize
00007   integer(i4b), dimension(:), allocatable :: storeSpace
00008   real(dp), dimension(:,:), allocatable :: pointing
00009 
00010   M3_f77_RunConfig_Read_mpi( runConfig, "runConfig.xml", MPI_COMM_WORLD)
00011 
00012   errp = M3_f77_runconfig_getpixelclassroot( runconfig, pixelclass )
00013   i = 0
00014   do while( errp == 1 )
00015     M3_pixelclass_getnumpixelinmap( pixelclass, thisnumpixel )
00016     if( numpixel == -1 ) then
00017       numpixel = thisnumpixel
00018     else if( numpixel /= thisnumpixel ) then
00019       print*, "ERROR number of pixels in maps is not uniform"
00020       stop
00021     end if 
00022     errp = M3_f77_pixelclass_getnextnodeinlist( pixelclass )
00023     i = i + 1
00024   end do
00025 
00026   if( i /= 18 ) then
00027     print*, "ERROR number of pixel classes must be 18"
00028     stop
00029   end if
00030 
00031   allocate( mapcmb( 0 : numpixel - 1, 0 : 17 ) )
00032 !  allocate( mapfgd150( 0 : numpixel - 1, 0 : 17 ) )
00033 !  allocate( mapfgd250( 0 : numpixel - 1, 0 : 17 ) )
00034 !  allocate( mapfgd410( 0 : numpixel - 1, 0 : 17 ) )
00035 
00036   errp = M3_f77_runconfig_getpixelclassroot( runconfig, pixelclass )
00037   i = 0
00038   do while( errp == 1 )
00039     M3_f77_pixelclass_getfullmap( pixelclassnode,  pixel, mapcmb(:,i) )
00040     errp = M3_f77_pixelclass_getnextnodeinlist( pixelclass )
00041   end do
00042 
00043   M3_f77_RunConfig_GetGCPointingGroupRoot( runConfig, gcpointinggroup )
00044 
00045   numnz = -1
00046   maxIntervalLength = 0
00047   ! loop over datasets (detectors)
00048   errd = M3_f77_RunConfig_getdatasetroot( runConfig, dataset )
00049   do while( errd == 1 )
00050     ! loop over intervals 
00051     err = M3_f77_dataset_getcoveredintervalroot( dataset, interval )
00052     do while( err == 1 )
00053       M3_f77_datasetll_sampleintervaltotimeinterval( dataset, interval, timeinterval )
00054       M3_f77_interval_getinterval( interval, firstsample, lastsample )
00055       if( lastsample - firstsample + 1 > maxIntervalLength ) then
00056         maxIntervalLnegth = lastsample - firstsample + 1
00057       end if
00058 
00059       M3_f77_dataset_getnumnz( dataset, thisnumnz )
00060       if( numnz == -1 ) then
00061         numnz = thisnumnz
00062       else if( thisnumnz /= numnz ) then
00063         print*, "ERROR: number of non-zeros is not uniform over the datasets."
00064         stop
00065       end if
00066       M3_f77_timeinterval_insertinterval( timeintervalList, timeinterval )
00067       err = M3_f77_Interval_getnextnodeinlist( interval )
00068     end do
00069     errd = M3_f77_datasetll_getnextnodeinlist( dataset )
00070   end do
00071   
00072   M3_f77_gcpointinggroup_getstoresize( gcpointinggroup, timeIntervalList, storeSize )
00073   storeSize = int(storeSize/4) + 1
00074   allocate( storeSpace( 0 : storeSize - 1), stat=ios )
00075   M3_f77_gcpointinggroup_initializestore( gcpointinggroup, timeintervallist, storeSpace )
00076 
00077   allocate( pointing( 0 : numnz - 1, 0 : maxintervallength - 1), stat = ios )
00078   allocate( tod( 0 : maxintervallength - 1), stat = ios )
00079   allocate( pixel( 0 : 17, 0 : maxintervallength - 1), stat = ios )
00080   allocate( weight( 0 : 17, 0 : maxintervallength - 1), stat = ios )
00081 
00082   ! loop over datasets
00083   errd = M3_f77_RunConfig_getdatasetroot( runConfig, dataset )
00084   firstrun = 1
00085   do while( errd == 1 )
00086     ! loop over intervals 
00087     err = M3_f77_dataset_getcoveredintervalroot( dataset, interval )
00088     do while( err == 1 )
00089      tod = 0.d0
00090      M3_dataset_getpointing( dataset, interval, pixel, weight )
00091      m3_interval_getinterval( interval, firstsample, lastsample )
00092      do i = firstsample, lastsample
00093        do j = 0, 17
00094          tod(i) = tod(i) + weight(j,i)*map(pixel(j,i), j )
00095        end do
00096     end do
00097     if ( firstrun == 1) then
00098        file = "tod.bin"
00099        call output_tl( lastsample-firstsample+1, tod, file)
00100     end if
00101     firstrun = 0
00102 
00103     err = M3_f77_Interval_getnextnodeinlist( interval )
00104     end do
00105     errd = M3_f77_datasetll_getnextnodeinlist( dataset )
00106   end do

Generated on Mon Nov 24 10:05:12 2008 for M3 by  doxygen 1.5.3-20071008